NEW AUTO 3,1 .LIST OFF *-------------------------------------- OBJ.Create pha Type tax ldy OBJ.SIZES,x lda #0 >SYSCALL2 GetMem bcs .9 >STYA ZPObjPtr stx hObj pla sta (ZPObjPtr) tax ldy OBJ.SIZES,x lda #0 dey .1 sta (ZPObjPtr),y dey bne .1 * clc rts .9 plx rts *-------------------------------------- OBJ.PullBuf ldy #S.OBJ.BufSize jsr OBJ.PullWordY ldy #S.OBJ.pBuf *-------------------------------------- OBJ.PullWordY >PULLA sta (ZPObjPtr),y tax iny >PULLA sta (ZPObjPtr),y rts *-------------------------------------- OBJ.PullHW ldy #S.OBJ.H >PULLA sta (ZPObjPtr),y dey >PULLA sta (ZPObjPtr),y rts *-------------------------------------- OBJ.PullY1X1hParent >PULLA ldy #S.OBJ.Y1 sta (ZPObjPtr),y dey S.OBJ.X1 >PULLA sta (ZPObjPtr),y dey S.OBJ.hParent >PULLA sta (ZPObjPtr),y rts *-------------------------------------- OBJ.SetX2Y2 ldy #S.OBJ.X1 jsr .7 ldy #S.OBJ.Y1 jsr .7 ldy #S.OBJ.F lda (ZPObjPtr),y and #S.OBJ.F.bHBorder beq .1 ldy #S.OBJ.InnerX lda (ZPObjPtr),y inc sta (ZPObjPtr),y iny iny lda (ZPObjPtr),y S.OBJ.InnerW dec dec sta (ZPObjPtr),y .1 ldx #0 ldy #S.OBJ.F lda (ZPObjPtr),y bit #S.OBJ.F.bVBorder+S.OBJ.F.bTITLE beq .2 dex .2 bit #S.OBJ.F.bVBorder+S.OBJ.F.bSTATUS beq .3 dex .3 txa beq .4 ldy #S.OBJ.InnerY lda (ZPObjPtr),y inc sta (ZPObjPtr),y txa iny iny clc adc (ZPObjPtr),y S.OBJ.InnerH sta (ZPObjPtr),y .4 ldy #S.OBJ.F lda (ZPObjPtr),y bit #S.OBJ.F.bMENU beq .8 ldy #S.OBJ.InnerY lda (ZPObjPtr),y inc sta (ZPObjPtr),y iny iny lda (ZPObjPtr),y S.OBJ.InnerH dec sta (ZPObjPtr),y .8 clc rts *-------------------------------------- .7 lda (ZPObjPtr),y S.OBJ.X1/Y1 tax iny iny S.OBJ.W/H phy clc adc (ZPObjPtr),y dec iny iny S.OBJ.X2/Y2 sta (ZPObjPtr),y iny iny txa sta (ZPObjPtr),y S.OBJ.InnerX/Y ply S.OBJ.W/H lda (ZPObjPtr),y iny iny iny iny iny iny sta (ZPObjPtr),y S.OBJ.InnerW/H rts *-------------------------------------- OBJ.Exec >PUSHA hOBJ jsr LIB.GetOBJ jsr LIB.GetCTX .1 jsr IO.GetC bcs .9 cmp #EV.RESIZE clc beq .99 tay beq .1 >PUSHA jsr OBJ.Run inc pStack tay beq .1 no event, no error .9 inc pStack .99 rts *-------------------------------------- OBJ.Destroy clc rts *-------------------------------------- OBJ.Run ldx ZPObjPtr phx ldx ZPObjPtr+1 phx ldy #1 lda (pStack),y jsr LIB.GetOBJ ldy #S.OBJ.S lda (ZPObjPtr),y and #S.OBJ.S.bDisabled+S.OBJ.S.bHidden bne .9 ldy #1 lda (pStack),y hOBJ >PUSHA lda (pStack),y Event >PUSHA jsr .80 inc pStack inc pStack tax bne .8 error / event bcc .8 ldy #S.OBJ.Childs .1 lda (ZPObjPtr),y beq .5 phy >PUSHA hChild ldy #1 lda (pStack),y Event >PUSHA jsr OBJ.Run ply inc pStack inc pStack bcc .8 tax bne .8 .5 iny cpy #S.OBJ bne .1 .9 sec lda #0 .8 plx stx ZPObjPtr+1 plx stx ZPObjPtr rts .80 lda (ZPObjPtr) S.OBJ.T tax jmp (J.ObjRun,x) *-------------------------------------- OBJ.Draw >PUSHA hObj lda (pStack) jsr LIB.GetOBJ ldy #S.OBJ.S lda (ZPObjPtr),y and #S.OBJ.S.bHidden beq .5 ldy #S.OBJ.Y1 lda (ZPObjPtr),y >PUSHA .1 jsr LB.Init jsr LB.SetColor ldy #S.OBJ.X1 lda (ZPObjPtr),y tax lda (pStack) tay jsr LB.GotoXY ldy #S.OBJ.W lda (ZPObjPtr),y tax lda #C.SPACE .2 jsr LB.COut iny dex bne .2 jsr IO.LBWrite bcs .98 lda (pStack) ldy #S.OBJ.Y2 cmp (ZPObjPtr),y inc sta (pStack) bcc .1 bra .8 *-------------------------------------- .5 jsr OBJ.Draw.Top bcs .99 jsr OBJ.Draw.Body bcs .99 jsr OBJ.Draw.Bottom bcs .99 ldy #S.OBJ.S lda (ZPObjPtr),y and #S.OBJ.S.bHasChilds * clc beq .99 lda #S.OBJ.Childs >PUSHA .6 ldy #1 lda (pStack),y jsr LIB.GetOBJ lda (pStack) tay lda (ZPObjPtr),y beq .7 jsr OBJ.Draw bcs .98 .7 lda (pStack) inc sta (pStack) cmp #S.OBJ bne .6 .8 clc .98 inc pStack .99 inc pStack OBJ.Draw.RTS rts *-------------------------------------- OBJ.Draw.Top lda (pStack) jsr LIB.GetOBJ ldy #S.OBJ.F lda (ZPObjPtr),y and #S.OBJ.F.bTITLE+S.OBJ.F.bHBorder * clc beq OBJ.Draw.RTS OBJ.Draw.Top.I jsr LB.Init ldy #S.OBJ.X1 lda (ZPObjPtr),y tax ldy #S.OBJ.Y1 lda (ZPObjPtr),y tay jsr LB.GotoXY ldy #S.OBJ.F lda (ZPObjPtr),y and #S.OBJ.F.bVBorder beq .1 jsr LB.SetColor ldx #SEQ.BORDERTL-SEQS jsr LB.SeqOut .1 ldy #S.OBJ.F lda (ZPObjPtr),y bpl .4 S.OBJ.F.bTITLE ldx #SEQ.BAR-SEQS jsr LB.SeqOut ldy #S.OBJ.InnerW lda (ZPObjPtr),y tax ldy #S.OBJ.pTitle lda (ZPObjPtr),y sta ZPPtr1 iny lda (ZPObjPtr),y sta ZPPtr1+1 beq .3 lda #C.SI jsr LB.COut ldy #0 .2 lda (ZPPtr1),y beq .3 jsr LB.COut iny dex bne .2 .3 txa beq .31 lda #C.SPACE .30 jsr LB.COut dex bne .30 .31 ldx #SEQ.BAREND-SEQS jsr LB.SeqOut bra .6 .4 ldy #S.OBJ.InnerW lda (ZPObjPtr),y tax lda #'q' .5 jsr LB.COut dex bne .5 .6 ldy #S.OBJ.F lda (ZPObjPtr),y and #S.OBJ.F.bVBorder beq .7 jsr LB.SetColor ldx #SEQ.BORDERTR-SEQS jsr LB.SeqOut .7 jmp IO.LBWrite *-------------------------------------- OBJ.Draw.Body lda (pStack) jsr LIB.GetOBJ OBJ.Draw.Body.I ldy #S.OBJ.InnerY lda (ZPObjPtr),y >PUSHA Start ldy #S.OBJ.InnerH lda (ZPObjPtr),y >PUSHA Count >PUSHBI 0 Relative Y OBJ.Draw.Lines jsr OBJ.CurOff .1 jsr LB.Init ldy #S.OBJ.X1 lda (ZPObjPtr),y tax ldy #2 InnerY lda (pStack),y tay jsr LB.GotoXY jsr LB.SetColor ldy #S.OBJ.F lda (ZPObjPtr),y and #S.OBJ.F.bVBorder php beq .2 ldx #SEQ.BORDERV-SEQS jsr LB.SeqOut .2 jsr OBJ.Draw.Body.JMP ldx #SEQ.NORMAL-SEQS jsr LB.SeqOut plp beq .4 ldy #S.OBJ.X2 lda (ZPObjPtr),y tax ldy #2 InnerY lda (pStack),y tay jsr LB.GotoXY jsr LB.SetColor ldx #SEQ.BORDERV-SEQS jsr LB.SeqOut .4 jsr IO.LBWrite bcs .9 lda (pStack) Relative Y inc sta (pStack) ldy #2 InnerY lda (pStack),y inc sta (pStack),y dey lda (pStack),y Count dec sta (pStack),y bne .1 jsr OBJ.CurOn .9 >POP 3 OBJ.Draw.Body.RTS rts *-------------------------------------- OBJ.Draw.Body.JMP lda (ZPObjPtr) tax jmp (J.ObjDraw,x) *-------------------------------------- OBJ.Draw.Bottom lda (pStack) jsr LIB.GetOBJ ldy #S.OBJ.F lda (ZPObjPtr),y and #S.OBJ.F.bSTATUS+S.OBJ.F.bHBorder * clc beq OBJ.Draw.Body.RTS OBJ.Draw.Bottom.I jsr LB.Init ldy #S.OBJ.X1 lda (ZPObjPtr),y tax ldy #S.OBJ.Y2 lda (ZPObjPtr),y tay jsr LB.GotoXY ldy #S.OBJ.F lda (ZPObjPtr),y and #S.OBJ.F.bVBorder beq .1 jsr LB.SetColor ldx #SEQ.BORDERBL-SEQS jsr LB.SeqOut .1 ldy #S.OBJ.F lda (ZPObjPtr),y and #S.OBJ.F.bSTATUS beq .4 ldx #SEQ.BAR-SEQS jsr LB.SeqOut ldy #S.OBJ.InnerW lda (ZPObjPtr),y tax ldy #S.OBJ.pSTATUS lda (ZPObjPtr),y sta ZPPtr1 iny lda (ZPObjPtr),y sta ZPPtr1+1 beq .3 lda #C.SI jsr LB.COut ldy #0 .2 lda (ZPPtr1),y beq .3 jsr LB.COut iny dex bne .2 .3 txa beq .31 lda #C.SPACE .30 jsr LB.COut dex bne .30 .31 ldx #SEQ.BAREND-SEQS jsr LB.SeqOut bra .6 .4 ldy #S.OBJ.InnerW lda (ZPObjPtr),y tax lda #'q' .5 jsr LB.COut dex bne .5 .6 ldy #S.OBJ.F lda (ZPObjPtr),y and #S.OBJ.F.bVBorder beq .7 jsr LB.SetColor ldx #SEQ.BORDERBR-SEQS jsr LB.SeqOut .7 jmp IO.LBWrite *-------------------------------------- OBJ.GetProp ldy #1 hObj lda (pStack),y jsr LIB.GetOBJ >PULLA tay prop lda (ZPObjPtr),y pha iny lda (ZPObjPtr),y ply inc pStack * clc rts *-------------------------------------- OBJ.SetProp cpy #S.OBJ.pTitle bne .1 jsr OBJ.Draw.Top.I ldy #0 rts .1 cpy #S.OBJ.pStatus bne .8 jsr OBJ.Draw.Bottom.I ldy #0 rts .8 clc rts *-------------------------------------- OBJ.Activate >PUSHA hObj jsr OBJ.FindActive bcs .1 >PUSHA hObj jsr OBJ.Deactivate inc pStack .1 lda (pStack) jsr OBJ.Activate2 inc pStack clc rts *-------------------------------------- OBJ.Activate2 jsr LIB.GetOBJ ldy #S.OBJ.S lda (ZPObjPtr),y ora #S.OBJ.S.bActive sta (ZPObjPtr),y jsr .1 jmp OBJ.CurOn .1 lda (ZPObjPtr) tax jmp (J.ObjActivate,x) *-------------------------------------- OBJ.Deactivate jsr LIB.GetOBJ jsr OBJ.CurOff ldy #S.OBJ.S lda (ZPObjPtr),y and #S.OBJ.S.bActive^$ff sta (ZPObjPtr),y lda (ZPObjPtr) tax jmp (J.ObjDeactivate,x) *-------------------------------------- OBJ.FindActive ldx ZPObjPtr phx ldx ZPObjPtr+1 phx jsr LIB.GetOBJ ldy #S.OBJ.Childs .1 phy lda (ZPObjPtr),y beq .7 pha >SYSCALL2 GetMemPtr >STYA ZPPtr1 ldy #S.OBJ.S lda (ZPPtr1),y S.OBJ.S.bActive bmi .8 pla .7 ply iny cpy #S.OBJ bne .1 * sec bra .80 .8 pla ply clc .80 plx stx ZPObjPtr+1 plx stx ZPObjPtr rts *-------------------------------------- OBJ.Show pha jsr LIB.GetOBJ jsr OBJ.CurOff ldy #S.OBJ.S lda (ZPObjPtr),y and #S.OBJ.S.bHidden^$ff sta (ZPObjPtr),y pla jmp OBJ.Draw *-------------------------------------- OBJ.Hide pha jsr LIB.GetOBJ jsr OBJ.CurOff ldy #S.OBJ.S lda (ZPObjPtr),y ora #S.OBJ.S.bHidden sta (ZPObjPtr),y pla jmp OBJ.Draw *-------------------------------------- OBJ.CurUpdPos ldy #S.OBJ.F lda (ZPObjPtr),y and #S.OBJ.F.bEdit beq .8 ldy #S.OBJ.S lda (ZPObjPtr),y S.OBJ.S.bActive bpl .8 jsr LB.Init ldy #S.OBJ.InnerX lda (ZPObjPtr),y clc ldy #S.OBJ.CurX adc (ZPObjPtr),y tax ldy #S.OBJ.InnerY lda (ZPObjPtr),y clc ldy #S.OBJ.CurY adc (ZPObjPtr),y tay jsr LB.GotoXY jsr IO.LBWrite .8 clc rts *-------------------------------------- OBJ.CurOn ldy #S.OBJ.F lda (ZPObjPtr),y and #S.OBJ.F.bEdit beq .8 ldy #S.OBJ.S lda (ZPObjPtr),y S.OBJ.S.bActive bpl .8 bit #S.OBJ.S.bCurOn bne .8 ora #S.OBJ.S.bCurOn sta (ZPObjPtr),y jsr LB.Init ldy #S.OBJ.InnerX lda (ZPObjPtr),y clc ldy #S.OBJ.CurX adc (ZPObjPtr),y tax ldy #S.OBJ.InnerY lda (ZPObjPtr),y clc ldy #S.OBJ.CurY adc (ZPObjPtr),y tay jsr LB.GotoXY ldx #SEQ.CURON-SEQS jsr LB.SeqOut jsr IO.LBWrite .8 lda #0 clc rts *-------------------------------------- OBJ.CurOff ldy #S.OBJ.F lda (ZPObjPtr),y and #S.OBJ.F.bEdit beq .8 ldy #S.OBJ.S lda (ZPObjPtr),y S.OBJ.S.bActive bpl .8 bit #S.OBJ.S.bCurOn beq .8 eor #S.OBJ.S.bCurOn sta (ZPObjPtr),y jsr LB.Init ldx #SEQ.CUROFF-SEQS jsr LB.SeqOut jmp IO.LBWrite .8 lda #0 clc rts *-------------------------------------- OBJ.ZeroWordAtY lda #0 sta (ZPObjPtr),y iny sta (ZPObjPtr),y rts *-------------------------------------- OBJ.IncWordAtY lda (ZPObjPtr),y inc sta (ZPObjPtr),y bne .8 iny lda (ZPObjPtr),y inc sta (ZPObjPtr),y .8 rts *-------------------------------------- OBJ.DecWordAtY clc lda (ZPObjPtr),y sbc #0 sta (ZPObjPtr),y iny lda (ZPObjPtr),y sbc #0 sta (ZPObjPtr),y rts *-------------------------------------- OBJ.GetpVarPtr2 ldy #S.OBJ.pVar lda (ZPObjPtr),y sta ZPPtr2 iny lda (ZPObjPtr),y sta ZPPtr2+1 rts *-------------------------------------- OBJ.GetpBufPtr1 ldy #S.OBJ.pBuf lda (ZPObjPtr),y sta ZPPtr1 iny lda (ZPObjPtr),y sta ZPPtr1+1 rts *-------------------------------------- OBJ.GetLineXAtY jsr OBJ.GetpBufPtr1 stz TempI .1 lda (ZPPtr1) beq .9 cpx TempI beq .8 .2 inc TempI ldy #$ff .4 iny lda (ZPPtr1),y clc beq .5 cmp #C.CR bne .4 * sec .5 tya adc ZPPtr1 sta ZPPtr1 bcc .1 inc ZPPtr1+1 bra .1 .8 clc rts .9 sec rts *-------------------------------------- MAN SAVE usr/src/lib/libtui.s.obj LOAD usr/src/lib/libtui.s ASM