NEW AUTO 3,1 *-------------------------------------- * drawline(short int hWND, short int OP, short int COLOR, int X1, int Y1, int X2, int X2) *-------------------------------------- DrawLine >PULLW CB.Cache+S.CB.Y2 >PULLW CB.Cache+S.CB.X2 >PULLW CB.Cache+S.CB.Y1 >PULLW CB.Cache+S.CB.X1 >PULLB CB.Cache+S.CB.COLOR >PULLB CB.Cache+S.CB.OP >PULLA hWND >SYSCALL2 GetMemPtr >STYA ZPWNDPtr jsr DRAW.ToGlobal jsr DRAW.GetInnerW lda CB.Cache+S.CB.X2 sec sbc CB.Cache+S.CB.X1 sta DX lda CB.Cache+S.CB.X2+1 sbc CB.Cache+S.CB.X1+1 sta DX+1 DX = X2 - X1 bmi .1 DX < 0.... ora DX bne .2 DX > 0... lda #S.CB.CMD.VLINE DX=0 : VLINE Y1,Y2 At X1 bra .20 *-------------------------------------- .1 >SWAP16 CB.Cache+S.CB.X1,CB.Cache+S.CB.X2 >SWAP16 CB.Cache+S.CB.Y1,CB.Cache+S.CB.Y2 >NOT16 DX swap X1/X2, Y1/Y2, set DX=-DX (DX positive) .2 lda #1 sta IY lda CB.Cache+S.CB.Y2 sec sbc CB.Cache+S.CB.Y1 sta DY lda CB.Cache+S.CB.Y2+1 sbc CB.Cache+S.CB.Y1+1 sta DY+1 DY = Y2 - Y1 bmi .3 DY < 0 ... ora DY bne .4 lda #S.CB.CMD.HLINE DY=0 : HLINE X1,X2 At Y1 .20 sta CB.Cache+S.CB.CMD jsr CLIP.CB.Cache bcs .8 jmp GFXWrite.CB .8 rts *-------------------------------------- .3 >NOT16 DY set DY=-DY lda #$ff sta IY set IY=-1 .4 jsr CLIP.Line bcs .8 lda #S.CB.CMD.SETPIXEL sta CB.Cache+S.CB.CMD jsr GFXWrite.CB lda DX sec sbc DY tax lda DX+1 sbc DY+1 bmi DrawLine.IncY DY is greater than DX, we will increase on Y axis txa beq DrawLine.IncXY DX=DY, go inc X & Y jmp DrawLine.IncX DY is lower than DX, we will increase on X axis *-------------------------------------- DrawLine.IncXY lda DX DX=DY eor #$ff sta Counter lda DX+1 eor #$ff sta Counter+1 .1 inc Counter bne .2 inc Counter+1 beq .8 .2 inc CB.Cache+S.CB.X1 bne .3 inc CB.Cache+S.CB.X1+1 .3 lda CB.Cache+S.CB.Y1 Y1=Y1+IY clc adc IY sta CB.Cache+S.CB.Y1 jsr GFXWrite.CB bra .1 .8 rts *-------------------------------------- DrawLine.IncY lda DY eor #$ff sta Counter lda DY+1 eor #$ff sta Counter+1 lda DX IE=2*DX asl sta IE pha lda DX+1 rol sta IE+1 tax pla D=IE-DY sec sbc DY sta D txa sbc DY+1 sta D+1 lda DX INE=2*(DX-DY) sec sbc DY pha lda DX+1 sbc DY+1 tax pla asl sta INE txa rol sta INE+1 .1 inc Counter bne .2 inc Counter+1 beq .8 .2 lda D+1 IF D < 0 ... bmi .4 lda D D > 0 : D=D+INE clc adc INE sta D lda D+1 adc INE+1 sta D+1 inc CB.Cache+S.CB.X1 X1=X1+1 bne .5 inc CB.Cache+S.CB.X1+1 bra .5 .4 lda D D > 0 : D=D+IE clc adc IE sta D lda D+1 adc IE+1 sta D+1 .5 lda CB.Cache+S.CB.Y1 Y1=Y1+IY clc adc IY sta CB.Cache+S.CB.Y1 jsr GFXWrite.CB bra .1 .8 rts *-------------------------------------- DrawLine.IncX lda DX eor #$ff sta Counter lda DX+1 eor #$ff sta Counter+1 lda DY IE=2*DY asl sta IE pha * lda DY+1 lda #0 rol sta IE+1 tax pla D=IE-DX sec sbc DX sta D txa sbc DX+1 sta D+1 lda DY INE=2*(DY-DX) sec sbc DX pha * lda DY+1 lda #0 sbc DX+1 tax pla asl sta INE txa rol sta INE+1 .1 inc Counter bne .2 inc Counter+1 beq .8 .2 lda D+1 ID D < 0 .... bmi .4 lda D D > 0 : D=D+INE clc adc INE sta D lda D+1 adc INE+1 sta D+1 lda CB.Cache+S.CB.Y1 Y1=Y1+IY clc adc IY sta CB.Cache+S.CB.Y1 bra .5 .4 lda D D < 0 : D=D+IE clc adc IE sta D lda D+1 adc IE+1 sta D+1 .5 inc CB.Cache+S.CB.X1 X1=X1+1 bne .6 inc CB.Cache+S.CB.X1+1 .6 jsr GFXWrite.CB bra .1 .8 rts *-------------------------------------- * drawtext (short int OP, short int hFONT, int X1, int Y1) *-------------------------------------- DrawText clc rts *-------------------------------------- * *-------------------------------------- DRAW.ToGlobal >LDYA ZPWNDPtr >STYA ZPPtr1 .1 ldy #S.OBJ.X1 ldx #S.CB.X1 jsr DRAW.AddP1YtoCBX ldy #S.WND.InnerY1 ldx #S.CB.Y1 jsr DRAW.AddP1YtoCBX ldy #S.OBJ.X1 ldx #S.CB.X2 jsr DRAW.AddP1YtoCBX ldy #S.WND.InnerY1 ldx #S.CB.Y2 jsr DRAW.AddP1YtoCBX ldy #S.OBJ.hPARENT+1 lda (ZPPtr1),y beq .8 00xx = hDev tax dey lda (ZPPtr1),y sta ZPPtr1 stx ZPPtr1+1 bra .1 .8 clc rts *-------------------------------------- DRAW.AddP1YtoCBX lda (ZPPtr1),y clc adc CB.Cache,x sta CB.Cache,x iny lda (ZPPtr1),y adc CB.Cache+1,x sta CB.Cache+1,x rts *-------------------------------------- DRAW.GetInnerW ldy #S.OBJ.X1 lda (ZPWNDPtr),y sta OBJ.Cache+S.OBJ.X1 iny lda (ZPWNDPtr),y sta OBJ.Cache+S.OBJ.X1+1 ldy #S.WND.InnerY1 lda (ZPWNDPtr),y sta OBJ.Cache+S.OBJ.Y1 iny lda (ZPWNDPtr),y sta OBJ.Cache+S.OBJ.Y1+1 ldy #S.WND.InnerW lda (ZPWNDPtr),y sta OBJ.Cache+S.OBJ.W iny lda (ZPWNDPtr),y sta OBJ.Cache+S.OBJ.W+1 iny #S.WND.InnerH lda (ZPWNDPtr),y sta OBJ.Cache+S.OBJ.H iny lda (ZPWNDPtr),y sta OBJ.Cache+S.OBJ.H+1 >LDYA L.OBJ.Cache jmp OBJ.SetX2Y2 *-------------------------------------- DrawCBBufToYA ldx L.CB.Buf stx ZPCBPtr ldx L.CB.Buf+1 stx ZPCBPtr+1 DrawCBPtrToYA bit CUR.bVisible bpl .10 pha phy jsr HideCursor.I ply pla .10 jsr OBJ.GetInCache .1 lda (ZPCBPtr) beq .8 >LDYA ZPCBPtr jsr CB.GetInCache A = CB.CMD cmp #S.CB.CMD.DRAWTEXT2 bne .6 lda #S.CB.CMD.DRAWTEXT+S.CB.CMD.OSD sta CB.Cache+S.CB.CMD jsr GFXWrite.CB bcs .9 jsr CLIP.CB.Cache bcs .2 jsr GFXWrite.CB .2 lda CB.Cache+S.CB.SrcPtr >SYSCALL2 FreeStkObj bra .7 .6 jsr CLIP.CB.Cache bcs .7 jsr GFXWrite.CB .7 lda (ZPCBPtr) Get Cmd lsr tax lda CB.CmdLen-1,x sec +1 adc ZPCBPtr sta ZPCBPtr bcc .1 inc ZPCBPtr+1 bra .1 .8 clc .9 bit CUR.bVisible bpl .99 php pha jsr ShowCursor.I pla plp .99 rts *-------------------------------------- MAN SAVE usr/src/lib/libgui.s.draw LOAD usr/src/lib/libgui.s ASM