Apple2GSBuildPipeline/pkg/Templates/Apple IIgs/Merlin Desktop Application..../main.s

281 lines
4.6 KiB
ArmAsm

*
* ___FILENAME___
* ___PACKAGENAME___
*
* Created by ___FULLUSERNAME___ on ___DATE___.
* Copyright (c) ___YEAR___ ___ORGANIZATIONNAME___. All rights reserved.
*
]XCODESTART ; Keep this at the start and put your code after this
mx %00
use 4/Util.Macs
use 4/Mem.Macs
use 4/Locator.Macs
use 4/Qd.Macs
use 4/Window.Macs
use 4/Menu.Macs
use 4/Desk.Macs
use 4/Dos.16.Macs
menuBar = 1
appleMenu = 3
fileMenu = 4
editMenu = 5
editUndo = 250
editCut = 251
editCopy = 252
editPaste = 253
editClear = 254
fileNew = 401
fileOpen = 402
fileClose = 255
fileQuit = 256
appleAbout = 301
aboutAlertString = 1
windowRes = 1001
toolStartup = 1
refIsHandle = 1
refIsResource = 2
wInMenuBar = $11
wInGoAway = $16
wInSpecial = $19
phb
phk
plb
pha
_MMStartUp
PullWord userid
_TLStartUp
pha
pha
PushWord userid
PushWord #refIsResource
PushLong #toolStartup
_StartUpTools
PullLong toolStartupRef
jsl InitMenus
_InitCursor
loop
pha
PushWord #$ffff
PushLong #eventRec
_TaskMaster
pla
cmp #wInMenuBar
bne notInMenuBar
jsl HandleMenu
bra loop
notInMenuBar
cmp #wInSpecial
bne notInSpecial
jsl HandleMenu
bra loop
notInSpecial
cmp #wInGoAway
bne notInGoAway
* Put the low word of the grafport pointer to close in X and the high word in Y
ldx wmTaskData
ldy wmTaskData+2
jsl CloseDocument
notInGoAway
bra loop
InitMenus
pha
pha
PushWord #refIsResource
PushLong #menuBar
PushLong #0
_NewMenuBar2
_SetSysBar
PushLong #0
_SetMenuBar
PushWord #appleMenu
_FixAppleMenu
pha
_FixMenuBar
pla
_DrawMenuBar
rtl
HandleMenu
; The low word of the wmTaskData has the menu item number
lda wmTaskData
cmp #appleAbout
bne notAbout
jsl DoAbout
bra menuDone
notAbout
cmp #fileNew
bne notNew
jsl NewDocument
bra menuDone
notNew
cmp #fileOpen
bne notOpen
jsl NewDocument
bra menuDone
notOpen
cmp #fileClose
bne notClose
pha
pha
_FrontWindow
plx
ply
jsl CloseDocument
bra menuDone
notClose
cmp #fileQuit
bne notQuit
jsl DoQuit
bra menuDone
notQuit
cmp #editUndo
bne notUndo
* Handle undo here
bra menuDone
notUndo
cmp #editCut
bne notCut
* Handle cut here
bra menuDone
notCut
cmp #editCopy
bne notCopy
* Handle copy here
bra menuDone
notCopy
cmp #editPaste
bne notPaste
* Handle paste here
bra menuDone
notPaste
cmp #editClear
bne notClear
* Handle clear here
bra menuDone
notClear
menuDone
PushWord #0
PushWord wmTaskData+2
_HiliteMenu
rtl
CloseDocument
* X has the low word of the grafport pointer, Y has the high word
phy
phx
_CloseWindow
rtl
NewDocument
pha
pha
PushLong #winName
PushLong #0
PushLong #0
PushLong #0
PushWord #2
PushLong #windowRes
PushWord #$800E
_NewWindow2
pla
pla
rtl
DoAbout
pha
PushWord #4
PushLong #0
PushLong #aboutAlertString
_AlertWindow
pla
rtl
DoQuit
PushWord #refIsHandle
PushLong toolStartupRef
_ShutDownTools
_TLShutDown
PushWord userid
_MMShutDown
plb
_QUIT quitDCB
rtl
* Global data
userid dw 0
toolStartupRef adrl 0
winName str 'MyWindow'
eventRec
what dw 0
message adrl 0
when adrl 0
where_vert dw 0
where_horiz dw 0
modifiers dw 0
wmTaskData adrl 0
wmTaskMask adrl $001f7fff
wmLastClickTick adrl 0
wmClickCount dw 0
wmTaskData2 adrl 0
wmTaskData3 adrl 0
wmTaskData4 adrl 0
wmLastClickPt_vert dw 0
wmLastClickPt_horiz dw 0
* Used by doQuit
quitDCB dw 0