LIBGUI:more API...

This commit is contained in:
burniouf 2022-10-25 08:05:54 +02:00
parent f766b7add3
commit 41dad38140
20 changed files with 873 additions and 834 deletions

Binary file not shown.

Binary file not shown.

View File

@ -11,14 +11,19 @@ NEW
.INB inc/libgui.i .INB inc/libgui.i
.INB inc/fnt.i .INB inc/fnt.i
*-------------------------------------- *--------------------------------------
ZPPTR1 .EQ ZPBIN .DUMMY
ZPInputBufPtr .EQ ZPBIN+2 .OR ZPBIN
ZPInputTblPtr .EQ ZPBIN+4 ZS.START
ZPInputBMPtr .EQ ZPBIN+6 ZPPTR1 .BS 2
ZPCharBufPtr .EQ ZPBIN+8 ZPInputBufPtr .BS 2
ZPOutPutTblPtr .EQ ZPBIN+10 ZPInputTblPtr .BS 2
ZPOutPutCharOfs .EQ ZPBIN+12 ZPInputBMPtr .BS 2
ZPOutPutBufPtr .EQ ZPBIN+14 ZPCharBufPtr .BS 2
ZPOutPutTblPtr .BS 2
ZPOutPutCharOfs .BS 2
ZPOutPutBufPtr .BS 2
TmpWord .BS 2
ZS.END .ED
*-------------------------------------- *--------------------------------------
* File Header (16 Bytes) * File Header (16 Bytes)
*-------------------------------------- *--------------------------------------
@ -26,11 +31,12 @@ CS.START cld
jmp (.1,x) jmp (.1,x)
.DA #$61 6502,Level 1 (65c02) .DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1 .DA #1 BIN Layout Version 1
.DA 0 .DA #0 S.PS.F.EVENT
.DA CS.END-CS.START CS .DA #0
.DA DS.END-DS.START DS .DA CS.END-CS.START Code Size (without Constants)
.DA #64 SS .DA DS.END-DS.START Data Size
.DA #16 ZP .DA #64 Stack Size
.DA #ZS.END-ZS.START Zero Page Size
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
* Relocation Table * Relocation Table
@ -116,13 +122,17 @@ CS.INIT.OPENINPUT
>SYSCALL LoadFile >SYSCALL LoadFile
bcs CS.INIT.RTS bcs CS.INIT.RTS
>PUSHYA >STYA TmpWord
txa txa
>STA.G hInputBuf >STA.G hInputBuf
>SYSCALL GetMemPtr >SYSCALL GetMemPtr
>STYA ZPInputBufPtr >STYA ZPInputBufPtr
>LDYA L.MSG.FILE.OK
>SYSCALL PutS >PUSHW L.MSG.FILE.OK
>PUSHW TmpWord
>PUSHBI 2
>SYSCALL Printf
ldy #S.FNT.dfVersion ldy #S.FNT.dfVersion
lda (ZPInputBufPtr),y lda (ZPInputBufPtr),y
bne .99 bne .99
@ -134,28 +144,32 @@ CS.INIT.OPENINPUT
cmp #3 cmp #3
bne .99 bne .99
*--------------------------------------
.1 asl *2 = Entry Len in Tbl .1 asl *2 = Entry Len in Tbl
>STA.G FNT.Version >STA.G FNT.Version
pha pha
ldy #S.FNT.dfAscent
lda (ZPInputBufPtr),y >PUSHW L.MSG.HEADER.OK
>STA.G FON.Header+S.FON.Ascent
pla
>PUSHA >PUSHA
ldy #S.FNT.dfPixWidth
lda (ZPInputBufPtr),y
>STA.G FON.Header+S.FON.PixW
>PUSHA
ldy #S.FNT.dfPixHeight ldy #S.FNT.dfPixHeight
lda (ZPInputBufPtr),y lda (ZPInputBufPtr),y
>STA.G FON.Header+S.FON.PixH >STA.G FON.Header+S.FON.PixH
>PUSHA >PUSHA
ldy #S.FNT.dfPixWidth ldy #S.FNT.dfAscent
lda (ZPInputBufPtr),y lda (ZPInputBufPtr),y
>STA.G FON.Header+S.FON.PixW >STA.G FON.Header+S.FON.Ascent
>PUSHA
pla
>PUSHA >PUSHA
>LDYA L.MSG.HEADER.OK
>PUSHBI 4
>SYSCALL PrintF >SYSCALL PrintF
clc clc
rts rts
@ -185,9 +199,17 @@ CS.INIT.CREATEOUTPUT
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CS.RUN ldy #S.FNT.dfBreakChar CS.RUN >PUSHW L.MSG.RANGE
ldy #S.FNT.dfFirstChar
lda (ZPInputBufPtr),y lda (ZPInputBufPtr),y
>STA.G FON.Header+S.FON.Break >STA.G FON.Header+S.FON.First
>STA.G CharIndex
>PUSHA
ldy #S.FNT.dfLastChar
lda (ZPInputBufPtr),y
>STA.G FON.Header+S.FON.Last
>PUSHA >PUSHA
ldy #S.FNT.dfDefaultChar ldy #S.FNT.dfDefaultChar
@ -195,17 +217,12 @@ CS.RUN ldy #S.FNT.dfBreakChar
>STA.G FON.Header+S.FON.Default >STA.G FON.Header+S.FON.Default
>PUSHA >PUSHA
ldy #S.FNT.dfLastChar ldy #S.FNT.dfBreakChar
lda (ZPInputBufPtr),y lda (ZPInputBufPtr),y
>STA.G FON.Header+S.FON.Last >STA.G FON.Header+S.FON.Break
>PUSHA >PUSHA
ldy #S.FNT.dfFirstChar >PUSHBI 4
lda (ZPInputBufPtr),y
>STA.G FON.Header+S.FON.First
>STA.G CharIndex
>PUSHA
>LDYA L.MSG.RANGE
>SYSCALL PrintF >SYSCALL PrintF
>LDA.G FON.Header+S.FON.Last >LDA.G FON.Header+S.FON.Last
@ -239,10 +256,10 @@ CS.RUN ldy #S.FNT.dfBreakChar
adc (pData),y adc (pData),y
sta (pData),y sta (pData),y
sta ZPOutPutCharOfs+1 sta ZPOutPutCharOfs+1
>LEA.G FileOffset
>PUSHYA >PUSHB.G hOutputFile
>PUSHBI SYS.FSeek.SET >PUSHL.G FileOffset
>LDA.G hOutputFile >PUSHBI SEEK.SET
>SYSCALL FSeek >SYSCALL FSeek
bcc .1 bcc .1
@ -317,7 +334,7 @@ CS.RUN.LOOP >SLEEP
bcs .9 bcs .9
>LDYA L.MSG.DONE >LDYA L.MSG.DONE
>SYSCALL PrintF >SYSCALL PutS
lda #0 lda #0
sec sec
.9 rts .9 rts
@ -386,15 +403,13 @@ CS.RUN.GetChar lda (ZPInputTblPtr) Get Char PixW
*-------------------------------------- *--------------------------------------
* Dump ZPCharBufPtr : CharByteW x FON.Header+S.FON.PixH * Dump ZPCharBufPtr : CharByteW x FON.Header+S.FON.PixH
*-------------------------------------- *--------------------------------------
CS.RUN.DumpChar >LDA.G CharOutByteW CS.RUN.DumpChar >PUSHW L.MSG.DUMP
>PUSHA >PUSHB.G CharIndex
>LDA.G CharOutPixW >PUSHB.G CharOutPixW
>PUSHA >PUSHB.G CharOutByteW
>LDA.G CharIndex >PUSHBI 3
>PUSHA
>PUSHA
>LDYA L.MSG.DUMP
>SYSCALL PrintF >SYSCALL PrintF
lda ZPCharBufPtr lda ZPCharBufPtr
sta ZPPTR1 sta ZPPTR1
lda ZPCharBufPtr+1 lda ZPCharBufPtr+1
@ -683,9 +698,9 @@ CS.RUN.WriteByte
clc clc
bne .8 bne .8
>PUSHWI 256 >PUSHB.G hOutputFile
>PUSHW ZPOutPutBufPtr >PUSHW ZPOutPutBufPtr
>LDA.G hOutputFile >PUSHWI 256
>SYSCALL FWrite >SYSCALL FWrite
bcs .9 bcs .9
@ -703,11 +718,10 @@ CS.RUN.FlushOutPutBuf
>LDA.G OutPutPtr >LDA.G OutPutPtr
beq .8 beq .8
tay >PUSHB.G hOutputFile
lda #0
>PUSHYA
>PUSHW ZPOutPutBufPtr >PUSHW ZPOutPutBufPtr
>LDA.G hOutputFile >PUSHBI 0
>PUSHB.G OutPutPtr
>SYSCALL FWrite >SYSCALL FWrite
.8 rts .8 rts
*-------------------------------------- *--------------------------------------
@ -715,24 +729,30 @@ CS.RUN.WriteBMAndTbl
ldy #FileOffset ldy #FileOffset
ldx #4 ldx #4
lda #0 lda #0
.1 sta (pData),y .1 sta (pData),y
iny iny
dex dex
bne .1 bne .1
>LEA.G FileOffset >PUSHB.G hOutputFile
>PUSHYA >PUSHL.G FileOffset
>PUSHBI SYS.FSeek.SET >PUSHBI SEEK.SET
>LDA.G hOutputFile
>SYSCALL FSeek >SYSCALL FSeek
bcs .9 bcs .9
>PUSHWI S.FON >PUSHB.G hOutputFile
>PUSHEA.G FON.Header >PUSHEA.G FON.Header
>LDA.G hOutputFile >PUSHWI S.FON
>SYSCALL FWrite >SYSCALL FWrite
bcs .9 bcs .9
>PUSHB.G hOutputFile
>LDA.G hTblBuf
>SYSCALL GetMemPtr
>PUSHYA
>LDA.G FON.Header+S.FON.Last >LDA.G FON.Header+S.FON.Last
sec sec
>SBC.G FON.Header+S.FON.First >SBC.G FON.Header+S.FON.First
@ -744,11 +764,6 @@ CS.RUN.WriteBMAndTbl
ply ply
>PUSHYA >PUSHYA
>LDA.G hTblBuf
>SYSCALL GetMemPtr
>PUSHYA
>LDA.G hOutputFile
>SYSCALL FWrite >SYSCALL FWrite
clc clc
.9 rts .9 rts

View File

