NEW AUTO 3,1 *-------------------------------------- WND.Init >PUSHW L.DEVNAME.GFX >PUSHBI 0 >SYSCALL2 open bcs .9 sta WND.Screen+S.OBJ.hPARENT >LDYA L.DCB.GFX >STYA IOCTL+S.IOCTL.BUFPTR lda #S.IOCTL.S.GETDCB sta IOCTL+S.IOCTL.S >PUSHB WND.Screen+S.OBJ.hPARENT >PUSHBI IOCTL.STATUS >PUSHW L.IOCTL >SYSCALL2 IOCTL .9 rts *-------------------------------------- WND.Setup * stz WND.Stack.Top * stz MENU.Stack.Cnt >LDYA DCB.GFX+S.DCB.GFX.W >STYA WND.Screen+S.OBJ.W >STYA WND.Desktop+S.OBJ.W >STYA WND.SysBar+S.OBJ.W lda SYSFON.Hp2 sta WND.SysBar+S.OBJ.H lda DCB.GFX+S.DCB.GFX.H sta WND.Screen+S.OBJ.H sec sbc WND.SysBar+S.OBJ.H sta WND.Desktop+S.OBJ.H sta WND.SysBar+S.OBJ.Y1 sta RECT.SysBut+S.RECT.Y1 sta RECT.SysWNDs+S.RECT.Y1 sta RECT.SysClk+S.RECT.Y1 lda DCB.GFX+S.DCB.GFX.H dec sta RECT.SysBut+S.RECT.Y2 sta RECT.SysWNDs+S.RECT.Y2 sta RECT.SysClk+S.RECT.Y2 >LDYA L.WND.Screen >STYA WND.Desktop+S.OBJ.hPARENT >STYA WND.SysBar+S.OBJ.hPARENT jsr OBJ.SetX2Y2 >LDYA L.WND.Desktop jsr OBJ.SetX2Y2 >LDYA L.WND.SysBar jsr OBJ.SetX2Y2 >LDYA L.WND.SysBar.2osX ldx hSYSFON jsr FON.GetTextSize lda CB.Cache+S.CB.SrcW clc adc #24 4 + BM width + 4 sta RECT.SysBut+S.RECT.X2 sta RECT.SysWNDs+S.RECT.X1 >LDYA L.WND.SysBar.Clk ldx hSYSFON jsr FON.GetTextSize lda CB.Cache+S.CB.SrcW sec for sbc below adc #8 4 + 00:00 + 4 sta RECT.SysWNDs+S.RECT.X2 lda DCB.GFX+S.DCB.GFX.W sec sbc RECT.SysWNDs+S.RECT.X2 sta RECT.SysWNDs+S.RECT.X2 sta RECT.SysClk+S.RECT.X1 lda DCB.GFX+S.DCB.GFX.W+1 sbc #0 sta RECT.SysWNDs+S.RECT.X2+1 sta RECT.SysClk+S.RECT.X1+1 lda DCB.GFX+S.DCB.GFX.W clc sbc #0 sta RECT.SysClk+S.RECT.X2 lda DCB.GFX+S.DCB.GFX.W sbc #0 sta RECT.SysClk+S.RECT.X2+1 jsr SYSBAR.Show rts *-------------------------------------- WND.Quit lda WND.Screen+S.OBJ.hPARENT beq .8 pha >PUSHBI IOCTL.CLOSE >PUSHWZ pla >SYSCALL2 IOCTL .8 clc WND.Quit.RTS rts *-------------------------------------- * guiNewWnd(sFlags, iX1, iY1, iW, iH) *-------------------------------------- WND.New ldy WND.Stack.Top cpy #WND.MAX bcc .10 lda #E.OOH .9 >POP 9 rts .10 lda #S.OBJ.T.WND jsr OBJ.New bcs .9 >STYA ZPWNDPtr ldy #S.WND.fPaint lda L.WND.fPaint sta (ZPWNDPtr),y iny lda L.WND.fPaint+1 sta (ZPWNDPtr),y >PULLA ldy #S.OBJ.H sta (ZPWNDPtr),y pha >PULLA iny sta (ZPWNDPtr),y ldy #S.WND.InnerH+1 sta (ZPWNDPtr),y pla dey sta (ZPWNDPtr),y >PULLA ldy #S.OBJ.W sta (ZPWNDPtr),y pha >PULLA iny sta (ZPWNDPtr),y ldy #S.WND.InnerW+1 sta (ZPWNDPtr),y pla dey sta (ZPWNDPtr),y >PULLA ldy #S.OBJ.Y1 sta (ZPWNDPtr),y >PULLA iny sta (ZPWNDPtr),y >PULLA ldy #S.OBJ.X1 and PREFS.BestViewedX sta (ZPWNDPtr),y >PULLA iny sta (ZPWNDPtr),y >PULLA bit #S.WND.F.RESIZE beq .2 ora #S.WND.F.BORDER .2 ldy #S.OBJ.F sta (ZPWNDPtr),y ldy #S.PS.PID lda (pPs),y ldy #S.OBJ.hOWNER sta (ZPWNDPtr),y lda L.WND.Desktop ldy #S.OBJ.hPARENT sta (ZPWNDPtr),y iny lda L.WND.Desktop+1 sta (ZPWNDPtr),y txa ID * clc rts *-------------------------------------- WND.Destroy clc rts *-------------------------------------- WND.Activate >SYSCALL2 GetMemPtr >STYA ZPWNDPtr clc WND.Activate.RTS rts *-------------------------------------- WND.Bring2Front ldx WND.Stack.Idx cpx WND.Stack.Top beq WND.Activate.RTS lda WND.Stack-1,x pha .1 lda WND.Stack,x sta WND.Stack-1,x inx cpx WND.Stack.Top bne .1 dec WND.Stack.Top .2 pla *-------------------------------------- * guiShowWnd( hWND ) *-------------------------------------- WND.Show sta WND.hWND ldx WND.Stack.Top beq WND.Show2 lda WND.Stack-1,x >SYSCALL2 GetMemPtr >STYA ZPWNDPtr lda #S.WND.S.ACTIVE jsr WND.ClrStatus jsr CB.GetBuf bcs WND.Activate.RTS jsr WND.DrawTitleBar >LDYA L.WND.Desktop jsr CB.FlushBufToYA lda WND.hWND ldx WND.Stack.Top *-------------------------------------- WND.Show2 sta WND.Stack,x inc WND.Stack.Top >SYSCALL2 GetMemPtr >STYA ZPWNDPtr jsr OBJ.SetX2Y2 ldy #S.WND.InnerY2 sta (ZPWNDPtr),y txa iny sta (ZPWNDPtr),y jsr CB.GetBuf bcs WND.Activate.RTS lda #S.WND.S.ACTIVE jsr WND.SetStatus ldy #S.OBJ.F lda (ZPWNDPtr),y and #S.WND.F.BORDER beq .1 >LDYA ZPWNDPtr ldx #1 jsr OBJ.DrawBorders *-------------------------------------- .1 ldy #S.OBJ.Y1 lda (ZPWNDPtr),y sta Counter iny lda (ZPWNDPtr),y sta Counter+1 ldy #S.WND.pTITLE+1 lda (ZPWNDPtr),y bne .2 ldy #S.OBJ.S lda (ZPWNDPtr),y and #S.WND.F.MOVE+S.WND.F.CLOSE+S.WND.F.MIN+S.WND.F.MAX beq .3 .2 lda SYSFON.Hp2 jsr WND.Add2Counter ldy #S.WND.TBarY2 sta (ZPWNDPtr),y iny txa sta (ZPWNDPtr),y lda #S.WND.S.HASTBAR jsr WND.SetStatus jsr WND.DrawTitleBar bcs .9 *-------------------------------------- .3 ldy #S.WND.pMBAR lda (ZPWNDPtr),y beq .4 lda SYSFON.Hp1 jsr WND.Add2Counter ldy #S.WND.MBarY2 sta (ZPWNDPtr),y iny txa sta (ZPWNDPtr),y lda #S.WND.S.HASMBAR jsr WND.SetStatus ldy #S.WND.pMBAR lda (ZPWNDPtr),y jsr MBAR.Draw *-------------------------------------- .4 lda Counter ldy #S.WND.InnerY1 sta (ZPWNDPtr),y iny lda Counter+1 sta (ZPWNDPtr),y ldy #S.WND.pSTATUS+1 lda (ZPWNDPtr),y beq .8 lda SYSFON.Hp1 jsr WND.Add2Counter ldy #S.WND.InnerY2 lda (ZPWNDPtr),y sec sbc SYSFON.H sta (ZPWNDPtr),y iny lda (ZPWNDPtr),y sbc #0 sta (ZPWNDPtr),y lda #S.WND.S.HASSBAR jsr WND.SetStatus jsr WND.DrawStatusBar *-------------------------------------- .8 ldy #S.WND.InnerH lda (ZPWNDPtr),y sec sbc Counter sta (ZPWNDPtr),y iny lda (ZPWNDPtr),y sbc Counter+1 sta (ZPWNDPtr),y >LDYA L.WND.Desktop jsr CB.FlushBufToYA lda WND.hWND pha bra WND.Paint1 .9 WND.Show.RTS rts *-------------------------------------- WND.Paint pha hWND >SYSCALL2 GetMemPtr >STYA ZPWNDPtr WND.Paint1 ldy #S.WND.fPaint lda (ZPWNDPtr),y sta ZPPtr1 iny lda (ZPWNDPtr),y sta ZPPtr1+1 pla jmp (ZPPtr1) *-------------------------------------- WND.fPaint >SYSCALL2 GetMemPtr >STYA ZPWNDPtr jsr CB.GetBuf bcs WND.Show.RTS lda #S.CB.CMD.FILLRECT sta CB.Cache+S.CB.CMD lda #S.CB.OP.SET+S.CB.OP.COLOR sta CB.Cache+S.CB.OP lda #S.CB.M.MONO sta CB.Cache+S.CB.M ldy #S.WND.BGCOLOR lda (ZPWNDPtr),y sta CB.Cache+S.CB.COLOR ldy #S.OBJ.X1 lda (ZPWNDPtr),y sta CB.Cache+S.CB.X1 iny lda (ZPWNDPtr),y sta CB.Cache+S.CB.X1+1 ldy #S.WND.InnerY1 lda (ZPWNDPtr),y clc adc #1 sta CB.Cache+S.CB.Y1 iny lda (ZPWNDPtr),y adc #0 sta CB.Cache+S.CB.Y1+1 ldy #S.OBJ.X2 lda (ZPWNDPtr),y sta CB.Cache+S.CB.X2 iny lda (ZPWNDPtr),y sta CB.Cache+S.CB.X2+1 ldy #S.WND.InnerY2 lda (ZPWNDPtr),y sec sbc #1 sta CB.Cache+S.CB.Y2 iny lda (ZPWNDPtr),y sbc #0 sta CB.Cache+S.CB.Y2+1 jsr CB.Cache2CBBuf ldy #S.WND.BGBM lda (ZPWNDPtr),y sta CB.Cache+S.CB.SrcPtr iny ora (ZPWNDPtr),y beq .8 lda (ZPWNDPtr),y sta CB.Cache+S.CB.SrcPtr+1 stz S.CB.SrcX stz S.CB.SrcX+1 stz S.CB.SrcY stz S.CB.SrcY+1 ldy #S.WND.InnerW+3 ldx #3 .1 lda (ZPWNDPtr),y sta CB.Cache+S.CB.SrcW,x dey dex bpl .1 lda #S.CB.CMD.BITBLT sta CB.Cache+S.CB.CMD jsr CB.Cache2CBBuf .8 >LDYA L.WND.Desktop jmp CB.FlushBufToYA *-------------------------------------- WND.DrawTitleBar lda #S.CB.CMD.FILLRECT jsr CB.InitCacheA lda #S.CB.OP.SET sta CB.Cache+S.CB.OP lda #S.CB.M.C16 sta CB.Cache+S.CB.M ldx PREFS.TBARCOLORI ldy #S.OBJ.S lda (ZPWNDPtr),y and #S.WND.S.ACTIVE beq .10 ldx PREFS.TBARCOLORA .10 stx CB.Cache+S.CB.COLOR ldy #S.OBJ.X1+5 X1,Y1,X2 ldx #5 .11 lda (ZPWNDPtr),y sta CB.Cache+S.CB.X1,x dey dex bpl .11 >LDYA CB.Cache+S.CB.X1 >STYA DX ldy #S.OBJ.Y1 lda (ZPWNDPtr),y sta DY sec adc SYSFON.H sta CB.Cache+S.CB.Y2 iny lda (ZPWNDPtr),y sta DY+1 adc #0 sta CB.Cache+S.CB.Y2+1 jsr CB.Cache2CBBuf inc DY bne .12 inc DY+1 * TOP LEFT ICON .12 ldy #S.WND.ICON+1 lda (ZPWNDPtr),y tax dey ora (ZPWNDPtr),y bne .1 >LDYA L.BM.Apple bra .2 .1 lda (ZPWNDPtr),y tay txa .2 jsr DRAW.yaBMAtDXDY jsr WND.DrawTitleBarText bcs .9 * TOP RIGHT ICONS ldy #S.OBJ.X2 lda (ZPWNDPtr),y sec sbc #48 sta DX iny lda (ZPWNDPtr),y sbc #0 sta DX+1 ldy #S.OBJ.F lda (ZPWNDPtr),y bit #S.WND.F.MIN beq .3 ldx #BM.ID.MIN jsr DRAW.xBMAtDXDY .3 lda DX clc adc #16 sta DX bcc .31 inc DX+1 .31 ldy #S.OBJ.F lda (ZPWNDPtr),y bit #S.WND.F.MAX beq .4 ldx #BM.ID.MAX jsr DRAW.xBMAtDXDY .4 lda DX clc adc #16 sta DX bcc .41 inc DX+1 .41 ldy #S.OBJ.F lda (ZPWNDPtr),y bit #S.WND.F.CLOSE beq .8 ldx #BM.ID.CLOSE jsr DRAW.xBMAtDXDY .8 clc .9 rts *-------------------------------------- WND.DrawTitleBarText ldy #S.WND.pTITLE lda (ZPWNDPtr),y pha iny lda (ZPWNDPtr),y ply ldx hSYSFON jsr FON.GetTextSize ldy #S.OBJ.W lda (ZPWNDPtr),y sec sbc CB.Cache+S.CB.SrcW sta DX iny lda (ZPWNDPtr),y sbc CB.Cache+S.CB.SrcW+1 lsr ror DX sta DX+1 ldy #S.OBJ.X1 lda (ZPWNDPtr),y clc adc DX and PREFS.BestViewedX sta DX iny lda (ZPWNDPtr),y adc DX+1 sta DX+1 ldy #S.WND.pTITLE lda (ZPWNDPtr),y pha iny lda (ZPWNDPtr),y ply ldx hSYSFON clc jmp DRAW.YATextAtDXDY *-------------------------------------- WND.DrawStatusBar jsr CB.BorderLineH ldy #S.OBJ.X1 ldx #S.CB.X1 jsr CB.GetWndYCacheX ldy #S.WND.SBarY1 ldx #S.CB.Y1 jsr CB.GetWndYCacheX ldy #S.OBJ.X2 ldx #S.CB.X2 jsr CB.GetWndYCacheX jsr CB.Cache2CBBuf lda PREFS.SBarColor jsr CB.FillRectMonoA inc CB.Cache+S.CB.Y1 bne .1 inc CB.Cache+S.CB.Y1+1 .1 ldy #S.OBJ.Y2 ldx #S.CB.Y2 jsr CB.GetWndYCacheX jsr CB.Cache2CBBuf ldy #S.WND.pSTATUS lda (ZPWNDPtr),y pha iny lda (ZPWNDPtr),y ply ldx hSYSFON clc jmp DRAW.YAText *-------------------------------------- WND.SetMBar >PULLW ZPPtr1 >PULLA >SYSCALL2 GetMemPtr >STYA ZPWNDPtr >LDYA ZPPtr1 jsr MBAR.New bcs .9 ldy #S.WND.pMBAR sta (ZPWNDPtr),y * clc .9 rts *-------------------------------------- WND.ClrStatus ldy #S.OBJ.S eor #$ff and (ZPWNDPtr),y sta (ZPWNDPtr),y rts *-------------------------------------- WND.SetStatus ldy #S.OBJ.S ora (ZPWNDPtr),y sta (ZPWNDPtr),y rts *-------------------------------------- WND.Add2Counter clc adc Counter sta Counter bcc .8 inc Counter+1 .8 ldx Counter+1 rts *-------------------------------------- MAN SAVE usr/src/lib/libgui.s.wnd LOAD usr/src/lib/libgui.s ASM