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
*--------------------------------------
Prompt.Editor	cmp #C.DEL
				beq Ctrl.DEL
				
				cmp #C.SPACE
				bcc .3

				jsr BUF.InsertA
				bcs .9
				jsr SCRN.UpdateCurrentLine
				bcs .9
				jsr Ctrl.FS
				bcs .9

.8				clc
				rts	

.3				asl
				tax
				jmp (J.CTRL,x)
				
.9				rts
*--------------------------------------
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.1

.8				clc
.9				rts
*--------------------------------------
Ctrl.Invalid	
				clc
Ctrl.Invalid.RTS				
				rts
*--------------------------------------
Ctrl.A			lda #PromptModeHelp
				>STA.G PromptMode
				
				>LDYA L.MSG.HELP
				>STYA ZPPTR1
				
				stz .1+1
				
.1				ldy #0
				ldx #0
				jsr GotoXY
				
				lda (ZPPTR1)
				beq .8
				
				>PUSHW ZPPTR1
				>PUSHBI 2
				>LDYA L.MSG.HELPLINE
				>SYSCALL printf
				bcs Ctrl.Invalid.RTS
				
				inc .1+1
				
				lda (ZPPTR1)
				sec
				adc ZPPTR1
				sta ZPPTR1
				bcc .1
				inc ZPPTR1+1
				bra .1

.8				jmp SCRN.UpdateStatusBar
*--------------------------------------
Ctrl.B			jsr BUF.ComputeCOffset
				lda BUF.COffset
				ldy #SelStart
				sta (pData),y
				lda BUF.COffset+1
				iny
				sta (pData),y
				jmp SCRN.UpdateMain
*--------------------------------------
Ctrl.C			jmp BUF.SelToClipboard
*--------------------------------------
Ctrl.E			jsr BUF.ComputeCOffset
				lda BUF.COffset
				ldy #SelEnd
				sta (pData),y
				lda BUF.COffset+1
				iny
				sta (pData),y
				jmp SCRN.UpdateMain
*--------------------------------------
Ctrl.F			lda #PromptModeFind
				>STA.G PromptMode
				
				jmp SCRN.UpdateStatusBar
*--------------------------------------
Ctrl.G			ldy #FileX
				lda (pData),y
				beq .8
				lda #0
				sta (pData),y
				jmp SCRN.UpdateViewPort

.8				clc
				rts
*--------------------------------------
Ctrl.BS			ldy #FileX
				lda (pData),y
				beq .1					already at beginning of line

				dec
				sta (pData),y
				bra .3
				
.1				ldy #FileY+1
				lda (pData),y
				tax
				dey
				ora (pData),y
				beq .8
				
				lda (pData),y
				bne .2
				dex
.2				dec
				
				jsr BUF.GetLineAX
				bcs .8
				tya
				ldy #FileX
				sta (pData),y
				
				sec
				ldy #FileY
				lda (pData),y
				sbc #1
				sta (pData),y
				iny
				lda (pData),y
				sbc #0
				sta (pData),y
				
.3				jmp SCRN.UpdateViewPort
				
.8				clc
				rts
*--------------------------------------
Ctrl.TAB
				clc
				rts
*--------------------------------------
Ctrl.LF			ldy #FileY+1
				lda (pData),y
				tax
				dey
				lda (pData),y
				inc
				bne .1
				inx
.1				jsr BUF.GetLineAX
				bcs .8
				
				tya						Y = line length
				ldy #FileX
				cmp (pData),y
				bcs .2
				sta (pData),y
				
.2				ldy #FileY
				lda (pData),y
				inc
				sta (pData),y
				bne .3
				iny
				lda (pData),y
				inc
				sta (pData),y
				
.3				jmp SCRN.UpdateViewPort
				
.8				clc
				rts
*--------------------------------------
Ctrl.VT			ldy #FileY+1
				lda (pData),y
				tax
				dey
				ora (pData),y
				beq .8
				
				lda (pData),y
				bne .1
				dex
.1				dec
				
				jsr BUF.GetLineAX
				bcs .8
				
				tya						Y = line length
				ldy #FileX
				cmp (pData),y
				bcs .2
				sta (pData),y
				
.2				sec
				ldy #FileY
				lda (pData),y
				sbc #1
				sta (pData),y
				iny
				lda (pData),y
				sbc #0
				sta (pData),y
				
				jmp SCRN.UpdateViewPort
				
.8				clc
				rts
*--------------------------------------
Ctrl.L			jsr BUF.GetLine
				bcs .8
				
				tya						Y = line length
				ldy #FileX
				sta (pData),y
				jmp SCRN.UpdateViewPort

.8				clc
				rts
*--------------------------------------
Ctrl.CR			lda #C.CR
				jsr BUF.InsertA
				bcs .9

				ldy #FileX
				lda #0
				sta (pData),y
				jmp SCRN.UpdateMain

.9				rts
*--------------------------------------
Ctrl.N
				clc
				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 #0
				ldy #FileX
				sta (pData),y	

				jmp SCRN.UpdateViewPort
				
.8				pla
				jmp Ctrl.T
*--------------------------------------
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

				tya						Y = line length
				ldy #FileX
				sta (pData),y

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

				dey
				pla
				sta (pData),y
				
				jmp SCRN.UpdateViewPort

.8				pla
				pla
				jmp Ctrl.Y
*--------------------------------------
Ctrl.Q			lda #$FF
				>STA.G bCANCEL
				clc
				rts
*--------------------------------------
Ctrl.R			lda #PromptModeReplace
				>STA.G PromptMode
				
				jmp SCRN.UpdateStatusBar