@ -144,33 +144,37 @@ S.WND.hCUR .EQ S.OBJ+16
* *
S.WND.TitleX1 .EQ S.OBJ+18 S.WND.TitleX1 .EQ S.OBJ+18
S.WND.TitleX2 .EQ S.OBJ+20 S.WND.TitleX2 .EQ S.OBJ+20
*
S.WND.TBarY1 .EQ S.OBJ+20
S.WND.TBarY2 .EQ S.OBJ+22 S.WND.TBarY2 .EQ S.OBJ+22
S.WND.MBarY1 .EQ S.OBJ+22 S.WND.MBarY1 .EQ S.OBJ+22
S.WND.MBarY2 .EQ S.OBJ+24 S.WND.MBarY2 .EQ S.OBJ+24
S.WND.InnerY1 .EQ S.OBJ+24 S.WND.InnerY1 .EQ S.OBJ+26
S.WND.InnerY2 .EQ S.OBJ+26 S.WND.InnerY2 .EQ S.OBJ+28
S.WND.SBarY1 .EQ S.OBJ+26 S.WND.SBarY1 .EQ S.OBJ+28
S.WND.InnerW .EQ S.OBJ+28
S.WND.InnerH .EQ S.OBJ+30 S.WND.InnerW .EQ S.OBJ+32
S.WND.DocW .EQ S.OBJ+32 S.WND.InnerH .EQ S.OBJ+34
S.WND.DocH .EQ S.OBJ+34 S.WND.DocW .EQ S.OBJ+36
S.WND.DocX .EQ S.OBJ+36 S.WND.DocH .EQ S.OBJ+38
S.WND.DocY .EQ S.OBJ+38 S.WND.DocX .EQ S.OBJ+40
S.WND.fPaint .EQ S.OBJ+40 S.WND.DocY .EQ S.OBJ+42
S.WND.fPaint .EQ S.OBJ+44
* *
S.WND .EQ S.OBJ+42 S.WND .EQ S.OBJ+46
*-------------------------------------- *--------------------------------------
S.MBAR.Selected .EQ S.OBJ S.MBAR.Items .EQ S.OBJ
S.MBAR.Items .EQ S.OBJ+2
* *
*-------------------------------------- *--------------------------------------
S.MBITEM.X1 .EQ 0 S.MBITEM.T .EQ 0
S.MBITEM.XT .EQ 2 S.MBITEM.T.SUBMENU .EQ 6
S.MBITEM.X2 .EQ 4 S.MBITEM.S .EQ 1
S.MBITEM.pTEXT .EQ 6 S.MBITEM.S.SELECTED .EQ %10000000
S.MBITEM.pMENU .EQ 8 S.MBITEM.W .EQ 2
S.MBITEM.pTEXT .EQ 4
S.MBITEM.pMENU .EQ 6
* *
S.MBITEM .EQ 10 S.MBITEM .EQ 8
*-------------------------------------- *--------------------------------------
S.MENU.hSAVEBUF .EQ S.OBJ+0 S.MENU.hSAVEBUF .EQ S.OBJ+0
S.MENU.iW .EQ S.OBJ+2 S.MENU.iW .EQ S.OBJ+2

View File

@ -3,6 +3,7 @@ NEW
#define C_BLACK 0 #define C_BLACK 0
#define C_WHITE 255 #define C_WHITE 255
#define pC_WHITE ((void *)255)
#define PTR_T_ARROW 0 #define PTR_T_ARROW 0
#define PTR_T_MOVE 2 #define PTR_T_MOVE 2

View File

@ -3,9 +3,10 @@ NEW
*-------------------------------------- *--------------------------------------
hSYSFON .BS 1 hSYSFON .BS 1
hSYSFONB .BS 1 hSYSFONB .BS 1
SYSFON.H .BS 1
SYSFON.Hp2 .BS 1
SYSFON.Hm1 .BS 1 SYSFON.Hm1 .BS 1
SYSFON.H .BS 1
SYSFON.Hp1 .BS 1
SYSFON.Hp2 .BS 1
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE usr/src/lib/libgui.g.fon SAVE usr/src/lib/libgui.g.fon

View File

@ -22,6 +22,14 @@ CB.GetInCache >STYA .1+1
rts rts
*-------------------------------------- *--------------------------------------
CB.GetWndYCacheX
lda (ZPWNDPtr),y
sta CB.Cache,x
iny
lda (ZPWNDPtr),y
sta CB.Cache+1,x
rts
*--------------------------------------
CB.GetBuf clc CB.GetBuf clc
ldx hCBBuf ldx hCBBuf
@ -32,7 +40,6 @@ CB.GetBuf clc
bcs .9 bcs .9
stx hCBBuf stx hCBBuf
>STYA ZPCBPtr
>STYA ZPCBBufPtr >STYA ZPCBBufPtr
.9 rts .9 rts
@ -71,16 +78,20 @@ CB.FlushBufToYA ldx hCBBuf
.1 lda #0 .1 lda #0
sta (ZPCBBufPtr) sta (ZPCBBufPtr)
lda hCBBuf
>SYSCALL2 GetMemPtr
>STYA ZPCBBufPtr
ply ply
pla pla
jsr OBJ.GetInCache jsr OBJ.GetInCache
.2 lda (ZPCBPtr) .2 lda (ZPCBBufPtr)
beq .7 beq .7
>LDYA ZPCBPtr >LDYA ZPCBBufPtr
jsr CB.GetInCache A = CB.CMD jsr CB.GetInCache A = CB.CMD
cmp #S.CB.CMD.DRAWTEXT2 cmp #S.CB.CMD.DRAWTEXT2
@ -105,16 +116,16 @@ CB.FlushBufToYA ldx hCBBuf
jsr CB.GFXWrite jsr CB.GFXWrite
.5 lda (ZPCBPtr) Get Cmd .5 lda (ZPCBBufPtr) Get Cmd
lsr lsr
tax tax
lda CB.CmdLen-1,x lda CB.CmdLen-1,x
sec +1 sec +1
adc ZPCBPtr adc ZPCBBufPtr
sta ZPCBPtr sta ZPCBBufPtr
bcc .2 bcc .2
inc ZPCBPtr+1 inc ZPCBBufPtr+1
bra .2 bra .2
.7 lda hCBBuf .7 lda hCBBuf

View File

@ -365,10 +365,7 @@ DRAW.YAText >STYA CB.Cache+S.CB.TxtPtr
bra DRAW.Text bra DRAW.Text
*-------------------------------------- *--------------------------------------
DRAW.YATextAtDXDY DRAW.YATextAtDXDY
phx
jsr CB.ClearCache
>STYA CB.Cache+S.CB.TxtPtr >STYA CB.Cache+S.CB.TxtPtr
plx
stx CB.Cache+S.CB.hFont stx CB.Cache+S.CB.hFont
ldx #3 ldx #3

View File

@ -21,6 +21,7 @@ FON.Init >LDYA L.SYSX7
inc inc
sta SYSFON.H sta SYSFON.H
inc inc
sta SYSFON.Hp1
inc inc
sta SYSFON.Hp2 sta SYSFON.Hp2

View File

