 OPT
*********************************
*      PIET HEIN 2.3            *
*                               *
* 1KB EDITOR VOOR DE 6809.      *
* AUTEUR:   H.G.MULLER          *
* COPYRIGHT 1982,2025           *
*********************************
*
* DE EDIT BUFFER BEGINT OP ADRES $3E00,
* EN BEVAT DE DIRECT PAGE GEVOLGD DOOR DE TE
* EDITTEN TEXT OP $4200.
* STARTEN BIJ START INITIALISEERT EEN (LEGE)
* EDIT BUFFER ALS DE POINTER BEGAD NIET $4200 IS,
* EN LAAT DE BUFFER ANDERS ONAANGETAST.
*
* DE MOGELIJKE COMMANDO'S ZIJN:
* T     GA NAAR DE 1E REGEL VAN DE TEXT.
* <RET> GA NAAR DE VOLGENDE REGEL.
* -     GA NAAR DE VORIGE REGEL.
* I     ACCEPTEER TEXT EN VOEG DIE TOE
*       VOOR DE HUIDIGE REGEL. DIT COMMANDO
*       WORDT BEEINDIGD DOOR EEN LEGE REGEL
*       IN TE VOEREN.
*       CORRECTIES ZIJN MOGELIJK D.M.V. <CTL H>.
* D     GOOI DE HUIDIGE REGEL WEG.
* K     IDEM, MAAR VOEGT TOE AAN 'U' TEXT (I.P.V. VERVANGT)
* U     HAAL LAATST WEGGEGOOIDE REGEL(S) TERUG
*       DE HUIDIGE LOCATIE
* A     ACCEPTEER EEN REGEL TEXT, EN PLAK DIE ACHTER
*       NET VOOR DE HUIDIGE
* F     ACCEPTEER EEN REGEL TEXT, EN ZOEK DIE OP,
*       BEGINNEND BIJ DE HUIDIGE REGEL. EEN LEGE
*       REGEL ZOEKT HETZELFDE ALS DE VORIGE KEER.
* S     ACCEPTEER EEN REGEL, EN VERVANG DE NET
*       GEZOCHTE STRING HIERDOOR. ALS NIET GEBRUIKT
*       NA F PLAKKEN WE DE TEXT VOOR DE HUIDIGE REGEL.
* X     ALS S, MAAR NU IN DE GEHELE TEXT.
* P     PRINT 16 REGELS
* <DEL> GOOI 1E LETTER HUIDIGE REGEL WEG
* <^C>  GOOI ALLE TEXT VANAF HUIDIGE REGEL WEG.
* Q     GA NAAR DE MONITOR EN PRINT BUFFER END.
*       GEBRUIK DIT ADRES BIJ DUMPEN ($4080-ADRES).
* W <F> SCHRIJF OP FILE <F> VANAF HUIDIGE REGEL
* R <F> LEES FILE <F> IN AAN EIND BUFFER
*
* HET IS MOGELIJK IN DE F, S & X COMMANDO'S EEN
* CARRIAGE RETURN MEE TE GEVEN DOOR <^D> TE TYPEN.
*
* COSNIX ROUTINES
*
 ORG $D803
S_WARM RMB 3
S_INCH RMB 3
S_OUTC RMB 3
S_GETC RMB 3
S_PUTC RMB 3
S_OPEN RMB 3
S_CLOS RMB 3
S_CREA RMB 3
S_DELE RMB 3
*
* VARIABELEN
*
 ORG $3E00#
STRING RMB 128
INBUF RMB $200
BEGAD RMB 2
ENDAD RMB 2
CURRAD RMB 2
LEN RMB 2
LOWER RMB 2
UPPER RMB 2
CURBUF RMB 2
 RMB 2
EDBUF RMB 0
*
* PARAMETERS
*
BS EQU 8
STACK EQU $F300
E_EXST EQU 3
*
* PROGRAMMA
*
 ORG $2800
START LBRA INIT
INPC JMP S_INCH
OUPC JMP S_OUTC
MONIT JMP S_WARM
PRINT LDX CURRAD
PR1 LDA ,X+
 CMPX LOWER
 BLS PR2
 CMPX UPPER
 BHI PR2
 ORA #$80
PR2 BSR OUPC
 ANDA #$7F
 CMPA #$D
 BNE PR1
 BRA NL2
