NEW
  AUTO 3,1
				.LIST OFF
*--------------------------------------
* ^A = Help
* ^B = Begin Block
* ^C = Copy Block
* ^D = Delete Block
* ^E = End Block
* ^F = Find...
* ^G = Go To SOL
******** ^H = BS
******** ^I = TAB
******** ^J = LF
******** ^K = VT
* ^L = Go To EOL
******** ^M = CR
* ^N = Find Next
* ^O = Page Up
* ^P = Page Down
* ^Q = Quit
* ^R = Replace...
* ^S = Save
* ^T = Go To Top of file
******** ^U = FS
* ^V = Paste Block
* ^W = Erase line
* ^X = Cut Block
* ^Y = End Of File
*--------------------------------------
Ctrl.DEL		jsr BUF.ComputeCOffset

				lda BUF.COffset
				ora BUF.COffset+1		No Backspace possible
				beq .8

				jsr Ctrl.BS
				bcs .9

				jmp Ctrl.Z

.8				clc
.9				rts
*--------------------------------------
Ctrl.Invalid
				clc
Ctrl.Invalid.RTS
				rts
*--------------------------------------
Ctrl.A			>STZ.G bUpdateStatus

				>LDYA L.MSG.HELP
				>STYA ZPPTR1

				stz TmpByte

.1				ldx #0
				ldy TmpByte
				jsr SCRN.GotoXY
				bcs .9

				lda (ZPPTR1)
				beq .7

				>PUSHW L.MSG.HELPLINE
				>PUSHW ZPPTR1
				>PUSHBI 2
				>SYSCALL PrintF
				bcs .9

				inc TmpByte

				lda (ZPPTR1)
				sec
				adc ZPPTR1
				sta ZPPTR1
				bcc .1

				inc ZPPTR1+1
				bra .1

.7				jsr SCRN.ResetStatusBar

				>PUSHW LineBufPtr
				>PUSHW L.MSG.STATUSBAR.H
				>PUSHBI 0
				jsr SCRN.LineBufSprintf
				bcs .9

				jsr SCRN.LineBufOut
				bcs .9

.8				jsr IO.GetCh
				bcs .9
				
				beq .8

				jmp SCRN.Repaint

.9				rts
*--------------------------------------
Ctrl.C			jmp BUF.SelToClipboard
*--------------------------------------
Ctrl.B			jsr BUF.ComputeCOffset

				lda BUF.COffset
				>STA.G SelStart

				lda BUF.COffset+1
				iny
				sta (pData),y
				jmp SCRN.UpdateMain
*--------------------------------------
Ctrl.E			jsr BUF.ComputeCOffset

				lda BUF.COffset
				>STA.G SelEnd

				lda BUF.COffset+1
				iny
				sta (pData),y
				jmp SCRN.UpdateMain
*--------------------------------------
Ctrl.G			>LDA.G FileX
				beq .8

				lda #0
				sta (pData),y

				jmp SCRN.UpdateViewPort

.8				clc
				rts
*--------------------------------------
Ctrl.BS			>LDA.G FileX
				beq .1					already at beginning of line

				dec
				sta (pData),y
				bra .3

.1				>LDA.G FileY+1
				tax
				dey
				ora (pData),y
				beq .8

				lda (pData),y
				bne .2

				dex

.2				dec
				jsr BUF.GetLineAX
				bcs .8

				tya
				>STA.G FileX

				>DECW.G FileY

.3				jmp SCRN.UpdateViewPort

.8				clc
				rts
*--------------------------------------
Ctrl.TAB		jsr BUF.InsertTAB
				bcs .9

				lda TmpByte
				beq .9					nothing to do

*				clc
				>ADC.G FileX
				sta (pData),y

				>LDA.G CurX
				clc
				adc TmpByte
				sta (pData),y

				sec
				>SBC.G ScreenX
				sec
				>SBC.G ScreenW
				bcs .1

				jsr SCRN.UpdateCurrentLine
				bcs .9

				bra .8

.1				lda TmpByte
				clc
				>ADC.G ScreenX
				sta (pData),y

				jsr SCRN.UpdateViewPort

.8				jsr SCRN.GotoCurXCurY
				jmp SCRN.UpdateStatusBar

.9				rts
*--------------------------------------
Ctrl.LF			jsr BUF.GetNextLine
				bcs .8

				tya						Y = line length
				>CMP.G FileX
				bcs .2

				sta (pData),y