@ -3,132 +3,236 @@ NEW
*-------------------------------------- *--------------------------------------
* Y,A = MBAR definition * Y,A = MBAR definition
*-------------------------------------- *--------------------------------------
MBAR.New >STYA ZPMENUPtr MBAR definition MBAR.New >STYA ZPPtr1 MBAR definition
>STYA ZPPtr1 for pass #2 >STYA ZPObjPtr for pass #2
lda #S.MBAR.Items+1 Ending\0 jsr MBAR.GetSize
sta Counter
stz Counter+1
.10 lda (ZPMENUPtr)
beq .3
ldy #$ff
.1 iny
lda (ZPMENUPtr),y
bne .1
tya
sec text Ending\0
inc
inc skip pMENU
adc ZPMENUPtr
sta ZPMENUPtr
bcc .2
inc ZPMENUPtr+1
.2 tya
sec
adc #S.MBITEM
adc Counter
sta Counter
bcc .10
inc Counter+1
bra .10
.3 >LDYA Counter
>SYSCALL2 GetMem >SYSCALL2 GetMem
bcs .9 bcs .9
>STYA ZPObjPtr >STYA ZPMENUPtr
phx hMBAR phx hMBAR
ldy #S.OBJ-1
lda #S.OBJ.T.MBAR lda #S.OBJ.T.MBAR
jsr OBJ.Init sta (ZPMENUPtr) S.OBJ.T
lda #S.MBAR.Items lda #0
ldy #S.MBAR.Items-1
.1 sta (ZPMENUPtr),y
dey
bne .1
>LDYA ZPObjPtr
>STYA ZPPtr1 MENU definition
jsr MBAR.GetData
pla hMBAR
clc clc
adc ZPObjPtr .9 rts
sta ZPObjPtr *--------------------------------------
bcc .4 * ZPPtr1 = defintion
*--------------------------------------
inc ZPObjPtr+1 MBAR.GetSize lda #S.MBAR.Items+1 Ending\0
sta Counter
.4 stz DX stz Counter+1
stz DX+1
.1 lda (ZPPtr1)
.5 lda (ZPPtr1)
beq .8 beq .8
>LDYA DX ldy #$ff
jsr OBJ.AddWord S.MBITEM.X1
lda DX .2 iny
lda (ZPPtr1),y
bne .2
tya
sec text Ending\0
inc
inc skip pMENU
jsr SkipAPtr1
lda #S.MBITEM
clc clc
adc PREFS.MBARXMARGIN adc Counter
sta DX sta Counter
bcc .6 bcc .1
sta DX+1 inc Counter+1
bra .1
.6 >LDYA DX .8 >LDYA Counter
jsr OBJ.AddWord S.MBITEM.XT rts
*--------------------------------------
* ZPPtr1 = defintion
* ZPMENUPtr = DstBuf
*--------------------------------------
MBAR.GetData lda ZPMENUPtr
clc
adc #S.MBAR.Items
sta ZPMENUPtr
bcc .1
inc ZPMENUPtr+1
.1 lda (ZPPtr1)
beq .8
lda #S.MBITEM.T.SUBMENU
jsr MBAR.AddByte
lda #0 S.MBITEM.S
jsr MBAR.AddByte
>LDYA ZPPtr1 pTEXT >LDYA ZPPtr1 pTEXT
ldx hSYSFON ldx hSYSFON
jsr FON.GetTextSize jsr FON.GetTextSize
lda DX lda PREFS.MBarXMargin
asl x2
clc clc
adc CB.CACHE+S.CB.SrcW adc CB.CACHE+S.CB.SrcW
sta DX tay
lda DX+1 lda #0
adc CB.CACHE+S.CB.SrcW+1 adc CB.CACHE+S.CB.SrcW+1
sta DX+1 jsr MBAR.AddWord S.MBITEM.W
>LDYA DX
jsr OBJ.AddWord S.MBITEM.X2
>LDYA ZPPtr1 pTEXT >LDYA ZPPtr1 pTEXT
jsr OBJ.AddWord jsr MBAR.AddWord
jsr SkipStrZPtr1 skip "TEXT\0" jsr SkipStrZPtr1 skip "TEXT\0"
ldy #1 ldy #1
lda (ZPPtr1),y lda (ZPPtr1),y
jsr OBJ.AddByte pMENU+1 jsr MBAR.AddByte pMENU+1
lda (ZPPtr1) lda (ZPPtr1)
jsr OBJ.AddByte pMENU jsr MBAR.AddByte pMENU
lda ZPPtr1 lda #2
clc jsr SkipAPtr1 stkip pMENU
adc #2 bra .1
sta ZPPtr1
bcc .5 .8 sta (ZPMENUPtr)
rts
inc ZPPtr1+1 *--------------------------------------
bra .5 stkip pMENU MBAR.AddWord pha
.8 pla hMBAR tya
clc jsr MBAR.AddByte
pla
MBAR.AddByte sta (ZPMENUPtr)
inc ZPMENUPtr
bne .8
inc ZPMENUPtr+1
.8 rts
*--------------------------------------
* ZPWNDPtr parent WND
* MSG.X1, MSG.Y1
*--------------------------------------
MBAR.Enter ldy #S.WND.pMBAR
lda (ZPWNDPtr),y
>SYSCALL2 GetMemPtr
>STYA ZPMENUPtr pMBAR
jsr MBAR.GetMBItems
ldy #S.OBJ.X1
ldx #S.CB.X1
jsr CB.GetWndYCacheX
.1 lda (ZPPtr1)
beq .8
jsr MBAR.SetX2
lda MSG+S.MSG.X1
cmp CB.Cache+S.CB.X1
lda MSG+S.MSG.X1+1
sbc CB.Cache+S.CB.X1+1
bcc .7
lda CB.Cache+S.CB.X2
cmp MSG+S.MSG.X1
lda CB.Cache+S.CB.X2+1
sbc MSG+S.MSG.X1+1
bcc .7
* >DEBUG
ldy #S.MBITEM.S
lda (ZPPtr1),y
ora #S.MBITEM.S.SELECTED
sta (ZPPtr1),y
jsr MENU.DestroyAll
jsr CB.GetBuf
bcs .9
jsr MBAR.DrawMBItem
>LDYA L.WND.Screen
jmp CB.FlushBufToYA
.7 lda CB.Cache+S.CB.X2
sta CB.Cache+S.CB.X1
lda CB.Cache+S.CB.X2+1
sta CB.Cache+S.CB.X1+1
lda #S.MBITEM
jsr SkipAPtr1
bra .1
.8 clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
*-------------------------------------- MBAR.Leave
clc
rts
*-------------------------------------- *--------------------------------------
* ZPWNDPtr = parent WND * ZPWNDPtr = parent WND
*-------------------------------------- *--------------------------------------
MBAR.Paint lda #S.CB.CMD.FILLRECT MBAR.Draw >SYSCALL2 GetMemPtr
jsr CB.InitCacheA >STYA ZPMENUPtr pMBAR
ldy #S.OBJ.X1
ldx #S.CB.X1
jsr CB.GetWndYCacheX
jsr MBAR.GetMBItems
.1 lda (ZPPtr1)
beq .8
jsr MBAR.SetX2
jsr MBAR.DrawMBItem
bcs .9
lda CB.Cache+S.CB.X2
sta CB.Cache+S.CB.X1
lda CB.Cache+S.CB.X2+1
sta CB.Cache+S.CB.X1+1
lda #S.MBITEM
jsr SkipAPtr1
bra .1
.8 clc
.9 rts
*--------------------------------------
MBAR.DrawMBItem lda #S.CB.CMD.FILLRECT
sta CB.Cache+S.CB.CMD
lda #S.CB.OP.SET lda #S.CB.OP.SET
sta CB.Cache+S.CB.OP sta CB.Cache+S.CB.OP
@ -136,123 +240,86 @@ MBAR.Paint lda #S.CB.CMD.FILLRECT
lda #S.CB.M.MONO lda #S.CB.M.MONO
sta CB.Cache+S.CB.M sta CB.Cache+S.CB.M
lda PREFS.MBARCOLOR ldy #S.MBITEM.S
sta CB.Cache+S.CB.COLOR lda (ZPPtr1),y
asl
lda PREFS.MBarColor
bcc .1
eor #$ff
ldy #S.OBJ.X1 .1 sta CB.Cache+S.CB.COLOR
lda (ZPWNDPtr),y
jsr MBAR.SetY1Y2
jsr CB.Cache2CBBuf
lda PREFS.MBarXMargin
clc
adc CB.Cache+S.CB.X1
sta CB.Cache+S.CB.X1 sta CB.Cache+S.CB.X1
bcc .10
inc CB.Cache+S.CB.X1+1
.10 inc CB.Cache+S.CB.Y1
bne .11
inc CB.Cache+S.CB.Y1+1
.11 ldy #S.MBITEM.S
lda (ZPPtr1),y
asl
ldy #S.MBITEM.pTEXT
lda (ZPPtr1),y
pha
iny iny
lda (ZPWNDPtr),y lda (ZPPtr1),y
sta CB.Cache+S.CB.X1+1 ply
ldx hSYSFON
jsr DRAW.YAText
jmp CB.Cache2CBBuf
*--------------------------------------
MBAR.GetMBItems lda ZPMENUPtr
clc
adc #S.MBAR.Items
sta ZPPtr1
ldy #S.OBJ.X2 lda ZPMENUPtr+1
lda (ZPWNDPtr),y adc /S.MBAR.Items
sta ZPPtr1+1
rts
*--------------------------------------
MBAR.SetX2 lda CB.Cache+S.CB.X1
clc
ldy #S.MBITEM.W
adc (ZPPtr1),y
sta CB.Cache+S.CB.X2 sta CB.Cache+S.CB.X2
lda CB.Cache+S.CB.X1+1
iny iny
lda (ZPWNDPtr),y adc (ZPPtr1),y
sta CB.Cache+S.CB.X2+1 sta CB.Cache+S.CB.X2+1
ldy #S.WND.MBarY1 rts
*--------------------------------------
MBAR.SetY1Y2 ldy #S.WND.MBarY1
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
sta CB.Cache+S.CB.Y1 sta CB.Cache+S.CB.Y1
iny iny
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
sta CB.Cache+S.CB.Y1+1 sta CB.Cache+S.CB.Y1+1
iny #S.WND.MBarY2 ldy #S.WND.MBarY2
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
sta CB.Cache+S.CB.Y2 sta CB.Cache+S.CB.Y2
iny iny
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
sta CB.Cache+S.CB.Y2+1 sta CB.Cache+S.CB.Y2+1
jsr CB.Cache2CBBuf
ldy #S.WND.pMBAR
lda (ZPWNDPtr),y
sta ZPMENUPtr
iny
lda (ZPWNDPtr),y
sta ZPMENUPtr+1
.1 lda (ZPMENUPtr)
beq .8
jsr CB.ClearCache
lda #S.CB.CMD.DRAWTEXT2
sta CB.CACHE+S.CB.CMD
lda #S.CB.OP.SET+S.CB.OP.INVERSE
sta CB.Cache+S.CB.OP
lda #S.CB.M.MONO
sta CB.Cache+S.CB.M
lda hSYSFON
sta CB.CACHE+S.CB.hFont
ldy #S.MBITEM.XT
lda (ZPMENUPtr),y
clc
ldy #S.OBJ.X1
adc (ZPWNDPtr),y
sta CB.CACHE+S.CB.X1
ldy #S.MBITEM.XT+1
lda (ZPMENUPtr),y
ldy #S.OBJ.X1+1
adc (ZPWNDPtr),y
sta CB.CACHE+S.CB.X1+1
ldy #S.WND.MBarY1
lda (ZPWNDPtr),y
clc
adc #1
sta CB.CACHE+S.CB.Y1
iny
lda (ZPWNDPtr),y
adc #0
sta CB.CACHE+S.CB.Y1+1
lda #S.MBITEM.pTEXT
clc
adc ZPMENUPtr
sta CB.CACHE+S.CB.TxtPtr
lda #0
adc ZPMENUPtr+1
sta CB.CACHE+S.CB.TxtPtr+1
jsr CB.Cache2CBBuf
lda (ZPMENUPtr)
clc
adc ZPMENUPtr
sta ZPMENUPtr
bcc .1
inc ZPMENUPtr+1
bra .1
.8 clc
rts
*--------------------------------------
* ZPWNDPtr parent WND
* MSG.X1, MSG.Y1
*--------------------------------------
MBAR.Enter
* >DEBUG
*--------------------------------------
MBAR.Leave
clc
rts rts
*-------------------------------------- *--------------------------------------
MAN MAN

11
LIB/LIBGUI.S.MBOX.txt Normal file
View File

@ -0,0 +1,11 @@
NEW
AUTO 3,1
*--------------------------------------
* MsgBox(hWND, pTITLE, pTEXT, pBM, iButtons)
*--------------------------------------
*--------------------------------------
MAN
SAVE usr/src/lib/libgui.s.mbox
LOAD usr/src/lib/libgui.s
ASM

View File

