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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -3,132 +3,236 @@ NEW
*--------------------------------------
* Y,A = MBAR definition
*--------------------------------------
MBAR.New >STYA ZPMENUPtr MBAR definition
>STYA ZPPtr1 for pass #2
MBAR.New >STYA ZPPtr1 MBAR definition
>STYA ZPObjPtr for pass #2
lda #S.MBAR.Items+1 Ending\0
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
jsr MBAR.GetSize
>SYSCALL2 GetMem
bcs .9
>STYA ZPObjPtr
>STYA ZPMENUPtr
phx hMBAR
ldy #S.OBJ-1
lda #S.OBJ.T.MBAR
jsr OBJ.Init
lda #S.MBAR.Items
sta (ZPMENUPtr) S.OBJ.T
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
adc ZPObjPtr
sta ZPObjPtr
bcc .4
inc ZPObjPtr+1
.4 stz DX
stz DX+1
.5 lda (ZPPtr1)
.9 rts
*--------------------------------------
* ZPPtr1 = defintion
*--------------------------------------
MBAR.GetSize lda #S.MBAR.Items+1 Ending\0
sta Counter
stz Counter+1
.1 lda (ZPPtr1)
beq .8
>LDYA DX
jsr OBJ.AddWord S.MBITEM.X1
ldy #$ff
lda DX
.2 iny
lda (ZPPtr1),y
bne .2
tya
sec text Ending\0
inc
inc skip pMENU
jsr SkipAPtr1
lda #S.MBITEM
clc
adc PREFS.MBARXMARGIN
sta DX
bcc .6
adc Counter
sta Counter
bcc .1
sta DX+1
inc Counter+1
bra .1
.6 >LDYA DX
jsr OBJ.AddWord S.MBITEM.XT
.8 >LDYA Counter
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
ldx hSYSFON
jsr FON.GetTextSize
lda DX
lda PREFS.MBarXMargin
asl x2
clc
adc CB.CACHE+S.CB.SrcW
sta DX
tay
lda DX+1
lda #0
adc CB.CACHE+S.CB.SrcW+1
sta DX+1
>LDYA DX
jsr OBJ.AddWord S.MBITEM.X2
jsr MBAR.AddWord S.MBITEM.W
>LDYA ZPPtr1 pTEXT
jsr OBJ.AddWord
jsr MBAR.AddWord
jsr SkipStrZPtr1 skip "TEXT\0"
ldy #1
lda (ZPPtr1),y
jsr OBJ.AddByte pMENU+1
jsr MBAR.AddByte pMENU+1
lda (ZPPtr1)
jsr OBJ.AddByte pMENU
lda ZPPtr1
clc
adc #2
sta ZPPtr1
bcc .5
inc ZPPtr1+1
bra .5 stkip pMENU
.8 pla hMBAR
clc
jsr MBAR.AddByte pMENU
lda #2
jsr SkipAPtr1 stkip pMENU
bra .1
.8 sta (ZPMENUPtr)
rts
*--------------------------------------
MBAR.AddWord pha
tya
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
*--------------------------------------
*--------------------------------------
MBAR.Leave
clc
rts
*--------------------------------------
* ZPWNDPtr = parent WND
*--------------------------------------
MBAR.Paint lda #S.CB.CMD.FILLRECT
jsr CB.InitCacheA
MBAR.Draw >SYSCALL2 GetMemPtr
>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
sta CB.Cache+S.CB.OP
@ -136,123 +240,86 @@ MBAR.Paint lda #S.CB.CMD.FILLRECT
lda #S.CB.M.MONO
sta CB.Cache+S.CB.M
lda PREFS.MBARCOLOR
sta CB.Cache+S.CB.COLOR
ldy #S.MBITEM.S
lda (ZPPtr1),y
asl
lda PREFS.MBarColor
bcc .1
eor #$ff
ldy #S.OBJ.X1
lda (ZPWNDPtr),y
.1 sta CB.Cache+S.CB.COLOR
jsr MBAR.SetY1Y2
jsr CB.Cache2CBBuf
lda PREFS.MBarXMargin
clc
adc 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
lda (ZPWNDPtr),y
sta CB.Cache+S.CB.X1+1
lda (ZPPtr1),y
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 (ZPWNDPtr),y
lda ZPMENUPtr+1
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
lda CB.Cache+S.CB.X1+1
iny
lda (ZPWNDPtr),y
adc (ZPPtr1),y
sta CB.Cache+S.CB.X2+1
ldy #S.WND.MBarY1
rts
*--------------------------------------
MBAR.SetY1Y2 ldy #S.WND.MBarY1
lda (ZPWNDPtr),y
sta CB.Cache+S.CB.Y1
iny
lda (ZPWNDPtr),y
sta CB.Cache+S.CB.Y1+1
iny #S.WND.MBarY2
ldy #S.WND.MBarY2
lda (ZPWNDPtr),y
sta CB.Cache+S.CB.Y2
iny
lda (ZPWNDPtr),y
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
*--------------------------------------
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 ZPObjPtr for pass #2
ldy MENU.Stack.Cnt
cpy #MENU.MAX
ldx MENU.Stack.Cnt
cpx #MENU.MAX
beq .90
jsr MENU.GetSize
@ -65,7 +65,7 @@ MENU.New >PULLW DY
.90 lda #E.OOH
sec
.99
.99
MENU.New.RTS rts
*--------------------------------------
* ZPPtr1 = defintion
@ -73,7 +73,7 @@ MENU.New.RTS rts
MENU.GetSize lda #S.MENU.Items+1 Ending\0
sta Counter
stz Counter+1
.1 lda (ZPPtr1)
beq .8
@ -82,19 +82,19 @@ MENU.GetSize lda #S.MENU.Items+1 Ending\0
adc Counter
sta Counter
bcc .2
inc Counter+1
.2 lda (ZPPtr1)
cmp #S.MITEM.T.SEP
bne .3
inc ZPPtr1
bne .1
inc ZPPtr1+1
bra .1
.3 cmp #S.MITEM.T.ITEM
bne .4
@ -120,23 +120,23 @@ MENU.GetData lda ZPMENUPtr
bcc .1
inc ZPMENUPtr+1
.1 lda (ZPPtr1)
sta (ZPMENUPtr)
beq .8
cmp #S.MITEM.T.SEP
bne .2
inc ZPPtr1 skip 1 byte
bne .5
inc ZPPtr1+1
bra .5
*--------------------------------------
.2 cmp #S.MITEM.T.ITEM
bne .3
ldy #1 T+ID+KEMOD+KEY+pICON+"text"
lda (ZPPtr1),y
ldy #S.MITEM.ID
@ -147,7 +147,7 @@ MENU.GetData lda ZPMENUPtr
tax
iny
lda (ZPPtr1),y
ldy #S.MITEM.KEYMOD+1
sta (ZPMENUPtr),y
dey KEY
@ -156,7 +156,7 @@ MENU.GetData lda ZPMENUPtr
lda #4
bra .4 skip 4 bytes
*--------------------------------------
*--------------------------------------
.3 ldy #1 skip T+pMENU+pICON+"text"
lda (ZPPtr1),y
tax
@ -169,7 +169,7 @@ MENU.GetData lda ZPMENUPtr
txa
sta (ZPMENUPtr),y
lda #3 skip 3 bytes
.4 jsr SkipAPtr1
ldy #1
@ -179,29 +179,29 @@ MENU.GetData lda ZPMENUPtr
dey
lda (ZPPtr1)
sta (ZPMENUPtr),y
lda #2 skip pICON
jsr SkipAPtr1
ldy #S.MITEM.pTEXT
lda ZPPtr1
sta (ZPMENUPtr),y
iny
lda ZPPtr1+1
sta (ZPMENUPtr),y
jsr SkipStrZPtr1 skip "TEXT\0"
ldy #S.MITEM.S
lda #0
sta (ZPMENUPtr),y
.5 lda ZPMENUPtr
clc
adc #S.MITEM
sta ZPMENUPtr
bcc .1
inc ZPMENUPtr+1
bra .1
@ -418,7 +418,21 @@ MENU.FindMItemByID
.9 sec
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
@ -429,8 +443,8 @@ MENU.Enter jsr MENU.GetDXDYW
beq .2
lda DY Y1
sec
adc SYSFON.H
clc
adc SYSFON.Hp2
sta INE INE = Y2
lda DY+1
adc #0
@ -443,192 +457,129 @@ MENU.Enter jsr MENU.GetDXDYW
ldy #S.MITEM.S
lda (ZPPtr1),y
bpl .2
eor #S.MITEM.S.SELECTED
sta (ZPPtr1),y was selected before...
jsr CB.GetBuf
bcs .9
jsr MENU.ResetX1Y1X2
jsr MENU.DrawMItem
.2 jsr MENU.NextMItemDY
bra .1
*--------------------------------------
.3 ldy #S.MITEM.S
lda (ZPPtr1),y
bmi .8 already selected, nothing to do
>DEBUG
bmi .5 already selected, nothing to do
eor #S.MITEM.S.SELECTED
sta (ZPPtr1),y
jsr CB.GetBuf
bcs .9
jsr MENU.ResetX1Y1X2
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
bne .1
bne .2
* >LDYA L.WND.Screen
* jsr CB.FlushBufToYA
ldy #S.MITEM.pMENU
lda (ZPPtr1),y
sta D
iny
lda (ZPPtr1),y
sta D+1
* jsr MENU.NewSubMenu
* bcs .9
bra .1
lda DY
sta Counter
lda DY+1
sta Counter+1
bra .2
*--------------------------------------
.8 clc
.9 rts
*--------------------------------------
.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
beq .8
lda #S.MSG.T.ID
sta MSG+S.MSG.T
ldy #S.MITEM.ID
lda (ZPPtr1),y
sta MSG+S.MSG.ID
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)
*--------------------------------------
MENU.Draw >SYSCALL2 GetMemPtr
>STYA ZPMENUPtr
jsr MENU.Save
bcs .9
jsr CB.GetBuf
bcs .9
jsr MENU.DrawBorders
>LDYA ZPMENUPtr
ldx #0
jsr OBJ.DrawBorders
jsr MENU.GetDXDYW
jsr MENU.GetDXDY
jsr MENU.GetMItems
.1 lda (ZPPtr1)
beq .8
jsr MENU.ResetX1Y1X2
jsr MENU.DrawMItem
jsr MENU.NextMItemDY
bra .1
.8 >LDYA L.WND.Screen
jsr CB.FlushBufToYA
jmp CB.FlushBufToYA
.9 rts
*--------------------------------------
MENU.DrawBorders
lda #S.CB.CMD.HLINE
jsr CB.InitCacheA
MENU.DrawMItem jsr MENU.ResetX1Y1X2
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.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)
lda (ZPPtr1)
cmp #S.MITEM.T.SEP
bne MENU.DrawMItem1
@ -639,7 +590,7 @@ MENU.DrawMItem lda (ZPPtr1)
lda #S.CB.M.MONO
sta CB.Cache+S.CB.M
lda PREFS.BORDERCOLOR
lda PREFS.BorderColor
sta CB.Cache+S.CB.COLOR
jmp CB.Cache2CBBuf
@ -651,7 +602,7 @@ MENU.DrawMItem1 lda #S.CB.CMD.FILLRECT
lda #S.CB.M.MONO
sta CB.Cache+S.CB.M
ldx PREFS.MENUCOLOR
ldx PREFS.MenuColor
jsr MENU.IsSelected
bcc .15
@ -661,13 +612,12 @@ MENU.DrawMItem1 lda #S.CB.CMD.FILLRECT
.15 stx CB.Cache+S.CB.COLOR
lda DY
sta CB.Cache+S.CB.Y1
lda CB.Cache+S.CB.Y1
sec
adc SYSFON.H
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
sta CB.Cache+S.CB.Y2+1
jsr CB.Cache2CBBuf
@ -695,7 +645,6 @@ MENU.DrawMItem1 lda #S.CB.CMD.FILLRECT
ldy #S.MENU.iW
adc (ZPMENUPtr),y
sta CB.Cache+S.CB.X1
bcc .21
inc CB.Cache+S.CB.X1+1
@ -719,7 +668,7 @@ MENU.DrawMItem1 lda #S.CB.CMD.FILLRECT
lda (ZPPtr1)
cmp #S.MITEM.T.ITEM
bne .3
jsr MENU.GetKeyString
bcs .3
@ -781,7 +730,7 @@ MENU.IsSelected phy
rts
*--------------------------------------
MENU.GetText ldy #S.MITEM.pTEXT
lda (ZPPtr1),y
pha
iny
@ -802,10 +751,10 @@ MENU.GetKeyString
lda (ZPPtr1),y
beq .3
bit #KEYMOD.CTRL
beq .1
ldy #KEYMOD.S.CTRL
jsr .4
@ -817,7 +766,7 @@ MENU.GetKeyString
.2 bit #KEYMOD.CA
beq .3
ldy #KEYMOD.S.CA
jsr .4
@ -835,7 +784,7 @@ MENU.GetKeyString
.5 lda KEYMOD.S,y
sta TEXTBUF,x
beq .6
inx
iny
bra .5
@ -893,83 +842,7 @@ MENU.Save lda #S.CB.CMD.GETRECTBUFSIZE
.9 rts
*--------------------------------------
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 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
MENU.GetDXDY ldy #S.OBJ.X1
lda (ZPMENUPtr),y
clc
adc #1
@ -979,16 +852,6 @@ MENU.GetDXDYW ldy #S.OBJ.X1
adc #0
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
lda (ZPMENUPtr),y
clc
@ -1002,21 +865,31 @@ MENU.GetDXDYW ldy #S.OBJ.X1
rts
*--------------------------------------
MENU.ResetX1Y1X2
lda DX
sta CB.Cache+S.CB.X1
ldy #S.OBJ.X1
lda (ZPMENUPtr),y
clc
adc Counter
sta CB.Cache+S.CB.X2
lda DX+1
adc #1
sta CB.Cache+S.CB.X1
iny
lda (ZPMENUPtr),y
adc #0
sta CB.Cache+S.CB.X1+1
adc Counter+1
sta CB.Cache+S.CB.X2+1
lda DY
sta CB.Cache+S.CB.Y1
lda DY+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
*--------------------------------------
MENU.FindSelected
@ -1024,7 +897,7 @@ MENU.FindSelected
>STYA D
jsr MENU.GetMItems
.1 lda (ZPPtr1)
beq .9
@ -1040,12 +913,12 @@ MENU.FindSelected
.8 clc
rts
.9 >LDYA D
>STYA ZPPtr1
sec
rts
rts
*--------------------------------------
MENU.GetMItems lda ZPMENUPtr
clc
@ -1075,6 +948,83 @@ MENU.NextMItemDY
MENU.NextMItem lda #S.MITEM
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
SAVE usr/src/lib/libgui.s.menu
LOAD usr/src/lib/libgui.s

