NEW
  AUTO 3,1
*--------------------------------------
* A = Object Class
*--------------------------------------
OBJ.New			pha
				tax
				ldy OBJ.SizeOf,x
				lda #0
				
				>SYSCALL GetMem
				bcs .9
				
				>STYA ZPObjPtr
				
				pla
				sta (ZPObjPtr)
				
				tay
				lda OBJ.SizeOf,y
				tay
				dey
				lda #0

.1				sta (ZPObjPtr),y
				dey
				bne .1
				
*				clc				
				
.9				rts
*--------------------------------------
OBJ.Enter		lda (ZPObjPtr)
				tax
				jmp (J.OBJ.Enter,x)
*--------------------------------------
OBJ.Leave		lda (ZPObjPtr)
				tax
				jmp (J.OBJ.Leave,x)
*--------------------------------------
OBJ.Paint		lda (ZPObjPtr)
				tax
				jmp (J.OBJ.fPaintX,x)
*--------------------------------------
* hOBJ, Prop8, Value16
*--------------------------------------
OBJ.SetProp		ldy #3

				lda (pStack),y			hOBJ

				>SYSCALL2 GetMemPtr
				>STYA ZPObjPtr

				ldy #2
				lda (pStack),y

				tay

				lda (ZPObjPtr),y
				pha						old value
				>PULLA
				sta (ZPObjPtr),y

				iny
				lda (ZPObjPtr),y
				tax
				>PULLA
				sta (ZPObjPtr),y

				txa
				ply
				
				>RET 2
*--------------------------------------
* hOBJ, Prop8
*--------------------------------------
OBJ.GetProp		>PULLA
				pha

				>PULLA
				>SYSCALL2 GetMemPtr
				>STYA ZPObjPtr

				ply

OBJ.GetPropAtY	lda (ZPObjPtr),y
				pha
				iny
				ora (ZPObjPtr),y
				clc
				bne .1
				
				sec
				
.1				lda (ZPObjPtr),y
				ply

				rts
*--------------------------------------
OBJ.PullDXDY	>PULLW DY
				>PULLW DX
				rts
*--------------------------------------
OBJ.SetDXDYX1Y1	ldx #3
				ldy #S.OBJ.X1+3

.1				lda DX,x
				sta (ZPObjPtr),y
				dey
				dex
				bpl .1

				rts
*--------------------------------------
OBJ.SetX2Y2		>STYA ZPPtr1

				ldy #S.OBJ.W+1
				lda (ZPPtr1),y
				tax
				dey
				lda (ZPPtr1),y
				bne .1
				
				dex
				
.1				dec
				clc
				ldy #S.OBJ.X1
				adc (ZPPtr1),y
				pha
				txa
				iny
				adc (ZPPtr1),y
				ldy #S.OBJ.X2+1
				sta (ZPPtr1),y
				dey
				pla
				sta (ZPPtr1),y
*--------------------------------------
				ldy #S.OBJ.H+1
				lda (ZPPtr1),y
				tax
				dey
				lda (ZPPtr1),y
				bne .2
				
				dex
				
.2				dec

				clc
				ldy #S.OBJ.Y1
				adc (ZPPtr1),y
				pha
				txa
				iny
				adc (ZPPtr1),y
				ldy #S.OBJ.Y2+1
				sta (ZPPtr1),y
				dey
				pla
				sta (ZPPtr1),y

				rts
*--------------------------------------
OBJ.GetPtr		lda (ZPObjPtr),y
				pha
				iny
				lda (ZPObjPtr),y
				beq .1

				ply
				rts
				
.1				plx
				>LDYA L.BMs,x
				rts
*--------------------------------------
OBJ.SetAXAtY	sta (ZPObjPtr),y
				iny
				txa
				sta (ZPObjPtr),y
				rts
*--------------------------------------
OBJ.PullY1X1	ldy #S.OBJ.Y1
				jsr OBJ.PullWordAtY
				
				ldy #S.OBJ.X1
