NEW
  AUTO 3,1
				.LIST OFF
*--------------------------------------
DLG.Open		>STYA ZPPTR2
				lda (ZPPTR2)
				tay
				lda #0
				>SYSCALL GetMem
				bcs .99

				>STYA ZPPTR1
				txa
				>STA.G hDLG

				ldy #0

.1				lda (ZPPTR2),y
				sta (ZPPTR1),y
				iny
				tya
				cmp (ZPPTR2)
				bne .1

				jsr DLG.SetOrigin

				sty TmpByte

				jsr SCRN.GotoXY
				bcs .9

				jsr DLG.DrawTBar
.99				bcs .9

				jsr SCRN.LineBufInitDLG

				ldy #S.DLG.W
				lda (ZPPTR1),y
				dec
				dec
				tax

				lda #C.SPACE

.3				jsr SCRN.ToLineBuf
				dex
				bne .3

				jsr DLG.VBarToLineBuf

				ldy #S.DLG.H
				lda (ZPPTR1),y
				dec
				dec
				tax

.4				phx
				inc TmpByte

				ldy #S.DLG.X
				lda (ZPPTR1),y
				tax
				ldy TmpByte
				jsr SCRN.GotoXY
				bcs .9

				jsr SCRN.LineBufOut
				bcs .9

				plx
				dex
				bne .4

				inc TmpByte

				ldy #S.DLG.X
				lda (ZPPTR1),y
				tax

				ldy TmpByte
				jsr SCRN.GotoXY
				bcs .9

				jsr DLG.DrawSBar
				bcs .9

				jmp DLG.CTRL.DrawAll

.9				rts
*--------------------------------------
DLG.Run			jsr IO.GetCh
				bcs .9

				cmp #3
				beq .8

				cmp #C.CR
				beq .8

				cmp #C.TAB
				beq DLG.NextFocus

				pha

				ldy #S.DLG.Focus
				lda (ZPPTR1),y			get actual focused Ctrl

				tay

				pla
				jsr DLG.CTRL.CharIn

				bra DLG.Run

.8				clc
.9				rts
*--------------------------------------
DLG.NextFocus	ldy #S.DLG.Focus
				lda (ZPPTR1),y			get actual focused Ctrl

				pha						save it...
				tax

.1				inx						next one

.2				txa
				tay
				lda (ZPPTR1),y			Get Ctrl
				bne .3					end of list, get first

				ldx #S.DLG.Ctrls
				bra .2

.3				tay
				lda (ZPPTR1),y			Get Ctrl Type
				beq .1					LBL

				txa
				ldy #S.DLG.Focus
				sta (ZPPTR1),y

				pla						get old focused

				phx						save new focused
				jsr DLG.CTRL.Focus

				pla
				jsr DLG.CTRL.Focus
				jmp DLG.Run
*--------------------------------------
DLG.Close		ldy #S.DLG.Y
				lda (ZPPTR1),y

				sta TmpByte

				>LDA.G ScreenY
				clc
				ldy #S.DLG.Y
				adc (ZPPTR1),y
				sta TmpIndex

				>LDA.G ScreenY+1
				adc #0
				sta TmpIndex+1

				ldy #S.DLG.H
				lda (ZPPTR1),y

				jsr SCRN.UpdateMain.1
				bcs .9

				>LDA.G hDLG
				>SYSCALL FreeMem

				>STZ.G hDLG
				clc
.9				rts
*--------------------------------------
DLG.CTRL.DrawAll
				ldy #S.DLG.Ctrls

.5				lda (ZPPTR1),y
				beq .8

				phy
				jsr DLG.CTRL.Draw
				ply
				bcs .9

				iny
				bra .5

.8				ldy #S.DLG.Focus
				lda (ZPPTR1),y
				jmp DLG.CTRL.Focus

.9				rts
*--------------------------------------
DLG.CTRL.Draw	sty TmpByte				Y=CtrlID

				lda (ZPPTR1),y			Ctrl Definition
				tay
				lda (ZPPTR1),y			Ctrl Type
				tax
				jmp (J.DLG.CTRL.Draw,x)
*--------------------------------------
DLG.CTRL.Draw.LBL
				jsr SCRN.LineBufInitLBL

				jsr DLG.CTRL.GotoOrg
				bcs .9

				ldy TmpByte				CtrlID
				lda (ZPPTR1),y
				tay

				iny
				iny
				iny