.2				>INCW.G FileY

				jmp SCRN.UpdateViewPort

.8				clc
				rts
*--------------------------------------
Ctrl.VT			>LDA.G FileY+1
				tax
				dey
				ora (pData),y
				beq .8

				lda (pData),y
				bne .1

				dex

.1				dec
				jsr BUF.GetLineAX
				bcs .8

				tya						Y = line length
				>CMP.G FileX
				bcs .2

				sta (pData),y

.2				>DECW.G FileY

				jmp SCRN.UpdateViewPort
.8
Ctrl.VT.8		clc
				rts
*--------------------------------------
Ctrl.L			jsr BUF.GetLine
				bcs Ctrl.VT.8

				tya						Y = line length
				>STA.G FileX

				jmp SCRN.UpdateViewPort
*--------------------------------------
Ctrl.CR			lda #C.CR
				jsr BUF.InsertA
				bcs .9

				>INCW.G FileY
				>STZ.G FileX

				>LDA.G ScreenX
				beq .1
				
				jmp SCRN.UpdateViewPort
*--------------------------------------
.1				jsr SCRN.LineBufInitEdit	+CEOL
				jsr SCRN.LineBufOut
				bcs .9
				
				>LDA.G CurY
				>CMP.G ViewPortHm1
				bne .2					bottom line ?

				jmp SCRN.UpdateViewPort
*--------------------------------------
.2				inc
				>STA.G CurY
				>STZ.G CurX
				
				jsr SCRN.InsLineAtCurY
				bcs .9

				jsr SCRN.UpdateCurrentLine
				bcs .9

				jmp SCRN.GotoCurXCurY

*				jmp SCRN.UpdateViewPort

.9				rts
*--------------------------------------
Ctrl.O			ldy #FileY+1
				lda (pData),y
				tax
				dey
				lda (pData),y

				ldy #ViewPortH
				sec
				sbc (pData),y
				pha
				txa
				sbc #0
				bcc .8

				ldy #FileY+1
				sta (pData),y
				dey
				pla
				sta (pData),y

				>LDA.G ScreenY
				sec
				>SBC.G ViewPortH
				>STA.G ScreenY
				>LDA.G ScreenY+1
				sbc #0
				sta (pData),y

				>STZ.G FileX
				>STA.G ScreenX

				jmp SCRN.UpdateMainAndStatus

.8				pla
*--------------------------------------
Ctrl.T			jsr SCRN.Home
				jmp SCRN.UpdateMainAndStatus
*--------------------------------------
Ctrl.P			ldy #FileY+1
				lda (pData),y
				tax
				dey
				lda (pData),y

				ldy #ViewPortH
				clc
				adc (pData),y
				bcc .1

				inx

.1				pha
				phx
				jsr BUF.GetLineAX		A,X = FileY+PAGE
				bcs .8

				ldy #FileY+1
				pla
				sta (pData),y

				dey
				pla
				sta (pData),y

				>LDA.G ViewPortH
				clc
				>ADC.G ScreenY
				sta (pData),y
				iny
				lda (pData),y
				adc #0
				sta (pData),y

				>STZ.G FileX
				>STA.G ScreenX

				jmp SCRN.UpdateMainAndStatus

.8				pla
				pla
				clc
				rts
*--------------------------------------
Ctrl.Y			jsr BUF.GetNextLine
				bcs .1

				>INCW.G FileY
				bra Ctrl.Y

.1				jsr BUF.GetLine

				tya						Y = line length
				>STA.G FileX

				jmp SCRN.UpdateViewPort
*--------------------------------------
Ctrl.F			>LDYA L.DLG.FIND
				jsr DLG.Open
				jsr DLG.Run

				cmp #C.CR
				bne .8


.8				jsr DLG.Close

				clc
				rts
*--------------------------------------
Ctrl.N
				clc
				rts
*--------------------------------------
Ctrl.R			clc
				rts
*--------------------------------------
Ctrl.Q			>LDA.G bUnSaved
				beq .8

				>STZ.G bUpdateStatus

				jsr SCRN.ResetStatusBar

				>PUSHW LineBufPtr
				>PUSHW L.MSG.STATUSBAR.U
				>PUSHBI 0
				jsr SCRN.LineBufSprintf
				bcs .9

				jsr SCRN.LineBufOut
				bcs .9

.1				jsr IO.GetCh
				bcs .9

				cmp #'a
				bcc .2
				cmp #'z'+1
				bcs .2

				eor #$20

