mirror of
https://github.com/codebur/a2-chemi-gs-1993.git
synced 2025-03-20 05:29:22 +00:00
1 line
11 KiB
NASM
1 line
11 KiB
NASM
keep Main
|
|
|
|
****************************************************************
|
|
* ChemiGS *
|
|
****************************************************************
|
|
* A Drawing Program for Chemical Structures *
|
|
* (c) 1992-93 by Urs Hochstrasser *
|
|
* Buendtenweg 6 *
|
|
* 5105 AUENSTEIN (SWITZERLAND) *
|
|
****************************************************************
|
|
|
|
* Module MAIN
|
|
|
|
|
|
****************************************************************
|
|
*
|
|
* USES ...
|
|
*
|
|
mcopy Main.macros
|
|
copy equates.asm
|
|
|
|
****************************************************************
|
|
*
|
|
* MAIN ROUTINE
|
|
*
|
|
Main start
|
|
using Globals
|
|
phk
|
|
plb
|
|
|
|
~TLStartup
|
|
|
|
pha gMemID:=MMStartup;
|
|
~MMstartup
|
|
pla
|
|
sta gMemID
|
|
ora #$0100
|
|
sta gMyID make private ID for all mem requests
|
|
|
|
lda #1
|
|
sta fDoAbout
|
|
jsr Hello
|
|
|
|
pha gToolRef:=StartupTools(...
|
|
pha
|
|
~StartupTools gMemID,#RefIsResource,#kTools
|
|
sta gToolErr
|
|
pl4 gToolRef
|
|
lda gToolErr
|
|
bne exit Shutdown on Tool Startup Error
|
|
|
|
jsr InitGlobals
|
|
lda fDoAbout
|
|
beq noAbout
|
|
jsr ShowAbout
|
|
noAbout anop
|
|
jsr SetUpMenus
|
|
jsr SetUpWindows
|
|
jsr HideAbout
|
|
jsr FirstFile
|
|
~InitCursor
|
|
jsr EventLoop
|
|
|
|
exit ~DisposeAll gMyID
|
|
~ShutDownTools #RefIsHandle,gToolRef
|
|
~MMShutDown gMemID
|
|
~TLShutDown
|
|
|
|
QuitGS quitParm
|
|
quitParm ds 8
|
|
end
|
|
|
|
FirstFile start
|
|
using Globals
|
|
using Parms
|
|
ph4 #0
|
|
~NewHandle #1,gMyID,#0,#0
|
|
pl4 messaHandle
|
|
~MessageCenter #2,#1,messaHandle get Message from Finder
|
|
bcc l4
|
|
brl l1 ...no message found...
|
|
l4 anop
|
|
lda messaHandle
|
|
ldx messaHandle+2
|
|
jsr Deref
|
|
sta messaPtr
|
|
stx messaPtr+2
|
|
move4 messaPtr,0
|
|
add4 0,#6
|
|
lda [0]
|
|
sta message
|
|
cmp #2
|
|
bcc l3
|
|
brl l2 >= 2 NO VALID MESSAGE!
|
|
l3 anop
|
|
inc4 0 put pointer one byte before path str
|
|
|
|
* brk
|
|
|
|
lda [0] ...and convert it to a Cl1 input string
|
|
xba
|
|
and #$00FF
|
|
sta [0]
|
|
sta pathLen
|
|
move4 0,Opath
|
|
ldy pathLen load path str length into y
|
|
add4 0,#1 0 points 1 byt before 1st ch in path str
|
|
loop lda [0],y
|
|
and #$00FF
|
|
cmp #'/'
|
|
beq match
|
|
cmp #':'
|
|
beq match
|
|
dbne y,loop
|
|
match sty temp
|
|
sub2 pathLen,temp,nameLen
|
|
add4 0,temp
|
|
dec4 0
|
|
lda nameLen
|
|
* xba
|
|
sta nameLen2
|
|
inc4 0
|
|
inc4 nameLen
|
|
ph4 #0
|
|
~NewHandle nameLen,gMyID,#0,#0
|
|
pl4 gTitleH
|
|
~PtrToHand 0,gTitleH,nameLen
|
|
~PtrToHand #nameLen2,gTitleH,#1
|
|
lda gTitleH
|
|
ldx gTitleH+2
|
|
jsr Deref
|
|
sta gTitlePtr
|
|
stx gTitlePtr+2
|
|
inc fFirstFile
|
|
jsr Open2
|
|
lda message
|
|
cmp #1
|
|
bne l2
|
|
jsr DoPrint
|
|
l2 ~MessageCenter #3,#1,messaHandle delete the Message
|
|
~DisposeHandle messaHandle
|
|
bra exit
|
|
l1 jsr DoNew
|
|
exit rts
|
|
messaHandle ds 4
|
|
thePtr ds 4
|
|
messaPtr ds 4
|
|
message ds 2
|
|
nameLen ds 4
|
|
pathLen ds 4
|
|
temp ds 4
|
|
nameLen2 ds 2
|
|
end
|
|
|
|
****************************************************************
|
|
*
|
|
* General Subroutines
|
|
|
|
Error start if there is a Tool error, display it
|
|
using Globals
|
|
php
|
|
lda gToolErr
|
|
beq exit
|
|
~SysBeep
|
|
ph2 #0
|
|
~ErrorWindow #1,#0,gToolErr
|
|
pl2 dummy
|
|
exit lda gToolErr
|
|
plp
|
|
rts
|
|
dummy ds 2
|
|
end
|
|
|
|
SetUpMenus start
|
|
using Globals
|
|
ph4 #0
|
|
~NewMenuBar2 #RefIsResource,#kMBarID,#0
|
|
pl4 myBar
|
|
~SetsysBar myBar
|
|
~SetMenuBar #0
|
|
~FixAppleMenu #kAppleM
|
|
pha
|
|
~FixMenuBar
|
|
pl2 heigth
|
|
~DrawMenuBar
|
|
rts
|
|
|
|
heigth ds 2
|
|
myBar ds 4
|
|
end END of SetUPMenus
|
|
|
|
EventLoop start
|
|
using Globals
|
|
stz gDone
|
|
evloop jsr CheckFrontW
|
|
pha
|
|
~TaskMaster #everyEvent,#gMainEvt
|
|
pl2 code
|
|
|
|
lda code
|
|
cmp #wInGoAway
|
|
bne l2
|
|
jsr DoClose
|
|
brl exit
|
|
l2 cmp #wInMenuBar
|
|
bne l1
|
|
jsr HandleMenu
|
|
brl exit
|
|
l1 cmp #wInSpecial
|
|
bne l3
|
|
jsr HandleMenu
|
|
brl exit ???//
|
|
l3 anop *** new stuff
|
|
cmp #wInContent
|
|
bne l4
|
|
jsr HandleContent in module WINDOWS
|
|
brl exit ???//
|
|
l4 cmp #wInInfo
|
|
bne exit
|
|
jsr HandleInfo in module WINDOWS
|
|
exit lda gDone
|
|
bne exit2
|
|
lda gTaskDta see whether Tool win needs redrawing
|
|
and #$7FFF
|
|
cmp #wInGrow
|
|
beq doUpD @@@@@@@@
|
|
cmp #wInDrag
|
|
beq doUpD
|
|
cmp #wInZoom
|
|
beq doUpD
|
|
cmp #wClickCalled
|
|
beq doUpD
|
|
* Insert Null Event Handler Here...
|
|
jsr HndlDiskInsert
|
|
bra loop
|
|
|
|
doUpD jsr UpdateToolWin
|
|
loop anop
|
|
jsr AdjustCursor
|
|
jmp evloop
|
|
exit2 rts
|
|
code ds 2
|
|
end
|
|
|
|
CheckFrontW start
|
|
using Globals
|
|
ph4 #0
|
|
~FrontWindow
|
|
pl4 theWindow
|
|
|
|
lda theWindow same window as last time?
|
|
cmp gLastWindow
|
|
bne changed
|
|
lda theWindow+2
|
|
cmp gLastWindow+2
|
|
bne changed
|
|
exit1 rts
|
|
|
|
changed anop
|
|
stz newCursor
|
|
jsr UpdateToolWin
|
|
lda theWindow Window has changed, but...
|
|
ora theWindow+2
|
|
bne l4
|
|
brl l1 ...no Window at all!
|
|
l4 pha is it a DA?
|
|
~GetSysWFlag theWindow
|
|
pla
|
|
beq noDA no DA, so skip
|
|
~EnableMItem #255 It's a DA! (enable Close Item)
|
|
~SetMenuFlag #$FF7F,#3 enable Edit Menu
|
|
~DrawMenuBar
|
|
brl exit
|
|
noDA anop
|
|
lda theWindow
|
|
cmp gToolWin
|
|
bne l2
|
|
lda theWindow+2
|
|
cmp gToolWin+2
|
|
bne l2
|
|
bra l1
|
|
l2 jsr enableItems
|
|
|
|
move4 theWindow,gTaskDta *** is it secure enough?...***
|
|
jsr SelDataWin
|
|
|
|
bra exit
|
|
l1 anop no Window there...
|
|
jsr disableItems
|
|
exit move4 theWindow,glastWindow
|
|
rts
|
|
|
|
enableItems anop
|
|
lda fEnabled already enabled?
|
|
bne en1 yes, so skip
|
|
~EnableMItem #255 Close
|
|
~EnableMItem #260 Save
|
|
~EnableMItem #261 Save As
|
|
~EnableMItem #262 Revert
|
|
~EnableMItem #263 Page Setup
|
|
~EnableMItem #264 Print
|
|
~SetMenuFlag #enableMenu,#3 Edit Menu
|
|
~DrawMenuBar
|
|
inc fEnabled set 'fEnabled' flag
|
|
en1 rts
|
|
disableItems anop
|
|
stz fEnabled
|
|
~DisableMItem #255 Close
|
|
~DisableMItem #260 Save
|
|
~DisableMItem #261 Save As
|
|
~DisableMItem #262 Revert
|
|
~DisableMItem #263 Page Setup
|
|
~DisableMItem #264 Print
|
|
~SetMenuFlag #disableMenu,#3 Edit Menu
|
|
~DrawMenuBar
|
|
rts
|
|
theWindow ds 4
|
|
theHandle ds 4
|
|
fEnabled ds 2 Flag, TRUE if Items enabled
|
|
end
|
|
|
|
Ignore start
|
|
rts
|
|
end
|
|
|
|
Deref start Derefs and locks handle passed in
|
|
sta 0 a,x. Result passed back in a,x
|
|
stx 2 trashes 0 on DP
|
|
ldy #4
|
|
lda [0],y
|
|
sta lockState
|
|
ora #$8000
|
|
sta [0],y
|
|
dey
|
|
dey
|
|
lda [0],y
|
|
tax
|
|
lda [0]
|
|
rts
|
|
|
|
Unlock entry Unlocks the handle passed in x,a
|
|
sta 0 trases 0 on DP
|
|
stx 2
|
|
ldy #4
|
|
lda lockState better?...
|
|
* lda [0],y
|
|
* and #$7FFF
|
|
sta [0],y
|
|
rts
|
|
lockState ds 2
|
|
end
|
|
|
|
|
|
GetField start
|
|
sta 0
|
|
stx 2
|
|
ldy #0
|
|
loop lda [0],y copy input SGRecord into local area
|
|
sta handle,y
|
|
iny
|
|
iny
|
|
cpy #14 length of the SGRecord
|
|
bcc loop
|
|
lda offset
|
|
clc
|
|
adc length
|
|
sta endf
|
|
_Deref handle,0
|
|
move4 destptr,4
|
|
sub4 4,offset
|
|
ldy offset
|
|
loop2 lda [0],y
|
|
sta [4],y
|
|
iny
|
|
iny
|
|
cpy endf
|
|
bcc loop2
|
|
_Unlock handle
|
|
rts
|
|
handle ds 4
|
|
offset ds 4
|
|
destptr ds 4
|
|
length ds 2
|
|
endf ds 2
|
|
end
|
|
|
|
|
|
SetField start
|
|
sta 0
|
|
stx 2
|
|
ldy #0
|
|
loop lda [0],y copy input SGRecord into local area
|
|
sta handle,y
|
|
iny
|
|
iny
|
|
cpy #14 length of the SGRecord
|
|
bcc loop
|
|
lda offset
|
|
clc
|
|
adc length
|
|
sta endf
|
|
_Deref handle,4 trashes 0,1!!!!!!!!
|
|
move4 sourceptr,0
|
|
sub4 0,offset
|
|
ldy offset
|
|
loop2 lda [0],y
|
|
sta [4],y
|
|
iny
|
|
iny
|
|
cpy endf
|
|
bcc loop2
|
|
_Unlock handle
|
|
rts
|
|
handle ds 4
|
|
offset ds 4
|
|
sourceptr ds 4
|
|
length ds 2
|
|
endf ds 2
|
|
end
|
|
|
|
Test start
|
|
~SysBeep
|
|
rts
|
|
end
|
|
|
|
SetUpWindows start
|
|
using Globals
|
|
ph4 #0 Set Up Tool Window
|
|
~NewWindow2 #0,#0,#0,#0,#RefIsResource,#kToolWID,#rWindParam1
|
|
pl4 gToolWin
|
|
~SetContentDraw #DrawToolWin,gToolWin
|
|
ph4 #0
|
|
~NewWindow2 #0,#0,#0,#0,#RefIsResource,#kEasterWID,#rWindParam1
|
|
pl4 gEasterWin
|
|
ph4 #0
|
|
~NewWindow2 #0,#0,#0,#0,#RefIsResource,#kPrefWID,#rWindParam1
|
|
pl4 gPrefWin
|
|
ph4 #0
|
|
~NewWindow2 #0,#0,#0,#0,#RefIsResource,#kHelpWID,#rWindParam1
|
|
pl4 gHelpWin
|
|
rts
|
|
end
|
|
|
|
**** Altes DoAbout ***************************
|
|
* ~SetForeColor #3 white
|
|
* ~SetBackColor #0 black
|
|
* ~SetTextMode #modeCopy
|
|
** ~MoveTo gCopyLoc,gCopyLoc+2
|
|
** ~DrawString #Copyright
|
|
** ~MoveTo gCopyLoc+4,gCopyLoc+6
|
|
** ~DrawString #VersionStr
|
|
**********************************************
|
|
|
|
ShowAbout start
|
|
using Globals
|
|
stz fWaitForKey
|
|
DoAbout entry
|
|
ph4 #0
|
|
~FrontWindow
|
|
pl4 theWindow
|
|
~SendBehind #-1,gAboutWin
|
|
* ~ShowHide #1,gAboutWin
|
|
~ShowWindow gAboutWin
|
|
~SelectWindow gAboutWin
|
|
~BeginUpdate gAboutWin
|
|
~DrawControls gAboutWin
|
|
~EndUpdate gAboutWin
|
|
lda fWaitForKey
|
|
beq noWait
|
|
loop pha
|
|
~GetNextEvent #$A,#eventRec MouseDown, KeyDown
|
|
pla
|
|
beq loop
|
|
HideAbout entry
|
|
~ShowHide #0,gAboutWin
|
|
~SelectWindow theWindow
|
|
noWait anop
|
|
lda #1
|
|
sta fWaitForKey set again the flag for next call
|
|
rts
|
|
theWindow ds 4
|
|
eventRec ds 16
|
|
end
|
|
|
|
DoPrefs start *** do sth more...
|
|
using Globals
|
|
ph4 #0
|
|
~FrontWindow
|
|
pl4 theWindow
|
|
~SendBehind #-1,gPrefWin
|
|
~ShowHide #1,gPrefWin
|
|
~SelectWindow gPrefWin
|
|
~BeginUpdate gPrefWin
|
|
~DrawControls gPrefWin
|
|
~EndUpdate gPrefWin
|
|
loop pha
|
|
~GetNextEvent #$A,#eventRec MouseDown, KeyDown
|
|
pla
|
|
beq loop
|
|
~ShowHide #0,gPrefWin
|
|
~SelectWindow theWindow
|
|
rts
|
|
theWindow ds 4
|
|
eventRec ds 16
|
|
end
|
|
|
|
DoHelp start *** do sth more...
|
|
using Globals
|
|
ph4 #0
|
|
~FrontWindow
|
|
pl4 theWindow
|
|
~SendBehind #-1,gHelpWin
|
|
~ShowHide #1,gHelpWin
|
|
~SelectWindow gHelpWin
|
|
~BeginUpdate gHelpWin
|
|
~DrawControls gHelpWin
|
|
~EndUpdate gHelpWin
|
|
loop pha
|
|
~GetNextEvent #$A,#eventRec MouseDown, KeyDown
|
|
pla
|
|
beq loop
|
|
~ShowHide #0,gHelpWin
|
|
~SelectWindow theWindow
|
|
rts
|
|
theWindow ds 4
|
|
eventRec ds 16
|
|
end
|
|
|
|
|
|
ForeColor start Generates gForePat from colorNum
|
|
using Globals colorNum in A
|
|
and #$F
|
|
sta temp
|
|
asl a
|
|
asl a
|
|
asl a
|
|
asl a
|
|
ora temp
|
|
sta temp
|
|
xba hier musst du noch schieben um 4 bit
|
|
ora temp
|
|
ldx #0
|
|
loop sta forePat,x
|
|
inx
|
|
inx
|
|
cpx #32
|
|
bcc loop
|
|
~SetPenPat #forePat
|
|
rts
|
|
BackColor entry Same for Background Pattern
|
|
and #$F
|
|
sta temp
|
|
asl a
|
|
asl a
|
|
asl a
|
|
asl a
|
|
ora temp
|
|
sta temp
|
|
xba
|
|
ora temp
|
|
ldx #0
|
|
loop2 sta backPat,x
|
|
inx
|
|
inx
|
|
cpx #32
|
|
bcc loop2
|
|
~SetBackPat #backPat
|
|
rts
|
|
temp ds 2
|
|
forePat ds 32
|
|
backPat ds 32
|
|
end
|
|
|
|
|
|
Hello start
|
|
using Globals
|
|
ph4 #0
|
|
~NewHandle #1,gMyID,#0,#0
|
|
pl4 messaHandle
|
|
~MessageCenter #2,#1,messaHandle get Message from Finder
|
|
bcs noMessa
|
|
brl exit
|
|
|
|
noMessa anop
|
|
OpenGS TOpenParm Load Title Screen
|
|
bcs exit2 if none -> skip it
|
|
stz fDoAbout
|
|
SHORT M
|
|
lda $E0C034
|
|
sta border Save Border Color
|
|
and #$F0
|
|
ora #$9 Set Border Color to Orange
|
|
sta $E0C034
|
|
lda $E0C029 Enable Super Hires
|
|
ora #$C0
|
|
sta $E0C029
|
|
LONG M
|
|
|
|
* OpenGS TOpenParm Already opened!
|
|
lda TOpenParm+2
|
|
sta TReadParm+2
|
|
sta TCloseParm+2
|
|
ReadGS TReadParm
|
|
* CloseGS TCloseParm Close later (closes attempt also)
|
|
|
|
SHORT M
|
|
* lda $E0C010 clear Keyboard strobe
|
|
stz VBLcount clear own VBL counter
|
|
|
|
loop lda $E0C019 bit 7 = 1 if not VBL
|
|
and #$80
|
|
cmp oldVBL
|
|
beq noVBL
|
|
inc VBLcount
|
|
noVBL sta oldVBL
|
|
lda VBLcount
|
|
cmp #240
|
|
bcc Loop
|
|
|
|
lda border restore Border color
|
|
sta $E0C034
|
|
LONG M
|
|
~DisposeHandle messaHandle
|
|
exit2 CloseGS TCloseParm
|
|
exit anop
|
|
rts
|
|
|
|
TOpenParm dc i2'3' pCount
|
|
ds 2 refNum
|
|
dc i4'TitleScrn' pathname pointer
|
|
dc i2'1' requestAccess
|
|
ds 2 resourceNumber
|
|
ds 2 access
|
|
ds 2 fileType
|
|
ds 4 auxType
|
|
ds 2 storageType
|
|
ds 8 createDateTime
|
|
ds 8 modDateTime
|
|
ds 4 optionList
|
|
ds 4 eof
|
|
ds 4 blocksUsed
|
|
ds 4 resourceEOF
|
|
ds 4 resourceBlocks
|
|
|
|
TReadParm dc i2'4' pCount
|
|
ds 2 refNum
|
|
RdBuf dc i4'$00E12000' dataBuffer
|
|
RrCount dc i4'32767' requestCount
|
|
ds 4 transferCount
|
|
ds 2 cachePriority
|
|
|
|
TCloseParm dc i2'1'
|
|
ds 2 refNum
|
|
|
|
TitleScrn DOSIN 'Title.Scrn'
|
|
border ds 2
|
|
messaHandle ds 4
|
|
VBLcount ds 2
|
|
oldVBL dc i2'$FF'
|
|
end
|