
100 CLEAR 7411:DIM A(1275):MN=25
110 DIM L$(MN):FOR X=1 TO 255:L$=L$+" ":NEXT X:GOTO10000
130 PRINTTAB(12);"no room"
135 SOUND150,3:GOSUB200:RETURN
145 PRINT:PRINTTAB(8);"ENTER FILENAME:"
150 PRINTTAB(10);:INPUTW$
160 IF LEN(W$)>8 OR LEN(W$)<1 THEN SOUND150,3:W$=""
170 RETURN
180 C=LEN(C$):PRINTTAB((32-C)/2);C$
190 PRINTTAB((32-C)/2);LEFT$("================",C):PRINT:RETURN
200 PRINT@452,"press enter to continue";
220 C$=INKEY$:IF C$<>CHR$(13) AND C$<>"4" THEN 220
230 RETURN
350 PRINT:PRINTTAB(10);"CHOOSE 1 -";MAX
360 C$=INKEY$:C=VAL(C$)
365 GOSUB400
370 IF C<1 OR C>MAX THEN 360
380 RETURN
400 FOR X=0 TO 31:SET(0,X,CO):SET(63,31-X,CO):NEXT X
420 FOR X=0 TO 63:SET(X,0,CO):SET(63-X,31,CO):NEXT X
440 CO=CO+1:IF CO=9 THEN CO=2
450 RETURN
500 PRINTTAB(6);"ARE YOU SURE (Y/N)?"
510 C$=INKEY$:IF C$="N" OR C$="n" THEN C=0:GOTO540
520 IF C$="Y" OR C$="y" THEN C=1:GOTO540
530 GOTO510
540 RETURN
1000 CLS
1030 C$="ENTER TEXT":GOSUB180
1040 IF NW=0 THEN 1090
1070 GOSUB500:IF C=0 THEN 1170
1090 NW=MN:EL=MN-NW:S=1
1110 FOR I=S TO NW
1120 PRINT"LINE #";I;
1130 L$(0)="":GOSUB7500:L$(I)=L$(0)
1135 IF L$(I)="" THEN T=NW:NW=I-1:I=T:EL=EL+T-NW
1140 NEXT I
1170 RETURN
2000 CLS
2030 C$="LOAD TEXT FILE":GOSUB180
2045 GOSUB145:IF W$="" THEN RETURN
2065 PRINTTAB(11);"PRESS PLAY"
2070 CLOAD*A,W$
2080 PRINT:PRINTTAB(11);"press stop"
2100 L=0:NW=A(0):FOR K=1 TO NW:C=0
2105 FOR I=1 TO 255
2110 I=PEEK(VARPTR(A(1))+L):Y=VARPTR(L$):POKE (PEEK(Y+2)*256)+PEEK(Y+3)+C,I
2120 C=C+1:L=L+1
2130 NEXT I
2150 L$(K)=LEFT$(L$,C-1):PRINT NW-K+1;
2160 NEXT K
2180 EL=MN-NW:RETURN
3000 CLS
3020 C$="SAVE TEXT FILE":GOSUB180
3040 GOSUB145:IF W$="" THEN RETURN
3050 IF NW<1 THEN PRINTTAB(8);"no text to save":GOSUB135:RETURN
3060 C=0
3070 FOR K=1 TO NW:T=LEN(L$(K)):FOR I=1 TO T:POKE VARPTR(A(1))+C,ASC(MID$(L$(K),I,1)):C=C+1:NEXT I:POKE VARPTR(A(1))+C,255
3071 C=C+1:PRINT NW-K+1;:NEXT K
3075 PRINT:PRINTTAB(5);"PRESS PLAY AND RECORD":GOSUB200:PRINT:PRINTTAB(12);"saving"
3085 A(0)=NW:CSAVE*A,W$:RETURN
3090 IF NW<2 THEN 3170
3095 J=1:IF RIGHT$(L$(1),1)<>" " THEN L$(1)=L$(1)+" "
3096 FOR K=2 TO NW
3100 IF RIGHT$(L$(K),1)<>" " THEN L$(K)=L$(K)+" "
3120 T=LEN(L$(J)):I=LEN(L$(K)):W=1:IF I=0 THEN 3160
3130 C=ASC(MID$(L$(K),W,1)):IF C<>32 THEN W=W+1:GOTO3130
3140 W$=LEFT$(L$(K),W):IF T+W<255 THEN L$(J)=L$(J)+W$:L$(K)=RIGHT$(L$(K),I-W):GOTO3120
3150 J=J+1:IF J<K THEN 3120
3160 NEXT K:NW=J:EL=MN-NW
3170 RETURN
4000 CLS:PRINT
4020 C$="EDIT TEXT":GOSUB180
4045 IF NW=0 THEN PRINTTAB(8);"no text to edit":GOSUB135:RETURN
4050 PRINTTAB(6);"1 -LIST LINES"
4060 PRINTTAB(6);"2 -INSERT A LINE"
4070 PRINTTAB(6);"3 -DELETE A LINE"
4080 PRINTTAB(6);"4 -REPLACE A LINE"
4090 PRINTTAB(6);"5 -ADD LINE(S)"
4100 PRINTTAB(6);"6 -SEARCH"
4115 PRINTTAB(6);"7 -RE-ORDER TEXT"
4116 PRINTTAB(6);"8 -OTHER OPTIONS"
4130 MAX=8:GOSUB350
4160 ON C GOSUB4920,4350,4530,4660,4810,4190,3090
4165 IF C=8 OR NW=0 THEN RETURN
4170 GOTO4000
4190 CLS
4210 C$="SEARCH":GOSUB180
4240 PRINT"SEARCH FOR:"
4245 L$(0)="":GOSUB7500
4250 W$=L$(0)
4260 W=LEN(W$)
4265 PRINT "FOUND IN LINE #"
4270 FOR I=1 TO NW
4280 T=LEN(L$(I))
4290 FOR J=1 TO T-W+1
4300 IF W$=MID$(L$(I),J,W) THEN PRINT I;
4310 NEXT J:NEXT I:PRINT:GOSUB200
4340 RETURN
4350 CLS
4370 C$="INSERT LINE":GOSUB180
4390 IF EL=0 THEN GOSUB130:GOTO4520
4400 INPUT"INSERT BEFORE WHICH LINE";L
4405 IF L<1 OR L>NW THEN 4610
4410 PRINT
4420 L$(0)="":GOSUB7500
4470 NW=NW+1:EL=EL-1
4480 FOR I=NW TO L STEP-1
4490 L$(I)=L$(I-1)
4500 NEXT I
4510 L$(L)=L$(0)
4520 RETURN
4530 CLS
4550 C$="DELETE A LINE":GOSUB180
4590 INPUT"LINE NUMBER TO DELETE";L
4610 IF L<1 OR L>NW THEN PRINTTAB(7);"line out of range":GOSUB135:RETURN
4620 NW=NW-1:EL=EL+1:FOR I=L TO NW:IF I=MN THEN 4640
4630 L$(I)=L$(I+1)
4640 NEXT I
4650 RETURN
4660 CLS
4680 C$="REPLACE A LINE":GOSUB180
4720 INPUT"LINE NUMBER TO REPLACE";L
4730 IF L<1 OR L>NW THEN 4610
4750 PRINT@160,L$(L):PRINT@160,"";
4760 L$(0)=L$(L)
4770 GOSUB7500:IF L$(0)<>"" THEN L$(L)=L$(0)
4800 RETURN
4810 CLS
4830 C$="ADD LINE(S)":GOSUB180
4870 IF EL=0 THEN GOSUB130:GOTO4910
4890 S=NW+1:NW=MN:EL=0
4900 GOSUB1110
4910 RETURN
4920 FOR L=1 TO NW:C$="LIST LINES":CLS:GOSUB180
4940 PRINT "LINE #";L:PRINT:PRINT L$(L)
4945 GOSUB200:IF C$="4" THEN GOSUB4750
4950 NEXT L
4990 RETURN
5000 CLS
5020 C$="LIST TEXT":GOSUB180
5050 SW=30:C=0:L=1:CC=0:W=0
5070 W$=""
5080 PRINTTAB(1);
5090 FOR I=1 TO NW
5100 L$(0)=L$(I):IF RIGHT$(L$(0),1)<>" " THEN L$(0)=L$(0)+" "
5110 FOR J=1 TO LEN(L$(0))
5120 C$=MID$(L$(0),J,1)
5130 IF C$=" " OR C$="^" OR C$=CHR$(95) THEN 5160
5140 W$=W$+C$
5150 GOTO5200
5160 W=LEN(W$)
5170 IF CC+W>=SW THEN CC=0:PRINT:PRINTTAB(1);:IF C=7 THEN LPRINT LF$;:R=R+1
5175 IF R=L THEN GOSUB5220:R=0:PRINT:PRINT
5180 PRINTW$;" ";:IF C=7 THEN LPRINT W$;" ";
5190 CC=CC+W+1:W$="":W=0
5195 IF C$=CHR$(95) THEN CC=5:PRINT:PRINTTAB(6);:IF C=7 THEN LPRINT LF$;"     ";:R=R+1
5196 IF C$="^" THEN CC=0:PRINT:PRINTTAB(1);:IF C=7 THEN LPRINT LF$;:R=R+1
5200 NEXT J:NEXT I
5220 PRINT:PRINT:GOSUB200
5250 RETURN
6000 CLS
6020 C$="PAPER COPY":GOSUB180
6050 PRINT"RESET PRINT SETTINGS (Y/N)?"
6060 C$=INKEY$:IF C$="" THEN 6060
6070 IF C$="Y" OR C$="y" THEN R=0:CC=0:LPRINT LF$;:GOTO6100
6090 IF C$<>"N" AND C$<>"n" THEN 6170
6100 INPUT"NUMBER OF COLUMNS";SW
6110 IF SW<1 OR SW>132 THEN SOUND150,3:PRINTTAB(9);"bad number!":GOTO6100
6120 PRINT"DOUBLE SPACE (Y/N)?"
6130 C$=INKEY$:IF C$="Y" OR C$="y" THEN L=27:LF$=CHR$(13)+CHR$(13):GOTO 6150
6140 IF C$="N" OR C$="n" THEN L=54:LF$=CHR$(13):GOTO6150
6145 GOTO6130
6150 LF$=LF$+"        ":C=7
6160 GOSUB5070
6170 RETURN
7000 CLS
7010 C$="END PROGRAM":GOSUB180
7040 GOSUB500
7080 IF C=1 THEN END
7090 RETURN
7500 W=0:MAX=LEN(L$(0)):PRINT"";
7505 C$=INKEY$:IF C$="" THEN 7505
7510 K=ASC(C$)
7511 IF K>31 AND K<129 THEN IF W<254 THEN 7540
7515 IF K=129 THEN K=95:GOTO7540
7520 IF K=8 AND W>0 THEN W=W-1:GOSUB7570
7525 IF K=132 THEN 7585
7530 IF K=136 THEN 7580
7532 IF K=13 THEN PRINT CHR$(8):L$(0)=LEFT$(L$,W):RETURN
7535 IF K=21 AND W>0 THEN FOR T=1 TO W:PRINT CHR$(8);:NEXT T:PRINT CHR$(8);:GOTO7500
7536 IF K=130 THEN J=8:GOSUB7595
7537 IF K=10 THEN J=32:GOSUB7595
7538 IF K=9 THEN GOSUB7590
7539 GOTO7505
7540 IF W=223 THEN SOUND 150,1
7555 GOSUB7560:GOTO7505
7560 Y=VARPTR(L$):POKE (PEEK(Y+2)*256)+PEEK(Y+3)+W,K:W=W+1
7570 PRINT CHR$(8);CHR$(K);"";:RETURN
7580 IF W>0 AND W<MAX AND MAX<254 THEN MAX=MAX+1:L$(0)=LEFT$(L$,W)+CHR$(32)+MID$(L$(0),W+1)
7581 GOTO7505
7585 IF MAX-1>0 AND W<MAX THEN MAX=MAX-1:L$(0)=LEFT$(L$,W)+MID$(L$(0),W+2)
7586 GOTO7505
7590 IF W<MAX THEN K=ASC(MID$(L$(0),W+1,1)):GOSUB7560
7591 RETURN
7595 FOR T=1 TO J:GOSUB7590:NEXT T
7596 RETURN
10000 CLS
10010 PRINT
10020 PRINTTAB(11);"TEXT EDITOR"
10030 PRINTTAB(11);"==========="
10040 PRINT
10050 PRINTTAB(6);"1 -ENTER NEW TEXT"
10060 PRINTTAB(6);"2 -LOAD TEXT FILE"
10070 PRINTTAB(6);"3 -SAVE TEXT FILE"
10080 PRINTTAB(6);"4 -EDIT TEXT"
10090 PRINTTAB(6);"5 -LIST TEXT"
10100 PRINTTAB(6);"6 -PAPER COPY"
10110 PRINTTAB(6);"7 -END"
10130 MAX=7:GOSUB350
10160 ON C GOSUB1000,2000,3000,4000,5000,6000,7000
10170 GOTO10000