ENTER BSR ENTSTR
 LDA #$D
 STA ,X+
 INC LEN+1
 RTS
ENTSTR LDX #INBUF
EN0 STX CURBUF
EN1 BSR INPC
 CMPA #BS
 BNE EN2
 CMPX CURBUF
 BEQ EN1
 LEAX -1,X
 LDA #8
EN4 BSR OUPC
 BRA EN1
EN2 CMPA #$D
 BNE EN3
 TFR X,D
 SUBD CURBUF
 STD LEN
NLINE LDA #$D
 BSR OUPC
NL2 LDA #$A
 BRA OUPC
EN3 CMPX #INBUF+63
 BEQ EN1
 CMPA #4
 BNE EN6
 LDA #$D
 STA ,X+
 BSR NLINE
 BRA EN1
EN6 STA ,X+
 BRA EN4
NEXT LDX CURRAD
NX1 LDA ,X+
 CMPX ENDAD
 LBEQ FM1
 CMPA #$D
 BNE NX1
 STX CURRAD
 RTS
RUIM PSHS D,X,Y,U
 ADDD ENDAD
 TFR D,Y
 LDX ENDAD
 STD ENDAD
RU1 LDA ,-X
 STA ,-Y
 CMPX CURRAD
 BHS RU1
 PULS D,X,Y,U,PC
LAST LDX CURRAD
LT0 LDB #2
LT1 CMPX BEGAD
 BEQ LT2
 LDA ,-X
 CMPA #$D
 BNE LT1
 DECB
 BNE LT1
 LEAX 1,X
LT2 STX CURRAD
 RTS
INIT LDA #$40
 TFR A,DP
 LDX #EDBUF
 CMPX BEGAD
 BEQ TOP
 STX BEGAD
I1 LDA #$D
 STA ,X+
 STX ENDAD
TOP LDX BEGAD
 STX CURRAD
COMLP LDX CURRAD
 STX LOWER
 STX UPPER
NOSET LDS #STACK
 LBSR PRINT
 LBSR INPC
 CMPA #$D
 BNE NOLF
P2 BSR NEXT
 BRA COMLP
NOLF CMPA #'W
 LBEQ WRITE
 CMPA #'R
 LBEQ READ
 CMPA #'P
 LBEQ PAG
 PSHS A
 LBSR OUPC
 LBSR NLINE
 PULS A
 CMPA #3
 BNE NO3
 BSR LT0
 BRA I1
NO3 CMPA #'T
 BEQ TOP
 CMPA #'I
 BNE NOI
INSERT LBSR ENTER
 LDD LEN
 TFR D,Y
 CMPB #1
 BEQ COMLP
 BSR INS0
 BRA INSERT
INS0 LBSR RUIM
 LDX #INBUF
 LDU CURRAD
 LBSR COPY
 STU CURRAD
 RTS
NOI CMPA #'-
 BNE NOMIN
 LBSR LAST
 BRA COMLP
NOMIN CMPA #'K
 BNE NOK
 LDU LEN
 LEAU INBUF,U
 CMPU #INBUF+$1C0
 LBHS FM1
 BRA DOK
NOK CMPA #'D
 BNE NOD
 LDU #INBUF
DOK LDX CURRAD
D1 LDA ,X+
 CMPX ENDAD
 LBEQ FM1
 STA ,U+
 CMPA #$D
 BNE D1
 TFR U,D
 SUBD #INBUF
 STD LEN
 PSHS X
 LDD ENDAD
 SUBD ,S++
 TFR D,Y
 LDU CURRAD
 BSR COPY
 STU ENDAD
 LBRA COMLP
NOD CMPA #'S
 BNE NOS
 LBSR ENTSTR
SU0 LBSR SUBSTI
 LBRA NOSET
NOS CMPA #'F
 BNE NOF
 LDX CURRAD
 PSHS X
 LDX #STRING
 LBSR EN0
 TST LEN+1
 BEQ ZLP
NEWSTR CLR ,X+
 BRA ZL0
ZLP LBSR NEXT
ZL0 LBSR MATCH
 BNE ZL1
 CMPU ENDAD
 BNE ZLP
 PULS X
 STX CURRAD
 LBRA FM1
ZL1 PULS X
 LBRA LCOM
COPY LDA ,X+
 STA ,U+
 LEAY -1,Y
 BNE COPY
 RTS
