A2osX/LIB/LIBGUI.S.txt
burniouf 9a7d20a7e1 ProDOS 203 / FX:TC mod for year 2022-2026
FORMAT: new switches & checks
SH:BREAK in FOR and WHILE
ASM / S-C MASM: new directives, CString support and .HX
LC / UC:bugfix
DHGR.DRV:bugfix
LIBGUI:wip
CC:wip
2022-12-07 08:02:29 +01:00

537 lines
12 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

NEW
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
.TF lib/libgui
*--------------------------------------
.INB inc/macros.i
.INB inc/a2osx.i
.INB inc/io.i
.INB inc/mli.i
.INB inc/gfx.i
.INB inc/xy.i
.INB inc/libgui.i
*--------------------------------------
WND.MAX .EQ 64
MENU.MAX .EQ 4
*--------------------------------------
.MA SWAP16
lda ]1
ldx ]2
stx ]1
sta ]2
lda ]1+1
ldx ]2+1
stx ]1+1
sta ]2+1
.EM
.MA NOT16
sec
lda #0
sbc ]1
sta ]1
lda #0
sbc ]1+1
sta ]1+1
.EM
.MA SCMPAX
sec
sbc ]1
txa
sbc ]1+1
bvc :1
eor #$80
:1 .EQ *
.EM
.MA SCMPYA
cpy ]1
sbc ]1+1
bvc :1
eor #$80
:1 .EQ *
.EM
.MA STYAIFGTR
tax
>SCMPYA ]1
bmi :1
sty ]1
stx ]1+1
:1 .EQ *
.EM
.MA STYAIFLWR
tax
>SCMPYA ]1
bpl :1
sty ]1
stx ]1+1
:1 .EQ *
.EM
*--------------------------------------
.DUMMY
.OR ZPLIB
ZPObjPtr .BS 2
ZPRECTPtr .BS 2
ZPWNDPtr .BS 2
ZPBMPtr .BS 2
ZPCBBufPtr .BS 2
ZPPtr1 .BS 2
ZPPtr2 .BS 2
TmpW .BS 2
DX .BS 2
DY .BS 2
IE .BS 2
INE .BS 2
D .BS 2
Counter .BS 2
CLIP.Line.P1 .BS 1
CLIP.Line.P2 .BS 1
IY .BS 1
hCBBuf .BS 1
.ED
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
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
.DA 0
.DA 0
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA LIB.LOAD
.DA LIB.UNLOAD
.DA PTR.Set
.DA PTR.SetPos
.DA PTR.Hide
.DA PTR.Show
.DA PTR.Update
.DA DRAW.Line
.DA DRAW.Fill
.DA DRAW.BitMap
.DA DRAW.Text
.DA OBJ.SetProp
.DA OBJ.GetProp
.DA WND.New
.DA WND.Destroy
.DA WND.Show
.DA WND.Paint
.DA WND.SetMBar
.DA MSG.Get
.DA MBOX.MsgBox
*--------------------------------------
L.WND.fPaint .DA WND.fPaint
*--------------------------------------
L.DEVNAME.GFX .DA DEVNAME.GFX
L.DEVNAME.MOUSE .DA DEVNAME.MOUSE
L.SYSX7 .DA SYSX7
L.SYSX7B .DA SYSX7B
L.IOCTL .DA IOCTL
L.DCB.GFX .DA DCB.GFX
L.MouseClamp .DA MouseClamp
L.MSG .DA MSG
L.MSG.XY .DA MSG+S.MSG.X1
L.CB.PTR .DA CB.PTR
L.CB.Cache .DA CB.Cache CB.GFXWrite
.DA CLIP.Cache CB.GFXWrite
L.WND.Screen .DA WND.Screen
L.WND.Desktop .DA WND.Desktop
L.WND.SysBar .DA WND.SysBar
L.WND.SysBar.2osX .DA WND.SysBar.2osX
L.WND.SysBar.Clk .DA WND.SysBar.Clk
L.RECT.SysBut .DA RECT.SysBut
L.RECT.SysWNDs .DA RECT.SysWNDs
L.RECT.SysClk .DA RECT.SysClk
L.MENU.Sys .DA MENU.Sys
L.MENU.Sys.Programs .DA MENU.Sys.Programs
L.MENU.Sys.Settings .DA MENU.Sys.Settings
L.TEXTBUF .DA TEXTBUF
*--------------------------------------
L.BMs .EQ *-2
L.BM.Apple .DA BM.Apple
L.BM.Close .DA BM.Close
L.BM.Max .DA BM.Max
L.BM.Min .DA BM.Min
L.BM.Left .DA BM.Left
L.BM.Right .DA BM.Right
L.BM.Up .DA BM.Up
L.BM.Down .DA BM.Down
L.BM.Info .DA BM.Info
*--------------------------------------
L.BUT.Labels .DA BUT.L.OK
.DA BUT.L.CANCEL
.DA BUT.L.RETRY
.DA BUT.L.IGNORE
.DA BUT.L.YES
.DA BUT.L.NO
*--------------------------------------
L.PTR.SaveBuf .DA PTR.SaveBuf
L.Cursors .DA PTR.Arrow
.DA PTR.Move
.DA PTR.ResizeX
.DA PTR.ResizeY
.DA PTR.ResizeXY1
.DA PTR.ResizeXY2
.DA PTR.Cross
.DA PTR.Text
.DA PTR.Wait1
.DA PTR.Wait2
.DA PTR.Wait3
.DA PTR.Wait4
.DA PTR.Wait5
.DA PTR.Wait6
*--------------------------------------
J.Clip .DA CLIP.Point SETPIXEL
.DA CLIP.Point GETPIXEL
.DA CLIP.HLine HLINE
.DA CLIP.VLine VLINE
.DA CLIP.Rectangle FILLRECT
.DA CLIP.BitBlt BITBLT
.DA CLIP.Rectangle GETRECTBUFSIZE
.DA CLIP.Text DRAWTEXT
.DA CLIP.Text GETTEXTSIZE
.DA CLIP.Line DRAWLINE
.DA CLIP.BitBlt DRAWTEXT2
*--------------------------------------
J.OBJ.Enter .DA WND.Enter
.DA MBAR.Enter
.DA MENU.Enter
.DA BUT.Enter
.DA TEXT.Enter
.DA BITMAP.Enter
.DA LABEL.Enter
*--------------------------------------
J.OBJ.Leave .DA WND.Leave
.DA MBAR.Leave
.DA MENU.Leave
.DA BUT.Leave
.DA TEXT.Leave
.DA BITMAP.Leave
.DA LABEL.Leave
*--------------------------------------
J.OBJ.fPaintX .DA WND.fPaint
.DA $FFFF MBAR
.DA $FFFF MENU
.DA BUT.fPaint
.DA TEXT.fPaint
.DA BITMAP.fPaint
.DA LABEL.fPaint
.DA 0
*--------------------------------------
LIB.LOAD lda LibCount
bne .8
jsr MOU.Init
* bcs .9
jsr WND.Init
bcs .9
jsr FON.Init
bcs .9
jsr WND.Setup
lda hDevMouse
beq .1
jsr MOU.Setup
.1 lda #PTR.T.ARROW
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
.9 rts
*--------------------------------------
LIB.UNLOAD dec LibCount
bne .8
jsr MOU.Quit
.8 clc
rts
*--------------------------------------
SkipAPtr1 clc
adc ZPPtr1
sta ZPPtr1
bcc .8
inc ZPPtr1+1
.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
*--------------------------------------
SkipAPtr2 clc
adc ZPPtr2
sta ZPPtr2
bcc .8
inc ZPPtr2+1
.8 rts
*--------------------------------------
SkipStrZPtr2 ldy #$ff
.1 iny
lda (ZPPtr2),y
bne .1
tya
sec \0
adc ZPPtr2
sta ZPPtr2
bcc .8
inc ZPPtr1+2
.8 rts
*--------------------------------------
.INB usr/src/lib/libgui.s.bitmap
.INB usr/src/lib/libgui.s.bm
.INB usr/src/lib/libgui.s.but
.INB usr/src/lib/libgui.s.cb
.INB usr/src/lib/libgui.s.clip
.INB usr/src/lib/libgui.s.cur
.INB usr/src/lib/libgui.s.draw
.INB usr/src/lib/libgui.s.fon
.INB usr/src/lib/libgui.s.label
.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
.INB usr/src/lib/libgui.s.obj
* .INB usr/src/lib/libgui.s.pat
.INB usr/src/lib/libgui.s.ptr
.INB usr/src/lib/libgui.s.sysbar
.INB usr/src/lib/libgui.s.text
.INB usr/src/lib/libgui.s.wnd
*--------------------------------------
CS.END
*--------------------------------------
.INB usr/src/lib/libgui.g.bm
.INB usr/src/lib/libgui.g.cur
.INB usr/src/lib/libgui.g.fon
.INB usr/src/lib/libgui.g.ptr
*--------------------------------------
DEVNAME.GFX .AZ "/dev/gfx"
DEVNAME.MOUSE .AZ "/dev/mou1"
*--------------------------------------
SYSX7 .AZ "${ROOT}opt/gui/fonts/sysx7"
SYSX7B .AZ "${ROOT}opt/gui/fonts/sysx7b"
*--------------------------------------
LibCount .BS 1
hDevMouse .BS 1
*--------------------------------------
OBJ.SizeOf .DA S.WND
.DA 0
.DA 0
.DA S.BUT
.DA S.TEXT
.DA S.BITMAP
.DA S.LABEL
*--------------------------------------
BUT.L.OK .AZ "Ok"
BUT.L.CANCEL .AZ "Cancel"
BUT.L.RETRY .AZ "Retry"
BUT.L.IGNORE .AZ "Ignore"
BUT.L.YES .AZ "Yes"
BUT.L.NO .AZ "No"
*--------------------------------------
CB.CmdLen .DA #S.CB.Y1+1 SETPIXEL
.DA #S.CB.Y1+1 GETPIXEL
.DA #S.CB.Y2+1 HLINE
.DA #S.CB.Y2+1 VLINE
.DA #S.CB.Y2+1 FILLRECT
.DA #S.CB.DstPtr+1 BITBLT
.DA #S.CB.DstPtr+1 GETRECTBUFSIZE
.DA #S.CB.TxtPtr+1 DRAWTEXT
.DA #S.CB.TxtPtr+1 GETTEXTSIZE
.DA #S.CB.Y2+1 DRAWLINE
.DA #S.CB.TxtPtr+1 DRAWTEXT2
*--------------------------------------
PAT.Buf .BS 1 S.BM.F
.DA #1 S.BM.RowBytes
.DA 8 S.BM.W
.DA 8 S.BM.H
.DA 0 S.BM.MASK.OFS
.BS 8 (data)
*--------------------------------------
IOCTL .BS S.IOCTL
DCB.GFX .BS S.DCB.GFX
*--------------------------------------
MSG .BS S.MSG
*--------------------------------------
CB.PTR .DA #S.CB.CMD.BITBLT
.BS 1 S.CB.OP
.DA #S.CB.M.MONO
.DA #0
.BS S.CB-4
*--------------------------------------
CB.Cache .BS S.CB CB.GFXWrite:
CLIP.Cache .BS S.CB ,x select Cache
CLIP.Screen .BS S.RECT CLIP.BitBltX:
CLIP.Rect .BS S.RECT ,x select clipping region
*--------------------------------------
MENU.Stack.Owner .BS 1
MENU.Stack.Idx .BS 1
MENU.Stack.Cnt .BS 1
MENU.Stack .BS MENU.MAX
*--------------------------------------
WND.hWND .BS 1
WND.Stack.Idx .BS 1
WND.Stack.Top .BS 1
WND.Stack .BS WND.MAX
*--------------------------------------
WND.Screen .DA #S.OBJ.T.WND
.BS S.WND-1
*--------------------------------------
WND.Desktop .DA #S.OBJ.T.WND
.BS S.WND-1
*--------------------------------------
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
*--------------------------------------
RECT.SysBut .BS S.RECT
*--------------------------------------
RECT.SysWNDs .BS S.RECT
*--------------------------------------
RECT.SysClk .BS S.RECT
*--------------------------------------
MENU.Sys .DA #S.MITEM.T.ITEM
.DA #2 ID
.DA #KEYMOD.CTRL+KEYMOD.OA+KEYMOD.CA,#'A'
.DA BM.ID.APPLE pICON
.AZ "About..."
.DA #S.MITEM.T.SEP
.DA #S.MITEM.T.SUBMENU
MENU.Sys.1 .DA MENU.Sys.Programs
.DA 0 pICON
.AZ "Programs"
.DA #S.MITEM.T.SUBMENU
MENU.Sys.2 .DA MENU.Sys.Settings
.DA 0 pICON
.AZ "Settings"
.DA #S.MITEM.T.SEP
.DA #S.MITEM.T.ITEM
.DA #8 ID
.DA #0,#0
.DA 0 pICON
.AZ "Search..."
.DA #S.MITEM.T.ITEM
.DA #10 ID
.DA #KEYMOD.CTRL+KEYMOD.OA,#'R'
.DA 0 pICON
.AZ "Run..."
.DA #0
*--------------------------------------
MENU.Sys.Programs
.DA #S.MITEM.T.ITEM
.DA #42 ID
.DA #0,#0
.DA BM.ID.APPLE pICON
.AZ "Test ASM"
.DA #S.MITEM.t.ITEM
.DA #44 ID
.DA #0,#0
.DA BM.ID.APPLE pICON
.AZ "Test C"
.DA #0
*--------------------------------------
MENU.Sys.Settings
.DA #S.MITEM.T.ITEM
.DA #62 ID
.DA #0,#0
.DA 0 pICON
.AZ "Colors..."
.DA #S.MITEM.T.ITEM
.DA #64 ID
.DA #0,#0
.DA 0 pICON
.AZ "SubItem2..."
.DA #0
*--------------------------------------
KEYMOD.S.CTRL .EQ 0
KEYMOD.S .AZ "Ctrl-"
KEYMOD.S.OA .EQ *-KEYMOD.S
.DA #01,#'-',#0
KEYMOD.S.CA .EQ *-KEYMOD.S
.DA #02,#'-',#0
*--------------------------------------
MouseClamp .EQ * MOU.Setup
TEXTBUF .BS 16 for composing HotKey strings
*--------------------------------------
PREFS.BestViewedX .DA #$FC
PREFS.nBestViewedX .DA #$03
PREFS.XMargin .DA #4
PREFS.XSeparator .DA #4
*
PREFS.MenuColor .DA #C.WHITE
PREFS.SysBarColor .DA #C.WHITE
PREFS.BorderColor .DA #C.BLACK
PREFS.TBarColorA .DA #C16.D.BLUE
PREFS.TBarColorI .DA #C16.L.BLUE
PREFS.MBarColor .DA #C.WHITE
PREFS.SBarColor .DA #C.WHITE
PREFS.DESKTOPCOLOR .DA #C16.D.BLUE
*--------------------------------------
MAN
SAVE usr/src/lib/libgui.s
ASM