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