View File

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

View File

@ -43,37 +43,6 @@ OBJ.Init sta (ZPObjPtr)
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
*--------------------------------------
OBJ.SetProp ldy #3
@ -169,9 +138,10 @@ OBJ.SetX2Y2 >STYA ZPPtr1
adc (ZPPtr1),y
ldy #S.OBJ.Y2+1
sta (ZPPtr1),y
tax
dey
pla
sta (ZPPtr1),y
sta (ZPPtr1),y A,X = Y2
rts
*--------------------------------------
@ -185,6 +155,106 @@ OBJ.GetInCache >STYA .1+1
bpl .1
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
SAVE usr/src/lib/libgui.s.obj

View File

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

View File

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

View File

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

View File

@ -3,7 +3,7 @@ NEW
.LIST OFF
.OP 65C02
.OR $2000
.TF bin/guitest1
.TF root/asmtest/testgui
*--------------------------------------
.INB inc/macros.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
>PUSHWI 40
>PUSHWI 80
>PUSHWI 40
>PUSHWI 360
>PUSHWI 96
>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
>PUSHW L.WND.MBAR
>LIBCALL hLIBGUI,LIBGUI.MBAR.New
sta hMBAR
* >LIBCALL hLIBGUI,LIBGUI.MBAR.New
* sta hMBAR
>PUSHB hWND
>PUSHB hMBAR
* >PUSHB hWND
* >PUSHB hMBAR
>LIBCALL hLIBGUI,LIBGUI.WND.SetMBar
>PUSHB hWND
@ -156,7 +156,7 @@ LIBGUI .AZ "libgui"
hLIBGUI .BS 1
*--------------------------------------
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.MBAR .AZ "File"
@ -271,5 +271,5 @@ DS.START
DS.END .ED
*--------------------------------------
MAN
SAVE usr/src/bin/guitest1.s
SAVE root/asmtest/testgui.s
ASM

View File

@ -8,20 +8,21 @@ int bQuit=0;
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,
20,40,200,140);
guiSetProp(hWND, WND_P_pTITLE, "Window title");
20,20,200,100);
guiSetProp(hWND, WND_P_pTITLE, "Libgui C API");
guiSetProp(hWND, WND_P_pSTATUS, "Status bar");
// guiSetProp(hWND, WND_P_BGCOLOR, C.WHITE);
guiSetProp(hWND, WND_P_BGCOLOR, pC_WHITE);
guiShowWnd(hWND);
do {
if (guiGetMsg(&msg))
{
switch msg.type {
case MSG_T_WND:
break;
}
// switch msg.type {
// case MSG_T_WND:
// break;
// }
}
} while (!bQuit)
guiDestroyWnd(hWND);

View File

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