@ -9,8 +9,8 @@ MENU.New >PULLW DY
>STYA ZPPtr1 MENU definition >STYA ZPPtr1 MENU definition
>STYA ZPObjPtr for pass #2 >STYA ZPObjPtr for pass #2
ldy MENU.Stack.Cnt ldx MENU.Stack.Cnt
cpy #MENU.MAX cpx #MENU.MAX
beq .90 beq .90
jsr MENU.GetSize jsr MENU.GetSize
@ -65,7 +65,7 @@ MENU.New >PULLW DY
.90 lda #E.OOH .90 lda #E.OOH
sec sec
.99 .99
MENU.New.RTS rts MENU.New.RTS rts
*-------------------------------------- *--------------------------------------
* ZPPtr1 = defintion * ZPPtr1 = defintion
@ -73,7 +73,7 @@ MENU.New.RTS rts
MENU.GetSize lda #S.MENU.Items+1 Ending\0 MENU.GetSize lda #S.MENU.Items+1 Ending\0
sta Counter sta Counter
stz Counter+1 stz Counter+1
.1 lda (ZPPtr1) .1 lda (ZPPtr1)
beq .8 beq .8
@ -82,19 +82,19 @@ MENU.GetSize lda #S.MENU.Items+1 Ending\0
adc Counter adc Counter
sta Counter sta Counter
bcc .2 bcc .2
inc Counter+1 inc Counter+1
.2 lda (ZPPtr1) .2 lda (ZPPtr1)
cmp #S.MITEM.T.SEP cmp #S.MITEM.T.SEP
bne .3 bne .3
inc ZPPtr1 inc ZPPtr1
bne .1 bne .1
inc ZPPtr1+1 inc ZPPtr1+1
bra .1 bra .1
.3 cmp #S.MITEM.T.ITEM .3 cmp #S.MITEM.T.ITEM
bne .4 bne .4
@ -120,23 +120,23 @@ MENU.GetData lda ZPMENUPtr
bcc .1 bcc .1
inc ZPMENUPtr+1 inc ZPMENUPtr+1
.1 lda (ZPPtr1) .1 lda (ZPPtr1)
sta (ZPMENUPtr) sta (ZPMENUPtr)
beq .8 beq .8
cmp #S.MITEM.T.SEP cmp #S.MITEM.T.SEP
bne .2 bne .2
inc ZPPtr1 skip 1 byte inc ZPPtr1 skip 1 byte
bne .5 bne .5
inc ZPPtr1+1 inc ZPPtr1+1
bra .5 bra .5
*-------------------------------------- *--------------------------------------
.2 cmp #S.MITEM.T.ITEM .2 cmp #S.MITEM.T.ITEM
bne .3 bne .3
ldy #1 T+ID+KEMOD+KEY+pICON+"text" ldy #1 T+ID+KEMOD+KEY+pICON+"text"
lda (ZPPtr1),y lda (ZPPtr1),y
ldy #S.MITEM.ID ldy #S.MITEM.ID
@ -147,7 +147,7 @@ MENU.GetData lda ZPMENUPtr
tax tax
iny iny
lda (ZPPtr1),y lda (ZPPtr1),y
ldy #S.MITEM.KEYMOD+1 ldy #S.MITEM.KEYMOD+1
sta (ZPMENUPtr),y sta (ZPMENUPtr),y
dey KEY dey KEY
@ -156,7 +156,7 @@ MENU.GetData lda ZPMENUPtr
lda #4 lda #4
bra .4 skip 4 bytes bra .4 skip 4 bytes
*-------------------------------------- *--------------------------------------
.3 ldy #1 skip T+pMENU+pICON+"text" .3 ldy #1 skip T+pMENU+pICON+"text"
lda (ZPPtr1),y lda (ZPPtr1),y
tax tax
@ -169,7 +169,7 @@ MENU.GetData lda ZPMENUPtr
txa txa
sta (ZPMENUPtr),y sta (ZPMENUPtr),y
lda #3 skip 3 bytes lda #3 skip 3 bytes
.4 jsr SkipAPtr1 .4 jsr SkipAPtr1
ldy #1 ldy #1
@ -179,29 +179,29 @@ MENU.GetData lda ZPMENUPtr
dey dey
lda (ZPPtr1) lda (ZPPtr1)
sta (ZPMENUPtr),y sta (ZPMENUPtr),y
lda #2 skip pICON lda #2 skip pICON
jsr SkipAPtr1 jsr SkipAPtr1
ldy #S.MITEM.pTEXT ldy #S.MITEM.pTEXT
lda ZPPtr1 lda ZPPtr1
sta (ZPMENUPtr),y sta (ZPMENUPtr),y
iny iny
lda ZPPtr1+1 lda ZPPtr1+1
sta (ZPMENUPtr),y sta (ZPMENUPtr),y
jsr SkipStrZPtr1 skip "TEXT\0" jsr SkipStrZPtr1 skip "TEXT\0"
ldy #S.MITEM.S ldy #S.MITEM.S
lda #0 lda #0
sta (ZPMENUPtr),y sta (ZPMENUPtr),y
.5 lda ZPMENUPtr .5 lda ZPMENUPtr
clc clc
adc #S.MITEM adc #S.MITEM
sta ZPMENUPtr sta ZPMENUPtr
bcc .1 bcc .1
inc ZPMENUPtr+1 inc ZPMENUPtr+1
bra .1 bra .1
@ -418,7 +418,21 @@ MENU.FindMItemByID
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
MENU.Enter jsr MENU.GetDXDYW MENU.Enter jsr MENU.GetDXDY
stz D
stz D+1
ldy #S.OBJ.X2
lda DX X1
clc
adc (ZPMENUPtr),y
sta IE IE = X2
iny
lda DX+1
adc (ZPMENUPtr),y
sta IE+1
jsr MENU.GetMItems jsr MENU.GetMItems
@ -429,8 +443,8 @@ MENU.Enter jsr MENU.GetDXDYW
beq .2 beq .2
lda DY Y1 lda DY Y1
sec clc
adc SYSFON.H adc SYSFON.Hp2
sta INE INE = Y2 sta INE INE = Y2
lda DY+1 lda DY+1
adc #0 adc #0
@ -443,192 +457,129 @@ MENU.Enter jsr MENU.GetDXDYW
ldy #S.MITEM.S ldy #S.MITEM.S
lda (ZPPtr1),y lda (ZPPtr1),y
bpl .2 bpl .2
eor #S.MITEM.S.SELECTED eor #S.MITEM.S.SELECTED
sta (ZPPtr1),y was selected before... sta (ZPPtr1),y was selected before...
jsr CB.GetBuf jsr CB.GetBuf
bcs .9 bcs .9
jsr MENU.ResetX1Y1X2
jsr MENU.DrawMItem jsr MENU.DrawMItem
.2 jsr MENU.NextMItemDY .2 jsr MENU.NextMItemDY
bra .1 bra .1
*--------------------------------------
.3 ldy #S.MITEM.S .3 ldy #S.MITEM.S
lda (ZPPtr1),y lda (ZPPtr1),y
bmi .8 already selected, nothing to do bmi .5 already selected, nothing to do
>DEBUG
eor #S.MITEM.S.SELECTED eor #S.MITEM.S.SELECTED
sta (ZPPtr1),y sta (ZPPtr1),y
jsr CB.GetBuf jsr CB.GetBuf
bcs .9 bcs .9
jsr MENU.ResetX1Y1X2
jsr MENU.DrawMItem jsr MENU.DrawMItem
lda (ZPPtr1) .30 ldx MENU.Stack.Idx
inx
cpx MENU.Stack.Cnt
beq .31
jsr MENU.Destroy
bra .30
.31 lda (ZPPtr1)
cmp #S.MITEM.T.SUBMENU cmp #S.MITEM.T.SUBMENU
bne .1 bne .2
* >LDYA L.WND.Screen ldy #S.MITEM.pMENU
* jsr CB.FlushBufToYA lda (ZPPtr1),y
sta D
iny
lda (ZPPtr1),y
sta D+1
* jsr MENU.NewSubMenu lda DY
* bcs .9 sta Counter
lda DY+1
bra .1 sta Counter+1
bra .2
*--------------------------------------
.8 clc
.9 rts
*--------------------------------------
.4 >LDYA L.WND.Screen .4 >LDYA L.WND.Screen
jmp CB.FlushBufToYA jsr CB.FlushBufToYA
lda MSG+S.MSG.S lda D
ora D+1
beq .5
>PUSHW D pMENU
ldy #S.OBJ.X2+1
lda (ZPMENUPtr),y
>PUSHA
dey
lda (ZPMENUPtr),y
>PUSHA
>PUSHW Counter
jsr MENU.New
bcs .9
jmp MENU.Draw
*--------------------------------------
.5 lda MSG+S.MSG.S
bit #S.MSG.S.CLK bit #S.MSG.S.CLK
beq .8 beq .8
lda #S.MSG.T.ID lda #S.MSG.T.ID
sta MSG+S.MSG.T sta MSG+S.MSG.T
ldy #S.MITEM.ID ldy #S.MITEM.ID
lda (ZPPtr1),y lda (ZPPtr1),y
sta MSG+S.MSG.ID sta MSG+S.MSG.ID
jmp MENU.DestroyAll jmp MENU.DestroyAll
.8 clc
.9 rts
*--------------------------------------
MENU.NewSubMenu lda DX
clc
adc Counter W
sta DX
lda DX+1
adc Counter+1
sta DX+1
ldy #S.MITEM.pMENU+1
lda (ZPPtr1),y
>PUSHA
dey
lda (ZPPtr1),y
>PUSHA
>PUSHW DX X1
>PUSHW DY Y1
jsr MENU.New
bcs .9
pha hMENU
jsr MENU.Draw
plx
bcs .9
txa
.9 rts
*-------------------------------------- *--------------------------------------
* DrawMenu(hMENU) * DrawMenu(hMENU)
*-------------------------------------- *--------------------------------------
MENU.Draw >SYSCALL2 GetMemPtr MENU.Draw >SYSCALL2 GetMemPtr
>STYA ZPMENUPtr >STYA ZPMENUPtr
jsr MENU.Save jsr MENU.Save
bcs .9 bcs .9
jsr CB.GetBuf jsr CB.GetBuf
bcs .9 bcs .9
jsr MENU.DrawBorders >LDYA ZPMENUPtr
ldx #0
jsr OBJ.DrawBorders
jsr MENU.GetDXDYW jsr MENU.GetDXDY
jsr MENU.GetMItems jsr MENU.GetMItems
.1 lda (ZPPtr1) .1 lda (ZPPtr1)
beq .8 beq .8
jsr MENU.ResetX1Y1X2
jsr MENU.DrawMItem jsr MENU.DrawMItem
jsr MENU.NextMItemDY jsr MENU.NextMItemDY
bra .1 bra .1
.8 >LDYA L.WND.Screen .8 >LDYA L.WND.Screen
jsr CB.FlushBufToYA jmp CB.FlushBufToYA
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
MENU.DrawBorders MENU.DrawMItem jsr MENU.ResetX1Y1X2
lda #S.CB.CMD.HLINE
jsr CB.InitCacheA
lda #S.CB.OP.SET lda (ZPPtr1)
sta CB.Cache+S.CB.OP
lda #S.CB.M.MONO
sta CB.Cache+S.CB.M
lda PREFS.BORDERCOLOR
sta CB.Cache+S.CB.COLOR
ldy #S.OBJ.X2+1
ldx #5
.1 lda (ZPMENUPtr),y
sta CB.Cache+S.CB.X1,x
dey
dex
bpl .1
lda CB.Cache+S.CB.Y1
sta CB.Cache+S.CB.Y2
lda CB.Cache+S.CB.Y1+1
sta CB.Cache+S.CB.Y2+1 top X1,Y1,X2,Y1
jsr CB.Cache2CBBuf
ldy #S.OBJ.Y2
lda (ZPMENUPtr),y
sta CB.Cache+S.CB.Y1
sta CB.Cache+S.CB.Y2
iny
lda (ZPMENUPtr),y
sta CB.Cache+S.CB.Y1+1
sta CB.Cache+S.CB.Y2+1 bottom X1,Y2,X2,Y2
jsr CB.Cache2CBBuf
lda #S.CB.CMD.VLINE
sta CB.Cache+S.CB.CMD
ldy #S.OBJ.Y1
lda (ZPMENUPtr),y
sta CB.Cache+S.CB.Y1
iny
lda (ZPMENUPtr),y
sta CB.Cache+S.CB.Y1+1
lda CB.Cache+S.CB.X1
sta CB.Cache+S.CB.X2
lda CB.Cache+S.CB.X1+1
sta CB.Cache+S.CB.X2+1 left X1,Y1,X1,Y2
jsr CB.Cache2CBBuf
ldy #S.OBJ.X2
lda (ZPMENUPtr),y
sta CB.Cache+S.CB.X1
sta CB.Cache+S.CB.X2
iny
lda (ZPMENUPtr),y
sta CB.Cache+S.CB.X1+1
sta CB.Cache+S.CB.X2+1 right X2,Y1,X2,Y2
jmp CB.Cache2CBBuf
*--------------------------------------
MENU.DrawMItem lda (ZPPtr1)
cmp #S.MITEM.T.SEP cmp #S.MITEM.T.SEP
bne MENU.DrawMItem1 bne MENU.DrawMItem1
@ -639,7 +590,7 @@ MENU.DrawMItem lda (ZPPtr1)
lda #S.CB.M.MONO lda #S.CB.M.MONO
sta CB.Cache+S.CB.M sta CB.Cache+S.CB.M
lda PREFS.BORDERCOLOR lda PREFS.BorderColor
sta CB.Cache+S.CB.COLOR sta CB.Cache+S.CB.COLOR
jmp CB.Cache2CBBuf jmp CB.Cache2CBBuf
@ -651,7 +602,7 @@ MENU.DrawMItem1 lda #S.CB.CMD.FILLRECT
lda #S.CB.M.MONO lda #S.CB.M.MONO
sta CB.Cache+S.CB.M sta CB.Cache+S.CB.M
ldx PREFS.MENUCOLOR ldx PREFS.MenuColor
jsr MENU.IsSelected jsr MENU.IsSelected
bcc .15 bcc .15
@ -661,13 +612,12 @@ MENU.DrawMItem1 lda #S.CB.CMD.FILLRECT
.15 stx CB.Cache+S.CB.COLOR .15 stx CB.Cache+S.CB.COLOR
lda DY lda CB.Cache+S.CB.Y1
sta CB.Cache+S.CB.Y1
sec sec
adc SYSFON.H adc SYSFON.H
sta CB.Cache+S.CB.Y2 sta CB.Cache+S.CB.Y2
lda DY+1
sta CB.Cache+S.CB.Y1+1 lda CB.Cache+S.CB.Y1+1
adc #0 adc #0
sta CB.Cache+S.CB.Y2+1 sta CB.Cache+S.CB.Y2+1
jsr CB.Cache2CBBuf jsr CB.Cache2CBBuf
@ -695,7 +645,6 @@ MENU.DrawMItem1 lda #S.CB.CMD.FILLRECT
ldy #S.MENU.iW ldy #S.MENU.iW
adc (ZPMENUPtr),y adc (ZPMENUPtr),y
sta CB.Cache+S.CB.X1 sta CB.Cache+S.CB.X1
bcc .21 bcc .21
inc CB.Cache+S.CB.X1+1 inc CB.Cache+S.CB.X1+1
@ -719,7 +668,7 @@ MENU.DrawMItem1 lda #S.CB.CMD.FILLRECT
lda (ZPPtr1) lda (ZPPtr1)
cmp #S.MITEM.T.ITEM cmp #S.MITEM.T.ITEM
bne .3 bne .3
jsr MENU.GetKeyString jsr MENU.GetKeyString
bcs .3 bcs .3
@ -781,7 +730,7 @@ MENU.IsSelected phy
rts rts
*-------------------------------------- *--------------------------------------
MENU.GetText ldy #S.MITEM.pTEXT MENU.GetText ldy #S.MITEM.pTEXT
lda (ZPPtr1),y lda (ZPPtr1),y
pha pha
iny iny
@ -802,10 +751,10 @@ MENU.GetKeyString
lda (ZPPtr1),y lda (ZPPtr1),y
beq .3 beq .3
bit #KEYMOD.CTRL bit #KEYMOD.CTRL
beq .1 beq .1
ldy #KEYMOD.S.CTRL ldy #KEYMOD.S.CTRL
jsr .4 jsr .4
@ -817,7 +766,7 @@ MENU.GetKeyString
.2 bit #KEYMOD.CA .2 bit #KEYMOD.CA
beq .3 beq .3
ldy #KEYMOD.S.CA ldy #KEYMOD.S.CA
jsr .4 jsr .4
@ -835,7 +784,7 @@ MENU.GetKeyString
.5 lda KEYMOD.S,y .5 lda KEYMOD.S,y
sta TEXTBUF,x sta TEXTBUF,x
beq .6 beq .6
inx inx
iny iny
bra .5 bra .5
@ -893,83 +842,7 @@ MENU.Save lda #S.CB.CMD.GETRECTBUFSIZE
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
MENU.DestroyAll sec MENU.GetDXDY ldy #S.OBJ.X1
.HS 90 BCC
MENU.Destroy clc
ldx MENU.Stack.Cnt
beq .8
php
bit PTR.bVisible
bpl .1
jsr PTR.Hide.I
.1 lda #S.CB.CMD.BITBLT
jsr CB.InitCacheA
lda #S.CB.OP.RESTORE
sta CB.Cache+S.CB.OP
plp
.2 php
ldx MENU.Stack.Cnt
lda MENU.Stack-1,x
>SYSCALL2 GetMemPtr
>STYA ZPMENUPtr
ldy #S.OBJ.X1
ldx #0
.3 lda (ZPMENUPtr),y
sta CB.Cache+S.CB.X1,x
iny
inx
cpx #8 X1,Y1,X2,Y2
bne .3
ldy #S.OBJ.W
ldx #0
.4 lda (ZPMENUPtr),y
sta CB.Cache+S.CB.SrcW,x
iny
inx
cpx #4 W,H
bne .4
ldy #S.MENU.hSAVEBUF
lda (ZPMENUPtr),y
sta CB.Cache+S.CB.DstPtr
jsr CB.GFXWrite
lda CB.Cache+S.CB.DstPtr
>SYSCALL2 FreeStkObj
ldx MENU.Stack.Cnt
lda MENU.Stack-1,x
>SYSCALL2 FreeMem
plp
dec MENU.Stack.Cnt
bcc .7
bne .2
.7 bit PTR.bVisible
bpl .8
jmp PTR.Show.I
.8 clc
rts
*--------------------------------------
MENU.GetDXDYW ldy #S.OBJ.X1
lda (ZPMENUPtr),y lda (ZPMENUPtr),y
clc clc
adc #1 adc #1
@ -979,16 +852,6 @@ MENU.GetDXDYW ldy #S.OBJ.X1
adc #0 adc #0
sta DX+1 sta DX+1
ldy #S.OBJ.W
lda (ZPMENUPtr),y
sec
sbc #3 2Px border + correction from W
sta Counter W
iny
lda (ZPMENUPtr),y
sbc #0
sta Counter+1
ldy #S.OBJ.Y1 ldy #S.OBJ.Y1
lda (ZPMENUPtr),y lda (ZPMENUPtr),y
clc clc
@ -1002,21 +865,31 @@ MENU.GetDXDYW ldy #S.OBJ.X1
rts rts
*-------------------------------------- *--------------------------------------
MENU.ResetX1Y1X2 MENU.ResetX1Y1X2
lda DX ldy #S.OBJ.X1
sta CB.Cache+S.CB.X1 lda (ZPMENUPtr),y
clc clc
adc Counter adc #1
sta CB.Cache+S.CB.X2 sta CB.Cache+S.CB.X1
lda DX+1 iny
lda (ZPMENUPtr),y
adc #0
sta CB.Cache+S.CB.X1+1 sta CB.Cache+S.CB.X1+1
adc Counter+1
sta CB.Cache+S.CB.X2+1
lda DY lda DY
sta CB.Cache+S.CB.Y1 sta CB.Cache+S.CB.Y1
lda DY+1 lda DY+1
sta CB.Cache+S.CB.Y1+1 sta CB.Cache+S.CB.Y1+1
ldy #S.OBJ.X2
lda (ZPMENUPtr),y
sec
sbc #1
sta CB.Cache+S.CB.X2
iny
lda (ZPMENUPtr),y
sbc #0
sta CB.Cache+S.CB.X2+1
rts rts
*-------------------------------------- *--------------------------------------
MENU.FindSelected MENU.FindSelected
@ -1024,7 +897,7 @@ MENU.FindSelected
>STYA D >STYA D
jsr MENU.GetMItems jsr MENU.GetMItems
.1 lda (ZPPtr1) .1 lda (ZPPtr1)
beq .9 beq .9
@ -1040,12 +913,12 @@ MENU.FindSelected
.8 clc .8 clc
rts rts
.9 >LDYA D .9 >LDYA D
>STYA ZPPtr1 >STYA ZPPtr1
sec sec
rts rts
*-------------------------------------- *--------------------------------------
MENU.GetMItems lda ZPMENUPtr MENU.GetMItems lda ZPMENUPtr
clc clc
@ -1075,6 +948,83 @@ MENU.NextMItemDY
MENU.NextMItem lda #S.MITEM MENU.NextMItem lda #S.MITEM
jmp SkipAPtr1 jmp SkipAPtr1
*-------------------------------------- *--------------------------------------
MENU.DestroyAll sec
.HS 90 BCC
MENU.Destroy clc
ldx MENU.Stack.Cnt
beq .8
php
bit PTR.bVisible
bpl .1
jsr PTR.Hide.I
.1 lda #S.CB.CMD.BITBLT
jsr CB.InitCacheA
lda #S.CB.OP.RESTORE
sta CB.Cache+S.CB.OP
plp
.2 php
ldx MENU.Stack.Cnt
lda MENU.Stack-1,x
>SYSCALL2 GetMemPtr
>STYA ZPObjPtr
ldy #S.OBJ.X1
ldx #0
.3 lda (ZPObjPtr),y
sta CB.Cache+S.CB.X1,x
iny
inx
cpx #8 X1,Y1,X2,Y2
bne .3
ldy #S.OBJ.W
ldx #0
.4 lda (ZPObjPtr),y
sta CB.Cache+S.CB.SrcW,x
iny
inx
cpx #4 W,H
bne .4
ldy #S.MENU.hSAVEBUF
lda (ZPObjPtr),y
sta CB.Cache+S.CB.DstPtr
jsr CB.GFXWrite
lda CB.Cache+S.CB.DstPtr
>SYSCALL2 FreeStkObj
ldx MENU.Stack.Cnt
lda MENU.Stack-1,x
>SYSCALL2 FreeMem
plp Destroy all ?
dec MENU.Stack.Cnt
bcc .7 no
bne .2
.7 bit PTR.bVisible
bpl .8
jmp PTR.Show.I
.8 clc
rts
*--------------------------------------
MAN MAN
SAVE usr/src/lib/libgui.s.menu SAVE usr/src/lib/libgui.s.menu
LOAD usr/src/lib/libgui.s LOAD usr/src/lib/libgui.s