.2				cmp #'Y'
				beq .8

				cmp #'N'
				beq .80

				bra .1

.8				lda #$ff
				>STA.G bExit

.80				jsr SCRN.UpdateStatusBar
				jmp SCRN.GotoCurXCurY

.9				rts
*--------------------------------------
Ctrl.S			>LDYA L.DLG.SAVE
				jsr DLG.Open
				jsr DLG.Run

				pha

				jsr DLG.Close

				pla
				cmp #C.CR
				bne .8

				jsr FILE.Save
				bcc .1

				pha
				jsr SCRN.ResetStatusBar

				>PUSHW L.MSG.STATUSBAR.E
				pla
				>PUSHA					ERROR CODE
				>PUSHBI 1
				bra .2

.1				jsr SCRN.ResetStatusBar

				>PUSHW LineBufPtr
				>PUSHW L.MSG.STATUSBAR.S
				>LDA.G hFileName
				>SYSCALL GetMemPtr
				>PUSHYA

				>PUSHBI 2

.2				jsr SCRN.LineBufSprintf

				jsr SCRN.LineBufOut
				bcs .9

.8				jsr SCRN.UpdateTopBar

				jmp SCRN.GotoCurXCurY

.9				rts
*--------------------------------------
Ctrl.FS			jsr BUF.GetLine
				bcs .8

				tya						Y = line length
				>CMP.G FileX
				beq .1					already at end of line

				lda (pData),y
				inc
				sta (pData),y
				bra .3

.1				jsr BUF.GetNextLine
				bcs .8

				>INCW.G FileY

				>STZ.G FileX

.3				jmp SCRN.UpdateViewPort

.8				clc
.9				rts
*--------------------------------------
Ctrl.V			jsr BUF.InsertClipboard
				bcs .9

				jsr SCRN.UnSaved
				jmp SCRN.UpdateMainAndStatus

.9				rts
*--------------------------------------
Ctrl.W			jsr BUF.ComputeCOffset	Y=line len
				phy

				lda BUF.LOffset
				ldy #SelStart
				sta (pData),y
				lda BUF.LOffset+1
				iny
				sta (pData),y

				ply						Get back line len
				clc
				lda (BufPtr),y
				beq .1					last line \0 ending

				sec						delete CR

.1				tya

				adc BUF.LOffset
				ldy #SelEnd
				sta (pData),y
				lda BUF.LOffset+1
				adc #0
				iny
				sta (pData),y
				bra Ctrl.D
.8
Ctrl.W.RTS		rts
*--------------------------------------
Ctrl.X			jsr BUF.SelToClipboard
				bcs Ctrl.W.RTS

Ctrl.D			jsr BUF.DelSel
				bcs Ctrl.D.8

				jsr BUF.ResetSel

				jsr SCRN.CursorAdjust
				jsr SCRN.UpdateViewPort
				jsr SCRN.UnSaved		will update TopBar
				jmp SCRN.UpdateMainAndStatus

Ctrl.D.8		clc
				rts
*--------------------------------------
Ctrl.Z			jsr BUF.ComputeCOffset

				lda BUF.COffset
				eor FileLen
				bne .1

				lda BUF.COffset+1
				eor FileLen+1
				beq Ctrl.D.8

.1				jsr BUF.DelCharAtCursor
				bcs Ctrl.W.RTS

				cmp #C.CR				did we DEL a CR ?
				bne .8

				>LDA.G CurY

				>CMP.G ViewPortHm1
				beq .8					Bottom line, all done

				dec
				>CMP.G ViewPortHm1
				beq .8					No scroll needed

				>PUSHW L.SEQ.SCROLLCURUP
				>LDA.G CurY
				inc
				inc
				>PUSHA
				>LDA.G ScreenH
				dec
				>PUSHA
				>PUSHBI 2
				>SYSCALL PrintF
				bcs .9

				jsr SCRN.ResetScrollRgn
				bcs .9

				jsr SCRN.UpdateLast
				bcs .9

.8				jsr SCRN.UpdateCurrentLine
				bcs .9

.80				jsr SCRN.CursorAdjust
				jsr SCRN.UpdateViewPort
				jsr SCRN.UnSaved		will update TopBar
				jmp SCRN.UpdateMainAndStatus

.9				rts
*--------------------------------------
MAN
SAVE usr/src/bin/edit.s.ctrl
LOAD usr/src/bin/edit.s
ASM
