mirror of
https://github.com/A2osX/A2osX.git
synced 2025-02-16 18:30:26 +00:00
693 lines
11 KiB
Plaintext
693 lines
11 KiB
Plaintext
NEW
|
||
AUTO 3,1
|
||
*--------------------------------------
|
||
MENU.MBarInit >STYA ZPMENUPtr
|
||
>STYA ZPPtr1
|
||
|
||
ldy #S.MBAR.S
|
||
lda (ZPPtr1),y
|
||
bmi .80
|
||
|
||
stz DX
|
||
stz DX+1
|
||
|
||
.1 lda (ZPPtr1)
|
||
beq .8
|
||
|
||
lda #S.MBAR.TEXT
|
||
clc
|
||
adc ZPPtr1
|
||
tay
|
||
lda ZPPtr1+1
|
||
adc #0
|
||
|
||
ldx hSYSFONB
|
||
jsr FON.GetTextSize
|
||
|
||
ldy #S.MBAR.X1
|
||
|
||
lda DX
|
||
sta (ZPPtr1),y
|
||
|
||
iny
|
||
|
||
lda DX+1
|
||
sta (ZPPtr1),y
|
||
|
||
iny #S.MBAR.XT
|
||
|
||
lda DX
|
||
clc
|
||
adc PREFS.MBARXMARGIN
|
||
sta DX
|
||
sta (ZPPtr1),y
|
||
|
||
iny
|
||
|
||
lda DX+1
|
||
adc #0
|
||
sta DX+1
|
||
sta (ZPPtr1),y
|
||
|
||
lda DX
|
||
clc
|
||
adc CB.CACHE+S.CB.SrcW
|
||
sta DX
|
||
|
||
lda DX+1
|
||
adc CB.CACHE+S.CB.SrcW+1
|
||
sta DX+1
|
||
|
||
iny #S.MBAR.X2
|
||
|
||
lda DX
|
||
clc
|
||
adc PREFS.MBARXMARGIN
|
||
sta DX
|
||
sta (ZPPtr1),y
|
||
|
||
iny
|
||
|
||
lda DX+1
|
||
adc #0
|
||
sta DX+1
|
||
sta (ZPPtr1),y
|
||
|
||
lda (ZPPtr1)
|
||
clc
|
||
adc ZPPtr1
|
||
sta ZPPtr1
|
||
bcc .1
|
||
inc ZPPtr1+1
|
||
bra .1
|
||
|
||
.8 lda #$80
|
||
|
||
ldy #S.MBAR.S
|
||
sta (ZPMENUPtr),y
|
||
|
||
.80 clc
|
||
rts
|
||
*--------------------------------------
|
||
* MENU.New(int X, int Y, *S.RECT parent *S.MITEM mitems)
|
||
*--------------------------------------
|
||
MENU.New ldy MENU.Stack.Top
|
||
cpy #MENU.MAX
|
||
bcs .90
|
||
|
||
>LDYAI S.MENU
|
||
>SYSCALL2 getmem
|
||
bcs .99
|
||
|
||
>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
|
||
ldy #S.MENU.MITEMS
|
||
sta (ZPMENUPtr),y
|
||
>PULLA
|
||
iny
|
||
sta (ZPMENUPtr),y
|
||
|
||
>PULLW ZPPtr1
|
||
|
||
>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
|
||
|
||
lda ZPMENUPtr
|
||
clc
|
||
adc #S.MENU.pX1
|
||
sta ZPMENUPtr
|
||
bcc .2
|
||
|
||
inc ZPMENUPtr+1
|
||
|
||
.2 ldy #S.RECT-1
|
||
|
||
.3 lda (ZPPtr1),y
|
||
sta (ZPMENUPtr),y
|
||
dey
|
||
bpl .3
|
||
|
||
txa hMenu
|
||
|
||
ldx MENU.Stack.Top
|
||
sta MENU.Stack,x
|
||
inc MENU.Stack.Top
|
||
|
||
clc
|
||
rts
|
||
|
||
.90 lda #E.OOH
|
||
sec
|
||
.99 >POP 8
|
||
MENU.New.RTS rts
|
||
* ----------------------------------------------
|
||
* |Icon ChkMrk "Menu Item" KEYMOD1-KEYMOD2-KEY>|
|
||
* ----------------------------------------------
|
||
MENU.Show >SYSCALL2 GetMemPtr
|
||
>STYA ZPMENUPtr
|
||
|
||
jsr GetCBBuf
|
||
bcs MENU.New.RTS
|
||
|
||
ldy #S.MENU.MITEMS
|
||
lda (ZPMENUPtr),y
|
||
sta ZPPtr1
|
||
iny
|
||
lda (ZPMENUPtr),y
|
||
sta ZPPtr1+1
|
||
|
||
stz DX
|
||
stz DX+1
|
||
|
||
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
|
||
stz DY+1
|
||
|
||
.1 lda (ZPPtr1)
|
||
beq .3
|
||
|
||
jsr MENU.Show.GetW
|
||
|
||
lda DY
|
||
clc
|
||
adc SYSFON.H
|
||
sta DY
|
||
bcc .2
|
||
inc DY+1
|
||
|
||
.2 lda (ZPPtr1)
|
||
clc
|
||
adc ZPPtr1
|
||
sta ZPPtr1
|
||
bcc .1
|
||
inc ZPPtr1+1
|
||
bra .1
|
||
|
||
.3 lda #2+MENU.LMargin+MENU.RMargin 2px Borders+5 LMARGIN (Checked) +5 RMARGIN (SubMenu)
|
||
clc
|
||
adc IY
|
||
sta DX
|
||
bcc .30
|
||
inc DX+1
|
||
|
||
.30 lda DX
|
||
sec 1px sep
|
||
adc IE Text W
|
||
sta DX
|
||
|
||
lda DX+1
|
||
adc IE+1
|
||
sta DX+1
|
||
|
||
lda DX
|
||
sec 1px sep
|
||
adc INE Mod-Key W
|
||
sta DX
|
||
bcc .4
|
||
|
||
inc DX+1
|
||
|
||
.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
|
||
clc
|
||
adc (ZPMENUPtr),y
|
||
tax
|
||
pla
|
||
iny
|
||
adc (ZPMENUPtr),y
|
||
|
||
cpx WND.Screen+S.OBJ.H
|
||
sbc WND.Screen+S.OBJ.H+1
|
||
bcc .5
|
||
|
||
ldy #S.OBJ.Y1
|
||
|
||
lda (ZPMENUPtr),y
|
||
* sec
|
||
sbc DY
|
||
sta (ZPMENUPtr),y
|
||
|
||
iny
|
||
|
||
lda (ZPMENUPtr),y
|
||
sbc DY+1
|
||
sta (ZPMENUPtr),y
|
||
|
||
.5 >LDYA ZPMENUPtr
|
||
jsr OBJ.SetX2Y2
|
||
|
||
jsr MENU.Save
|
||
bcs MENU.Show.RTS
|
||
|
||
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
|
||
|
||
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
|
||
|
||
.8 >LDYA L.WND.Screen
|
||
jmp DrawCBPtrToYA1
|
||
|
||
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
|
||
|
||
lda #17 Reserve space for Icon W + 1px SEP
|
||
sta IY
|
||
|
||
.1 jsr MENU.GetText
|
||
ldx hSYSFON
|
||
jsr FON.GetTextSize
|
||
|
||
ldx CB.Cache+S.CB.SrcW
|
||
cpx IE
|
||
lda CB.Cache+S.CB.SrcW+1
|
||
sbc IE+1
|
||
bcc .2
|
||
|
||
stx IE Set Max text W
|
||
lda CB.Cache+S.CB.SrcW+1
|
||
sta IE+1
|
||
|
||
.2 jsr MENU.GetKeyString
|
||
beq .8
|
||
|
||
ldx hSYSFON
|
||
jsr FON.GetTextSize
|
||
|
||
lda CB.Cache+S.CB.SrcW
|
||
cmp INE
|
||
bcc .8
|
||
|
||
sta INE set Max Mod-key W
|
||
|
||
.8 rts
|
||
*--------------------------------------
|
||
MENU.Show.Borders
|
||
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
|
||
|
||
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
|
||
|
||
lda #S.CB.CMD.VLINE LEFT
|
||
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.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
|
||
jmp MENU.Show.Borders.Y
|
||
|
||
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
|
||
*--------------------------------------
|
||
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 #MENU.LMargin 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
|
||
|
||
lda DX
|
||
sec
|
||
adc IE
|
||
sta DX
|
||
lda DX+1
|
||
adc IE+1
|
||
sta DX+1
|
||
|
||
jsr MENU.GetKeyString
|
||
beq .3
|
||
|
||
ldx hSYSFON
|
||
jsr DRAW.YATextAtDXDY
|
||
|
||
.3 ldy #S.MITEM.F
|
||
lda (ZPPtr1),y
|
||
cmp #S.MITEM.F.SUBMENU
|
||
bne .8
|
||
|
||
lda DX
|
||
sec
|
||
adc INE
|
||
sta DX
|
||
lda DX+1
|
||
adc IE+1
|
||
sta DX+1
|
||
|
||
ldx #BM.ID.RIGHT
|
||
>LDYA L.BMs,x
|
||
jsr DRAW.YABMAtDXDY
|
||
|
||
.8 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
|
||
ldy #S.MITEM.KEYSTR
|
||
lda (ZPPtr1),y
|
||
beq .8
|
||
|
||
clc
|
||
adc ZPPtr1
|
||
tay
|
||
lda ZPPtr1+1
|
||
adc #0 !0
|
||
|
||
.8 rts
|
||
*--------------------------------------
|
||
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,x
|
||
iny
|
||
inx
|
||
cpx #8 X1,Y1,X2,Y2
|
||
bne .1
|
||
|
||
jsr GFXWrite.CB
|
||
|
||
>SYSCALL NewStkObj
|
||
bcs .9
|
||
|
||
stx CB.Cache+S.CB.DstPtr
|
||
|
||
txa
|
||
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,x
|
||
iny
|
||
inx
|
||
cpx #4 W,H
|
||
bne .2
|
||
|
||
jsr GFXWrite.CB
|
||
|
||
clc
|
||
|
||
.9 rts
|
||
*--------------------------------------
|
||
MENU.Destroy ldx MENU.Stack.Top
|
||
beq .8
|
||
|
||
lda MENU.Stack-1,x
|
||
>SYSCALL GetMemPtr
|
||
>STYA ZPMENUPtr
|
||
|
||
jsr CB.ClearCache
|
||
|
||
lda #S.CB.CMD.BITBLT
|
||
sta CB.Cache+S.CB.CMD
|
||
|
||
lda #S.CB.OP.RESTORE
|
||
sta CB.Cache+S.CB.OP
|
||
|
||
ldy #S.OBJ.X1
|
||
ldx #0
|
||
|
||
.1 lda (ZPMENUPtr),y
|
||
sta CB.Cache+S.CB.X1,x
|
||
iny
|
||
inx
|
||
cpx #8 X1,Y1,X2,Y2
|
||
bne .1
|
||
|
||
ldy #S.OBJ.W
|
||
ldx #0
|
||
|
||
.2 lda (ZPMENUPtr),y
|
||
sta CB.Cache+S.CB.SrcW,x
|
||
iny
|
||
inx
|
||
cpx #4 W,H
|
||
bne .2
|
||
|
||
ldy #S.MENU.hSAVEBUF
|
||
lda (ZPMENUPtr),y
|
||
sta CB.Cache+S.CB.DstPtr
|
||
|
||
jsr GFXWrite.CB
|
||
|
||
lda CB.Cache+S.CB.DstPtr
|
||
>SYSCALL2 FreeStkObj
|
||
|
||
ldx MENU.Stack.Top
|
||
lda MENU.Stack-1,x
|
||
>SYSCALL2 FreeMem
|
||
dec MENU.Stack.Top
|
||
|
||
.8 clc
|
||
rts
|
||
*--------------------------------------
|
||
MAN
|
||
SAVE usr/src/lib/libgui.s.menu
|
||
LOAD usr/src/lib/libgui.s
|
||
ASM
|