// Patching a trap
// An example of patching the GetNewDialog() trap. This patch #include
// Assumes inclusion of
#define _GetNewDialog 0xA97C
/* save regs not p reserved by THINK C */
#define SaveRegs()
asm { movem.l a0-a1/d0-d2,-(sp) }
/* restore regs not p reserved by THINK C */
#define RestoreRegs()
asm { movem.l (sp)+,a0-a1/d0-d2 }
GetNewDialogProcPtr gOldGetNewDialog;
extern void GetNewDialogJmp(void);
static pascal DialogPtr GetNewDialogHook( short dlogID, Ptr storage, {
SaveRegs();
SetUpA4();
dlogPtr = gOldGetNewDialog(dlogID, storage, behind);
RestoreA4();
RestoreRegs();
return dlogPtr;
}
static void InstallPatch(void)
{
gOldGetNewDialog =
_GetNewDialog);
}