Back to Main page. Back to Main tapes page. 10 REM: TECO - TEXT EDITOR & CORRECTOR 20 REM: BY STEVE SPEAR. ALL RIGHTS RESERVED. 30 DIM A[2110],B[2,5],A$[255],B$[255] 40 FILES *,*,* 50 B=L=P=R=S=T=0 60 C=D=E=F=M=2100 70 W=1500 80 I=1 90 C$="$" 100 SYSTEM A$,"TIM" 110 PRINT "TECO - V02."A$[I,4] 120 MAT A=ZER 130 A$="" 140 H=I 150 PRINT "*"; 160 J=BRK(1) 170 LINPUT B$ 180 J=BRK(0) 190 IF LEN(A$)+LEN(B$)>255 THEN 4410 200 A$[LEN(A$)+I]=B$ 210 J=POS(A$,"\") 220 IF NOT J THEN 250 230 A$[J-I MAX I]=A$[J+I] 240 GOTO 210 250 IF A$[LEN(A$)-I MAX I]#"??" THEN 300 260 A$[LEN(A$)-I]="" 270 PRINT A$; 280 GOTO 160 290 REM: 'N - CREATE ASCII CHARACTER WITH A VALUE OF N 300 FOR J=I TO LEN(A$) 310 IF A$[J,J]#"'" THEN 390 320 FOR G=I TO 3 330 CONVERT A$[J+I,4+J-G] TO K,380 340 IF K<0 OR K>255 THEN 380 350 A$[J,J]=CHR$(K) 360 A$[J+I]=A$[5+J-G MIN LEN(A$)+I] 370 GOTO 390 380 NEXT G 390 NEXT J 400 REM: ^^ - NORMAL CASE // - LOWER CASE 410 FOR J=I TO LEN(A$) 420 K=POS("^^//",A$[J,J+I]) 430 GOTO NOT K MAX (J>LEN(A$))*2 OF 480,500 440 L=K#I 450 A$[J]=A$[J+2] 460 J=J-I 470 GOTO 490 480 A$[J,J]=CHR$(NUM(A$[J])+32*(L AND NUM(A$[J])>64 AND NUM(A$[J])<91)) 490 NEXT J 500 IF A$[LEN(A$)-I MAX I]='7'7 THEN 130 510 CHAIN J,A$ 520 B$=C$ 530 B$[2]=C$ 540 IF A$[LEN(A$)-I MAX I]=B$ THEN 580 550 A$[LEN(A$)+I]='13'10 560 GOTO 160 570 REM: GOVERNOR 580 O=0 590 N=Q=I 600 A$[H,H]=UPS$(A$[H]) 610 G=POS(A$[H+I],C$[I,I]) 620 IF NOT G THEN 130 630 G=H+G 640 B$=C$ 650 B$[2]="<>;EJCDVTKLH.Z@ISRMNBQGAYWXFPU ?#!^=" 660 IF E THEN 680 670 IF END #2 THEN 4230 680 A=POS(B$,A$[H,H]) 690 IF SYS(3) THEN 3680 700 GOTO ((A>24 AND A<27 OR A=29) AND C) MAX ((A=27 OR A=28) AND E)*2 OF 4350,4370 710 IF NOT T OR A<4 OR A=32 THEN 730 720 PRINT "["B$[A,A]"]"; 730 GOTO A OF 910,970,1050,910,1190,1740,1810,1850,1910,2000,2110,2000 740 GOTO A-12 OF 2190,2260,2310,2350,2380,2510,2510,130,2720,2760,2760 750 GOTO A-23 OF 2790,2820,2860,3230,3430,2510,3500,2510,880,3590,3620 760 GOTO A-34 OF 3620,880,3650 770 FOR A=H TO G 780 IF NOT POS("-+0123456789",A$[A,A]) THEN 800 790 NEXT A 800 IF A=H THEN 850 810 CONVERT A$[H,A-I] TO N,850 820 H=A 830 Q=0 840 GOTO 600 850 IF A$[H,H]#"-" THEN 4190 860 N=-I 870 Q=0 880 H=H+I 890 GOTO 600 900 REM: RETURN (OPTIONAL $) 910 H=H+I 920 GOTO 590 930 REM: RETURN (MANDATORY $) 940 H=G 950 GOTO 590 960 REM: N< (START ITERATION) 970 IF NOT Q THEN 990 980 N=B 990 IF O>5 THEN 4250 1000 O=O+I 1010 B[O,I]=N 1020 B[O,2]=H 1030 GOTO 910 1040 REM: > (END ITERATION) 1050 IF O 1130 J=POS(A$[G],">") 1140 IF NOT J THEN 4170 1150 H=G+J 1160 O=O-I MAX 0 1170 GOTO 590 1180 REM: E? 1190 A$[H+I,H+I]=UPS$(A$[H+I]) 1200 B$=UPS$(A$[H+2,G-I MAX H+2]) 1210 A=POS("FCXBRWSMP",A$[H+I,H+I]) 1220 GOTO A+I OF 4190,1290,1250,1250,1330,1330,1600,1600,1670,1700 1230 REM: EF - CLOSE OUTPUT FILE EC - OUTPUT REMAINDER & CLOSE 1240 REM: EX - OUTPUT REMAINDER & EXIT 1250 IF C OR E THEN 1290 1260 J=I 1270 K=2 1280 GOSUB 3720 1290 E=I 1300 ASSIGN *,2 1310 GOTO (A=3)+I OF 910,4450 1320 REM: EB - I/O FILE & BACKUP ER - EDIT READ 1330 ASSIGN B$,I,C 1340 IF C>2 THEN 4150 1350 C=0 1360 ASSIGN B$,3,D 1370 D=(D=6) 1380 IF A#4 THEN 1410 1390 J=POS(B$,".") 1400 B$[4 MIN LEN(B$)+I MIN J+ NOT J*100]="BAK" 1410 IF D THEN 1570 1420 IF END #I THEN 1450 1430 READ #I,REC(I)+I 1440 GOTO 1430 1450 R=REC(I) 1460 READ #I,I 1470 IF A#4 THEN 1540 1480 CREATE K,B$,R 1490 GOTO (K=I)*2 MAX (K>I)*3 MAX (D#0) OF 4310,4330,4310 1500 ASSIGN B$,3,Q 1510 J=I 1520 K=3 1530 GOSUB 3720 1540 READ #I,I 1550 CONVERT INT(R*256/1024+I) TO B$ 1560 PRINT "["B$"K MEMORY]" 1570 B$=UPS$(A$[H+2,G-I MAX H+2]) 1580 IF A#4 THEN 2890 1590 REM: EW - EDIT WRITE ES - EDIT SERIALLY 1600 IF POS(B$,"BAK") THEN 4290 1610 ASSIGN B$,2,E 1620 ASSIGN B$,3,F 1630 E=E#0 AND E#8 1640 R=(A=7) 1650 GOTO ( NOT E+(A=4) MAX (E=3)*3)+I OF 4140,940,2890,4150 1660 REM: NEC FILENAME $ - CREATE FILENAME N RECORDS LONG. 1670 CREATE J,B$,N 1680 GOTO NOT J+I OF 4310,940 1690 REM: EP FILENAME $ - PURGE FILENAME. 1700 PURGE J,B$ 1710 GOTO J+I OF 940,4430,4430,4150 1720 REM: NJ - JUMP TO THE NTH CHARACTER 1730 IF N>B OR NB OR P+NB OR P+N0) MIN M 1880 GOSUB 4030 1890 GOTO 910 1900 REM: NV - TYPE OUT N CHARACTERS 1910 FOR J=P MIN P+N MAX I TO P-I MAX P+N-I MIN B 1920 IF NUM(A$[H-I MAX I])#94 OR A[J]>31 THEN 1950 1930 B$="^" 1940 PRINT USING "#,A";B$ 1950 B$=CHR$(A[J]+64*(NUM(A$[H-I MAX I])=94 AND A[J]<32)) 1960 PRINT USING "#,A";B$ 1970 NEXT J 1980 GOTO 910 1990 REM: NT - TYPE N LINES NL - MOVE N LINES 2000 GOSUB 3930 2010 GOTO (A=10)*(P=I AND N <= 0 OR P=B AND N>0)*2 MAX (A=10) OF 2040,910 2020 P=J 2030 GOTO 910 2040 FOR K=P MIN J MAX I TO P-I MAX J MIN B 2050 IF SYS(3) THEN 3680 2060 B$=CHR$(A[K]) 2070 PRINT USING "#,A";B$ 2080 NEXT K 2090 GOTO 910 2100 REM: NK - KILL N LINES 2110 IF N$ - INSERTAT POINTER 2380 B$=A$[H+I,G-I] 2390 J=LEN(B$) 2400 IF B+J>M THEN 4390 2410 GOSUB 4030 2420 FOR J=I TO LEN(B$) 2430 A[J+P-(P>0)]=NUM(B$[J]) 2440 NEXT J 2450 P=P+LEN(B$) 2460 GOTO 940 2470 REM: NS $ - SEARCH FOR THE NTH OCCURENCE OF 2480 REM: NF $ - FIND , OUTPUT TEXT PASSED OVER 2490 REM: NR\ $\$ - REPLACE THE NTH OCCURENCE OF \ WITH \2500 REM: NU\ $\$ - REPLACE WHILE OUTPUTING PAGES PASSED OVER 2510 J=P 2520 FOR U=I TO N 2530 FOR V=J+ NOT J TO B 2540 IF SYS(3) THEN 3680 2550 FOR Q=0 TO G-H-2 2560 IF A[V+Q]#NUM(A$[H+I+Q]) THEN 2600 2570 NEXT Q 2580 J=V+Q 2590 GOTO 2630 2600 NEXT V 2610 N=I 2620 GOTO ((POS(A$,";")#0) MAX (A=29 OR A=31)*2)+I OF 4170,1130,3460 2630 NEXT U 2640 P=J MIN B 2650 IF A=18 OR A=29 THEN 940 2660 J=(G-H-I)*-I 2670 GOSUB 4030 2680 H=G 2690 G=POS(A$[H+I],C$[I,I])+H 2700 GOTO 2380 2710 REM: N\ - NEW DELIMITER IS \2720 H=H+I 2730 C$=A$[H,H] 2740 GOTO 910 2750 REM: B - SHUT OFF Q - ENABLE 2760 S=A#23 2770 GOTO 910 2780 REM: G\$ - TYPE \2790 PRINT A$[H+I,G-I]; 2800 GOTO 940 2810 REM: A - APPEND TO BUFFER 2820 IF END #I THEN 4350 2830 P=B 2840 GOTO 2910 2850 REM: NY - YANK IN THE NTH PAGE 2860 IF END #I THEN 4230 2870 IF D THEN 2890 2880 READ #I,REC(I)+N-I 2890 MAT A=ZER 2900 P=B=0 2910 IF S OR D THEN 2940 2920 CONVERT REC(I) TO B$ 2930 PRINT "[RECORD #"B$"]" 2940 GOTO TYP(-I)* NOT D OF 2980,3010,3120,3120 2950 IF END #I THEN 4230 2960 LINPUT #I;B$ 2970 GOTO 3020 2980 READ #I;J 2990 CONVERT J TO B$ 3000 GOTO 3020 3010 READ #I;B$ 3020 IF B+LEN(B$)+2>M THEN 4390 3030 FOR J=I TO LEN(B$) 3040 P=P+I 3050 A[P]=NUM(B$[J]) 3060 NEXT J 3070 B=B+LEN(B$)+2 3080 P=P+2 3090 A[P-I]=13 3100 A[P]=10 3110 IF NOT D OR B28 AND A#30)+I OF 880,2530 3220 REM: NW - OUTPUT N LINES FROM BUFFER 3230 GOTO (E#0)*2 MAX (Q#0) OF 3390,4370 3240 GOSUB 3930 3250 B$="" 3260 FOR K=J MIN P MAX I TO J-I MAX P MIN B 3270 IF A[K]=13 AND A[K+I MIN B]=10 THEN 3320 3280 B$[LEN(B$)+I MIN 255]=CHR$(A[K]) 3290 NEXT K 3300 PRINT #2; END 3310 GOTO (A#27)+I OF 910,3510 3320 CONVERT B$ TO J,3350 3330 PRINT #2;J 3340 GOTO 3360 3350 PRINT #2;B$ 3360 B$="" 3370 K=K+I 3380 GOTO 3290 3390 J=I 3400 P=B 3410 GOTO 3250 3420 REM: NX - RESET OUTPUT FILE 3430 IF E OR F THEN 4350 3440 READ #2,N 3450 GOTO 910 3460 GOTO (C#0)*2+(E=0) OF 3500,4350 3470 MAT A=ZER 3480 GOTO 3510 3490 REM: NP - OUTPUT THROUGH THE NTH PAGE 3500 GOTO ((C#0)*2 MAX (E#0))+I OF 3390,4370,4350 3510 FOR R=I TO N-I 3520 J=I 3530 K=2 3540 GOSUB 3720 3550 NEXT R 3560 N=I 3570 GOTO 2860 3580 REM: ? (TRACE) 3590 T= NOT T 3600 GOTO 910 3610 REM: # - LOWERCASE CHAR. @ PTR. ! - UPPERCASE CHAR. @ PTR. 3620 IF NOT P THEN 4210 3630 A[P]=A[P]+32*(A=34)*(A[P]>64 AND A[P]<91)-32*(A=35)*(A[P]>96) 3640 GOTO 910 3650 REM: N= - ASCII INTAKE 3660 W=N 3670 GOTO 910 3680 ENTER 1,X,A$ 3690 PRINT '13'10"Re-entering TECO" 3700 GOTO 130 3710 REM: FILE TRANSFER 3720 N=I 3730 IF END #J THEN 3910 3740 IF END #K THEN 3900 3750 GOTO TYP(-J)* NOT D OF 3800,3830,3860,3860 3760 LINPUT #I;B$ 3770 PRINT #K;B$, END 3780 N=N+LEN(B$) 3790 GOTO (N>W AND A>28)+I OF 3730,3910 3800 READ #J;Q 3810 PRINT #K;Q, END 3820 GOTO 3750 3830 READ #J;B$ 3840 PRINT #K;B$, END 3850 GOTO 3740 3860 READ #J,REC(J)+I 3870 IF R OR F THEN 3890 3880 READ #K,REC(K)+I 3890 GOTO (A=30)+I OF 3740,3910 3900 PRINT "?OTS OUTPUT TOO SMALL." 3910 RETURN 3920 REM: LINES 3930 IF NOT P THEN 4000 3940 J=P 3950 FOR K=I TO ABS(N)+(NB THEN 4000 3980 IF A[J]#10 THEN 3960 3990 NEXT K 4000 J=(J+(J = P) MAX I MIN B)*(P#0) 4010 RETURN 4020 REM: SHIFT BUFFER J CHARACTERS 4030 GOTO NOT P*2 MAX (J<0) OF 4080,4120 4040 FOR K=B TO P STEP -I 4050 A[K+J MIN M]=A[K] 4060 NEXT K 4070 GOTO 4110 4080 FOR K=P TO B 4090 A[K+J MAX I]=A[K] 4100 NEXT K 4110 P=P+J*(JW< > WITHOUT <." 4280 GOTO 130 4290 PRINT "?NEB NO EDIT ON BACKUP." 4300 GOTO 130 4310 PRINT "?CCB CAN'T CREATE BACKUP." 4320 GOTO 130 4330 PRINT "?EBA NO EB IF EB ACTIVE." 4340 GOTO 130 4350 PRINT "?UIF UNDEFINED INPUT FILE." 4360 GOTO 130 4370 PRINT "?UOF UNDEFINED OUTPUT FILE." 4380 GOTO 130 4390 PRINT "?BOF BUFFER OVERFLOW." 4400 GOTO 130 4410 PRINT "?CTL COMMAND TOO LONG." 4420 GOTO 130 4430 PRINT "?CPF CAN'T PURGE FILE." 4440 GOTO 130 4450 END