NEW
PREFIX
AUTO 4,1
				.LIST OFF
*--------------------------------------
* ^A = Help
* ^B = Begin Block
* ^C = Copy Block
* ^D = Delete Block
* ^E = End Block
* ^F = Find...
* ^G = Go To SOL
***** ^H
* ^I = 
***** J,K 
* ^L = Go To EOL
***** ^M
* ^N = Find Next
* ^O = Page Up
* ^P = Page Down
* ^Q = Quit
* ^R = Replace...
* ^S = Save
* ^T = Go To Top of file
***** ^U
* ^V = Paste Block
* ^W = Erase line
* ^X = Cut Block
* ^Y = End Of File
* ^Z = Undo
*--------------------------------------
Ctrl.Invalid	
				clc
				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 .9
				
				inc .1+1
				
				lda (ZPPTR1)
				sec
				adc ZPPTR1
				sta ZPPTR1
				bcc .1
				inc ZPPTR1+1
				bra .1

.8				jsr SCRN.UpdateStatusBar
				bcs .9
				rts
.9				jmp Ctrl.Q
*--------------------------------------
Ctrl.B			jsr BUF.ComputeCOffset
				lda BUF.COffset
				ldy #SelStart
				sta (pData),y
				lda BUF.COffset+1
				iny
				sta (pData),y
				jsr SCRN.UpdateMain
				bcs .9
				rts
.9				jmp Ctrl.Q
*--------------------------------------
Ctrl.C			jsr BUF.SelToClipboard
				bcs .9
.8				clc
				rts
.9				jmp Ctrl.Q
*--------------------------------------
Ctrl.E			jsr BUF.ComputeCOffset
				lda BUF.COffset
				ldy #SelEnd
				sta (pData),y
				lda BUF.COffset+1
				iny
				sta (pData),y
				jsr SCRN.UpdateMain
				bcs .9
				rts
.9				jmp Ctrl.Q
*--------------------------------------
Ctrl.F			lda #PromptModeFind
				>STA.G PromptMode
				
				jsr SCRN.UpdateStatusBar
				bcs .9
				rts
.9				jmp Ctrl.Q
*--------------------------------------
Ctrl.G			ldy #FileX
				lda (pData),y
				beq .8
				lda #0
				sta (pData),y
				jsr SCRN.UpdateViewPort
				bcs .9
.8				clc
				rts
.9				jmp Ctrl.Q
*--------------------------------------
Ctrl.BS			ldy #FileX
				lda (pData),y
				beq .1					already at begining 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				jsr SCRN.UpdateViewPort
				bcs .9
				
.8				clc
				rts
.9				jmp Ctrl.Q
*--------------------------------------
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				jsr SCRN.UpdateViewPort
				bcs .9
				
.8				clc
				rts
.9				jmp Ctrl.Q				
*--------------------------------------
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
				
				jsr SCRN.UpdateViewPort
				bcs .9
.8				clc
				rts
.9				jmp Ctrl.Q				
*--------------------------------------
Ctrl.L			jsr BUF.GetLine
				bcs .8
				
				tya						Y = line length
				ldy #FileX
				sta (pData),y
				jsr SCRN.UpdateViewPort
				bcs .9
.8				clc
				rts
.9				jmp Ctrl.Q				
*--------------------------------------
Ctrl.CR			lda #C.CR
				jsr BUF.InsertA
				bcs .9

				ldy #FileX
				lda #0
				sta (pData),y
				jsr SCRN.UpdateMain
				bcs .9
				
				clc
				rts
.9				jmp Ctrl.Q				
*--------------------------------------
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	

				jsr SCRN.UpdateViewPort
				bcs .9
				rts
.9				jmp Ctrl.Q					
				
.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
				
				jsr SCRN.UpdateViewPort
				bcs .9
				rts
.9				jmp Ctrl.Q	

.8				pla
				pla
				jmp Ctrl.Y
*--------------------------------------
Ctrl.Q			lda #$FF
				>STA.G bCANCEL
				clc
				rts
*--------------------------------------
Ctrl.R			lda #PromptModeReplace
				>STA.G PromptMode
				
				jsr SCRN.UpdateStatusBar
				bcs .9
				
				rts
.9				jmp Ctrl.Q				
*--------------------------------------
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

				jsr SCRN.UpdateStatusBar
				bcs .9
				
				clc
				rts
.9				jmp Ctrl.Q				
*--------------------------------------
Ctrl.T			>STZ.G FileX
				>STZW.G FileY
				
				jsr SCRN.UpdateViewPort
				bcs .9
				rts
.9				jmp Ctrl.Q
*--------------------------------------
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				jsr SCRN.UpdateViewPort
				bcs .9
				
.8				clc
				rts
.9				jmp Ctrl.Q				
*--------------------------------------
Ctrl.V			jsr BUF.InsertClipboard
				bcs .9
				jsr SCRN.UpdateMain
				bcs .9
				jsr SCRN.UpdateStatusBar
				bcs .9
				rts
.9				jmp Ctrl.Q				
*--------------------------------------
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
				
				pla
				sec						+1 for CR 
				adc BUF.LOffset
				
				ldy #SelEnd
				sta (pData),y
				lda BUF.LOffset+1
				adc #0
				iny
				sta (pData),y
				bra Ctrl.D	
*--------------------------------------
Ctrl.X			jsr BUF.SelToClipboard
				bcs Ctrl.X.RTS

Ctrl.D			jsr BUF.DelSel
				bcs .9
				jsr SCRN.UpdateMain
				bcs .9
				jmp SCRN.UpdateStatusBar
.9				jmp Ctrl.Q	
					
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

				jsr SCRN.UpdateViewPort
				bcs .9
				rts
.9				jmp Ctrl.Q	
*--------------------------------------
Ctrl.Z			clc
				rts
*--------------------------------------
Ctrl.ESC		clc
				rts
*--------------------------------------
Prompt.Editor	cmp #C.DEL
				beq .4
				
				cmp #C.SPACE
				bcs .7
				
				asl
				tax
				jmp (J.CTRL,x)
				
.4				jsr BUF.Del
				bcs .9

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

				jsr SCRN.UpdateMain
				bcs .9
				
				bra .6
				
.5				jsr SCRN.UpdateCurrentLine
				bcs .9
				
.6				jsr SCRN.UpdateStatusBar
				bcs .9
				rts
				
.7				jsr BUF.InsertA
				bcs .9
				jsr SCRN.UpdateCurrentLine
				bcs .9
				jsr Ctrl.FS
				bcs .9
				rts	
				
.9				jmp Ctrl.Q
*--------------------------------------
Prompt.Help		>STZ.G PromptMode

				jsr SCRN.UpdateMain
				bcs .9
				jsr SCRN.UpdateStatusBar
				bcs .9
				rts

.9				jmp Ctrl.Q
*--------------------------------------
Prompt.Find		cmp #3
				bne .1

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

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

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

			
				clc
				rts
.9				jmp Ctrl.Q				
*--------------------------------------
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				jsr SCRN.UpdateStatusBar
				bcs .9
				rts
				
.9				jmp Ctrl.Q
*--------------------------------------
MAN
SAVE USR/SRC/BIN/EDIT.S.CTRL
LOAD USR/SRC/BIN/EDIT.S
ASM