.1				lda (ZPPTR1),y
				beq .8

				jsr SCRN.ToLineBuf
				iny
				bra .1

.8				jmp SCRN.LineBufOut

.9				rts
*--------------------------------------
DLG.CTRL.Draw.TB
				jsr SCRN.LineBufInitTB

				jsr DLG.CTRL.GotoOrg
				bcs .9

				ldy TmpByte
				lda (ZPPTR1),y
				tay

				iny
				iny
				iny

				iny

				iny

				lda (ZPPTR1),y
				tay
				lda (pData),y

				>SYSCALL GetMemPtr
				>STYA ZPPTR2

				lda #C.SPACE
				jsr SCRN.ToLineBuf

				ldy #0

.1				lda (ZPPTR2),y
				beq .2

				jsr SCRN.ToLineBuf
				iny
				bra .1

.2				tya
				tax

				ldy TmpByte
				lda (ZPPTR1),y
				tay

				iny
				iny
				iny

				txa
				sta (ZPPTR1),y			CURPOS
				iny

.3				txa
				eor (ZPPTR1),y			MAXCHAR
				beq .8

				lda #C.SPACE
				jsr SCRN.ToLineBuf
				inx
				bra .3

.8				lda #C.SPACE
				jsr SCRN.ToLineBuf

				jmp SCRN.LineBufOut
.9				rts
*--------------------------------------
DLG.CTRL.Draw.OL
				jsr SCRN.LineBufInitLBL

				jsr DLG.CTRL.GotoOrg
				bcs .9

				ldy TmpByte
				lda (ZPPTR1),y
				tay						S.DLG.Ctrl.OL

				iny						X
				iny						Y
				iny						shortcut

				iny						varptr
				lda (ZPPTR1),y
				phy
				tay
				lda (pData),y
				ply

				iny						value

				eor (ZPPTR1),y
				tax

				iny						label

				lda #'('
				jsr SCRN.ToLineBuf

				lda #C.SO
				jsr SCRN.ToLineBuf

				lda #'`'
				cpx #0
				beq .2

				lda #C.SPACE

.2				jsr SCRN.ToLineBuf

				lda #C.SI
				jsr SCRN.ToLineBuf
				
				lda #')'
				jsr SCRN.ToLineBuf

				lda #C.SPACE
				jsr SCRN.ToLineBuf

.3				lda (ZPPTR1),y
				beq .4

				jsr SCRN.ToLineBuf
				iny
				bra .3

.4				lda #C.SPACE
				jsr SCRN.ToLineBuf

.8				jmp SCRN.LineBufOut

.9				rts
*--------------------------------------
DLG.CTRL.Draw.BUT
				jsr SCRN.LineBufInitBut

				jsr DLG.CTRL.GotoOrg
				bcs .9

				ldy TmpByte				CtrlID
				lda (ZPPTR1),y
				tay

				iny
				iny
				iny

				iny

				lda #C.SPACE
				jsr SCRN.ToLineBuf

.1				lda (ZPPTR1),y
				beq .8

				jsr SCRN.ToLineBuf
				iny
				bra .1

.8				lda #C.SPACE
				jsr SCRN.ToLineBuf

				jmp SCRN.LineBufOut
.9				rts
*--------------------------------------
DLG.CTRL.Focus	sta TmpByte				A=CtrlID

				tay
				lda (ZPPTR1),y			Ctrl Definition
				tay
				lda (ZPPTR1),y			Ctrl Type
				tax

				jmp (J.DLG.CTRL.Focus,x)
*--------------------------------------
DLG.CTRL.Focus.LBL
				clc
				rts
DLG.CTRL.Focus.TB
				jsr SCRN.LineBufInitTB

				jsr DLG.CTRL.GotoOrg

				ldy #S.DLG.Focus
				lda (ZPPTR1),y
				eor TmpByte
				bne .1
				sec

.1				lda #C.SPACE
				bcc .2
				lda #'['
.2				jsr SCRN.ToLineBuf

				jsr DLG.CTRL.GotoEnd

				ldy #S.DLG.Focus
				lda (ZPPTR1),y
				eor TmpByte
				bne .3
				sec

.3				lda #C.SPACE
				bcc .4
				lda #']'
