NEW AUTO 3,1 .LIST OFF .OP 65C02 .OR $2000 .TF lib/libgui *-------------------------------------- .INB inc/macros.i .INB inc/a2osx.i .INB inc/kernel.i .INB inc/gfx.i .INB inc/libgui.i *-------------------------------------- WND.MAX .EQ 64 *-------------------------------------- .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 ZPPtr1 .BS 2 ZPObjPtr .BS 2 ZPCBPtr .BS 2 ZPWNDPtr .BS 2 CLIP.Line.P1 .BS 1 CLIP.Line.P2 .BS 1 DX .BS 2 DY .BS 2 IY .BS 1 IE .BS 2 D .BS 2 INE .BS 2 Counter .BS 2 hCBBuf .BS 1 ZPCBBufPtr .BS 2 .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 Draw .DA SetCursor .DA SetCursorPos .DA HideCursor .DA ShowCursor .DA UpdateCursor .DA MOU.ReadMouse .DA GetScreenGC .DA WND.Create .DA WND.SetProp .DA WND.GetProp .DA WND.Show *-------------------------------------- J.Cmds .DA DrawLine .DA DrawText2 *-------------------------------------- J.OBJ .DA J.WND .DA J.MENUBAR .DA J.MENU .DA J.MENUITEM .DA J.BUT .DA J.TEXT *-------------------------------------- J.WND .DA WND.New .DA WND.Paint .DA WND.Close *-------------------------------------- J.MENUBAR .DA MENUBAR.New .DA MENUBAR.Paint .DA MENUBAR.Close *-------------------------------------- J.MENU .DA MENU.New .DA MENU.Paint .DA MENU.Close *-------------------------------------- J.MENUITEM .DA MENUITEM.New .DA MENUITEM.Paint .DA MENUITEM.Close *-------------------------------------- J.BUT .DA BUT.New .DA BUT.Paint .DA BUT.Close *-------------------------------------- J.TEXT .DA TEXT.New .DA TEXT.Paint .DA TEXT.Close *-------------------------------------- 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.CB.Cache .DA CB.Cache L.WND.Screen .DA WND.Screen L.WND.Desktop .DA WND.Desktop L.WND.SysBar .DA WND.SysBar *-------------------------------------- L.BM.Apple .DA BM.Apple *-------------------------------------- L.CUR.CB .DA CUR.CB L.CUR.SaveBuf .DA CUR.SaveBuf L.Cursors .DA CUR.Arrow .DA CUR.ResizeX .DA CUR.ResizeY .DA CUR.ResizeXY1 .DA CUR.ResizeXY2 .DA CUR.Cross .DA CUR.Text .DA CUR.Wait1 .DA CUR.Wait2 .DA CUR.Wait3 .DA CUR.Wait4 .DA CUR.Wait5 .DA CUR.Wait6 J.Clip .DA CLIP.Point SETPIXEL .DA CLIP.Point GETPIXEL .DA CLIP.HLine .DA CLIP.VLine .DA CLIP.Rect FILLRECT .DA CLIP.BitBlt .DA CLIP.Rect GETRECTBUFSIZE .DA CLIP.Line .DA CLIP.Text .DA 0 *-------------------------------------- LIB.LOAD lda LibCount bne .8 jsr MOU.Init * bcs .9 jsr WND.Init bcs .9 jsr FON.Init bcs .9 lda hDevMouse beq .1 jsr MOU.Setup .1 jsr WND.Setup lda #CUR.T.ARROW jsr SetCursor jsr ShowCursor inc LibCount .8 clc .9 rts *-------------------------------------- LIB.UNLOAD dec LibCount bne .8 jsr MOU.Quit .8 clc rts *-------------------------------------- OBJ.Get >STYA .1+1 ldx #S.OBJ-1 .1 lda $ffff,x SELF MODIFIED sta OBJ.Cache,x dex bpl .1 rts *-------------------------------------- OBJ.SetX2Y2 >STYA ZPObjPtr ldy #S.OBJ.W lda (ZPObjPtr),y clc sbc #0 pha iny lda (ZPObjPtr),y sbc #0 tax pla clc ldy #S.OBJ.X1 adc (ZPObjPtr),y pha txa iny adc (ZPObjPtr),y ldy #S.OBJ.X2+1 sta (ZPObjPtr),y dey pla sta (ZPObjPtr),y ldy #S.OBJ.H lda (ZPObjPtr),y clc sbc #0 pha iny lda (ZPObjPtr),y sbc #0 tax pla clc ldy #S.OBJ.Y1 adc (ZPObjPtr),y pha txa iny adc (ZPObjPtr),y ldy #S.OBJ.Y2+1 sta (ZPObjPtr),y dey pla sta (ZPObjPtr),y rts *-------------------------------------- CB.Get >STYA .1+1 ldx #S.CB-1 .1 lda $ffff,x SELF MODIFIED sta CB.Cache,x dex bpl .1 rts *-------------------------------------- GetCBBuf >LDYAI 256 >SYSCALL GetMem bcs .9 stx hCBBuf >STYA ZPCBPtr >STYA ZPCBBufPtr .9 rts *-------------------------------------- PutCBBuf sta (ZPCBBufPtr) inc ZPCBBufPtr bne .8 inc ZPCBBufPtr+1 .8 rts *-------------------------------------- GFXWrite.CB >LDYA L.CB.Cache GFXWrite.YA pha >PUSHB WND.Screen+S.OBJ.hPARENT >PUSHBI IOCTL.WRITE pla >PUSHYA >SYSCALL2 IOCTL rts *-------------------------------------- GetScreenGC >LDYA L.WND.Screen rts *-------------------------------------- .INB usr/src/lib/libgui.s.bm .INB usr/src/lib/libgui.s.but .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.menu .INB usr/src/lib/libgui.s.mou .INB usr/src/lib/libgui.s.pat .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.wnd *-------------------------------------- DEVNAME.GFX .AZ "/dev/gfx" DEVNAME.MOUSE .AZ "/dev/mou1" *-------------------------------------- SYSX7 .AZ "${ROOT}sbin/sysx7" SYSX7B .AZ "${ROOT}sbin/sysx7b" *-------------------------------------- LibCount .BS 1 hDevMouse .BS 1 *-------------------------------------- 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 MOUSEDATA .BS S.MOUSE *-------------------------------------- MouseClamp .BS 8 *-------------------------------------- CB.Cache .BS S.CB OBJ.Cache .BS S.OBJ *-------------------------------------- WND.Screen .DA #S.OBJ.T.WND .BS S.WND-1 *-------------------------------------- WND.Screen.Childs .BS 2 WND.Desktop .BS 2 WND.SysBar .DA 0 *-------------------------------------- WND.Desktop .DA #S.OBJ.T.WND .BS S.WND-1 *-------------------------------------- WND.SysBar .DA #S.OBJ.T.WND .BS S.WND-1 WND.SysBar.Childs .BS 2 BUT.Sys .DA 0 *-------------------------------------- BUT.Sys .DA #S.OBJ.T.BUT .DA #0 F .DA #0 S .DA #2 ID .DA 0 hOWNER .DA 0 pPARENT .BS S.OBJ-S.OBJ.X1 .BS 2 S.BUT.hBM .AZ "A2osX" S.BUT.TEXT *-------------------------------------- MENU.Sys .DA #2 ID .DA #0 KEYMOD .DA #0 KEY .AZ "About..." .DA #0 *-------------------------------------- PREFS.BORDERCOLOR .DA #0 BLACK *-------------------------------------- MAN SAVE usr/src/lib/libgui.s ASM