boot3/ProcessMgr/PuppetString.MacWrite.a
Elliot Nunn 5b0f0cc134 Bring in CubeE sources
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.
2017-12-26 10:02:57 +08:00

122 lines
3.6 KiB
Plaintext

;
; File: PuppetString.MacWrite.a
;
; Contains: Puppet string conversion table custumized for MacWrite
;
; 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 MacWrite. MacWrite is identified as having a creator equal to 'MACA'. The basic
; instructions are handled by the default table defined in PuppetString.Default.a.
;
;--------------------------------------------------------------------
LOAD 'ProcessMgrIncludes.D'
PRINT OFF
INCLUDE 'PuppetStringDefs.a'
PRINT ON
FUNC
BLANKS ON
STRING ASIS
TableTop
NumberOfEntries DC.B (EntriesBottom-EntriesTop)/6,0
EntriesTop
ResetEntry DC.W pstNullInstr
DC.L 0
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 pstEventCode
DC.L SAEvtCode-TableTop
MemCopyEntry DC.W pstIllegalInstr
DC.L 0
OutlineRectEntry DC.W pstNullInstr
DC.L 0
EntriesBottom
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+evtMouseEither+evtIsImportant
SREvt1message DC.L 0
SREvt1when DC.L 0
SRParam1LocStart
SREvt1where DC.W 0,0
SRParam1LocEnd
SREvt1modifiers DC.W 0
SREvt2
SREvt2what DC.W mButUpEvt+evtMouseEither+evtIsUnimportant
SREvt2message DC.L 0
SREvt2when DC.L 0
SRParam2LocStart
SREvt2where DC.W 0,0
SRParam2LocEnd
SREvt2modifiers DC.W $80
SREvtListBottom
SAEvtCode ; just do select rectangle of whole window
MOVE.L (SP)+,D1 ;get return address
ADD #4,SP ;skip event ptr
MOVE.L D1,-(SP) ;put return address back on stack
LEA SREvtListOffset,A0
MOVE.L #SREvtListBottom-SREvtListOffset,D0 ;get length
_PtrToHand
MOVE.W D0,D0 ;check result code
BNE.S SAErr ;if error, branch
MOVE.L A0,4(SP) ;save handle in return location
MOVE.L (A0),A0 ;handle -> ptr
; make sure the ulh pt is local, lrh pt is global
MOVE.W #evtMouseLocal,SREvt1modifiers-SREvtListOffset(A0)
MOVE.W #evtMouseGlobal,SREvt2modifiers-SREvtListOffset(A0)
; ulh pt is local coord 0
MOVE.W #0,SRParam1LocStart-SREvtListOffset(A0)
; now get coordinates of LRH corner of the top window
MOVE.L WindowList,A1 ;get top window
MOVE.L contRgn(A1),A1 ;get handle to content region
MOVE.L (A1),A1 ;handle -> ptr
MOVE.L rgnBBox+botRight(A1),D0 ;get lrh pt of cont rgn
MOVE.L GrafGlobals(A5),A1 ;get ptr to qd globals
MOVE.L screenBits+bounds+botRight(A1),D1 ;get lrh pt of screen
CMP.W D1,D0 ;is x coord offscreen
BLE.S @0 ;if not, branch
MOVE.W D1,D0 ;otherwise use screen bound
@0 SWAP D0 ;get y coord in lower word
SWAP D1 ;get y coord in lower word
CMP.W D1,D0 ;is y coord offscreen
BLE.S @1 ;if not, branch
MOVE.W D1,D0 ;otherwise use screen bound
@1 SWAP D0 ;set him back correctly
MOVE.L D0,SRParam2LocStart-SREvtListOffset(A0)
RTS
SAErr
MOVE.L #0,4(SP)
RTS
END