.4				jsr SCRN.ToLineBuf

				jsr SCRN.LineBufOut

				ldy TmpByte				CtrlID
				lda (ZPPTR1),y
				tay

				iny						skip Ctrl Type
				lda (ZPPTR1),y
				clc

				ldy #S.DLG.X
				adc (ZPPTR1),y
				pha

				ldy TmpByte				CtrlID
				lda (ZPPTR1),y
				tay

				iny
				iny
				iny
				pla

				sec						+1
				adc (ZPPTR1),y
				tax

				ldy TmpByte				CtrlID
				lda (ZPPTR1),y
				tay

				iny						skip Ctrl Type
				iny						skip X

				lda (ZPPTR1),y
				clc
				ldy #S.DLG.Y
				adc (ZPPTR1),y

				tay

				jmp SCRN.GotoXY

DLG.CTRL.Focus.OL
				jsr SCRN.LineBufInitLBL

				jsr DLG.CTRL.GotoOrg

				ldy #S.DLG.Focus
				lda (ZPPTR1),y
				eor TmpByte
				bne .1
				sec

.1				lda #'('
				bcc .2
				lda #'['
.2				jsr SCRN.ToLineBuf

				jsr DLG.CTRL.GotoEnd

				ldy #S.DLG.Focus
				lda (ZPPTR1),y
				eor TmpByte
				bne .3
				sec

.3				lda #')'
				bcc .4
				lda #']'
.4				jsr SCRN.ToLineBuf

				lda #C.BS
				jsr SCRN.ToLineBuf
				jsr SCRN.ToLineBuf
				jmp SCRN.LineBufOut

DLG.CTRL.Focus.BUT
				jsr SCRN.LineBufInitBut

				jsr DLG.CTRL.GotoOrg

				ldy #S.DLG.Focus
				lda (ZPPTR1),y
				eor TmpByte
				bne .1
				sec

.1				lda #C.SPACE
				bcc .2
				lda #'['
.2				jsr SCRN.ToLineBuf

				jsr DLG.CTRL.GotoEnd

				ldy #S.DLG.Focus
				lda (ZPPTR1),y
				eor TmpByte
				bne .3
				sec

.3				lda #C.SPACE
				bcc .4
				lda #']'
.4				jsr SCRN.ToLineBuf

				jmp SCRN.LineBufOut
*--------------------------------------
DLG.CTRL.GotoOrg
				clc
				.HS B0					BCS
DLG.CTRL.GotoEnd
				sec
				php

				ldy TmpByte				CtrlID
				lda (ZPPTR1),y
				tay

				iny						skip Ctrl Type
				lda (ZPPTR1),y
				clc

				ldy #S.DLG.X
				adc (ZPPTR1),y
				plp
				bcc .1

				>PUSHA
				jsr DLG.CTRL.GetWitdh
				clc
				adc (pStack)
				inc pStack

.1				tax

				ldy TmpByte				CtrlID
				lda (ZPPTR1),y
				tay

				iny						skip Ctrl Type
				iny						skip X

				lda (ZPPTR1),y
				clc
				ldy #S.DLG.Y
				adc (ZPPTR1),y

				tay

DLG.CTRL.GotoXY	>PUSHW LineBufPtr
				>PUSHW L.MSG.GOTOXY
				tya
				inc
				inc
				>PUSHA
				txa
				inc
				>PUSHA
				>PUSHBI 2
				>SYSCALL SPrintF

.2				lda (LineBufPtr)
				beq .8
				inc LineBufPtr
				bne .2
				inc LineBufPtr+1
				bra .2

.8				rts
*--------------------------------------
DLG.SetOrigin	ldy #S.DLG.X
				lda (ZPPTR1),y
				bne .1

				>LDA.G ScreenW
				ldy #S.DLG.W
				sec
				sbc (ZPPTR1),y

				lsr

				ldy #S.DLG.X
				sta (ZPPTR1),y

.1				tax

				ldy #S.DLG.Y
				lda (ZPPTR1),y
				bne .2

				>LDA.G ViewPortHm1
				ldy #S.DLG.H
				sec
				sbc (ZPPTR1),y

				lsr
				ldy #S.DLG.Y
				sta (ZPPTR1),y

.2				tay

				rts
*--------------------------------------
DLG.CTRL.GetWitdh
				ldy TmpByte				CtrlID
				lda (ZPPTR1),y
				tay

				lda (ZPPTR1),y
				tax

				jmp (J.DLG.CTRL.GetWitdh,x)
*--------------------------------------
DLG.CTRL.GetWitdh.LBL
				clc
				rts
DLG.CTRL.GetWitdh.TB
				iny
				iny
				iny
				iny
				lda (ZPPTR1),y
				inc
				rts