View File

@ -91,10 +91,10 @@ MOU.CheckOverMenu
.1 ldx MENU.Stack.Cnt .1 ldx MENU.Stack.Cnt
beq .9 beq .9
lda MENU.Stack-1,x .2 dex
stx MENU.Stack.Idx
lda MENU.Stack,x
.2 phx
>SYSCALL2 GetMemPtr >SYSCALL2 GetMemPtr
>STYA ZPMENUPtr >STYA ZPMENUPtr
pha pha
@ -105,32 +105,18 @@ MOU.CheckOverMenu
pla pla
adc /S.OBJ.X1 adc /S.OBJ.X1
jsr MOU.InRectYA jsr MOU.InRectYA
bcc .3 bcs .3
plx jsr MENU.Enter
clc
rts
dex .3 ldx MENU.Stack.Idx
bne .2 bne .2
.9 sec .9 sec
rts rts
.3 plx
cpx MENU.Stack.Cnt
beq .7
* TODO:destroy from TOP to current, then enter current
* inx
* phx
* jsr MENU.Destroy
* bra .3
.7 jmp MENU.Enter
.8 clc
rts
*-------------------------------------- *--------------------------------------
MOU.CheckOverSysBut MOU.CheckOverSysBut
>LDYA L.RECT.SysBut >LDYA L.RECT.SysBut
@ -156,8 +142,7 @@ MOU.CheckOverWND
ldy #S.OBJ.F ldy #S.OBJ.F
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
and #S.WND.F.BORDER
bit #S.WND.F.BORDER
beq .2 beq .2
jsr MOU.ChkWNDBorders jsr MOU.ChkWNDBorders
@ -190,7 +175,7 @@ MOU.CheckOverWND
bra .5 bra .5
.3 iny #S.WND.MBarY2 .3 ldy #S.WND.MBarY2
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
cmp MSG+S.MSG.Y1 cmp MSG+S.MSG.Y1
@ -203,7 +188,7 @@ MOU.CheckOverWND
bra .5 bra .5
.4 iny #S.WND.SBarY1 .4 ldy #S.WND.SBarY1
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
cmp MSG+S.MSG.Y1 cmp MSG+S.MSG.Y1

View File

