; hooks.asm -- intervene (layers) library vectors ; :ts=8 ; this program copyright 1987, james mackraz. may not be distributed ; for profit. copies of the source may be made for not-for-profit ; distribution, but must include this notice. ; ; james mackraz, 4021 Second Street, Palo Alto, CA, 94306 include 'exec/types.i' STRUCTURE HK,0 LONG HK_SYSFUNC LONG HK_MYFUNC LONG HK_ENTRY WORD HK_TEST LONG HK_LVO LABEL HK_SIZE MACRO UNIQUEHOOK public _entry%1 _entry%1: movem.l regboys,-(sp) jsr _geta4 ; address of hook struct serves as unique id lea _myhooks + (%1 * HK_SIZE),a3 jsr commonhook movem.l (sp)+,regboys rts ENDM regboys reg d1/d2/d3/d5/a0/a1/a2/a3/a4/a5/a6 ; uses registers that specific system functions ; do not use, and will preserve. ; d3 -- aztec may trash ; d5 -- used in test ; a3 -- hook table entry ; a4 -- aztec context ; a5 -- called through ; a6 -- aztec may trash dseg public _myhooks cseg public _geta4 ;------ unique entry points for each layer vector stolen UNIQUEHOOK 0 UNIQUEHOOK 1 UNIQUEHOOK 2 UNIQUEHOOK 3 UNIQUEHOOK 4 UNIQUEHOOK 5 UNIQUEHOOK 6 commonhook: ; *** test condition (two versions) move.l HK_SYSFUNC(a3),a5 jsr (a5) ; *** call conditionally, based on test ;------ save/pass myfunc the sysfunc return value move.l d0,-(sp) move.l HK_MYFUNC(a3),a5 jsr (a5) move.l (sp)+,d0 rts end