supermario/base/SuperMarioProj.1994-02-09/ProcessMgr/PuppetString.MacDraw.a
2019-06-29 23:17:50 +08:00

338 lines
9.6 KiB
Plaintext

;
; File: PuppetString.MacDraw.a
;
; Contains: Puppet string conversion table custumized for MacDraw
;
; Written by: Phil Goldman
;
; Copyright: © 1986-1991 by Apple Computer, Inc., all rights reserved.
;
; Change History (most recent first):
;
; <0> x/xx/86 PYG New Today.
;
;--------------------------------------------------------------------
;--------------------------------------------------------------------
;
; This table is used to convert puppet instructions to event sequences specifically
; for MacDraw. MacDraw is identified as having a creator equal to 'MDRW'. The basic
; instructions are handled by the default table defined in PuppetString.Default.a
;
;--------------------------------------------------------------------
PRINT OFF
LOAD 'ProcessMgrIncludes.D'
INCLUDE 'PuppetStringDefs.a'
PRINT ON
FUNC
BLANKS ON
STRING ASIS
LayoutMenuID EQU 6
GridOnOffItem EQU 9
ExtraMenuID EQU 14
ExtraGridOffItem EQU 13
TableTop
NumberOfEntries DC.B (EntriesBottom-EntriesTop)/6,0
EntriesTop
ResetEntry DC.W pstEventCode
DC.L RstEvtCode-TableTop
CutEntry DC.W pstMenuItem
DC.W 3,3
CopyEntry DC.W pstMenuItem
DC.W 3,4
PasteEntry DC.W pstMenuItem
DC.W 3,5
SelectRectEntry DC.W pstEventList
DC.L SREvtList-TableTop
SelectAllEntry DC.W pstMenuItem
DC.W 3,9
MemCopyEntry DC.W pstIllegalInstr
DC.L 0
OutlineRectEntry DC.W pstEventCode
DC.L OREvtCode-TableTop
GridOnOffEntry DC.W pstMenuItem
DC.W LayoutMenuID,GridOnOffItem
EntriesBottom
RstEvtList
;RstEvtParamCount DC.W 0
RstEvtListOffset DC.L 6
RstEvtListCount DC.W (RstEvtListBottom-RstEvt1)/evtBlkSize
RstEvt1
RstEvt1what DC.W mButDwnEvt+evtMouseLocal+evtIsImportant
RstEvt1message DC.L 0
RstEvt1when DC.L 0
RstEvt1where DC.W 5,5
RstEvt1modifiers DC.W 0
RstEvt2
RstEvt2what DC.W mButUpEvt+evtMouseLocal+evtIsUnimportant
RstEvt2message DC.L 0
RstEvt2when DC.L 0
RstEvt2where DC.W 5,5
RstEvt2modifiers DC.W $80
RstEvt3
RstEvt3what DC.W app4Evt
RstEvt3message DC.B ((GridOnOffEntry-EntriesTop)/6)+2,0,0,0
RstEvt3when DC.L 0
RstEvt3where DC.W 0,0
RstEvt3modifiers DC.W $80
RstEvtListBottom
RstEvtCode
SUBQ #4,SP ;make room for result
MOVE.W #LayoutMenuID,-(SP) ;push menu id
_GetMHandle
TST.L (SP) ;could we find it (might be DA menubar)
BNE.S RstEvtCodeFoundLayout ;if so, branch
MOVE.L (SP)+,A0 ;get rid of 0 on stack and clear A0
BRA.S RstEvtCodeDone ;return w/ an error
RstEvtCodeFoundLayout
MOVE.W #GridOnOffItem,-(SP) ;push item num
PEA LayoutItemString ;push address of string in Layout menu
_GetItem
SUBQ #4,SP ;make room for result
MOVE.L #'MENU',-(SP)
MOVE.W #ExtraMenuID,-(SP) ;push menu id
_GetResource
MOVE.W #ExtraGridOffItem,-(SP) ;push item num
PEA ExtraItemString ;push address of string in Layout menu
_GetItem
MOVEQ.L #0,D0 ;clear out d0
LEA LayoutItemString,A0
MOVE.B (A0)+,D0 ;d0.w <- length of LayoutItemString
SWAP D0
LEA ExtraItemString,A1
MOVE.B (A1)+,D0 ;d0.w <- length of LayoutItemString
_CmpString
LEA RstEvt3what,A0 ;get data to be set in A0
BEQ.S RstEvtCodeAreEqual ;branch if strings were equal
MOVE.W #nullEvt,(A0) ;don't do menu selection
BRA.S RstEvtCodeMakeHdl
RstEvtCodeAreEqual
MOVE.W #app4Evt,(A0) ;do menu selection
RstEvtCodeMakeHdl
LEA RstEvtList,A0 ;get top of list
MOVE.L #RstEvtListBottom-RstEvtList,D0 ;get size of list
_PtrToHand
BEQ.S RstEvtCodeDone ;if no error, branch
SUB.L A0,A0 ;clear out a0
RstEvtCodeDone
MOVE.L (SP)+,A1 ;get return address
ADDQ.W #4,SP ;get rid of parameter
MOVE.L A0,(SP) ;handle is return value
JMP (A1)
LayoutItemString DC.L 0,0,0,0,0,0
ExtraItemString DC.L 0,0,0,0,0,0
SREvtList
SRParamCount DC.W (SREvtListOffset-SRParams)/6
SRParams
SRParam1 DC.L SRParam1LocStart-TableTop
DC.W SRParam1LocEnd-SRParam1LocStart
SRParam2 DC.L SRParam2LocStart-TableTop
DC.W SRParam2LocEnd-SRParam2LocStart
SREvtListOffset DC.L 6
SREvtListCount DC.W (SREvtListBottom-SREvt1)/evtBlkSize
SREvt1
SREvt1what DC.W mButDwnEvt+evtMouseLocal+evtIsImportant
SREvt1message DC.L 0
SREvt1when DC.L 0
SREvt1where DC.W 5,5
SREvt1modifiers DC.W 0
SREvt2
SREvt2what DC.W mButUpEvt+evtMouseLocal+evtIsUnimportant
SREvt2message DC.L 0
SREvt2when DC.L 0
SREvt2where DC.W 5,5
SREvt2modifiers DC.W $80
SREvt3
SREvt3what DC.W mButDwnEvt+evtMouseEither+evtIsImportant
SREvt3message DC.L 0
SREvt3when DC.L 0
SRParam1LocStart
SREvt3where DC.W 0,0
SRParam1LocEnd
SREvt3modifiers DC.W 0
SREvt4
SREvt4what DC.W mButUpEvt+evtMouseEither+evtIsUnimportant
SREvt4message DC.L 0
SREvt4when DC.L 0
SRParam2LocStart
SREvt4where DC.W 0,0
SRParam2LocEnd
SREvt4modifiers DC.W $80
SREvtListBottom
OREvtList
OREvtListOffset DC.L 6
OREvtListCount DC.W (OREvtListBottom-OREvt11)/evtBlkSize
OREvt11
OREvt11what DC.W mButDwnEvt+evtMouseLocal+evtIsImportant
OREvt11message DC.L 0
OREvt11when DC.L 0
OREvt11where DC.W 42,10
OREvt11modifiers DC.W 0
OREvt12
OREvt12what DC.W mButUpEvt+evtMouseLocal+evtIsUnimportant
OREvt12message DC.L 0
OREvt12when DC.L 0
OREvt12where DC.W 42,10
OREvt12modifiers DC.W $80
OREvt13
OREvt13what DC.W mButDwnEvt+evtMouseEither+evtIsImportant
OREvt13message DC.L 0
OREvt13when DC.L 0
ORParam11LocStart
OREvt13where DC.W 0,0
ORParam11LocEnd
OREvt13modifiers DC.W 0
OREvt14
OREvt14what DC.W mButUpEvt+evtMouseEither+evtIsUnimportant
OREvt14message DC.L 0
OREvt14when DC.L 0
ORParam12LocStart
OREvt14where DC.W 0,0
ORParam12LocEnd
OREvt14modifiers DC.W $80
OREvt21
OREvt21what DC.W mButDwnEvt+evtMouseLocal+evtIsImportant
OREvt21message DC.L 0
OREvt21when DC.L 0
OREvt21where DC.W 42,10
OREvt21modifiers DC.W 0
OREvt22
OREvt22what DC.W mButUpEvt+evtMouseLocal+evtIsUnimportant
OREvt22message DC.L 0
OREvt22when DC.L 0
OREvt22where DC.W 42,10
OREvt22modifiers DC.W $80
OREvt23
OREvt23what DC.W mButDwnEvt+evtMouseEither+evtIsImportant
OREvt23message DC.L 0
OREvt23when DC.L 0
ORParam21LocStart
OREvt23where DC.W 0,0
ORParam21LocEnd
OREvt23modifiers DC.W 0
OREvt24
OREvt24what DC.W mButUpEvt+evtMouseEither+evtIsUnimportant
OREvt24message DC.L 0
OREvt24when DC.L 0
ORParam22LocStart
OREvt24where DC.W 0,0
ORParam22LocEnd
OREvt24modifiers DC.W $80
OREvt31
OREvt31what DC.W mButDwnEvt+evtMouseLocal+evtIsImportant
OREvt31message DC.L 0
OREvt31when DC.L 0
OREvt31where DC.W 42,10
OREvt31modifiers DC.W 0
OREvt32
OREvt32what DC.W mButUpEvt+evtMouseLocal+evtIsUnimportant
OREvt32message DC.L 0
OREvt32when DC.L 0
OREvt32where DC.W 42,10
OREvt32modifiers DC.W $80
OREvt33
OREvt33what DC.W mButDwnEvt+evtMouseEither+evtIsImportant
OREvt33message DC.L 0
OREvt33when DC.L 0
ORParam31LocStart
OREvt33where DC.W 0,0
ORParam31LocEnd
OREvt33modifiers DC.W 0
OREvt34
OREvt34what DC.W mButUpEvt+evtMouseEither+evtIsUnimportant
OREvt34message DC.L 0
OREvt34when DC.L 0
ORParam32LocStart
OREvt34where DC.W 0,0
ORParam32LocEnd
OREvt34modifiers DC.W $80
OREvt41
OREvt41what DC.W mButDwnEvt+evtMouseLocal+evtIsImportant
OREvt41message DC.L 0
OREvt41when DC.L 0
OREvt41where DC.W 42,10
OREvt41modifiers DC.W 0
OREvt42
OREvt42what DC.W mButUpEvt+evtMouseLocal+evtIsUnimportant
OREvt42message DC.L 0
OREvt42when DC.L 0
OREvt42where DC.W 42,10
OREvt42modifiers DC.W $80
OREvt43
OREvt43what DC.W mButDwnEvt+evtMouseEither+evtIsImportant
OREvt43message DC.L 0
OREvt43when DC.L 0
ORParam41LocStart
OREvt43where DC.W 0,0
ORParam41LocEnd
OREvt43modifiers DC.W 0
OREvt44
OREvt44what DC.W mButUpEvt+evtMouseEither+evtIsUnimportant
OREvt44message DC.L 0
OREvt44when DC.L 0
ORParam42LocStart
OREvt44where DC.W 0,0
ORParam42LocEnd
OREvt44modifiers DC.W $80
OREvtListBottom
OREvtCodeErr
CLR.L 8(SP) ;return 0
MOVE.L (SP)+,(SP) ;trash the param
RTS
OREvtCode
LEA OREvtList,A0 ;addr of list
MOVE.L #OREvtListBottom-OREvtList,D0 ;size of list
_PtrToHand ;get copy
BNE.S OREvtCodeErr ;if error, branch
MOVE.L (SP)+,D0 ;get ret addr
MOVE.L (SP)+,A1 ;get evt record
MOVE.L A0,(SP) ;handle is retrun value
MOVE.L D0,-(SP) ;put back ret addr
; Here comes a whole lotta parameter stuffing... It may look stupid to AND
; the message field with a constant, rather than the lomem LO3BYTES, and it is.
; The reason is that the pstEventList puppet event message field is defined to
; hold a pointer in the low three bytes. Ergo, this is not a stripaddress
; operation, it is a field extraction operation.
MOVE.L (A0),A0 ;hdl->ptr of evt list
MOVE.L evtMessage(A1),D0 ;get pointer to param block
ANDI.L #$0FFFFFF,D0 ;mask it to size
MOVEA.L D0,A1 ;stick it in address reg
; Do param subst for ulh of rect
MOVE.W (A1),ORParam11LocStart-OREvtList(A0)
MOVE.W (A1),ORParam12LocStart-OREvtList(A0)
MOVE.W (A1),ORParam21LocStart-OREvtList(A0)
MOVE.W (A1)+,ORParam42LocStart-OREvtList(A0)
MOVE.W (A1),ORParam11LocStart-OREvtList+2(A0)
MOVE.W (A1),ORParam32LocStart-OREvtList+2(A0)
MOVE.W (A1),ORParam41LocStart-OREvtList+2(A0)
MOVE.W (A1)+,ORParam42LocStart-OREvtList+2(A0)
; Do param subst for lrh of rect
MOVE.W (A1),ORParam22LocStart-OREvtList(A0)
MOVE.W (A1),ORParam31LocStart-OREvtList(A0)
MOVE.W (A1),ORParam32LocStart-OREvtList(A0)
MOVE.W (A1)+,ORParam41LocStart-OREvtList(A0)
MOVE.W (A1),ORParam12LocStart-OREvtList+2(A0)
MOVE.W (A1),ORParam21LocStart-OREvtList+2(A0)
MOVE.W (A1),ORParam22LocStart-OREvtList+2(A0)
MOVE.W (A1),ORParam31LocStart-OREvtList+2(A0)
RTS
END