@ -43,37 +43,6 @@ OBJ.Init sta (ZPObjPtr)
rts rts
*-------------------------------------- *--------------------------------------
OBJ.AddWord pha
tya
jsr OBJ.AddByte
pla
OBJ.AddByte sta (ZPObjPtr)
inc ZPObjPtr
bne .8
inc ZPObjPtr+1
.8 rts
*--------------------------------------
OBJ.PullY1X1.BAD
>PULLA
ldy #S.OBJ.Y1
sta (ZPMENUPtr),y
>PULLA
iny
sta (ZPMENUPtr),y
>PULLA
ldy #S.OBJ.X1
sta (ZPMENUPtr),y
>PULLA
iny
sta (ZPMENUPtr),y
rts
*--------------------------------------
* hOBJ, Prop8, Value16 * hOBJ, Prop8, Value16
*-------------------------------------- *--------------------------------------
OBJ.SetProp ldy #3 OBJ.SetProp ldy #3
@ -169,9 +138,10 @@ OBJ.SetX2Y2 >STYA ZPPtr1
adc (ZPPtr1),y adc (ZPPtr1),y
ldy #S.OBJ.Y2+1 ldy #S.OBJ.Y2+1
sta (ZPPtr1),y sta (ZPPtr1),y
tax
dey dey
pla pla
sta (ZPPtr1),y sta (ZPPtr1),y A,X = Y2
rts rts
*-------------------------------------- *--------------------------------------
@ -185,6 +155,106 @@ OBJ.GetInCache >STYA .1+1
bpl .1 bpl .1
rts rts
*--------------------------------------
OBJ.DrawBorders >STYA ZPObjPtr
stx IY
lda #S.CB.CMD.HLINE
jsr CB.InitCacheA
lda #S.CB.OP.SET
sta CB.Cache+S.CB.OP
lda #S.CB.M.MONO
sta CB.Cache+S.CB.M
lda PREFS.BorderColor
sta CB.Cache+S.CB.COLOR
ldy #S.OBJ.X1
lda (ZPObjPtr),y
sec
sbc IY
sta CB.Cache+S.CB.X1
iny
lda (ZPObjPtr),y
sbc #0
sta CB.Cache+S.CB.X1+1
iny #S.OBJ.Y1
lda (ZPObjPtr),y
sec
sbc IY
sta CB.Cache+S.CB.Y1
sta CB.Cache+S.CB.Y2
iny
lda (ZPObjPtr),y
sbc #0
sta CB.Cache+S.CB.Y1+1
sta CB.Cache+S.CB.Y2+1 top X1-1,Y1-1,X2+1,Y1-1
iny #S.OBJ.X2
lda (ZPObjPtr),y
clc
adc IY
sta CB.Cache+S.CB.X2
iny
lda (ZPObjPtr),y
adc #0
sta CB.Cache+S.CB.X2+1
jsr CB.Cache2CBBuf
ldy #S.OBJ.Y2
lda (ZPObjPtr),y
clc
adc IY
sta CB.Cache+S.CB.Y1
sta CB.Cache+S.CB.Y2
iny
lda (ZPObjPtr),y
adc #0
sta CB.Cache+S.CB.Y1+1
sta CB.Cache+S.CB.Y2+1 bottom X1-1,Y2+1,X2+1,Y2+1
jsr CB.Cache2CBBuf
lda #S.CB.CMD.VLINE
sta CB.Cache+S.CB.CMD
ldy #S.OBJ.Y1
lda (ZPObjPtr),y
sec
sbc IY
sta CB.Cache+S.CB.Y1
iny
lda (ZPObjPtr),y
sbc #0
sta CB.Cache+S.CB.Y1+1
lda CB.Cache+S.CB.X1
sta CB.Cache+S.CB.X2
lda CB.Cache+S.CB.X1+1
sta CB.Cache+S.CB.X2+1 left X1-1,Y1-1,X1-1,Y2+1
jsr CB.Cache2CBBuf
ldy #S.OBJ.X2
lda (ZPObjPtr),y
clc
adc IY
sta CB.Cache+S.CB.X1
sta CB.Cache+S.CB.X2
iny
lda (ZPObjPtr),y
adc #0
sta CB.Cache+S.CB.X1+1
sta CB.Cache+S.CB.X2+1 right X2+1,Y1-1,X2+1,Y2+1
jmp CB.Cache2CBBuf
*-------------------------------------
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE usr/src/lib/libgui.s.obj SAVE usr/src/lib/libgui.s.obj

View File

@ -1,7 +1,10 @@
NEW NEW
AUTO 3,1 AUTO 3,1
*-------------------------------------- *--------------------------------------
SYSBUT.Enter sec SYSBUT.Enter bit WND.SYSBAR.bSysBut
bmi .8
sec
ror WND.SYSBAR.bSysBut ror WND.SYSBAR.bSysBut
jsr CB.GetBuf jsr CB.GetBuf
@ -18,10 +21,9 @@ SYSBUT.Enter sec
jsr MENU.New jsr MENU.New
bcs .9 bcs .9
sta hSysMenu
jmp MENU.Draw jmp MENU.Draw
.8 clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
SYSBUT.Leave bit WND.SYSBAR.bSysBut SYSBUT.Leave bit WND.SYSBAR.bSysBut

View File

