; *********************************************************************
; EDIT06
; Pascal editor file 06
; B.Bridgwater 5.12.83
; *********************************************************************
;
;------------------------------------------------------------------------
;************************************************************************
;************** E D I T O R   C O M M A N D S ***************************
;************************************************************************
;------------------------------------------------------------------------
;
curlt ;
;
       jsr starttest
       bcc clcont
       ;
       lda scrnX
       beq csrexi
clcont dec scrnX
       bpl csrexi
       lda pagewidth
       sta scrnX
;
curup  ;
;
       jsr starttest
       bcs csrexi
       ;
       ldaIM 1
       jsr mvlnbk
       ;
       lda TSM
       cmp scrnY
       bcs cuupsc
       ;
cuupNs dec scrnY
       bpl csrexi
       ;
cuupsc ;In Top Scroll Margin. If more than Top Scroll Margin Width from
       ;top of file, then assign Scroll Pointer, else move cursor up.
       ;
       lda TSMW
       jsr TPGSbk
       cmp TSMW
       bne cuupNs
       ;
       lda TP
       sta SCP
       lda TP+1
       sta SCP+1
       ;
       ldaim harddown
       sta updatereqd
       ;
       rts
;------------------------------------------------------------------------
curst ;
;
        ldaim 0
        sta scrnX
        beq csrexi
;
curend ;
;
       lda currlength
       sta scrnX
;
csrexi ldaim none
       sta updatereqd
       rts
;------------------------------------------------------------------------
currt ;
;
       lda scrnX
       cmp pagewidth
       beq currco
       inc scrnX
       bne csrexi
currco jsr endtest
       bcs csrexi
       ldaim 0
       sta scrnX
;
curdwn ;
;
       jsr endtest
       bcs csrexi
       ;
       ldaim 1
       jsr mvlnfd
       ;
       lda scrnY
       cmp BSM
       bcs cudosc
       ;
       inc scrnY
       bpl csrexi
       ;
cudosc ;In Bottom Scroll Margin. If more than Bottom Scroll Margin Width
       ;from bottom of file, then assign Scroll Pointer, else set SCP+1 to
       ;0 to indicate wipeline required.
       ;
       ldaim 0   ;Initialize SCP+1 to flag value indicating blank line
       sta SCP+1 ;required for scroll.
       ;
       lda BSMW
       jsr TPGEfd
       lda count
       bne cudows
       ;
       lda TP
       sta SCP
       lda TP+1
       sta SCP+1
       ;
cudows ldaim hardup
       sta updatereqd
       ;
       rts
;------------------------------------------------------------------------
pageup ;Leaves cursor XY.
;
       lda scrnlg
       jmp mvlnbk
;------------------------------------------------------------------------
pagedn ;Leaves cursor XY.
;
       lda scrnlg
       jmp mvlnfd
;------------------------------------------------------------------------
stfile ;
;
       ldx TSTART
       ldy TSTART+1
       jsr gpbkXY
       ;
       ldaim 0
       sta scrnX
       ;sta scrnY - will be forced by scrnud
       rts
;------------------------------------------------------------------------
curedf ;
;
       ;Try to glue bottom of file to BSM.
       ;
       lda BSM
       sta scrnY
       ;
       ldx TMAX
       ldy TMAX+1
       jsr gpfdXY
       ;
       jmp normalizetextnscrnX
;------------------------------------------------------------------------
IOtoggle ;
;
       lda insertflag
       eorim 1
       sta insertflag
       ;
       ldaim none
       sta updatereqd
       ;
       jmp status
;------------------------------------------------------------------------
CRtoggle ;
;
       lda CRvisflag
       eorim 1
       sta CRvisflag
       ;
       rts
;------------------------------------------------------------------------
setTSM ;Set Top Scroll Margin routine.
;
;Exit  -  A Preserved.
;
       sta TSM
       sta TSMW
       rts
;------------------------------------------------------------------------
setBSM ;Set Bottom Scroll Margin routine.
;
       sta BSM
       sec
       lda pagelength
       sbc BSM
       sta BSMW
       rts
;------------------------------------------------------------------------
TSMcsr ;Set Top Scroll Margin to current cursor line.
;
       lda scrnY
       jsr setTSM
       ;
       ldaim none
       sta updatereqd
       ;
       rts
;------------------------------------------------------------------------
BSMcsr ;Set Bottom Scroll Margin to current cursor line.
;
       lda scrnY
       jsr setBSM
       ;
       ldaim none
       sta updatereqd
       ;
       rts
