1 line
12 KiB
NASM
1 line
12 KiB
NASM
keep WINDOWS
|
|
|
|
****************************************************************
|
|
* ChemiGS *
|
|
****************************************************************
|
|
* A Drawing Program for Chemical Structures *
|
|
* (c) 1992-93 by Urs Hochstrasser *
|
|
* Buendtenweg 6 *
|
|
* 5105 AUENSTEIN (SWITZERLAND) *
|
|
****************************************************************
|
|
|
|
* Module WINDOWS
|
|
|
|
|
|
****************************************************************
|
|
*
|
|
* USES ...
|
|
*
|
|
mcopy windows.macros
|
|
copy equates.asm
|
|
|
|
****************************************************************
|
|
*
|
|
* Window stuff
|
|
*
|
|
|
|
DrawToolWin start Tool window content draw defProc
|
|
using Globals
|
|
|
|
phd save caller's DP
|
|
phb save caller's Data Bank
|
|
phk Data Bank := Pgm Bank
|
|
plb
|
|
|
|
* ph4 #0
|
|
* ~LoadResource #rPicture,#kToolPicID
|
|
* pl4 toolPic
|
|
* ~DrawPicture toolPic,#destRect
|
|
~DrawControls gToolWin
|
|
lda gToolID
|
|
jsl HiliteSelection
|
|
|
|
plb restore caller's Data Bank
|
|
pld restore caller's DP
|
|
|
|
rtl
|
|
*ToolPic ds 4
|
|
*destRect dc i2'0' top 13
|
|
* dc i2'0' left 2
|
|
* dc i2'179' bottom 31 45 156
|
|
* dc i2'64' right 512 626
|
|
|
|
UpdateToolWin entry
|
|
~BeginUpdate gToolWin
|
|
jsl DrawToolWin
|
|
~EndUpdate gToolWin
|
|
rts
|
|
|
|
HiliteSelection entry
|
|
* ---------------------------------------
|
|
* Input : Tool Number in A
|
|
* Output: none
|
|
* Action: Invert Tool in Toolbar
|
|
* ---------------------------------------
|
|
stz xOffset initialize x offset for tool hilite
|
|
cmp #11
|
|
bcc left
|
|
ldy #32 it's in the right column
|
|
sty xOffset
|
|
sec
|
|
sbc #11
|
|
left asl a Tool number * 16 -> y coordinate
|
|
asl a
|
|
asl a
|
|
asl a
|
|
clc *** New:
|
|
adc TBOffset *** New: add title Bar offset
|
|
sta yOffset
|
|
clc
|
|
adc #15 hilight is 15 pixels high
|
|
sta bottom
|
|
lda xOffset
|
|
clc
|
|
adc #30 ...and 30 wide
|
|
sta right
|
|
~InvertRect #myRect
|
|
rtl
|
|
myrect anop
|
|
yOffset ds 2
|
|
xOffset ds 2
|
|
bottom ds 2
|
|
right ds 2
|
|
end
|
|
|
|
DrawEaster start
|
|
using Globals
|
|
~BeginUpdate gEasterWin
|
|
~DrawControls gEasterWin
|
|
~EndUpdate gEasterWin
|
|
rtl
|
|
end
|
|
|
|
DrawDataContent start Data Window content draw defProc
|
|
using Globals
|
|
|
|
phd save caller's DP
|
|
phb save caller's Data Bank
|
|
phk Data Bank := Pgm Bank
|
|
plb
|
|
|
|
jsr displayIt in 'TOOLS'
|
|
|
|
plb restore caller's Data Bank
|
|
pld restore caller's DP
|
|
|
|
rtl
|
|
end
|
|
|
|
DrawInfoBar start
|
|
using Globals
|
|
|
|
theWindow equ 6 Offset to the infoBar owner window
|
|
infoRefCon equ theWindow+4 Offset to the window's infoBarRefCon
|
|
infoRect equ infoRefCon+4 Offset to the infoBar's enclosing RECT
|
|
|
|
phd save current DP
|
|
tsc
|
|
tcd switch to DP in stack
|
|
|
|
ldy #0 *** new: save InfoRect into gInfoRect
|
|
lda [14],y
|
|
sta gInfoRect
|
|
iny
|
|
iny
|
|
lda [14],y
|
|
sta gInfoRect+2
|
|
iny
|
|
iny
|
|
lda [14],y
|
|
sta gInfoRect+4
|
|
iny
|
|
iny
|
|
lda [14],y
|
|
sta gInfoRect+6 *** end new
|
|
|
|
* ------------------- individual routine -----------------
|
|
* ph4 #0
|
|
* ~LoadResource #rPicture,#kButtonBarID
|
|
* pl4 btnPic besser in InfoRefCon speichern
|
|
* ~DrawPicture btnPic,#btnRect
|
|
|
|
* ------------------- Remove input parameters from stack
|
|
ply pull original DP, save in y
|
|
|
|
lda 2,s Move RTL addr down over inp parms
|
|
sta 14,s
|
|
lda 0,s
|
|
sta 12,s
|
|
|
|
tsc now move SP over inp parms
|
|
clc
|
|
adc #12 add number input parm bytes to SP
|
|
tcs and reset stack
|
|
|
|
tya restore original DP
|
|
tcd
|
|
|
|
rtl back to Window Mgr
|
|
btnRect dc i2'13,2,30,552' destRect for Button Bar (0,0,16,549)
|
|
btnPic ds 4
|
|
end
|
|
|
|
HandleInfo start
|
|
* using Globals
|
|
* ~StartInfoDrawing #gInfoRect,gDataWin
|
|
* ~EndInfoDrawing
|
|
rts
|
|
end
|
|
|
|
HandleRuler start
|
|
using Globals
|
|
* ~StartDrawing gEditWindow
|
|
move4 gMainEvt+owhere,myPoint
|
|
~GlobalToLocal #myPoint
|
|
pha
|
|
~PtInRect #myPoint,#XRect
|
|
pla
|
|
beq l1
|
|
~InvertRect #XRect
|
|
l1 pha
|
|
~PtInRect #myPoint,#OKRect
|
|
pla
|
|
beq l2
|
|
~InvertRect #OKRect
|
|
l2 pha
|
|
~PtInRect #myPoint,#EditRect
|
|
pla
|
|
beq l3
|
|
~InvertRect #EditRect
|
|
l3 pha
|
|
~PtInRect #myPoint,#DirRect
|
|
pla
|
|
beq l4
|
|
~InvertRect #DirRect
|
|
l4 pha
|
|
~PtInRect #myPoint,#PSRect
|
|
pla
|
|
beq l5
|
|
~InvertRect #PSRect
|
|
l5 pha
|
|
~PtInRect #myPoint,#CRect
|
|
pla
|
|
beq l6
|
|
~InvertRect #CRect
|
|
l6 pha
|
|
~PtInRect #myPoint,#HRect
|
|
pla
|
|
beq l7
|
|
~InvertRect #HRect
|
|
l7 pha
|
|
~PtInRect #myPoint,#ORect
|
|
pla
|
|
beq l8
|
|
~InvertRect #ORect
|
|
l8 pha
|
|
~PtInRect #myPoint,#NRect
|
|
pla
|
|
beq l9
|
|
~InvertRect #NRect
|
|
l9 pha
|
|
~PtInRect #myPoint,#SRect
|
|
pla
|
|
beq l10
|
|
~InvertRect #SRect
|
|
l10 pha
|
|
~PtInRect #myPoint,#PRect
|
|
pla
|
|
beq l11
|
|
~InvertRect #PRect
|
|
l11 pha
|
|
~PtInRect #myPoint,#PopRect
|
|
pla
|
|
beq l12
|
|
~InvertRect #PopRect
|
|
l12 anop
|
|
|
|
* ~SetOrigin #0,#0
|
|
rts
|
|
myPoint ds 4
|
|
theWindow ds 4
|
|
XRect dc i2'16,8,27,30'
|
|
OKRect dc i2'16,32,27,54'
|
|
EditRect dc i2'16,56,27,180'
|
|
DirRect dc i2'16,182,27,204'
|
|
PSRect dc i2'16,211,27,245'
|
|
CRect dc i2'16,247,27,269'
|
|
HRect dc i2'16,271,27,293'
|
|
ORect dc i2'16,295,27,317'
|
|
NRect dc i2'16,319,27,341'
|
|
SRect dc i2'16,343,27,365'
|
|
PRect dc i2'16,367,27,387'
|
|
PopRect dc i2'16,396,27,546'
|
|
end
|
|
|
|
*GetDataMem start Get Memory for File Data
|
|
* using Globals
|
|
* ph4 #0
|
|
* ~NewHandle gMemSize,gMyID,#0,#0
|
|
* sta gToolErr
|
|
* pl4 gDataHandle
|
|
* rts
|
|
* end remember to check for errors on return!
|
|
|
|
OpenWindow start
|
|
using Globals
|
|
jsr EndText
|
|
* jsr SetTheFont *wirkts?
|
|
ph4 #0
|
|
~NewWindow2 #0,#0,#0,#0,#RefIsResource,#kDataWID,#rWindParam1
|
|
pl4 gDataWin
|
|
ph4 #0
|
|
~GetPort
|
|
pl4 thePort
|
|
lda fCacheWins
|
|
bne ow1
|
|
brl noCache
|
|
ow1 anop
|
|
ph4 #0
|
|
~NewHandle #$10000,gMyID,#attrLocked,#0
|
|
sta gToolErr
|
|
pl4 picHandle
|
|
jsr Error
|
|
bcc offPok2
|
|
stz fCacheWins * Could not allocate Mem -> no cache
|
|
brl noCache
|
|
|
|
offPok2 ph4 #0
|
|
~NewHandle #170,gMyID,#attrLocked,#0
|
|
sta gToolErr
|
|
pl4 theHandle
|
|
jsr Error
|
|
bcc offPok
|
|
stz fCacheWins * Could not allocate Mem -> no cache
|
|
brl noCache
|
|
|
|
|
|
offPok anop
|
|
_Deref picHandle,ptrToPixImage
|
|
_Deref theHandle,gOffPort
|
|
|
|
~OpenPort gOffPort init offscreen port (becomes current)
|
|
|
|
lda masterSCB
|
|
sta portSCB
|
|
~SetPortLoc #locInfo
|
|
|
|
sta gToolErr *
|
|
jsr Error *
|
|
~GetPortRect #cleanRect
|
|
sta gToolErr *
|
|
jsr Error *
|
|
|
|
~SetSolidBackPat #$F
|
|
sta gToolErr *
|
|
|
|
* ~SysBeep
|
|
jsr Error *
|
|
~EraseRect #cleanRect
|
|
~PenNormal
|
|
|
|
noCache anop
|
|
lda #-kRulerH
|
|
sta gYoffset
|
|
stz gXoffset
|
|
lda #kDataWidth
|
|
sta gDocW
|
|
lda #kDataHeigth
|
|
sta gDocH
|
|
~StartDrawing gDataWin
|
|
~SetPort thePort
|
|
|
|
***************** THIS STUFF NEVER USED *****************************
|
|
* ph4 #0
|
|
* ~LoadResource #rPicture,#kButtonBarID
|
|
* pl4 btnPic
|
|
* ~DrawPicture btnPic,#btnRect
|
|
* ~PenNormal
|
|
* ~MoveTo #portRect+2,#15 draw ruler's border line
|
|
* ~LineTo #portRect+6,#15
|
|
*
|
|
~SetOrigin #0,#0
|
|
* ~SetInfoDraw #DrawInfoBar,gDataWin
|
|
* ~SetDataSize #kDataWidth,#kDataHeigth,gDataWin
|
|
* ~SetScroll #64,#32,gDataWin
|
|
~SetContentDraw #DrawDataContent,gDataWin
|
|
~SetWTitle gTitlePtr,gDataWin
|
|
|
|
ph4 #0
|
|
~GetCtlHandleFromID gDataWin,#TEditID
|
|
pl4 LEditH
|
|
|
|
* henriks code
|
|
* lda LEditH
|
|
* ldy LEditH+2
|
|
* brk 0
|
|
|
|
ph4 #0
|
|
~GetCtlHandleFromID gDataWin,#hScrlID
|
|
pl4 hScrollH
|
|
ph4 #0
|
|
~GetCtlHandleFromID gDataWin,#vScrlID
|
|
pl4 vScrollH
|
|
ph4 #0
|
|
~GetCtlHandleFromID gDataWin,#MountnID
|
|
pl4 MountnH
|
|
ph4 #0
|
|
~GetCtlHandleFromID gDataWin,#SizeBxID
|
|
pl4 sizeBoxH
|
|
ph4 #0
|
|
~GetCtlHandleFromID gDataWin,#TBarCID inactive ToolBar Pict Ctl
|
|
pl4 TBarH
|
|
|
|
jsr SetMinGrow Set minV,minH in ctlData of SizeBox
|
|
|
|
~HideControl LEditH
|
|
|
|
**** TEControl Record = TERecord !!! ****
|
|
|
|
* _SetField LEditH,#$C8,#KeyFilter,#4
|
|
|
|
~ShowWindow gDataWin
|
|
|
|
* ~SysBeep
|
|
|
|
rts
|
|
portRect ds 8
|
|
btnRect dc i2'0,0,17,639' destRect for Button Bar (0,0,16,549)
|
|
btnPic ds 4 most recent: 0,0,17,550
|
|
thePort ds 4
|
|
theRgn ds 4
|
|
cleanRect ds 8
|
|
theHandle ds 4
|
|
|
|
end
|
|
|
|
SetMinGrow start
|
|
using Globals
|
|
~SetCtlTitle #$00CC0044,sizeBoxH ;LoWrd=minH=68; HiWrd=minW=204
|
|
rts
|
|
end
|
|
|
|
|
|
|
|
DrawTopWindow start
|
|
* ~SetForeColor #0
|
|
* ~SolidPattern #0,myPattern
|
|
* ~SetPenPat myPattern
|
|
* ~SetPenSize #1,#1
|
|
* ~FrameOval #myRect
|
|
* ~SetFontID #0
|
|
* ~SetPenMode #modeForeCopy
|
|
* ~MoveTo #150,#200
|
|
* ~DrawCString #myString
|
|
rts
|
|
myPattern ds 32
|
|
myRect dc i2'10' top
|
|
dc i2'10' left
|
|
dc i2'388' bottom
|
|
dc i2'580' right
|
|
myString dc c'Hello, old friend!!!',h'0D00'
|
|
end
|
|
|
|
HandleContent start
|
|
using Globals
|
|
using Version **only for easter window
|
|
cmp4 gTaskDta,gToolWin
|
|
bne l1
|
|
jsr doTool
|
|
rts
|
|
l1 anop
|
|
cmp4 gTaskDta,gDataWin
|
|
beq sameDataWin
|
|
jsr SelDataWin
|
|
bra exit
|
|
sameDataWin anop
|
|
jsr doDataWin in Module TOOLS
|
|
exit rts
|
|
SelDataWin entry
|
|
jsr EndText
|
|
ph4 #0
|
|
~GetWRefCon gDataWin
|
|
pl4 theHandle
|
|
sta gToolErr **** test
|
|
~PtrToHand #FileInfo,theHandle,#FInfoSize
|
|
sta gToolErr **** test
|
|
~SelectWindow gTaskDta if not tool window, hilight it
|
|
ph4 #0
|
|
~GetWRefCon gTaskDta
|
|
pl4 theHandle
|
|
~HandToPtr theHandle,#FileInfo,#FInfoSize
|
|
* move4 gTaskDta,gDataWin **** eigentlich ueberfluessig...
|
|
jsr Error **** test
|
|
jsr EndText
|
|
|
|
rts
|
|
doTool anop it's the Tool window, so handle it
|
|
lda gToolID
|
|
sta oldToolID
|
|
ph4 #0
|
|
~GetPort
|
|
pl4 tmpPort
|
|
~SetPort gToolWin
|
|
move4 gMainEvt+owhere,myPoint
|
|
~GlobalToLocal #myPoint
|
|
lda myPoint
|
|
cmp TBOffset if myPoint < TBOffset: in Tool Title
|
|
bcc doTTitle
|
|
cmp #178 is it past the last window
|
|
bcs doEaster
|
|
brl l3
|
|
doEaster ph4 #0
|
|
~FrontWindow
|
|
pl4 theWindow
|
|
lda theWindow
|
|
cmp gEasterWin
|
|
bne notInFront
|
|
lda theWindow+2
|
|
cmp gEasterWin+2
|
|
bne notInFront
|
|
brl l4
|
|
doTTitle anop Handle Tool Title
|
|
rts
|
|
|
|
notInFront ~BringToFront gEasterWin
|
|
l4 ~ShowHide #1,gEasterWin
|
|
~StartDrawing gEasterWin
|
|
******************************************** START OF TEST STUFF ****
|
|
~MoveTo #0,#8
|
|
~DrawString #testTitle
|
|
~DrawString gTitlePtr
|
|
~MoveTo #0,#20
|
|
lda fSaved
|
|
beq tst1
|
|
~DrawString #fsStr
|
|
tst1 ~MoveTo #0,#28
|
|
lda fNamed
|
|
beq tst2
|
|
~DrawString #fnStr
|
|
tst2 ~MoveTo #0,#36
|
|
lda fFullAccess
|
|
beq tst3
|
|
~DrawString #ffStr
|
|
tst3 ~MoveTo #0,#44
|
|
lda fOpened
|
|
beq tst4
|
|
~DrawString #foStr
|
|
tst4 ~MoveTo #0,#52
|
|
~MoveTo #0,#60
|
|
~Int2Hex gRefNum,#rfStr+10,#4
|
|
~DrawString #rfStr
|
|
~MoveTo #0,#68
|
|
~Int2Hex gDataWNum,#wnStr+15,#4
|
|
~DrawString #wnStr
|
|
|
|
~MoveTo #0,#76 *** new...
|
|
~Int2Dec dPortRect,#prString+11,#5,#1
|
|
~Int2Dec dPortRect+2,#prString+17,#5,#1
|
|
~Int2Dec dPortRect+4,#prString+23,#5,#1
|
|
~Int2Dec dPortRect+6,#prString+29,#5,#1
|
|
~DrawString #prString
|
|
~MoveTo #0,#84
|
|
~Int2Dec winW,#wwhString+9,#5,#1
|
|
~Int2Dec winH,#wwhString+15,#5,#1
|
|
~DrawString #wwhString *** ...end new
|
|
|
|
|
|
~MoveTo #0,#160
|
|
~DrawString #VersionStr
|
|
***************************************** END OF TEST STUFF ****
|
|
* ~DrawControls gEasterWin
|
|
~SetOrigin #0,#0
|
|
loop pha
|
|
~StillDown #0
|
|
pla
|
|
bne loop
|
|
~ShowHide #0,gEasterWin
|
|
brl exit2
|
|
l3 anop myPoint y coordinate of mouse loc
|
|
sec
|
|
sbc TBOffset * New: substract Title Bar offset
|
|
lsr a divide by 8 -> offset into jsr-Table
|
|
lsr a
|
|
lsr a
|
|
lsr a
|
|
sta gToolID
|
|
asl a
|
|
tax
|
|
lda myPoint+2 x coordinate
|
|
cmp #32 is it in the right column?
|
|
bcc ok no
|
|
txa
|
|
clc
|
|
adc #22 'offset offset' for right column
|
|
lsr a
|
|
sta gToolID
|
|
ok lda oldToolID
|
|
jsl HiliteSelection
|
|
lda gToolID
|
|
jsl HiliteSelection
|
|
jsr DoTheTool
|
|
exit2 ~SetPort tmpPort
|
|
jsr UpdateToolWin update hilight
|
|
|
|
rts
|
|
testTitle dw 'FILE INFO ON: '
|
|
fsStr dw 'SAVED'
|
|
fnStr dw 'NAMED'
|
|
ffStr dw 'FULL ACCESS'
|
|
foStr dw 'OPENED'
|
|
rfStr dw 'RefNum: '
|
|
wnStr dw 'Open Windows: '
|
|
prString dw 'PortRect: , , , '
|
|
wwhString dw 'winW,H: , '
|
|
|
|
|
|
doTheTool entry
|
|
lda gToolID
|
|
asl a
|
|
tax
|
|
jsr (toolTable,x)
|
|
lda gToolID
|
|
cmp #TextToolID
|
|
beq textOk
|
|
jsr EndText
|
|
textOK anop
|
|
rts
|
|
|
|
HandTool entry
|
|
jsr HandCursor
|
|
rts
|
|
EraseTool entry
|
|
jsr EraseCursor
|
|
rts
|
|
SingleBTool entry
|
|
jsr CrossCursor
|
|
rts
|
|
DoubleBTool entry
|
|
jsr CrossCursor
|
|
rts
|
|
HatchBTool entry
|
|
jsr CrossCursor
|
|
rts
|
|
WedgeBTool entry
|
|
jsr CrossCursor
|
|
rts
|
|
MarqueeTool entry
|
|
jsr ArrowCursor
|
|
~InitCursor
|
|
rts
|
|
TextTool entry
|
|
jsr TextCursor
|
|
rts
|
|
DottedBTool entry
|
|
jsr CrossCursor
|
|
rts
|
|
TripleBTool entry
|
|
jsr CrossCursor
|
|
rts
|
|
WHatchTool entry
|
|
jsr CrossCursor
|
|
rts
|
|
CChainTool entry
|
|
jsr CrossCursor
|
|
rts
|
|
|
|
toolTable anop
|
|
*-------------------------------------------------
|
|
dc i2'HandTool' 0
|
|
dc i2'EraseTool' 1
|
|
dc i2'SingleBTool' 2
|
|
dc i2'DoubleBTool' 3
|
|
dc i2'HatchBTool' 4
|
|
dc i2'WedgeBTool' 5
|
|
dc i2'doCycloPropane' 6
|
|
dc i2'doCycloPentane' 7
|
|
dc i2'doCycloHexane' 8
|
|
dc i2'doBenzene' 9
|
|
dc i2'doSeat' 10
|
|
* --------------------------------------------
|
|
dc i2'MarqueeTool' 11
|
|
dc i2'TextTool' 12
|
|
dc i2'DottedBTool' 13
|
|
dc i2'TripleBTool' 14
|
|
dc i2'WHatchTool' 15
|
|
dc i2'CChainTool' 16
|
|
dc i2'doCycloButane' 17
|
|
dc i2'doCycloPentane2' 18
|
|
dc i2'doBenzene2' 19
|
|
dc i2'doWheeland' 20
|
|
dc i2'doBasin' 21
|
|
dc i2'Ignore' dummy
|
|
dc i2'Ignore' dummy
|
|
|
|
tmpPort ds 4
|
|
myPoint ds 4
|
|
theWindow ds 4
|
|
theHandle ds 4
|
|
|
|
testit ~SysBeep
|
|
rts
|
|
end
|