@ -114,7 +114,7 @@ WND.Quit lda WND.Screen+S.OBJ.hPARENT
.8 clc .8 clc
WND.Quit.RTS rts WND.Quit.RTS rts
*-------------------------------------- *--------------------------------------
* F8, X116, Y116, W16, H16 * guiNewWnd(sFlags, iX1, iY1, iW, iH)
*-------------------------------------- *--------------------------------------
WND.New ldy WND.Stack.Top WND.New ldy WND.Stack.Top
cpy #WND.MAX cpy #WND.MAX
@ -174,7 +174,7 @@ WND.New ldy WND.Stack.Top
>PULLA >PULLA
ldy #S.OBJ.X1 ldy #S.OBJ.X1
and PREFS.BESTVIEWEDX and PREFS.BestViewedX
sta (ZPWNDPtr),y sta (ZPWNDPtr),y
>PULLA >PULLA
iny iny
@ -235,12 +235,12 @@ WND.Bring2Front ldx WND.Stack.Idx
.2 pla .2 pla
*-------------------------------------- *--------------------------------------
* A = hWND * guiShowWnd( hWND )
*-------------------------------------- *--------------------------------------
WND.Show sta WND.hWND WND.Show sta WND.hWND
ldx WND.Stack.Top ldx WND.Stack.Top
beq WND.Show1 beq WND.Show2
lda WND.Stack-1,x lda WND.Stack-1,x
>SYSCALL2 GetMemPtr >SYSCALL2 GetMemPtr
@ -252,11 +252,15 @@ WND.Show sta WND.hWND
jsr CB.GetBuf jsr CB.GetBuf
bcs WND.Activate.RTS bcs WND.Activate.RTS
jsr WND.PaintTopBar jsr WND.DrawTitleBar
>LDYA L.WND.Desktop
jsr CB.FlushBufToYA
WND.Show1 lda WND.hWND lda WND.hWND
ldy WND.Stack.Top ldx WND.Stack.Top
sta WND.Stack,y *--------------------------------------
WND.Show2 sta WND.Stack,x
inc WND.Stack.Top inc WND.Stack.Top
>SYSCALL2 GetMemPtr >SYSCALL2 GetMemPtr
@ -264,36 +268,35 @@ WND.Show1 lda WND.hWND
jsr OBJ.SetX2Y2 jsr OBJ.SetX2Y2
WND.Show2 jsr CB.GetBuf ldy #S.WND.InnerY2
sta (ZPWNDPtr),y
txa
iny
sta (ZPWNDPtr),y
jsr CB.GetBuf
bcs WND.Activate.RTS bcs WND.Activate.RTS
lda #S.WND.S.ACTIVE lda #S.WND.S.ACTIVE
jsr WND.SetStatus jsr WND.SetStatus
ldy #S.OBJ.Y1
lda (ZPWNDPtr),y
tax
iny
lda (ZPWNDPtr),y
ldy #S.WND.TBarY2+1
sta (ZPWNDPtr),y
txa
dey
sta (ZPWNDPtr),y
stz Counter X
stz Counter+1 Y
ldy #S.OBJ.F ldy #S.OBJ.F
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
and #S.WND.F.BORDER and #S.WND.F.BORDER
beq .1 beq .1
lda #1 >LDYA ZPWNDPtr
jsr WND.ShowBorders ldx #1
jsr OBJ.DrawBorders
.1 ldy #S.WND.pTITLE+1 *--------------------------------------
.1 ldy #S.OBJ.Y1
lda (ZPWNDPtr),y
sta Counter
iny
lda (ZPWNDPtr),y
sta Counter+1
ldy #S.WND.pTITLE+1
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
bne .2 bne .2
@ -302,98 +305,82 @@ WND.Show2 jsr CB.GetBuf
and #S.WND.F.MOVE+S.WND.F.CLOSE+S.WND.F.MIN+S.WND.F.MAX and #S.WND.F.MOVE+S.WND.F.CLOSE+S.WND.F.MIN+S.WND.F.MAX
beq .3 beq .3
.2 lda Counter+1 .2 lda SYSFON.Hp2
clc jsr WND.Add2Counter
adc SYSFON.Hp2
sta Counter+1
ldy #S.WND.TBarY2 ldy #S.WND.TBarY2
lda (ZPWNDPtr),y
clc
adc SYSFON.Hp2
sta (ZPWNDPtr),y sta (ZPWNDPtr),y
iny iny
lda (ZPWNDPtr),y txa
adc #0
sta (ZPWNDPtr),y sta (ZPWNDPtr),y
lda #S.WND.S.HASTBAR lda #S.WND.S.HASTBAR
jsr WND.SetStatus jsr WND.SetStatus
jsr WND.PaintTopBar jsr WND.DrawTitleBar
bcs .9 bcs .9
*-------------------------------------- *--------------------------------------
.3 ldy #S.WND.pMBAR+1 .3 ldy #S.WND.pMBAR
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
beq .7 beq .4
lda Counter+1 lda SYSFON.Hp1
clc jsr WND.Add2Counter
adc SYSFON.Hp2
sta Counter+1
ldy #S.WND.TBarY2 ldy #S.WND.MBarY2
lda (ZPWNDPtr),y
clc
adc SYSFON.H
tax
iny
lda (ZPWNDPtr),y
adc #0
ldy #S.WND.MBarY2+1
sta (ZPWNDPtr),y sta (ZPWNDPtr),y
iny
txa txa
dey
sta (ZPWNDPtr),y sta (ZPWNDPtr),y
lda #S.WND.S.HASMBAR lda #S.WND.S.HASMBAR
jsr WND.SetStatus jsr WND.SetStatus
jsr MBAR.Paint ldy #S.WND.pMBAR
lda (ZPWNDPtr),y
jsr MBAR.Draw
*-------------------------------------- *--------------------------------------
.7 ldy #S.WND.pSTATUS+1 .4 lda Counter
ldy #S.WND.InnerY1
sta (ZPWNDPtr),y
iny
lda Counter+1
sta (ZPWNDPtr),y
ldy #S.WND.pSTATUS+1
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
beq .8 beq .8
lda Counter+1 lda SYSFON.Hp1
clc jsr WND.Add2Counter
adc SYSFON.Hp2
sta Counter+1
ldy #S.OBJ.Y2 ldy #S.WND.InnerY2
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
sec sec
sbc SYSFON.H sbc SYSFON.Hp1
tax sta (ZPWNDPtr),y
iny iny
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
sbc #0 sbc #0
ldy #S.WND.SBarY1+1
sta (ZPWNDPtr),y
txa
dey
sta (ZPWNDPtr),y sta (ZPWNDPtr),y
lda #S.WND.S.HASSBAR lda #S.WND.S.HASSBAR
jsr WND.SetStatus jsr WND.SetStatus
jsr WND.PaintSBar jsr WND.DrawStatusBar
*-------------------------------------- *--------------------------------------
.8 ldy #S.WND.InnerH .8 ldy #S.WND.InnerH
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
sec sec
sbc Counter+1 sbc Counter
sta (ZPWNDPtr),y sta (ZPWNDPtr),y
iny iny
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
sbc #0 sbc Counter+1
sta (ZPWNDPtr),y sta (ZPWNDPtr),y
>LDYA L.WND.Desktop >LDYA L.WND.Desktop
jsr CB.FlushBufToYA jsr CB.FlushBufToYA
lda WND.hWND lda WND.hWND
@ -489,10 +476,10 @@ WND.fPaint >SYSCALL2 GetMemPtr
stz S.CB.SrcY stz S.CB.SrcY
stz S.CB.SrcY+1 stz S.CB.SrcY+1
ldy #S.WND.InnerW+3 ldy #S.WND.InnerW+3
ldx #3 ldx #3
.1 lda (ZPWNDPtr),y .1 lda (ZPWNDPtr),y
sta CB.Cache+S.CB.SrcW,x sta CB.Cache+S.CB.SrcW,x
dey dey
@ -501,110 +488,15 @@ WND.fPaint >SYSCALL2 GetMemPtr
lda #S.CB.CMD.BITBLT lda #S.CB.CMD.BITBLT
sta CB.Cache+S.CB.CMD sta CB.Cache+S.CB.CMD
jsr CB.Cache2CBBuf jsr CB.Cache2CBBuf
.8 >LDYA L.WND.Desktop .8 >LDYA L.WND.Desktop
jmp CB.FlushBufToYA jmp CB.FlushBufToYA
*-------------------------------------- *--------------------------------------
WND.ShowBorders sta IY WND.DrawTitleBar
lda #S.CB.CMD.FILLRECT
lda #S.CB.CMD.HLINE
jsr CB.InitCacheA
lda #S.CB.OP.SET
sta CB.Cache+S.CB.OP
lda #S.CB.M.MONO
sta CB.Cache+S.CB.M
lda PREFS.BORDERCOLOR
sta CB.Cache+S.CB.COLOR
ldy #S.OBJ.X1
lda (ZPWNDPtr),y
sec
sbc IY
sta CB.Cache+S.CB.X1
iny
lda (ZPWNDPtr),y
sbc #0
sta CB.Cache+S.CB.X1+1
iny #S.OBJ.Y1
lda (ZPWNDPtr),y
sec
sbc IY
sta CB.Cache+S.CB.Y1
sta CB.Cache+S.CB.Y2
iny
lda (ZPWNDPtr),y
sbc #0
sta CB.Cache+S.CB.Y1+1
sta CB.Cache+S.CB.Y2+1 top X1-1,Y1-1,X2+1,Y1-1
iny #S.OBJ.X2
lda (ZPWNDPtr),y
clc
adc IY
sta CB.Cache+S.CB.X2
iny
lda (ZPWNDPtr),y
adc #0
sta CB.Cache+S.CB.X2+1
jsr CB.Cache2CBBuf
ldy #S.OBJ.Y2
lda (ZPWNDPtr),y
clc
adc IY
sta CB.Cache+S.CB.Y1
sta CB.Cache+S.CB.Y2
iny
lda (ZPWNDPtr),y
adc #0
sta CB.Cache+S.CB.Y1+1
sta CB.Cache+S.CB.Y2+1 bottom X1-1,Y2+1,X2+1,Y2+1
jsr CB.Cache2CBBuf
lda #S.CB.CMD.VLINE
sta CB.Cache+S.CB.CMD
ldy #S.OBJ.Y1
lda (ZPWNDPtr),y
sec
sbc IY
sta CB.Cache+S.CB.Y1
iny
lda (ZPWNDPtr),y
sbc #0
sta CB.Cache+S.CB.Y1+1
lda CB.Cache+S.CB.X1
sta CB.Cache+S.CB.X2
lda CB.Cache+S.CB.X1+1
sta CB.Cache+S.CB.X2+1 left X1-1,Y1-1,X1-1,Y2+1
jsr CB.Cache2CBBuf
ldy #S.OBJ.X2
lda (ZPWNDPtr),y
clc
adc IY
sta CB.Cache+S.CB.X1
sta CB.Cache+S.CB.X2
iny
lda (ZPWNDPtr),y
adc #0
sta CB.Cache+S.CB.X1+1
sta CB.Cache+S.CB.X2+1 right X2+1,Y1-1,X2+1,Y2+1
jmp CB.Cache2CBBuf
*--------------------------------------
WND.PaintTopBar lda #S.CB.CMD.FILLRECT
jsr CB.InitCacheA jsr CB.InitCacheA
lda #S.CB.OP.SET lda #S.CB.OP.SET
@ -650,6 +542,7 @@ WND.PaintTopBar lda #S.CB.CMD.FILLRECT
inc DY inc DY
bne .12 bne .12
inc DY+1 inc DY+1
* TOP LEFT ICON * TOP LEFT ICON
@ -669,7 +562,7 @@ WND.PaintTopBar lda #S.CB.CMD.FILLRECT
.2 jsr DRAW.yaBMAtDXDY .2 jsr DRAW.yaBMAtDXDY
jsr WND.PaintTopBarTitle jsr WND.DrawTitleBarText
bcs .9 bcs .9
* TOP RIGHT ICONS * TOP RIGHT ICONS
@ -712,6 +605,7 @@ WND.PaintTopBar lda #S.CB.CMD.FILLRECT
adc #16 adc #16
sta DX sta DX
bcc .41 bcc .41
inc DX+1 inc DX+1
.41 ldy #S.OBJ.F .41 ldy #S.OBJ.F
@ -726,7 +620,7 @@ WND.PaintTopBar lda #S.CB.CMD.FILLRECT
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
WND.PaintTopBarTitle WND.DrawTitleBarText
ldy #S.WND.pTITLE ldy #S.WND.pTITLE
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
pha pha
@ -734,7 +628,7 @@ WND.PaintTopBarTitle
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
ply ply
ldx hSYSFONB ldx hSYSFON
jsr FON.GetTextSize jsr FON.GetTextSize
ldy #S.OBJ.W ldy #S.OBJ.W
@ -756,7 +650,7 @@ WND.PaintTopBarTitle
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
clc clc
adc DX adc DX
and PREFS.BESTVIEWEDX and PREFS.BestViewedX
sta DX sta DX
iny iny
@ -771,18 +665,19 @@ WND.PaintTopBarTitle
lda (ZPWNDPtr),y lda (ZPWNDPtr),y
ply ply
ldx hSYSFONB ldx hSYSFON
clc clc
jmp DRAW.YATextAtDXDY jmp DRAW.YATextAtDXDY
*-------------------------------------- *--------------------------------------
WND.PaintSBar lda #S.CB.CMD.HLINE WND.DrawStatusBar
lda #S.CB.CMD.HLINE
jsr CB.InitCacheA jsr CB.InitCacheA
lda #S.CB.OP.SET lda #S.CB.OP.SET
sta CB.Cache+S.CB.OP sta CB.Cache+S.CB.OP
lda #S.CB.M.MONO lda #S.CB.M.MONO
sta CB.Cache+S.CB.M sta CB.Cache+S.CB.M
lda PREFS.BORDERCOLOR lda PREFS.BorderColor
sta CB.Cache+S.CB.COLOR sta CB.Cache+S.CB.COLOR
ldy #S.OBJ.X1 ldy #S.OBJ.X1
@ -854,12 +749,17 @@ WND.SetMBar >PULLW ZPPtr1
>PULLA >PULLA
>SYSCALL2 GetMemPtr >SYSCALL2 GetMemPtr
>STYA ZPWNDPtr >STYA ZPWNDPtr
>LDYA ZPPtr1
jsr MBAR.New
bcs .9
ldy #S.WND.pMBAR
sta (ZPWNDPtr),y
* clc
.9 rts
.9 rts
*-------------------------------------- *--------------------------------------
WND.ClrStatus ldy #S.OBJ.S WND.ClrStatus ldy #S.OBJ.S
eor #$ff eor #$ff
@ -872,6 +772,16 @@ WND.SetStatus ldy #S.OBJ.S
sta (ZPWNDPtr),y sta (ZPWNDPtr),y
rts rts
*-------------------------------------- *--------------------------------------
WND.Add2Counter clc
adc Counter
sta Counter
bcc .8
inc Counter+1
.8 ldx Counter+1
rts
*--------------------------------------
MAN MAN
SAVE usr/src/lib/libgui.s.wnd SAVE usr/src/lib/libgui.s.wnd
LOAD usr/src/lib/libgui.s LOAD usr/src/lib/libgui.s

View File