*--------------------------------------
Ctrl.S			lda #PromptModeSave
				>STA.G PromptMode
				
				>LDA.G hFileName
				beq .2
				
				>SYSCALL GetMemPtr
				>STYA ZPPTR1
				
				ldy #$ff
				
.1				iny
				lda (ZPPTR1),y
				sta (pData),y
				
				bne .1
				
				tya
				
.2				>STA.G PromptBufPtr

				jmp SCRN.UpdateStatusBar
*--------------------------------------
Ctrl.T			>STZ.G FileX
				>STZW.G FileY
				
				jmp SCRN.UpdateViewPort
*--------------------------------------
Ctrl.FS			jsr BUF.GetLine
				bcs .8
				
				tya						Y = line length
				ldy #FileX
				cmp (pData),y
				beq .1					already at end of line

				lda (pData),y
				inc
				sta (pData),y
				bra .3
				
.1				ldy #FileY+1
				lda (pData),y
				tax
				dey
				lda (pData),y
				inc
				bne .2
				inx
				
.2				jsr BUF.GetLineAX
				bcs .8
				
				ldy #FileY				CC
				lda (pData),y
				adc #1
				sta (pData),y
				iny
				lda (pData),y
				adc #0
				sta (pData),y
				
				ldy #FileX
				lda #0
				sta (pData),y
				
.3				jmp SCRN.UpdateViewPort
				
.8				clc
				rts
*--------------------------------------
Ctrl.V			jsr BUF.InsertClipboard
				bcs .9
				jsr SCRN.UpdateMain
				bcs .9
				jmp SCRN.UpdateStatusBar

.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
				clc
				lda (BufPtr),y
				bne .1
				
				tya
				beq .8					previoyus line\CR\0
				iny
				
.1				tya

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

Ctrl.D			jsr BUF.DelSel
				bcs Ctrl.X.RTS
				
				jsr SCRN.CursorAdjust
				jsr SCRN.UpdateMain
				bcs Ctrl.X.RTS

				jmp SCRN.UpdateStatusBar

Ctrl.X.RTS		rts
*--------------------------------------
Ctrl.Y			ldy #FileY+1
				lda (pData),y
				tax
				dey
				lda (pData),y
				
				inc
				bne .1
				inx
				
.1				jsr BUF.GetLineAX

				bcs .2

				ldy #FileY
				lda (pData),y
				inc
				sta (pData),y
				bne Ctrl.Y
				iny
				lda (pData),y
				inc
				sta (pData),y
				
				bra Ctrl.Y
				
.2				jsr BUF.GetLine			Y=linelen

				tya						Y = line length
				>STA.G FileX

				jmp SCRN.UpdateViewPort
*--------------------------------------
Ctrl.Z			jsr BUF.ComputeCOffset

				lda BUF.COffset
				cmp BufLen
				lda BUF.COffset+1
				sbc BufLen+1
				bcc Ctrl.Z.1
				
				clc
				rts

Ctrl.Z.1		jsr BUF.DelCharAtCursor
				bcs .9

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

				jsr SCRN.UpdateMain
				bcs .9
				jmp SCRN.UpdateStatusBar
				
.1				jsr SCRN.UpdateCurrentLine
				bcs .9
				jmp SCRN.UpdateStatusBar
				
.9				rts
*--------------------------------------
Prompt.Help		>STZ.G PromptMode

				jsr SCRN.UpdateMain
				bcs .9
				jmp SCRN.UpdateStatusBar

.9				rts
*--------------------------------------
Prompt.Find		cmp #3
				bne .1

				>STZ.G PromptMode
				
				jmp SCRN.UpdateStatusBar
				
.1				cmp #13
				bne .2
				
.2				

				clc
.9				rts
*--------------------------------------
Prompt.Replace	cmp #3
				bne .1

				>STZ.G PromptMode
				
				jsr SCRN.UpdateStatusBar
				bcs .9
				rts
				
.1				cmp #13
				bne .2
				
.2				

			
				clc

.9				rts
*--------------------------------------
Prompt.Save		cmp #3					Ctrl-C
				bne .1

				>STZ.G PromptMode
				bra .80
				
.1				cmp #C.CR
				bne .2
				
				>LDA.G PromptBufPtr
				beq .8
				
				>LDYA pData
				>SYSCALL RealPath
				bcs .12
				
				phx
				
				>LDA.G hFileName
				beq .11
				>SYSCALL FreeMem

.11				pla
				>STA.G hFileName
				
				>STZ.G PromptMode
				
				jsr SaveFile
				bcc .81
.12				jsr SCRN.UpdateStatusBarErrA
				bcs .9
				rts
				
.2				cmp #127
				bne .3
				
				>LDA.G PromptBufPtr
				beq .8
				
				dec
				sta (pData),y

				tay
				lda #0
				sta (pData),y
				bra .80
				
.3				cmp #C.SPACE
				bcc .8
				
				pha
				>LDA.G PromptBufPtr
				tay
				pla
				cpy #PromptBufMax
				beq .8
				
				sta (pData),y
				iny
				lda #0
				sta (pData),y
				tya
				>STA.G PromptBufPtr
				bra .80
				
.8				clc
				rts				

.81				jsr SCRN.UpdateTopBar
				bcs .9
.80				jmp SCRN.UpdateStatusBar

.9				rts
*--------------------------------------
MAN
SAVE USR/SRC/BIN/EDIT.S.CTRL
LOAD USR/SRC/BIN/EDIT.S
ASM