DLG.CTRL.GetWitdh.OL
				lda #2
				rts

				iny
				iny
				iny
				iny

				ldx #0

.1				inx
				iny
				lda (ZPPTR1),y
				bne .1

				txa
				rts

DLG.CTRL.GetWitdh.BUT
				iny
				iny
				iny

				ldx #0

.1				inx
				iny
				lda (ZPPTR1),y
				bne .1

				txa
				rts
*--------------------------------------
DLG.CTRL.CharIn	sty TmpByte				A=CtrlID
				pha

				lda (ZPPTR1),y			Ctrl Definition
				tay
				lda (ZPPTR1),y			Ctrl Type
				tax
				pla
				jmp (J.DLG.CTRL.CharIn,x)
*--------------------------------------
DLG.CTRL.CharIn.LBL
				sec
				rts
*--------------------------------------
DLG.CTRL.CharIn.TB
				cmp #C.DEL
				beq .5

				cmp #C.SPACE
				bcc .9

				pha

				iny
				iny
				iny
				lda (ZPPTR1),y			CURPOS
				iny
				cmp (ZPPTR1),y			MAXCHAR
				beq .7

				pha

				inc
				dey
				sta (ZPPTR1),y			CURPOS

				iny
				iny

				lda (ZPPTR1),y			hMem
				tay
				lda (pData),y
				>SYSCALL GetMemPtr
				>STYA ZPPTR2

				ply

				pla
				pha

				sta (ZPPTR2),y
				iny
				lda #0
				sta (ZPPTR2),y

				pla
				>SYSCALL PutChar
				clc
				rts

.5				iny
				iny
				iny
				lda (ZPPTR1),y			CURPOS
				beq .8

				dec
				sta (ZPPTR1),y
				pha

				iny
				iny

				lda (ZPPTR1),y			hMem
				tay
				lda (pData),y
				>SYSCALL GetMemPtr
				>STYA ZPPTR2

				ply
				lda #0
				sta (ZPPTR2),y

				lda #C.DEL
				>SYSCALL PutChar
				clc
				rts

.7				pla

.8				clc
				rts

.9				sec
				rts
*--------------------------------------
DLG.CTRL.CharIn.OL
				cmp #C.SPACE
				bne .8

				iny						X
				iny						Y
				iny						shortcut

				iny						varptr

				lda (ZPPTR1),y
				pha

				iny						value
				lda (ZPPTR1),y

				ply
				sta (pData),y

				jmp DLG.CTRL.DrawAll

.8				clc
				rts
*--------------------------------------
DLG.CTRL.CharIn.BUT
				clc
				rts
*--------------------------------------
DLG.DrawTBar	ldx #SEQ.DLG.TBAR-SEQS
				jsr SCRN.LineBufInit

				ldy #S.DLG.W
				lda (ZPPTR1),y
				dec
				dec
				tax

				ldy #S.DLG.Title
				lda (ZPPTR1),y
				tay

.1				lda (ZPPTR1),y
				beq .11

				jsr SCRN.ToLineBuf
				dex
				beq .3
				
				iny
				bra .1

.11				lda #C.SPACE

.2				jsr SCRN.ToLineBuf
				dex
				bne .2

.3				ldx #SEQ.DLG.TBAR.E-SEQS
				jsr SCRN.SEQS.ToLineBuf

.4				jmp SCRN.LineBufOut
*--------------------------------------
DLG.DrawSBar	ldx #SEQ.DLG.SBAR-SEQS
				jsr SCRN.LineBufInit

				ldy #S.DLG.W
				lda (ZPPTR1),y
				dec
				dec
				tax

				ldy #S.DLG.Status
				lda (ZPPTR1),y
				tay

.1				lda (ZPPTR1),y
				beq .11

				jsr SCRN.ToLineBuf
				dex
				beq .3
				
				iny
				bra .1

.11				lda #C.SPACE

.2				jsr SCRN.ToLineBuf
				dex
				bne .2

.3				ldx #SEQ.DLG.SBAR.E-SEQS
				jsr SCRN.SEQS.ToLineBuf

.4				jmp SCRN.LineBufOut
*--------------------------------------
DLG.VBarToLineBuf
				ldy #0

.1				lda SEQ.DLG.VBAR,y
				beq .8

				jsr SCRN.ToLineBuf
				iny
				bra .1

.8				rts
*--------------------------------------
MAN
SAVE usr/src/bin/edit.s.dlg
LOAD usr/src/bin/edit.s
ASM