@ -79,15 +79,16 @@ MENU.RMargin .EQ 8
*-------------------------------------- *--------------------------------------
.DUMMY .DUMMY
.OR ZPLIB .OR ZPLIB
ZPCBPtr .BS 2
ZPObjPtr .BS 2 ZPObjPtr .BS 2
ZPRECTPtr .BS 2
ZPWNDPtr .BS 2 ZPWNDPtr .BS 2
ZPMENUPtr .BS 2 ZPMENUPtr .BS 2
ZPBMPtr .BS 2 ZPBMPtr .BS 2
ZPRECTPtr .BS 2
ZPPtr1 .BS 2 ZPPtr1 .BS 2
.BS 2
DX .BS 2 DX .BS 2
DY .BS 2 DY .BS 2
IE .BS 2 IE .BS 2
@ -227,6 +228,11 @@ LIB.LOAD lda LibCount
jsr PTR.Set jsr PTR.Set
jsr PTR.Show jsr PTR.Show
>LDYA L.MENU.Sys.Programs
>STYA MENU.Sys.1
>LDYA L.MENU.Sys.Settings
>STYA MENU.Sys.2
inc LibCount inc LibCount
.8 clc .8 clc
@ -244,26 +250,26 @@ SkipAPtr1 clc
adc ZPPtr1 adc ZPPtr1
sta ZPPtr1 sta ZPPtr1
bcc .8 bcc .8
inc ZPPtr1+1 inc ZPPtr1+1
.8 rts .8 rts
*-------------------------------------- *--------------------------------------
SkipStrZPtr1 ldy #$ff SkipStrZPtr1 ldy #$ff
.1 iny .1 iny
lda (ZPPtr1),y lda (ZPPtr1),y
bne .1 bne .1
tya tya
sec \0 sec \0
adc ZPPtr1 adc ZPPtr1
sta ZPPtr1 sta ZPPtr1
bcc .8 bcc .8
inc ZPPtr1+1 inc ZPPtr1+1
.8 rts .8 rts
*-------------------------------------- *--------------------------------------
.INB usr/src/lib/libgui.s.bm .INB usr/src/lib/libgui.s.bm
.INB usr/src/lib/libgui.s.but .INB usr/src/lib/libgui.s.but
@ -273,6 +279,7 @@ SkipStrZPtr1 ldy #$ff
.INB usr/src/lib/libgui.s.draw .INB usr/src/lib/libgui.s.draw
.INB usr/src/lib/libgui.s.fon .INB usr/src/lib/libgui.s.fon
.INB usr/src/lib/libgui.s.mbar .INB usr/src/lib/libgui.s.mbar
.INB usr/src/lib/libgui.s.mbox
.INB usr/src/lib/libgui.s.menu .INB usr/src/lib/libgui.s.menu
.INB usr/src/lib/libgui.s.mou .INB usr/src/lib/libgui.s.mou
.INB usr/src/lib/libgui.s.msg .INB usr/src/lib/libgui.s.msg
@ -293,8 +300,8 @@ CS.END
DEVNAME.GFX .AZ "/dev/gfx" DEVNAME.GFX .AZ "/dev/gfx"
DEVNAME.MOUSE .AZ "/dev/mou1" DEVNAME.MOUSE .AZ "/dev/mou1"
*-------------------------------------- *--------------------------------------
SYSX7 .AZ "${ROOT}sbin/sysx7" SYSX7 .AZ "${ROOT}opt/gui/fonts/sysx7"
SYSX7B .AZ "${ROOT}sbin/sysx7b" SYSX7B .AZ "${ROOT}opt/gui/fonts/sysx7b"
*-------------------------------------- *--------------------------------------
LibCount .BS 1 LibCount .BS 1
hDevMouse .BS 1 hDevMouse .BS 1
@ -336,6 +343,7 @@ CB.PTR .DA #S.CB.CMD.BITBLT
CB.Cache .BS S.CB CB.Cache .BS S.CB
OBJ.Cache .BS S.OBJ OBJ.Cache .BS S.OBJ
*-------------------------------------- *--------------------------------------
MENU.Stack.Idx .BS 1
MENU.Stack.Cnt .BS 1 MENU.Stack.Cnt .BS 1
MENU.Stack .BS MENU.MAX MENU.Stack .BS MENU.MAX
*-------------------------------------- *--------------------------------------
@ -352,6 +360,7 @@ WND.Desktop .DA #S.OBJ.T.WND
*-------------------------------------- *--------------------------------------
WND.SysBar .DA #S.OBJ.T.WND WND.SysBar .DA #S.OBJ.T.WND
.BS S.WND-1 .BS S.WND-1
*--------------------------------------
WND.SysBar.2osX .AZ "2osX" WND.SysBar.2osX .AZ "2osX"
WND.SysBar.Clk .AZ "00:00" WND.SysBar.Clk .AZ "00:00"
WND.SysBar.bSysBut .BS 1 WND.SysBar.bSysBut .BS 1
@ -362,8 +371,6 @@ RECT.SysWNDs .BS S.RECT
*-------------------------------------- *--------------------------------------
RECT.SysClk .BS S.RECT RECT.SysClk .BS S.RECT
*-------------------------------------- *--------------------------------------
hSysMenu .BS 1
*--------------------------------------
MENU.Sys .DA #S.MITEM.T.ITEM MENU.Sys .DA #S.MITEM.T.ITEM
.DA #2 ID .DA #2 ID
.DA #KEYMOD.CTRL+KEYMOD.OA+KEYMOD.CA,#'A' .DA #KEYMOD.CTRL+KEYMOD.OA+KEYMOD.CA,#'A'
@ -373,12 +380,12 @@ MENU.Sys .DA #S.MITEM.T.ITEM
.DA #S.MITEM.T.SEP .DA #S.MITEM.T.SEP
.DA #S.MITEM.T.SUBMENU .DA #S.MITEM.T.SUBMENU
.DA MENU.Sys.Programs MENU.Sys.1 .DA MENU.Sys.Programs
.DA 0 pICON .DA 0 pICON
.AZ "Programs" .AZ "Programs"
.DA #S.MITEM.T.SUBMENU .DA #S.MITEM.T.SUBMENU
.DA MENU.Sys.Settings MENU.Sys.2 .DA MENU.Sys.Settings
.DA 0 pICON .DA 0 pICON
.AZ "Settings" .AZ "Settings"
@ -431,21 +438,22 @@ MENU.Sys.Settings
KEYMOD.S.CTRL .EQ 0 KEYMOD.S.CTRL .EQ 0
KEYMOD.S .AZ "Ctrl-" KEYMOD.S .AZ "Ctrl-"
KEYMOD.S.OA .EQ *-KEYMOD.S KEYMOD.S.OA .EQ *-KEYMOD.S
.DA #01,#'-',#0 .DA #01,#'-',#0
KEYMOD.S.CA .EQ *-KEYMOD.S KEYMOD.S.CA .EQ *-KEYMOD.S
.DA #02,#'-',#0 .DA #02,#'-',#0
*-------------------------------------- *--------------------------------------
TEXTBUF .BS 16 for composing HotKey strings TEXTBUF .BS 16 for composing HotKey strings
*-------------------------------------- *--------------------------------------
PREFS.BESTVIEWEDX .DA #$FC PREFS.BestViewedX .DA #$FC
PREFS.MBarXMargin .DA #5
*
PREFS.bSYSBARTOP .DA #0 PREFS.bSYSBARTOP .DA #0
PREFS.MBARXMARGIN .DA #5 PREFS.MenuColor .DA #C.WHITE
PREFS.MENUCOLOR .DA #C.WHITE
PREFS.SYSBARCOLOR .DA #C.WHITE PREFS.SYSBARCOLOR .DA #C.WHITE
PREFS.BORDERCOLOR .DA #C.BLACK PREFS.BorderColor .DA #C.BLACK
PREFS.TBARCOLORA .DA #C16.D.BLUE PREFS.TBARCOLORA .DA #C16.D.BLUE
PREFS.TBARCOLORI .DA #C16.L.BLUE PREFS.TBARCOLORI .DA #C16.L.BLUE
PREFS.MBARCOLOR .DA #C.WHITE PREFS.MBarColor .DA #C.WHITE
PREFS.SBARCOLOR .DA #C.WHITE PREFS.SBARCOLOR .DA #C.WHITE
PREFS.DESKTOPCOLOR .DA #C16.D.BLUE PREFS.DESKTOPCOLOR .DA #C16.D.BLUE
*-------------------------------------- *--------------------------------------

View File

@ -3,7 +3,7 @@ NEW
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF bin/guitest1 .TF root/asmtest/testgui
*-------------------------------------- *--------------------------------------
.INB inc/macros.i .INB inc/macros.i
.INB inc/a2osx.i .INB inc/a2osx.i
@ -87,8 +87,8 @@ CS.QUIT.RTS rts
*-------------------------------------- *--------------------------------------
WND.Test >PUSHBI S.WND.F.RESIZE+S.WND.F.MOVE+S.WND.F.CLOSE+S.WND.F.MAX+S.WND.F.MIN WND.Test >PUSHBI S.WND.F.RESIZE+S.WND.F.MOVE+S.WND.F.CLOSE+S.WND.F.MAX+S.WND.F.MIN
>PUSHWI 40
>PUSHWI 80 >PUSHWI 80
>PUSHWI 40
>PUSHWI 360 >PUSHWI 360
>PUSHWI 96 >PUSHWI 96
>LIBCALL hLIBGUI,LIBGUI.WND.New >LIBCALL hLIBGUI,LIBGUI.WND.New
@ -112,11 +112,11 @@ WND.Test >PUSHBI S.WND.F.RESIZE+S.WND.F.MOVE+S.WND.F.CLOSE+S.WND.F.MAX+S.WND.F.
>PUSHB hWND >PUSHB hWND
>PUSHW L.WND.MBAR >PUSHW L.WND.MBAR
>LIBCALL hLIBGUI,LIBGUI.MBAR.New * >LIBCALL hLIBGUI,LIBGUI.MBAR.New
sta hMBAR * sta hMBAR
>PUSHB hWND * >PUSHB hWND
>PUSHB hMBAR * >PUSHB hMBAR
>LIBCALL hLIBGUI,LIBGUI.WND.SetMBar >LIBCALL hLIBGUI,LIBGUI.WND.SetMBar
>PUSHB hWND >PUSHB hWND
@ -156,7 +156,7 @@ LIBGUI .AZ "libgui"
hLIBGUI .BS 1 hLIBGUI .BS 1
*-------------------------------------- *--------------------------------------
LOGOFILE .AZ "${ROOT}A2osX.logo" LOGOFILE .AZ "${ROOT}A2osX.logo"
WND.TITLE .AZ "Window Title" WND.TITLE .AZ "Libgui ASM API test"
WND.STATUS .AZ "Window status bar message" WND.STATUS .AZ "Window status bar message"
*-------------------------------------- *--------------------------------------
WND.MBAR .AZ "File" WND.MBAR .AZ "File"
@ -271,5 +271,5 @@ DS.START
DS.END .ED DS.END .ED
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE usr/src/bin/guitest1.s SAVE root/asmtest/testgui.s
ASM ASM

View File

@ -8,20 +8,21 @@ int bQuit=0;
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
short int hWND = guiNewWnd(WND_F_RESIZE+WND_F_MOVE+WND_F_CLOSE+WND_F_MAX+WND_F_MIN, short int hWND = guiNewWnd(WND_F_RESIZE+WND_F_MOVE+WND_F_CLOSE+WND_F_MAX+WND_F_MIN,
20,40,200,140); 20,20,200,100);
guiSetProp(hWND, WND_P_pTITLE, "Window title"); guiSetProp(hWND, WND_P_pTITLE, "Libgui C API");
guiSetProp(hWND, WND_P_pSTATUS, "Status bar"); guiSetProp(hWND, WND_P_pSTATUS, "Status bar");
// guiSetProp(hWND, WND_P_BGCOLOR, C.WHITE); guiSetProp(hWND, WND_P_BGCOLOR, pC_WHITE);
guiShowWnd(hWND); guiShowWnd(hWND);
do { do {
if (guiGetMsg(&msg)) if (guiGetMsg(&msg))
{ {
switch msg.type { // switch msg.type {
case MSG_T_WND: // case MSG_T_WND:
break; // break;
} // }
}
} while (!bQuit) } while (!bQuit)
guiDestroyWnd(hWND); guiDestroyWnd(hWND);

View File

@ -61,12 +61,16 @@ CS.RUN >SLEEP
>LIBCALL hLIBGUI,LIBGUI.MSG.Get >LIBCALL hLIBGUI,LIBGUI.MSG.Get
bcs CS.RUN bcs CS.RUN
.1 lda MSG+S.MSG.T lda MSG+S.MSG.T
cmp #S.MSG.T.ID cmp #S.MSG.T.ID
bne CS.RUN bne CS.RUN
lda MSG+S.MSG.ID lda MSG+S.MSG.ID
cmp #42 cmp #2
bne .1
.1 cmp #42
bne .2 bne .2
>PUSHW L.GUITEST1 >PUSHW L.GUITEST1
@ -81,6 +85,7 @@ CS.RUN >SLEEP
>PUSHBI 0 >PUSHBI 0
>SYSCALL ExecL >SYSCALL ExecL
bra CS.RUN bra CS.RUN
clc clc
rts rts
*-------------------------------------- *--------------------------------------
@ -98,7 +103,7 @@ CS.QUIT.RTS rts
CS.END CS.END
LIBGUI .AZ "libgui" LIBGUI .AZ "libgui"
hLIBGUI .BS 1 hLIBGUI .BS 1
GUITEST1 .AZ "${ROOT}root/asmtest/guitest1" GUITEST1 .AZ "${ROOT}root/asmtest/testgui"
GUITEST2 .AZ "${ROOT}root/ctest/testgui" GUITEST2 .AZ "${ROOT}root/ctest/testgui"
*-------------------------------------- *--------------------------------------
MSG .BS S.MSG MSG .BS S.MSG