mirror of
https://github.com/elliotnunn/mac-rom.git
synced 2024-12-28 16:31:01 +00:00
4325cdcc78
Resource forks are included only for .rsrc files. These are DeRezzed into their data fork. 'ckid' resources, from the Projector VCS, are not included. The Tools directory, containing mostly junk, is also excluded.
215 lines
7.4 KiB
Plaintext
215 lines
7.4 KiB
Plaintext
;
|
|
; File: AEHandlerTable.a
|
|
;
|
|
; Contains: xxx put contents here xxx
|
|
;
|
|
; Written by: xxx put writers here xxx
|
|
;
|
|
; Copyright: © 1990 by Apple Computer, Inc., all rights reserved.
|
|
;
|
|
; This file is used in these builds: BigBang
|
|
;
|
|
;
|
|
; Change History (most recent first):
|
|
;
|
|
; <2> 1/11/91 Lai 'indc' handler is used in object library support
|
|
; <1> 12/13/90 Lai first checked in
|
|
;
|
|
; To Do:
|
|
;
|
|
|
|
|
|
; =======================================================================================
|
|
; Files needed by this Package
|
|
; =======================================================================================
|
|
|
|
|
|
STRING ASIS
|
|
|
|
IMPORT AddToTable,RemoveFromTable,GetEventHandler
|
|
;---------------------------------------------------------------------------
|
|
;{ we can reduce code size by rewriting in assembler }
|
|
;{ first pop the return address, then push FALSE, then TRUE, then push return address and JMP to AddToTable }
|
|
;
|
|
;FUNCTION AE_InstallEventHandler(theAEEventClass: AEEventClass;
|
|
; theAEEventID: AEEventID;
|
|
; theHandler: ProcPtr;
|
|
; handlerRefcon: LONGINT;
|
|
; isSysHandler: Boolean): OSErr;
|
|
;
|
|
; BEGIN
|
|
; { just add it by calling AddToTable }
|
|
; AE_InstallEventHandler := AddToTable(theAEEventClass, theAEEventID,
|
|
; theHandler, handlerRefcon, isSysHandler, FALSE, TRUE)
|
|
; END;
|
|
;
|
|
;---------------------------------------------------------------------------
|
|
|
|
AE_InstallEventHandler PROC EXPORT
|
|
MOVE.L (A7)+,A0 ; return address
|
|
CLR.W -(A7) ; push isSpecialHandler=false on stack
|
|
MOVE.B #1,-(A7) ; push isEventHandler=true on stack
|
|
MOVE.L A0,-(A7) ; push back return addres
|
|
JMP AddToTable
|
|
ENDP
|
|
|
|
;---------------------------------------------------------------------------
|
|
;{ we can reduce code size by rewriting in assembler }
|
|
;FUNCTION AE_InstallCoercionHandler(fromType: DescType;
|
|
; toType: DescType;
|
|
; theHandler: ProcPtr;
|
|
; handlerRefcon: LONGINT;
|
|
; fromTypeAsDesc: Boolean;
|
|
; isSysHandler: Boolean): OSErr;
|
|
;
|
|
; BEGIN
|
|
; { just add it by calling AddToTable }
|
|
; AE_InstallCoercionHandler := AddToTable(fromType, toType, theHandler, handlerRefcon, isSysHandler, fromTypeAsDesc, FALSE);
|
|
; END;
|
|
;
|
|
;---------------------------------------------------------------------------
|
|
|
|
AE_InstallCoercionHandler PROC EXPORT
|
|
MOVE.L (A7)+,A0 ; return address
|
|
MOVE.L (A7),D0 ; isSysHandler & fromTypeAsDesc
|
|
SWAP D0 ; reverse order
|
|
MOVE.L D0,(A7) ; put it back ;
|
|
CLR.W -(A7) ; push isEventHandler=false on stack
|
|
MOVE.L A0,-(A7) ; push back return addres
|
|
JMP AddToTable
|
|
ENDP
|
|
|
|
;---------------------------------------------------------------------------
|
|
;{ we can reduce code size by rewriting in assembler }
|
|
;FUNCTION AE_RemoveEventHandler(theAEEventClass: AEEventClass;
|
|
; theAEEventID: AEEventID;
|
|
; theHandler: ProcPtr;
|
|
; isSysHandler: Boolean): OSErr;
|
|
;
|
|
; BEGIN
|
|
; { just remove it by calling RemoveFrom table }
|
|
; AE_RemoveEventHandler := RemoveFromTable(theAEEventClass, theAEEventID,
|
|
; theHandler, isSysHandler, TRUE);
|
|
; END;
|
|
;
|
|
;---------------------------------------------------------------------------
|
|
|
|
AE_RemoveEventHandler PROC EXPORT
|
|
MOVE.L (A7)+,A0 ; return address
|
|
MOVE.B #1,-(A7) ; push isEventHandler=true on stack
|
|
MOVE.L A0,-(A7) ; push back return addres
|
|
JMP RemoveFromTable
|
|
ENDP
|
|
|
|
;---------------------------------------------------------------------------
|
|
;{ we can reduce code size by rewriting in assembler }
|
|
;FUNCTION AE_RemoveCoercionHandler(fromType: DescType;
|
|
; toType: DescType;
|
|
; theHandler: ProcPtr;
|
|
; isSysHandler: Boolean): OSErr;
|
|
;
|
|
; BEGIN
|
|
; { just remove it by calling RemoveFrom table }
|
|
; AE_RemoveCoercionHandler := RemoveFromTable(fromType, toType, theHandler, isSysHandler, FALSE);
|
|
; END;
|
|
;
|
|
;---------------------------------------------------------------------------
|
|
|
|
AE_RemoveCoercionHandler PROC EXPORT
|
|
MOVE.L (A7)+,A0 ; return address
|
|
CLR.W -(A7) ; push isEventHandler=false on stack
|
|
MOVE.L A0,-(A7) ; push back return addres
|
|
JMP RemoveFromTable
|
|
ENDP
|
|
|
|
;---------------------------------------------------------------------------
|
|
;{ we can reduce code size by rewriting in assembler }
|
|
;FUNCTION AE_GetCoercionHandler(fromType: DescType;
|
|
; toType: DescType;
|
|
; VAR theHandler: ProcPtr;
|
|
; VAR handlerRefcon: LONGINT;
|
|
; VAR fromTypeAsDesc: Boolean;
|
|
; isSysHandler: Boolean): OSErr;
|
|
;
|
|
; BEGIN
|
|
; { just get it by calling GetEventHandler }
|
|
; AE_GetCoercionHandler := GetEventHandler(fromType, toType, theHandler, handlerRefcon,
|
|
; fromTypeAsDesc, isSysHandler, FALSE);
|
|
; END;
|
|
;
|
|
;---------------------------------------------------------------------------
|
|
|
|
AE_GetCoercionHandler PROC EXPORT
|
|
MOVE.L (A7)+,A0 ; return address
|
|
CLR.W -(A7) ; push isEventHandler=false on stack
|
|
MOVE.L A0,-(A7) ; push back return addres
|
|
JMP GetEventHandler
|
|
ENDP
|
|
|
|
;---------------------------------------------------------------------------
|
|
;
|
|
;FUNCTION GetSpecialProcOffset(functionClass: AEKeyWord): LONGINT;
|
|
; VAR
|
|
; offset: Integer;
|
|
;
|
|
; BEGIN
|
|
; IF LONGINT(functionClass) = LONGINT(keyPreDispatch) THEN
|
|
; offset := phacOffset
|
|
; ELSE IF LONGINT(functionClass) = LONGINT(keySelectProc) THEN
|
|
; offset := selhOffset
|
|
; ELSE IF LONGINT(functionClass) = LONGINT(keyBlockingProc) THEN
|
|
; offset := blockingoffset
|
|
; ELSE IF LONGINT(functionClass) = LONGINT(keyUnblockProc) THEN
|
|
; offset := unblockOffset
|
|
; ELSE IF LONGINT(functionClass) = LONGINT(keyDiposeTokenProc) THEN
|
|
; offset := diposeTokenOffset
|
|
; ELSE IF LONGINT(functionClass) = LONGINT(keyCmprProc) THEN
|
|
; offset := kurProc1Offset
|
|
; ELSE IF LONGINT(functionClass) = LONGINT(keyContProc) THEN
|
|
; offset := kurProc2Offset
|
|
; ELSE IF LONGINT(functionClass) = LONGINT(keyMkidProc) THEN
|
|
; offset := kurProc3Offset
|
|
; ELSE IF LONGINT(functionClass) = LONGINT(keyMarkProc) THEN
|
|
; offset := kurProc4Offset
|
|
; ELSE IF LONGINT(functionClass) = LONGINT(keyAdjmProc) THEN
|
|
; offset := kurProc5Offset
|
|
; ELSE
|
|
; offset := 0;
|
|
; GetSpecialProcOffset := offset;
|
|
; END;
|
|
;
|
|
;
|
|
;---------------------------------------------------------------------------
|
|
phacOffset EQU 12
|
|
|
|
PROC
|
|
EXPORT GetSpecialProcOffset
|
|
SelTable DC.B 'phac'
|
|
DC.B 'selh'
|
|
DC.B 'blck'
|
|
DC.B 'unbk'
|
|
DC.B 'xtok'
|
|
DC.B 'cmpr'
|
|
DC.B 'cont'
|
|
DC.B 'mkid'
|
|
DC.B 'mark'
|
|
DC.B 'adjm'
|
|
DC.B 'navt'
|
|
DC.B 'indc'
|
|
selectCount EQU (*-SelTable)/4
|
|
GetSpecialProcOffset
|
|
MOVE.L (A7)+,A0 ; return address
|
|
MOVE.L (A7)+,D0 ; the functionClass
|
|
LEA SelTable,A1
|
|
MOVE.L #phacOffset-4,D1
|
|
MOVE.W #selectCount-1,D2
|
|
ChkNxt ADD.L #4,D1 ; increment offset
|
|
CMP.L (A1)+,D0 ; is this the keyeword
|
|
DBEQ D2,ChkNxt ; loop if not
|
|
BEQ.S PutBack ; it is found
|
|
MOVE.L #0,D1 ; indicates not found
|
|
PutBack MOVE.L D1,(A7) ; put into function result
|
|
JMP (A0) ; return
|
|
ENDP
|
|
|
|
END |