NOF CMPA #'X
 BNE NOX
 LBSR ENTSTR
XLP LDU CURRAD
XL0 LBSR MA1
 BEQ XL1
 BSR SUBSTI
 LBSR PRINT
 BRA XL0
XL1 CMPU ENDAD
 BEQ LCOM
 LBSR NEXT
 BRA XLP
NOX CMPA #'U
 BNE NOU
 LDD LEN
 TFR D,Y
 LBSR INS0
 LBRA COMLP
NOU CMPA #'A
 BNE NOA
 LDD CURRAD
 PSHS D
 LBSR NEXT
 LBSR ENTER
 LDD CURRAD
 SUBD #1
 STD CURRAD
 LDD LEN
 DECB
 TFR D,Y
 LBSR INS0
 PULS D
 STD CURRAD
 LBRA COMLP
NOA CMPA #'_
 BNE NOUS
 LDX CURRAD
 LDA ,X
 CMPA #$D
 BEQ US0
US1 LDA 1,X
 STA ,X+
 CMPX ENDAD
 BLO US1
 LEAX -1,X
 STX ENDAD
US0 LBRA COMLP
NOUS CMPA #'Q
 BNE FM1
 LDX #ENDAD
 LBRA MONIT
FM1 LEAX FMELD,PCR
 LBSR PR1
LCOM LBRA NOSET
SUBSTI LDD LOWER
 ADDD LEN
 CMPD UPPER
 BEQ SU2
 BLO SU1
 SUBD UPPER
 LDX LOWER
 LDU CURRAD
 STX CURRAD
 LBSR RUIM
 STU CURRAD
 BRA SU2
SU1 LDX UPPER
 TFR D,U
 LDD ENDAD
 SUBD UPPER
 TFR D,Y
 LBSR COPY
 STU ENDAD
SU2 LDU LOWER
 LDY LEN
 BEQ SU3
 LDX #INBUF
 LBSR COPY
SU3 STU UPPER
 RTS
MATCH LDU CURRAD
MA1 TFR U,Y
 LDX #STRING
MA2 LDA ,X+
 BEQ FOUND
 CMPA ,Y+
 BEQ MA2
 LDA ,U+
 CMPA #$D
 BNE MA1
 RTS
FOUND STU LOWER
 STY UPPER
 RTS
PAG LDB #15
P1 LBSR NEXT
 LBSR PRINT
 DECB
 BNE P1
 LBRA P2
*
* DISK I/O ROUTINES
*
READ BSR GETNAM
 LDB #$30
 JSR S_OPEN
 BNE PERROR
 LDX ENDAD
 LEAX -1,X
R1 LDB #$30
 JSR S_GETC
 BNE R2
 STA ,X+
 BRA R1
R2 LDB #$30
 JSR S_CLOS
 LBRA I1
WRITE BSR GETNAM
WF LDB #$3E
 JSR S_CREA
 BEQ W0
 CMPB #E_EXST
 BNE PERROR
 LEAX MWEG,PCR
 LBSR PR1
 LBSR INPC
 CMPA #'Y
 BNE W3
 LDX #INBUF
 JSR S_DELE
 BNE PERROR
 BRA WF
W0 LDX CURRAD
W1 LDA ,X+
 CMPX ENDAD
 BEQ W2
 LDB #$30
 JSR S_PUTC
 BEQ W1
PERROR LEAY MESTAB-2,PCR
 ASLB
 LDX B,Y
 LBSR PR1
W2 LDB #$30
 JSR S_CLOS
W3 LBRA COMLP
GETNAM LBSR OUPC
 LDA #$20
 LBSR OUPC
 LBSR ENTER
 CLR ,-X
 LDX #INBUF
 RTS
FMELD FCC 'Wartaal, maatje!',$D
MS1 FCC 'BESTAAT AL',$D
MS2 FCC 'DISK VOL',$D
MS3 FCC 'DIRECTORY VOL',$D
MS4 FCC 'GEEN PERMISSIE',$D
MS5 FCC 'FILE IS BEZIG',$D
MS6 FCC 'BESTAAT NIET',$D
MWEG FCC 'OUDE VERWIJDEREN (Y-N)?',$D
MESTAB FDB MS5,MS6,MS1,MS3,MS2
 FDB FMELD,FMELD,FMELD,FMELD,MS4
 END
