A2osX/LIB/LIBGUI.S.MENU.txt

645 lines
10 KiB
Plaintext
Raw Normal View History

NEW
2019-07-30 08:57:25 +00:00
AUTO 3,1
*--------------------------------------
2020-09-30 15:32:54 +00:00
MENU.MBarInit >STYA ZPMENUPtr
>STYA ZPPtr1
ldy #S.MBAR.S
lda (ZPPtr1),y
bmi .80
2020-09-15 14:48:35 +00:00
2020-09-29 15:37:26 +00:00
stz DX
stz DX+1
2020-10-01 06:08:33 +00:00
2020-09-29 15:37:26 +00:00
.1 lda (ZPPtr1)
beq .8
2020-09-30 15:32:54 +00:00
lda #S.MBAR.TEXT
clc
adc ZPPtr1
tay
lda ZPPtr1+1
adc #0
2020-09-29 15:37:26 +00:00
ldx hSYSFONB
jsr FON.GetTextSize
ldy #S.MBAR.X1
lda DX
sta (ZPPtr1),y
iny
lda DX+1
sta (ZPPtr1),y
2020-10-01 06:08:33 +00:00
iny #S.MBAR.XT
2020-09-29 15:37:26 +00:00
lda DX
clc
2020-10-01 06:08:33 +00:00
adc PREFS.MBARXMARGIN
2020-09-29 15:37:26 +00:00
sta DX
sta (ZPPtr1),y
iny
2020-10-01 06:08:33 +00:00
2020-09-29 15:37:26 +00:00
lda DX+1
adc #0
sta DX+1
sta (ZPPtr1),y
2020-09-15 14:48:35 +00:00
2020-09-29 15:37:26 +00:00
lda DX
clc
2020-10-01 06:08:33 +00:00
adc CB.CACHE+S.CB.SrcW
2020-09-29 15:37:26 +00:00
sta DX
lda DX+1
2020-10-01 06:08:33 +00:00
adc CB.CACHE+S.CB.SrcW+1
2020-09-29 15:37:26 +00:00
sta DX+1
iny #S.MBAR.X2
lda DX
clc
2020-10-01 06:08:33 +00:00
adc PREFS.MBARXMARGIN
2020-09-29 15:37:26 +00:00
sta DX
sta (ZPPtr1),y
iny
2020-09-15 14:48:35 +00:00
2020-09-29 15:37:26 +00:00
lda DX+1
adc #0
sta DX+1
sta (ZPPtr1),y
lda (ZPPtr1)
2020-09-30 15:32:54 +00:00
clc
2020-09-29 15:37:26 +00:00
adc ZPPtr1
sta ZPPtr1
bcc .1
inc ZPPtr1+1
bra .1
.8 lda #$80
ldy #S.MBAR.S
2020-10-12 06:04:19 +00:00
sta (ZPMENUPtr),y
2020-09-15 14:48:35 +00:00
2020-09-30 15:32:54 +00:00
.80 clc
2020-09-15 14:48:35 +00:00
rts
*--------------------------------------
2020-10-09 06:02:45 +00:00
* MENU.New(int X, int Y, *MITEM mitems)
2020-09-07 20:40:50 +00:00
*--------------------------------------
2020-10-09 06:02:45 +00:00
MENU.New >LDYAI S.MENU
>SYSCALL2 getmem
bcs .9
>STYA ZPMENUPtr
lda #S.OBJ.T.MENU
sta (ZPMENUPtr) S.OBJ.T
lda #0
ldy #S.MENU-1
.1 sta (ZPMENUPtr),y
dey
bne .1
>PULLA
2020-10-09 15:28:01 +00:00
ldy #S.MENU.MITEMS
2020-10-09 06:02:45 +00:00
sta (ZPMENUPtr),y
>PULLA
iny
sta (ZPMENUPtr),y
>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
2020-10-09 15:28:01 +00:00
txa hMenu
* clc
rts
.9 >POP 6
MENU.New.RTS rts
*--------------------------------------
2020-10-12 06:04:19 +00:00
* ----------------------------------------------
* |Icon ChkMrk "Menu Item" KEYMOD1-KEYMOD2-KEY>|
* ----------------------------------------------
2020-10-09 15:28:01 +00:00
MENU.Show >SYSCALL2 GetMemPtr
>STYA ZPMENUPtr
jsr GetCBBuf
bcs MENU.New.RTS
2020-10-12 06:04:19 +00:00
2020-10-09 15:28:01 +00:00
ldy #S.MENU.MITEMS
lda (ZPMENUPtr),y
sta ZPPtr1
iny
lda (ZPMENUPtr),y
sta ZPPtr1+1
2020-10-12 06:04:19 +00:00
stz DX
stz DX+1
2020-10-09 15:28:01 +00:00
stz IY Icon Margin W
stz IE Max Text W
stz IE+1
stz INE Max Mod-Key W
lda #2 2px Borders
sta DY Menu H
2020-10-09 06:02:45 +00:00
stz DY+1
2020-10-09 15:28:01 +00:00
.1 lda (ZPPtr1)
beq .3
2020-10-12 06:04:19 +00:00
2020-10-09 15:28:01 +00:00
jsr MENU.Show.GetW
lda DY
clc
adc SYSFON.H
sta DY
bcc .2
inc DY+1
2020-10-09 06:02:45 +00:00
.2 lda (ZPPtr1)
2020-10-09 15:28:01 +00:00
clc
adc ZPPtr1
sta ZPPtr1
bcc .1
inc ZPPtr1+1
bra .1
2020-10-12 06:04:19 +00:00
.3 lda #12 2px Borders+5 LMARGIN (Checked) +5 RMARGIN (SubMenu)
2020-10-09 15:28:01 +00:00
clc
2020-10-12 06:04:19 +00:00
adc IY
sta DX
bcc .30
inc DX+1
.30 lda DX
sec 1px sep
2020-10-09 15:28:01 +00:00
adc IE Text W
sta DX
lda DX+1
adc IE+1
sta DX+1
lda DX
2020-10-12 06:04:19 +00:00
sec 1px sep
2020-10-09 15:28:01 +00:00
adc INE Mod-Key W
sta DX
bcc .4
inc DX+1
2020-10-12 06:04:19 +00:00
.4 ldy #S.OBJ.W
sta (ZPMENUPtr),y
iny
lda DX+1
sta (ZPMENUPtr),y
iny #S.OBJ.H
lda DY
sta (ZPMENUPtr),y
tax
iny
lda DY+1
sta (ZPMENUPtr),y
pha
txa
ldy #S.OBJ.Y1
2020-10-09 15:28:01 +00:00
clc
2020-10-12 06:04:19 +00:00
adc (ZPMENUPtr),y
2020-10-09 15:28:01 +00:00
tax
2020-10-12 06:04:19 +00:00
pla
2020-10-09 15:28:01 +00:00
iny
2020-10-12 06:04:19 +00:00
adc (ZPMENUPtr),y
2020-10-09 15:28:01 +00:00
cpx WND.Screen+S.OBJ.H
sbc WND.Screen+S.OBJ.H+1
bcc .5
2020-10-12 06:04:19 +00:00
ldy #S.OBJ.Y1
2020-10-09 15:28:01 +00:00
lda (ZPMENUPtr),y
* sec
sbc DY
sta (ZPMENUPtr),y
iny
lda (ZPMENUPtr),y
sbc DY+1
sta (ZPMENUPtr),y
2020-10-09 06:02:45 +00:00
2020-10-12 06:04:19 +00:00
.5 >LDYA ZPMENUPtr
jsr OBJ.SetX2Y2
2020-10-12 15:36:10 +00:00
jsr MENU.Save
bcs MENU.Show.RTS
2020-10-12 06:04:19 +00:00
jsr MENU.Show.Borders
ldy #S.MENU.MITEMS
lda (ZPMENUPtr),y
sta ZPPtr1
iny
lda (ZPMENUPtr),y
sta ZPPtr1+1
ldy #S.OBJ.Y1
lda (ZPMENUPtr),y
clc
adc #1
sta DY
iny
lda (ZPMENUPtr),y
adc #0
sta DY+1
.6 lda (ZPPtr1)
beq .8
2020-10-09 06:02:45 +00:00
2020-10-12 06:04:19 +00:00
jsr MENU.Show.Item
lda DY
clc
adc SYSFON.H
sta DY
bcc .7
inc DY+1
.7 lda (ZPPtr1)
clc
adc ZPPtr1
sta ZPPtr1
bcc .6
inc ZPPtr1+1
bra .6
2020-10-09 15:28:01 +00:00
.8 >LDYA L.WND.Screen
jmp DrawCBPtrToYA1
2020-10-09 06:02:45 +00:00
2020-10-09 15:28:01 +00:00
MENU.Show.RTS rts
*--------------------------------------
MENU.Show.GetW ldy #S.MITEM.F
lda (ZPPtr1),y
cmp #S.MITEM.F.SEP
beq MENU.Show.RTS
ldy #S.MITEM.pICON
lda (ZPPtr1),y
iny
ora (ZPPtr1),y
beq .1
2020-10-12 06:04:19 +00:00
lda #17 Reserve space for Icon W + 1px SEP
sta IY
2020-10-09 15:28:01 +00:00
2020-10-12 06:04:19 +00:00
.1 jsr MENU.GetText
2020-10-09 15:28:01 +00:00
ldx hSYSFON
jsr FON.GetTextSize
2020-10-12 06:04:19 +00:00
ldx CB.Cache+S.CB.SrcW
cpx IE
2020-10-09 15:28:01 +00:00
lda CB.Cache+S.CB.SrcW+1
sbc IE+1
bcc .2
2020-10-12 06:04:19 +00:00
stx IE Set Max text W
2020-10-09 15:28:01 +00:00
lda CB.Cache+S.CB.SrcW+1
sta IE+1
2020-10-12 06:04:19 +00:00
.2 jsr MENU.GetKeyString
2020-10-09 15:28:01 +00:00
beq .8
>LDYA L.KEYSTRING
ldx hSYSFON
jsr FON.GetTextSize
2020-10-12 06:04:19 +00:00
lda CB.Cache+S.CB.SrcW
cmp INE
bcc .8
sta INE set Max Mod-key W
2020-10-09 15:28:01 +00:00
.8 rts
*--------------------------------------
2020-10-12 15:36:10 +00:00
MENU.Save jsr CB.ClearCache
lda #S.CB.CMD.GETRECTBUFSIZE
sta CB.Cache+S.CB.CMD
ldy #S.OBJ.X1
ldx #0
.1 lda (ZPMENUPtr),y
sta CB.Cache+S.CB.X1
iny
inx
cpx #8 X1,Y1,X2,Y2
bne .1
jsr GFXWrite.CB
>SYSCALL NewStkObj
bcs .9
stx CB.Cache+S.CB.DstPtr
ldy #S.MENU.hSAVEBUF
sta (ZPMENUPtr),y
lda #S.CB.CMD.BITBLT
sta CB.Cache+S.CB.CMD
lda #S.CB.OP.SAVE
sta CB.Cache+S.CB.OP
ldy #S.OBJ.W
ldx #0
.2 lda (ZPMENUPtr),y
sta CB.Cache+S.CB.SrcW
iny
inx
cpx #4 W,H
bne .2
>DEBUG
jsr GFXWrite.CB
* clc
.9 rts
*--------------------------------------
2020-10-09 15:28:01 +00:00
MENU.Show.Borders
2020-10-12 06:04:19 +00:00
lda #S.CB.CMD.FILLRECT
jsr PutA2CBBuf
lda #S.CB.OP.SET
jsr PutA2CBBuf
lda #S.CB.M.MONO
jsr PutA2CBBuf
lda PREFS.MENUCOLOR
jsr PutA2CBBuf
ldy #S.OBJ.X1
jsr MENU.Show.Borders.Y
ldy #S.OBJ.Y1
jsr MENU.Show.Borders.Y
ldy #S.OBJ.X2
jsr MENU.Show.Borders.Y
ldy #S.OBJ.Y2
jsr MENU.Show.Borders.Y
2020-10-09 15:28:01 +00:00
lda #S.CB.CMD.HLINE TOP
jsr MENU.Show.Borders.H
ldy #S.OBJ.X1
jsr MENU.Show.Borders.Y
ldy #S.OBJ.Y1
jsr MENU.Show.Borders.Y
ldy #S.OBJ.X2
jsr MENU.Show.Borders.Y
ldy #S.OBJ.Y1
jsr MENU.Show.Borders.Y
2020-10-12 06:04:19 +00:00
2020-10-09 15:28:01 +00:00
lda #S.CB.CMD.VLINE LEFT
2020-10-12 06:04:19 +00:00
jsr MENU.Show.Borders.H
2020-10-09 15:28:01 +00:00
ldy #S.OBJ.X1
jsr MENU.Show.Borders.Y
ldy #S.OBJ.Y1
jsr MENU.Show.Borders.Y
ldy #S.OBJ.X1
jsr MENU.Show.Borders.Y
ldy #S.OBJ.Y2
jsr MENU.Show.Borders.Y
lda #S.CB.CMD.VLINE RIGHT
jsr MENU.Show.Borders.H
ldy #S.OBJ.X2
jsr MENU.Show.Borders.Y
ldy #S.OBJ.Y1
jsr MENU.Show.Borders.Y
ldy #S.OBJ.X2
jsr MENU.Show.Borders.Y
ldy #S.OBJ.Y2
jsr MENU.Show.Borders.Y
lda #S.CB.CMD.HLINE BOTTOM
jsr MENU.Show.Borders.H
ldy #S.OBJ.X1
jsr MENU.Show.Borders.Y
ldy #S.OBJ.Y2
jsr MENU.Show.Borders.Y
ldy #S.OBJ.X2
jsr MENU.Show.Borders.Y
ldy #S.OBJ.Y2
2020-10-12 06:04:19 +00:00
jmp MENU.Show.Borders.Y
2020-10-09 15:28:01 +00:00
MENU.Show.Borders.H
jsr PutA2CBBuf
lda #S.CB.OP.SET
jsr PutA2CBBuf
lda #S.CB.M.MONO
jsr PutA2CBBuf
lda PREFS.BORDERCOLOR
jmp PutA2CBBuf
MENU.Show.Borders.Y
lda (ZPMENUPtr),y
jsr PutA2CBBuf
iny
lda (ZPMENUPtr),y
jmp PutA2CBBuf
*--------------------------------------
2020-10-12 06:04:19 +00:00
MENU.Show.Item ldy #S.MITEM.F
lda (ZPPtr1),y
cmp #S.MITEM.F.SEP
bne .1
lda #S.CB.CMD.HLINE
jsr PutA2CBBuf
lda #S.CB.OP.SET
jsr PutA2CBBuf
lda #S.CB.M.MONO
jsr PutA2CBBuf
lda PREFS.BORDERCOLOR
jsr PutA2CBBuf
ldy #S.OBJ.X1
jsr MENU.Show.Borders.Y
lda SYSFON.H
lsr
clc
adc DY
jsr PutA2CBBuf
lda DY+1
adc #0
jsr PutA2CBBuf
ldy #S.OBJ.X2
jsr MENU.Show.Borders.Y
ldy #S.OBJ.Y1
jmp MENU.Show.Borders.Y
*--------------------------------------
.1 ldy #S.OBJ.X1
lda (ZPMENUPtr),y
sec +1px Border
adc #5 TODO : Checked
sta DX
iny
lda (ZPMENUPtr),y
adc #0
sta DX+1
jsr MENU.GetIcon
beq .2
jsr DRAW.YABMAtDXDY
.2 lda DX
clc
adc IY Icon reserved W
sta DX
lda DX+1
adc #0
sta DX+1
jsr MENU.GetText
ldx hSYSFON
jsr DRAW.YATextAtDXDY
jsr MENU.GetKeyString
beq .3
lda DX
sec
adc IE
sta DX
lda DX+1
adc IE+1
sta DX+1
>LDYA L.KEYSTRING
ldx hSYSFON
jsr DRAW.YATextAtDXDY
.3
clc
rts
*--------------------------------------
MENU.GetIcon ldy #S.MITEM.pICON+1
lda (ZPPtr1),y
bne .1
dey
lda (ZPPtr1),y
beq .8
tax
ldy L.BMs,x
lda L.BMs+1,x NON ZERO
.8 rts
.1 pha
dey
lda (ZPPtr1),y
tay
pla NON ZERO
rts
*--------------------------------------
MENU.GetText lda #S.MITEM.TEXT
clc
adc ZPPtr1
tay
lda ZPPtr1+1
adc #0
rts
*--------------------------------------
MENU.GetKeyString
ldx #0
ldy #S.MITEM.KEYMOD
lda (ZPPtr1),y
beq .6
bit #S.MITEM.KEYMOD.CTRL
beq .4
.3 lda KEY.Ctrl,x
sta KEYSTRING,x
inx
cpx #6
bne .3
lda (ZPPtr1),y
.4 bit #S.MITEM.KEYMOD.OA
beq .5
lda #1
sta KEYSTRING,x
inx
lda #'-'
sta KEYSTRING,x
inx
lda (ZPPtr1),y
.5 bit #S.MITEM.KEYMOD.CA
beq .6
lda #2
sta KEYSTRING,x
inx
lda #'-'
sta KEYSTRING,x
inx
.6 iny
lda (ZPPtr1),y
beq .7
sta KEYSTRING,x
inx
.7 stz KEYSTRING,x
txa
rts
*--------------------------------------
2020-10-09 15:28:01 +00:00
MENU.Destroy
2020-10-12 06:04:19 +00:00
clc
rts
2020-10-09 06:02:45 +00:00
*--------------------------------------
MAN
2020-06-30 15:32:23 +00:00
SAVE usr/src/lib/libgui.s.menu
LOAD usr/src/lib/libgui.s
ASM