sys7.1-doc-wip/QuickDraw/PictUtilities/puDispatch.a
2019-07-27 22:37:48 +08:00

116 lines
3.3 KiB
Plaintext

;
; File: puDispatch.a
;
; Contains: Dispatch code for the picture utilities package.
;
; Written by: Dave Good. Some ideas stolen from Konstantin Othmer and Bruce Leak. Prototyped by Cris Rys.
;
; Copyright: © 1990, 1992 by Apple Computer, Inc. All rights reserved.
;
; Change History (most recent first):
;
; <SM2> 11/5/92 SWC Changed INCLUDEs to a LOAD of StandardEqu.d.
; <6> 9/21/90 gbm (Actually DDG) Fixed string problem. Also added code for the Non
; ProcHelper version to clear out the high byte of the selector
; (the number of parameters).
; <5> 9/21/90 DDG Made changes from code review. Changed the dispatch to use proc
; helper. I also left the old code conditionaled out, so that we
; can always do test builds if we need to.
; <4> 8/3/90 DDG Changed the selectors back to the by one scheme.
; <3> 7/31/90 DDG Fixed the check for the maximum selector to reflect the by-two
; scheme.
; <2> 7/29/90 DDG Fixed header.
; <1> 7/29/90 DDG First checked in using new structure.
;
MACHINE MC68000
CASE OBJ
LOAD 'StandardEqu.d'
STRING ASIS
;----------------------------------------------------------------------------------------------------
PictUtilEntry MAIN EXPORT
IMPORT __GETPICTINFO
IMPORT __GETPIXMAPINFO
IMPORT __NEWPICTINFO
IMPORT __RECORDPIXMAPINFO
IMPORT __RECORDPICTINFO
IMPORT __RETRIEVEPICTINFO
IMPORT __DISPOSPICTINFO
IF 0 THEN
and.w #$00FF,d0 ; clear the upper byte (number of parameters)
cmp.w #6,d0 ; if unsigned d0 > max selector,
bhi.s exit ; don't do anything
lsl.w #2,d0 ; multiply our selector by four to get the true jump table offset
jmp dispatchTable(d0.w) ; jump in jump table
dispatchTable
jmp __GETPICTINFO ; selector 0
jmp __GETPIXMAPINFO ; selector 1
jmp __NEWPICTINFO ; selector 2
jmp __RECORDPICTINFO ; selector 3
jmp __RECORDPIXMAPINFO ; selector 4
jmp __RETRIEVEPICTINFO ; selector 5
jmp __DISPOSPICTINFO ; selector 6
exit move.l (sp)+,a0 ; get return address
swap d0 ; get size of parameters in low word
add.w d0,sp ; get rid of parameters
moveq #paramErr,d0 ; return parameter error in D0
move.w d0,(sp) ; return parameter error in function result
jmp (a0) ; and return to caller
ELSE
;
; Macro to build jump table
;
MACRO
JT &entry
IMPORT &entry
dc.w &entry - MyDispatchTable
ENDM
;
; Header for ProcHelper
;
dc.w $A9FF ; package entry point (unused now)
dc.b 'PACK'
dc.w 15 ; package number
dc.w 1 ; version
;
; DispatchTable for DispatchHelper
;
MyDispatchTable
dc.w 0 ; dispatchFlags (always 0)
dc.b $00 ; first selector (0 for GetPictInfo)
dc.b $06 ; last selector (6 for DisposPictInfo)
JT __GETPICTINFO ; selector 0
JT __GETPIXMAPINFO ; selector 1
JT __NEWPICTINFO ; selector 2
JT __RECORDPICTINFO ; selector 3
JT __RECORDPIXMAPINFO ; selector 4
JT __RETRIEVEPICTINFO ; selector 5
JT __DISPOSPICTINFO ; selector 6
ENDIF
ENDPROC
;----------------------------------------------------------------------------------------------------
END