*--------------------------------------
OBJ.PullWordAtY	>PULLA
				sta (ZPObjPtr),y
				iny

OBJ.PullByteAtY	>PULLA
				sta (ZPObjPtr),y
				
				rts
*--------------------------------------
OBJ.PullHWND	>PULLA

OBJ.GetHWNDA	>SYSCALL2 GetMemPtr
				>STYA ZPWNDPtr
				rts
*--------------------------------------
OBJ.DrawBorders	>STYA ZPObjPtr
				stx IY

				ldy #S.OBJ.F
				lda (ZPObjPtr),y
*				and #S.OBJ.F.BORDER
*				bne .1

				bmi .1

				clc
.9				rts

.1				jsr CB.GetBuf
				bcs .9

				jsr CB.BorderLineH

				ldy #S.OBJ.X1

				lda (ZPObjPtr),y
				sec
				sbc IY
				sta CB.Cache+S.CB.X1
				iny
				lda (ZPObjPtr),y
				sbc #0
				sta CB.Cache+S.CB.X1+1

				iny						#S.OBJ.Y1

				lda (ZPObjPtr),y
				sec
				sbc IY
				sta CB.Cache+S.CB.Y1
				sta CB.Cache+S.CB.Y2
				iny
				lda (ZPObjPtr),y
				sbc #0
				sta CB.Cache+S.CB.Y1+1
				sta CB.Cache+S.CB.Y2+1	top  X1-1,Y1-1,X2+1,Y1-1

				iny						#S.OBJ.X2

				lda (ZPObjPtr),y
				clc
				adc IY
				sta CB.Cache+S.CB.X2
				iny
				lda (ZPObjPtr),y
				adc #0
				sta CB.Cache+S.CB.X2+1

				jsr CB.Cache2CBBuf

				ldy #S.OBJ.Y2
				lda (ZPObjPtr),y
				clc
				adc IY
				sta CB.Cache+S.CB.Y1
				sta CB.Cache+S.CB.Y2
				iny
				lda (ZPObjPtr),y
				adc #0
				sta CB.Cache+S.CB.Y1+1
				sta CB.Cache+S.CB.Y2+1	bottom  X1-1,Y2+1,X2+1,Y2+1

				jsr CB.Cache2CBBuf

				lda #S.CB.CMD.VLINE
				sta CB.Cache+S.CB.CMD

				ldy #S.OBJ.Y1
				lda (ZPObjPtr),y
				sec
				sbc IY
				sta CB.Cache+S.CB.Y1
				iny
				lda (ZPObjPtr),y
				sbc #0
				sta CB.Cache+S.CB.Y1+1

				lda CB.Cache+S.CB.X1
				sta CB.Cache+S.CB.X2
				lda CB.Cache+S.CB.X1+1
				sta CB.Cache+S.CB.X2+1	left  X1-1,Y1-1,X1-1,Y2+1

				jsr CB.Cache2CBBuf

				ldy #S.OBJ.X2
				lda (ZPObjPtr),y
				clc
				adc IY
				sta CB.Cache+S.CB.X1
				sta CB.Cache+S.CB.X2
				iny
				lda (ZPObjPtr),y
				adc #0
				sta CB.Cache+S.CB.X1+1
				sta CB.Cache+S.CB.X2+1	right  X2+1,Y1-1,X2+1,Y2+1

				jsr CB.Cache2CBBuf
				
				jmp CB.FlushBuf
*-------------------------------------
OBJ.GetNext		ldy #S.OBJ.pNext
				lda (ZPObjPtr),y
				tax
				iny
				lda (ZPObjPtr),y
				stx ZPObjPtr
				sta ZPObjPtr+1
				ora ZPObjPtr
				rts
*--------------------------------------
MAN
SAVE usr/src/lib/libgui.s.obj
LOAD usr/src/lib/libgui.s
ASM