;------------------------------------------------------------------------
SCMclr ;Clear Scroll Margins.
;
       ldaim 0
       jsr setTSM
       ;
       lda pagelength
       jsr setBSM
       ;
       ldaim none
       sta updatereqd
       ;
       rts
;------------------------------------------------------------------------
newtext ;
;
       jmp editin
;------------------------------------------------------------------------
loadfile ;Doesn't zap buffer until new file is correctly loaded.
;
       jsr prompt
       = "#Tload: "
       = 0
       ;
       jsr prptline
       ;
       ldyim 0
       jsr tload
       ;
       ldx TEND
       ldy TEND+1
       ;
       jmp editGS
;-----------------------------------------------------------------------
savefile ;
;
       jsr dfinit
       ;
       jsr prompt
       = "#Tsave: "
       = 0
       ;
       jsr prptline
       ;
       jsr dfblok
       ;
       ldyim 0
       jsr tsave
       ;
       ldx TEXP
       ldy TEXP+1
       jsr gpfdXY
       ;
       jmp normalizetextnscreenX
;-----------------------------------------------------------------------
insrtf ;
;
       jsr mkrefuse
       ;
       jsr prompt
       = "#Insert: "
       = 0
       ;

       jsr prptline
       ;
       jsr finepositiongap
       ;
       lda GS
       sta addr
       lda GS+1
       sta addr+1
       lda GE
       ldx GE+1
       ;
       ldyim 0
       jsr pasload
       ;
       stx GS
       sty GS+1
       ;
       ;Move to start of inserted file.
       ldx addr
       ldy addr+1
       jsr gpbkXY
       ;
       jmp normalizetextnscrnX
;------------------------------------------------------------------------
edstar ;
;
       ldaim 3
       sta brkaction
       ;
       jsr inituser
       ;
       jsr prompt
       = "#Star"
       = CR
       = 0
       ;
starlo ldaim "*"
       jsr OSWRCH
       jsr readnstrip
       beq starex
       ldxim :LSB: commandline
       ldyim :MSB: commandline
       jsr OSCLI
       jmp starlo
       ;
starex jsr initedit
       jmp editcont
;-----------------------------------------------------------------------
allowcsredit ;Allow cursor editing & softkey use. Terminated by CR.
;
       ldaim 1
       sta cursedflag
       ;
       jsr inituser
       ;
       ldaim none
       sta updatereqd
       ;
       jmp status
;-----------------------------------------------------------------------
edlibnum jmp brkD54 ;'Bad number'
;
editline ;Move to specified line number.
;
       jsr prompt
       = "#Line: "
       = 0
       ;
       jsr prptline
       beq edlibnum
       ;
       sty index
       ;
       sty line
       sty line+1 ;Free 0 in Y.
       ;
edlire ldy index
       ldaIY temp
       cmpim CR
       beq edlimv
       cmpim "9"+1
       bcs edlibnum
       sbcim "0"-1
       bcc edlibnum
       sta atemp
       ;
       ;line = line * 10 + atemp
       ;
       ldaim 10
       sta count
       ;
       ldxim 0
       ldyim 0
       ;
       clc
edli10 txa
       adc line
       tax
       tya
       adc line+1
       tay
       bcs edlibnum
       dec count
       bne edli10
       ;
       txa
       adc atemp
       sta line
       bcc edlnhi
       iny
       beq edlibnum
edlnhi sty line+1
       ;
       inc index
       bne edlire
       ;
edlimv ;Number is held in line. Numbers start at 1 ...
       ;
       sec
       lda line
       sbcim 1
       sta line
       lda line+1
       sbcim 0
       sta line+1
       bcc edlibnum
       ;
       jsr stfile
       ;
       lda GE
       sta TP
       lda GE+1
       sta TP+1
       ;
edlifw lda line
       ora line+1
       beq edligo
       ;
edliCR ldaim 1
       jsr TPfwdAlines
       bcs edliblin
       lda atemp
       cmpim CR
       bne edliCR
       ;
       lda line
       bne edlnhd
       dec line+1
edlnhd dec line
       jmp edlifw
       ;
edligo ;Move to BSM.
       ;
       lda BSM
       sta scrnY
       ;
       jmp gpfdTP
       ;
edliblin jmp brkX17 ;'Not found'
;-----------------------------------------------------------------------


 lnk edit07
