PpHd (./10) :
on peut très bien appeler LibPtr pour remplir une table d'appel indirect, et passer cette table aux autre modules...
Tout à fait, et c'est ce que je fais sous PedroM
code
;===============================================================================
;
; pdtlib::InstallTrampolines
;
; in a0 char* LibName
; d1.b char LibVersion
; a1 short [] FunctionsTable
; a2 short [] OffsetsTable
; a3 void* TrampolinesTableBase
;
; out a0 LibRef* Descriptor
;
; destroy d0
;
; Open the library LibName, checking that is version is >= LibVersion.
; Return LibRef if installation is successful, else NULL
;
; For each element of FunctionsTable, create a trampoline (actually a
; "jmp Function").
; FunctionsTable must ends with a negative value.
;
; For each trampoline created for FunctionsTable [x], 6 bytes will be used
; at TrampolinesTableBase + OffsetTable [x].
; These entries need not to be packed
;
;===============================================================================
pdtlib@0004:
RAMT RAM_kernel::LibsBegin
move.l a0,d0
beq.s \Fail
movem.l a0-a2,-(sp)
\Loop: movea.l (sp),a0
move.w (a1)+,d0
bmi.s \EOT
RAMT RAM_kernel::LibsPtr
move.w (a2)+,d0
move.w #$4EF9,0(a3,d0.w) ; jmp ...
move.l a0,2(a3,d0.w) ; ... imm.l
bne.s \Loop
movea.l (sp),a0 ; Function not found
RAMT RAM_kernel::LibsEnd
clr.l (sp)
\EOT: movem.l (sp)+,a0-a2
\Fail: rts
Le truc, c'est que ce code dans un programme ro, c'est du pedrom-only, ça n'a aucune raison d'être sous AMS, puisque que dans l'état actuel, ça ne peut pas marcher. Donc un programme qui fait ça sait ce qu'il fait, et il n'a qu'à mettre en application ce que j'ai posté à la fin de
./5.
PpHd (./10) :
Pourquoi ne pas l'ajouter dans hw3patch?
Ca, je crois que c'est la solution ultime

Plus aucun problème, plus rien à modifier !
