1  COM A[25],V[2,10]
2  COM A$[255],A1$[255],B0$[5],D0$[255],F0$[1],F1$[11],S0$[6]
3  COM H0$[94],H1$[94],J0$[3],J1$[3],K1$[15],P0$[184],P1$[4]
4  COM N0$[1],U0$[11],U1$[11],V0$[10],V1$[10],W$[102],W0$[8],W1$[255],Z$[255]
5  COM C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,D0
6  COM D,D1,D2,F9,G,G0,G8,L,S0,V0,V1,V2,V3,V5,V7
7  COM W0,W1,W3,W5,W8,W9
10  COM L[5],M[64,2],N[64,2],P[2]
11  COM B$[94],L$[94],M$[94],N$[94],O$[94],P$[94]
12  COM L1,L2,L3,L4,L7,M1,M2,M3,M4,M5,M7,M8,M9,N1,N2,N3,N4
15  REM (C) COPYRIGHT  HEWLETT-PACKARD CO. 1976
16  REM ALL RIGHTS RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,
17  REM REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT THE
18  REM PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD CO.
50  FILES *,*,*
60  PRINT "Editor/2000   Version 2.0"
100  REM <START>
105  I=BRK(0)
107  IF  ERROR  THEN 9998
110  GOSUB 1000
120  A1$="EDIT"
130  IF D>C9 THEN 150
140  A1$[C5]="0"
150  CONVERT D TO A1$[LEN(A1$)+C1]
155  A1$[LEN(A1$)+1]=B0$
160  CHAIN J,A1$,100
170  PRINT "Program "A1$" does not exist!"
180  GOTO 9998
200  REM2 *ENTRY FOR EDIT31*
210  GOSUB 1600
220  GOTO 120
1000  REMP >>EDITOR<<
1010  RESTORE 1020
1020  DATA 0,1,2,3,4,5,6,7,8,9,10
1030  READ C0,C1,C2,C3,C4,C5,C6,C7,C8,C9,D0
1050  REM2 ---INITIALIZE---
1055  M3=C5
1060  D1=-C1
1065  E=F9=S0=U0=V1=W1=D=D2=V5=C0
1070  V2=V7=W3=W5=G=G0=G8=C1
1075  N0$="@"
1080  ENTER #W0
1085  IF SYS(C4)#C9 THEN 1100
1090  SYSTEM J,"ECHO-OFF"
1095  GOTO 1140
1100  IF SYS(C4)#C1 AND SYS(C4)#C2 THEN 1140
1105  SYSTEM J,"ECHO-OFF"
1110  PRINT '27"^"
1115  ENTER C2,I,W1$
1120  REM SYSTEM J,"ECHO-ON"
1125  IF I=-256 THEN 1140
1130  V3=C1+(LEN(W1$)>C8)
1135  GOTO 1150
1140  V3=C0
1145  X0=C2
1150  B0$=".A002"
1155  S0$="ED   Z"
1160  CONVERT W0+100 TO S0$[C3,C5]
1165  PURGE I,S0$
1170  GOSUB 6100
1200  REM2 ---GET WORK FILE NAME---
1205  V0=C4
1210  P0$="WORK file? "
1215  GOSUB 8300
1220  IF E THEN 1205
1225  GOTO V5 OF 1235,1230,1230
1230  IF LEN(A$) THEN 1305
1235  GOSUB 9600
1240  GOTO 1205
1300  REM2 ---ASSIGN WORK FILE---
1305  A1$=A$
1310  J3=C1
1315  J4=C3
1320  GOSUB 9500
1325  IF E THEN 1205
1330  IF U2 THEN 1345
1335  PRINT UOS$(A1$)" is not a BASIC formatted file."
1340  GOTO 1205
1345  GOSUB 8000
1350  IF M9 >= M3+C2 THEN 1400
1355  CONVERT M3+C2 TO W1$
1360  PRINT "The WORK file must be at least "W1$" records long."
1365  GOTO 1200
1400  REM2---TRY TO READ ENVIRONMENT---
1405  READ #C1,C1
1410  GOTO TYP(-C1) OF 1415,1440,1700,1440
1415  IF  ERROR  THEN 1440
1420  IF  END #C1 THEN 1440
1425  MAT  READ #C1;A,V
1430  READ #C1;D0$,F0$,H0$,H1$,N0$,N1$
1435  GOTO 1455
1440  PRINT UOS$(A1$)" is not an EDITOR WORK file."
1445  IF  ERROR  THEN 9998
1450  GOTO 1200
1455  V7=A[C4]
1460  READ #C1,M3-C1
1465  IF TYP(-C1)#C3 THEN 1565
1470  REM2 ---READ IN WORK FILE ARRAYS---
1475  IF  ERROR  THEN 1565
1480  MAT  READ #C1,M3;M
1485  MAT  READ #C1,M[C1,C2];N
1490  READ #C1,M3-C2;M7,M8,I
1495  U0$=UOS$(A1$)
1500  M1=N1=C1
1505  M2=M[64,C1]
1510  M5=M[64,C2]
1515  N2=N[64,C1]
1520  N3=N[64,C2]
1525  L3=N[C1,C2]
1530  GOSUB 7700
1535  L1=C0
1540  L2=L4=C1
1545  GOSUB 7400
1550  P[C1]=L1
1555  P[C2]=A[C2]
1560  GOTO 1800
1565  PRINT "WORK file not closed properly after last session."
1570  U0$=UOS$(A1$)
1575  PRINT "Recovery in progress."
1580  GOTO 1645
1600  REM2 ---RECOVERY FOR EDIT31---
1605  D1=-C1
1610  E=W1=U0=C0
1615  V2=V7=W3=W5=C1
1620  A1$=U0$
1625  J3=C1
1630  J4=C3
1635  GOSUB 9500
1640  IF E THEN 1665
1645  REM2---RECOVERY----
1650  GOSUB 2500
1655  A$=U0$
1660  IF  NOT E THEN 1800
1665  PRINT "Recovery failed.  Purge and recreate your WORK file."
1670  STOP 
1700  REM2 ---CLEAR WORK FILE---
1705  U0$=UOS$(A1$)
1710  GOSUB 7900
1715  GOSUB 6100
1720  MAT  PRINT #C1,C1;A,V
1725  PRINT #C1;"","","","","@",""
1800  REM2 ---REPORT ENVIRONMENT---
1805  CONVERT M5 TO A$
1810  IF M5=C1 THEN 1825
1815  A1$="s"
1820  GOTO 1830
1825  A1$=""
1830  GOTO A[C1] OF 1835,1845,1855
1835  PRINT A$" line"A1$" of text";
1840  GOTO 1860
1845  PRINT A$" BASIC statement"A1$;
1850  GOTO 1860
1855  PRINT A$" COBOL line"A1$;
1860  PRINT " in your WORK file."
1865  PRINT #C1,M3-C1;C1
1870  G8=A[C3]-A[C2]+C1
1875  D1=-C1
1880  Z$=""
1885  GOTO A[C1] OF 1890,1900,1910
1890  RESTORE 2120
1895  GOTO 1915
1900  RESTORE 2140
1905  GOTO 1915
1910  RESTORE 2150
1915  FOR I=C2 TO 13
1920  READ J,W1$
1925  IF A[I]=J THEN 1935
1930  Z$[LEN(Z$)+C1]=W1$
1935  NEXT I
1940  READ J,W1$
1945  IF A[14]=J AND ( NOT LEN(H0$) OR  NOT NUM(H0$)) THEN 1955
1950  Z$[LEN(Z$)+C1]=W1$
1955  RESTORE 2130
1960  READ I,J,W1$
1965  IF A[15]=I AND A[16]=J AND  NOT LEN(H1$) THEN 1975
1970  Z$[LEN(Z$)+C1]=W1$
1975  READ J,W1$
1980  IF A[17]=J THEN 1990
1985  Z$[LEN(Z$)+C1]=W1$
1990  READ I,J,W1$
1995  IF A[18]=I AND A[19]=J THEN 2005
2000  Z$[LEN(Z$)+C1]=W1$
2005  READ I,J,W1$
2010  IF A[20]=I AND A[21]=J THEN 2020
2015  Z$[LEN(Z$)+C1]=W1$
2020  FOR I=22 TO 24
2025  READ J,W1$
2030  IF A[I]=J THEN 2040
2035  Z$[LEN(Z$)+C1]=W1$
2040  NEXT I
2045  IF (A[C1]=C1 AND A[25]) OR (A[C1]#C1 AND  NOT A[25]) THEN 2055
2050  Z$[LEN(Z$)+C1]=",HY"
2055  IF  NOT LEN(D0$) THEN 2065
2060  Z$[LEN(Z$)+C1]=",DE"
2065  IF LEN(Z$) THEN 2080
2070  D=C0
2075  GOTO 2100
2080  Z$=Z$[C2]
2085  D=11
2090  A$=Z$
2095  Z$=""
2100  IF  NOT LEN(H0$) THEN 2110
2105  IF H0$[C1,C1]#'0 THEN 2115
2110  GOSUB 2200
2115  RETURN 
2120  DATA 1,",LB",65,",R",1,",DI",100,",FR",100,",I",1,",AU",0,",EC",79,",W"
2125  DATA 1,",/",60,",PAGE",22,",PAU",0,",TA",2,",HE"
2130  DATA 1,2,",PAGI",0,",FA",2,2,",TO",2,0,",B"
2135  DATA 0,",FI",0,",N",1,",C"
2140  DATA 1,",LB",79,",R",1,",DI",1000,",FR",1000,",I",0,",AU",0,",EC",79,",W"
2145  DATA 1,",/",60,",PAGE",22,",PAU",0,",TA",2,",HE"
2150  DATA 8,",LB",72,",R",1,",DI",1000,",FR",100,",I",0,",AU",0,",EC",79,",W"
2155  DATA 1,",/",60,",PAGE",22,",PAU",10,",TA",2,",HE"
2200  REM2 <DATE>
2205  H0$='0"HEWLETT-PACKARD  EDITOR/2000 - "
2210  DIM D[12]
2215  I2=TIM(C2)
2220  I3=TIM(C3)
2225  RESTORE 2240
2230  MAT  READ D[12]
2235  I5=(I3-73)*365+I2+INT((I3-73)/C4)
2240  DATA 1,32,60,91,121,152,182,213,244,274,305,335
2245  DATA "January","February","March","April","May","June"
2250  DATA "July","August","September","October","November","December"
2255  DATA "Sunday","Monday","Tuesday","Wednesday","Thursday"
2260  DATA "Friday","Saturday"
2265  RESTORE 2255
2270  FOR I8=C0 TO INT(((I5/C7-INT(I5/C7))*C7)+.1)
2275  READ A1$
2280  NEXT I8
2285  H0$[LEN(H0$)+C1]=A1$
2290  GOSUB 2390
2295  GOSUB 2380
2300  I6=(I2 >= 60) AND ((I3/C4)=INT(I3/C4))
2305  FOR I7=12 TO C1 STEP -C1
2310  IF I2 >= D[I7]+I6 THEN 2320
2315  NEXT I7
2320  RESTORE 2245
2325  FOR I8=C1 TO I7
2330  READ A1$
2335  NEXT I8
2340  H0$[LEN(H0$)+C1]=A1$
2345  GOSUB 2380
2350  CONVERT I2-D[I7]+C1-I6*(I2#60) TO H0$[LEN(H0$)+C1]
2355  GOSUB 2390
2360  CONVERT I3+1900 TO H0$[LEN(H0$)+C1]
2365  GOSUB 2380
2370  GOSUB 2380
2375  RETURN 
2380  H0$[LEN(H0$)+C1]=" "
2385  RETURN 
2390  H0$[LEN(H0$)+C1]=", "
2395  RETURN 
2500  REM2 <RECOVERY>
2505  E=C0
2510  GOSUB 8000
2515  J5=C3
2520  GOSUB 8100
2525  IF E THEN 2685
2530  IF  END #C1 THEN 2610
2535  IF  ERROR  THEN 2610
2540  FOR L3=M3+C1 TO M9
2545  READ #C1,L3
2550  IF TYP(-C1)=C3 THEN 2615
2555  READ #C1,L3;L7,L[C1],L$,L[C2],M$,L[C3],N$,L[C4],O$,L[C5],P$
2560  GOTO L7 OF 2565,2575,2585,2595,2605
2565  PRINT #C3;L[C1],L$
2570  GOTO 2610
2575  PRINT #C3;L[C1],L$,L[C2],M$
2580  GOTO 2610
2585  PRINT #C3;L[C1],L$,L[C2],M$,L[C3],N$
2590  GOTO 2610
2595  PRINT #C3;L[C1],L$,L[C2],M$,L[C3],N$,L[C4],O$
2600  GOTO 2610
2605  PRINT #C3;L[C1],L$,L[C2],M$,L[C3],N$,L[C4],O$,L[C5],P$
2610  NEXT L3
2615  IF  ERROR  THEN 9998
2620  PRINT #C3; END 
2625  GOSUB 7900
2630  IF  END #C3 THEN 2660
2635  READ #C3,C1
2640  READ #C3;X5,B$
2645  IF X5 <= C0 OR X5#INT(X5) THEN 2640
2650  GOSUB 6500
2655  GOTO 2640
2660  PRINT #C1,M3-C1; END 
2665  MAT  PRINT #C1,M3;M
2670  MAT  PRINT #C1,N3;N
2675  PRINT #C1,M3-C2;M7,M8,M9
2680  PRINT '7"Recovery completed.  List all to verify contents."
2685  RETURN 
6100  REM <INIT A[]>
6105  RESTORE 6110
6110  DATA 1,1,65,1,100,100,1,0,79,1
6115  DATA 60,22,0,2,1,2,0,2,2,2
6120  DATA 0,0,0,1,1
6125  MAT  READ A
6130  MAT V=ZER
6135  D0$=""
6140  F0$=""
6145  H0$=""
6150  H1$=""
6155  N0$="@"
6160  N1$=""
6165  RETURN 
6400  REM <PRT P0$>
6410  I=C1
6420  J=A[C9] MIN LEN(P0$)
6430  PRINT P0$[I,J]
6440  I=J+C1
6450  IF  NOT LEN(P0$[I]) THEN 6490
6460  J=(I+A[C9]-W6-C1) MIN LEN(P0$)
6470  PRINT TAB(W6);P0$[I,J]
6480  GOTO 6440
6490  RETURN 
6500  REM <ADD LI>
6502  X=X5
6504  GOSUB 7500
6506  IF  NOT L4 THEN 6512
6508  E=C3
6510  RETURN 
6512  IF L7=C5 THEN 6566
6514  REM: ADD TO CURRENT RECORD
6516  IF L2#C4 THEN 6522
6518  P$=B$
6520  GOTO 6542
6522  P$=O$
6524  IF L2#C3 THEN 6530
6526  O$=B$
6528  GOTO 6542
6530  O$=N$
6532  IF L2#C2 THEN 6538
6534  N$=B$
6536  GOTO 6542
6538  N$=M$
6540  M$=B$
6542  FOR J=L7 TO L2 STEP -C1
6544  L[J+C1]=L[J]
6546  NEXT J
6548  L[L2+C1]=X5
6550  L1=X5
6552  L2=L2+C1
6554  L4=C1
6556  L7=L7+C1
6558  M5=M[64,C2]=M5+C1
6560  E=C0
6562  GOSUB 7800
6564  RETURN 
6566  IF N2#63 THEN 6576
6568  IF M2=63 THEN 6578
6570  GOSUB 7000
6572  J4=X4
6574  IF  NOT J4 THEN 6578
6576  IF M7 OR M8<M9 THEN 6582
6578  E=C2
6580  RETURN 
6582  IF L2>C2 THEN 6588
6584  J2=L2+C1
6586  GOTO 6592
6588  J2=L2
6590  REM: WRITE CURRENT RECORD
6592  READ #C1,L3
6594  UPDATE #C1;J2
6596  ADVANCE #C1;C2*L2,J
6598  IF L2>C2 THEN 6602
6600  PRINT #C1;X5,B$
6602  FOR J1=J2+C1 TO C5
6604  PRINT #C1;C0,""
6606  NEXT J1
6608  GOSUB 7000
6610  REM: WRITE NEW RECORD
6612  PRINT #C1,X4;C6-J2
6614  IF L2 <= C2 THEN 6618
6616  PRINT #C1;X5,B$
6618  FOR J=L2+C1 TO C5
6620  PRINT #C1;L[J]
6622  GOTO J-C1 OF 6624,6628,6632,6636,6638
6624  PRINT #C1;M$
6626  GOTO 6638
6628  PRINT #C1;N$
6630  GOTO 6638
6632  PRINT #C1;O$
6634  GOTO 6638
6636  PRINT #C1;P$
6638  NEXT J
6640  FOR J=C1 TO J2-C1
6642  PRINT #C1;C0,""
6644  NEXT J
6646  L1=X5
6648  IF L2>C2 THEN 6656
6650  L2=L2+C1
6652  J5=L[L2]
6654  GOTO 6662
6656  L2=C1
6658  L3=X4
6660  J5=X5
6662  L4=C1
6664  GOSUB 7700
6666  IF N2#63 THEN 6726
6668  REM: SPLIT INDEX BLOCK
6670  READ #C1,N3
6672  ADVANCE #C1;64,J
6674  MAT  READ #C1;N[31,C2]
6676  J6=N[C1,C1]
6678  MAT  PRINT #C1,J4;N
6680  MAT N=ZER[31,C2]
6682  MAT  PRINT #C1;N
6684  PRINT #C1;C0,C0,31,J4
6686  READ #C1,N3
6688  ADVANCE #C1;64,J
6690  MAT  PRINT #C1;N
6692  PRINT #1;32,N3
6694  REM: ADD ENTRY TO M()
6696  FOR J=M2 TO M1+C1 STEP -C1
6698  M[J+C1,C1]=M[J,C1]
6700  M[J+C1,C2]=M[J,C2]
6702  NEXT J
6704  M[M1+C1,C1]=J6
6706  M[M1+C1,C2]=J4
6708  M2=M[64,C1]=M2+C1
6710  IF N1>32 THEN 6716
6712  N2=32
6714  GOTO 6726
6716  N1=N1-32
6718  N2=31
6720  N3=J4
6722  M1=M1+C1
6724  REM: ADD ENTRY TO N[]
6726  READ #C1,N3
6728  ADVANCE #C1;C2*N1,J
6730  IF N1=62 THEN 6734
6732  MAT  READ #C1;N[62-N1,C2]
6734  READ #C1,N3
6736  ADVANCE #C1;C2*N1,J
6738  PRINT #C1;J5,X4
6740  IF N1=62 THEN 6744
6742  MAT  PRINT #C1;N
6744  PRINT #C1;N2+C1,N3
6746  MAT  READ #C1,N3;N[64,C2]
6748  N1=N1+(L2=C1)
6750  N2=N[64,C1]
6752  E=C0
6754  M5=M[64,C2]=M5+C1
6756  RETURN 
7000  REM <GET REC>
7005  IF M7 THEN 7045
7010  IF M8<M9 THEN 7025
7015  X4=C0
7020  RETURN 
7025  X4=M8=M8+C1
7030  IF M8=M9 THEN 7040
7035  PRINT #C1,M8+C1; END 
7040  RETURN 
7045  X4=M7
7050  READ #C1,M7;M7
7055  RETURN 
7400  REM <RD NEXT LI>
7405  IF L2=L7 THEN 7430
7410  L2=L2+C1
7415  L1=L[L2]
7420  E=C0
7425  RETURN 
7430  IF N1=N2 THEN 7445
7435  X=N[N1+C1,C1]
7440  GOTO 7455
7445  IF M1=M2 THEN 7470
7450  X=M[M1+C1,C1]
7455  GOSUB 7500
7460  E=C0
7465  RETURN 
7470  E=C1
7475  RETURN 
7500  REM <RD DIR>
7502  IF X >= L[C1] AND X <= L[L7] THEN 7554
7504  IF X >= N[C1,C1] AND X <= N[N2,C1] THEN 7532
7506  I1=C1
7508  I2=M2+C1
7510  M1=INT((I1+I2)/C2)
7512  GOTO SGN(X-M[M1,C1])+C2 OF 7514,7524,7518
7514  I2=M1
7516  GOTO 7510
7518  IF I2-M1=C1 THEN 7524
7520  I1=M1
7522  GOTO 7510
7524  IF M[M1,C2]=N3 THEN 7532
7526  N3=M[M1,C2]
7528  MAT  READ #C1,N3;N[64,C2]
7530  N2=N[64,C1]
7532  I1=C1
7534  I2=N2+C1
7536  N1=INT((I1+I2)/C2)
7538  GOTO SGN(X-N[N1,C1])+C2 OF 7540,7550,7544
7540  I2=N1
7542  GOTO 7536
7544  IF I2-N1=C1 THEN 7550
7546  I1=N1
7548  GOTO 7536
7550  L3=N[N1,C2]
7552  GOSUB 7700
7554  L1=X
7556  FOR L2=C1 TO L7
7558  GOTO SGN(X-L[L2])+C2 OF 7562,7568,7560
7560  NEXT L2
7562  L2=L2-C1
7564  L4=C0
7566  RETURN 
7568  L4=C1
7570  RETURN 
7700  REM <RD REC>
7710  READ #1,L3;L7,L[C1],L$,L[C2],M$,L[C3],N$,L[C4],O$,L[C5],P$
7720  RETURN 
7800  REM <WR REC>
7810  PRINT #1,L3;L7,L[C1],L$,L[C2],M$,L[C3],N$,L[C4],O$,L[C5],P$
7820  RETURN 
7900  REM <DEL ALL>
7904  MAT L=ZER
7908  MAT M=ZER
7912  MAT N=ZER
7916  MAT P=ZER
7920  L1=M5=M7=C0
7924  L2=L4=L7=M1=M2=M[64,C1]=N1=N2=N[64,C1]=C1
7928  L3=M8=N[C1,C2]=M3+C2
7932  M[C1,C2]=M3+C1
7936  N3=N[64,C2]=M3+C1
7940  L$="Dummy line 0"
7944  M$=""
7948  N$=""
7952  O$=""
7956  P$=""
7960  MAT  PRINT #C1,M3;M
7964  MAT  PRINT #C1,N3;N
7968  GOSUB 7800
7972  PRINT #C1,M3-C2;M7,M8,M9
7976  IF M9<M3+C3 THEN 7984
7980  PRINT #C1,M3+C3; END 
7984  RETURN 
8000  REM <WORK LENGTH>
8005  I1=C1
8010  IF  END #C1 THEN 8030
8015  READ #C1,256
8020  I2=32768.
8025  GOTO 8035
8030  I2=256
8035  IF  END #C1 THEN 8065
8040  M9=INT((I1+I2)/C2)
8045  READ #C1,M9
8050  IF M9=I1 THEN 8075
8055  I1=M9
8060  GOTO 8040
8065  I2=M9
8070  GOTO 8040
8075  IF  END #C1 THEN 9998
8080  RETURN 
8100  REM <SETUP SCR>
8105  IF U0 THEN 8175
8110  IF S0 THEN 8145
8115  A1$=S0$
8120  PURGE J,A1$
8125  IF J=C1 THEN 8155
8130  J1=M9
8135  GOSUB 9400
8140  IF E THEN 8165
8145  ASSIGN S0$,J5,J, PR 
8150  IF  NOT J THEN 8170
8155  PRINT "Someone else is using your temporary file."
8160  E=C1
8165  RETURN 
8170  S0=U0=C1
8175  E=C0
8180  RETURN 
8300  REM <4 IN>
8302  J=SYS(C3)
8303  E=C0
8312  A$=""
8316  J0=C0
8318  IF  NOT J0 THEN 8326
8319  P1$="????"
8320  GOTO 8327
8326  P1$=" "
8327  IF V2=C2 AND  NOT W1 THEN 8376
8328  IF J0 THEN 8372
8366  PRINT P0$;
8368  GOTO 8373
8372  PRINT P1$;
8373  LINPUT A1$
8374  GOTO 8420
8376  IF V6 THEN 8394
8380  ASSIGN U1$,U1,J, WR 
8382  IF J<C3 THEN 8388
8384  PRINT "USE file no longer accessible"
8386  GOTO 8984
8388  V6=C1
8390  READ #U1,W8
8392  ADVANCE #U1;W9,J
8394  GOTO TYP(U1) OF 8396,8400,8408
8396  PRINT "Number encountered in USE file."
8398  GOTO 8984
8400  READ #U1;A1$
8401  IF  NOT W3 THEN 8403
8402  PRINT P1$;A1$
8403  W8=REC(U1)
8404  W9=ITM(U1)
8406  GOTO 8420
8408  V2=W3=C1
8410  GOTO 8300
8420  IF LEN(A$)+LEN(A1$) <= 255 THEN 8430
8422  PRINT "Total line length exceeds 255 characters."
8424  GOTO 8984
8430  IF  NOT LEN(A1$) THEN 8448
8432  A$[LEN(A$)+C1]=A1$
8434  IF A$[LEN(A$)]#"&" THEN 8448
8436  A$=A$[C1,LEN(A$)-C1]
8442  J0=C1
8446  GOTO 8318
8448  IF  NOT A[24] THEN 8466
8450  FOR J=C1 TO LEN(A$)
8452  J1=NUM(A$[J,J])
8454  IF J1 >= 32 AND J1 <= 126 THEN 8462
8456  IF J1=C9 AND A[13] THEN 8462
8458  PRINT "No control characters allowed."
8460  GOTO 8984
8462  NEXT J
8466  REM2 TEXT
8468  IF LEN(A$) THEN 8474
8470  V5=C1
8472  GOTO 8586
8474  V5=C2
8475  IF  NOT A[D0] THEN 8544
8476  IF A$[C1,C2]="//" THEN 8802
8477  GOTO 8544
8544  GOSUB 9670
8586  IF SYS(C3) THEN 8592
8588  V5=C3
8590  RETURN 
8592  IF V2=C2 AND  NOT W1 THEN 8984
8594  W1=C0
8596  V0=C1
8598  RETURN 
8802  REM2 //
8804  A$=A$[C3,LEN(A$)]
8806  FOR J=C1 TO LEN(A$)
8808  J0$=UOS$(A$[J,J])
8810  J1=NUM(J0$)
8812  IF J1<65 OR J1>90 THEN 8816
8814  NEXT J
8816  A1$=UOS$(A$[C1,J-C1])
8818  A$=A$[J,LEN(A$)]
8820  RESTORE 8822
8822  DATA 3,1,"HELP",2,"STOP",1,"BREAK"
8824  GOSUB 9300
8828  IF K2 THEN 8862
8830  REM2 TASK?
8831  IF  NOT (V0=C1 OR D1=-C1) THEN 8858
8832  RESTORE 8834
8834  DATA 8,3,"CREATE",3,"PURGE",3,"FILE",3,"LENGTHEN",3,"SHORTEN"
8836  DATA 3,"CATALOG",3,"GROUP",3,"LIBRARY"
8838  GOSUB 9300
8840  IF  NOT K2 THEN 8858
8842  IF  NOT LEN(A$) THEN 8849
8844  A$=A$[C2,LEN(A$)]
8849  D2=K2
8850  D=32
8852  A1$="EDIT32"
8854  A1$[C7]=B0$
8856  CHAIN A1$,100
8858  PRINT "Illegal or unpermitted //-command."
8860  GOTO 8984
8862  GOSUB 9650
8864  IF LEN(A$) AND K2#C3 THEN 8952
8866  GOTO K2 OF 8874,8924,8936,8970
8874  REM2 //H
8876  GOSUB 9600
8920  IF SYS(C3) AND V2=C2 AND  NOT W1 THEN 8984
8922  GOTO 8300
8924  REM2 //S
8925  IF D1=-C1 THEN 8935
8926  PRINT #C1,M3-C2;M7,M8,M9
8927  MAT  PRINT #C1,M3;M
8928  MAT  PRINT #C1,N3;N
8929  PRINT #C1,M3-C1; END 
8930  IF  NOT S0 THEN 8935
8932  ASSIGN *,C3
8934  PURGE I,S0$
8935  STOP 
8936  REM2 //A
8938  IF V0=C3 AND V2=C2 THEN 8944
8940  PRINT "//ASK cannot be used here."
8942  GOTO 8984
8944  V4=C2
8946  GOSUB 9800
8948  IF E THEN 8300
8950  IF  NOT LEN(A$) THEN 8956
8952  PRINT "Nothing permitted beyond the //"K1$" command."
8954  GOTO 8984
8956  IF LEN(A1$)<80 THEN 8962
8958  PRINT "The string in //ASK is too long."
8960  GOTO 8984
8962  P0$=A1$
8964  W1=C1
8966  V9=LEN(P0$)
8968  GOTO 8300
8970  REM2 //B
8972  IF V0=C1 THEN 8982
8974  IF SYS(C3) AND V2=C2 AND  NOT W1 THEN 8984
8976  W1=C0
8978  V0=V5=C1
8980  RETURN 
8982  PRINT "//BREAK cannot be used here."
8984  GOSUB 9700
8986  IF V0#C1 THEN 8302
8988  RETURN 
9300  REM <KEY>
9310  READ J
9320  FOR K2=C1 TO J
9330  READ J1,K1$
9340  IF LEN(A1$)<J1 THEN 9360
9350  IF A1$=K1$[C1,LEN(A1$)] THEN 9380
9360  NEXT K2
9370  K2=C0
9380  RETURN 
9400  REM <CREATE>
9405  CREATE J,A1$,J1
9410  GOTO J+C1 OF 9460,9415,9998,9435,9445
9415  PURGE J,A1$
9420  GOTO J+C1 OF 9405,9425,9998,9998
9425  PRINT "Someone else is using an EDITOR scratch file in your account."
9430  GOTO 9450
9435  PRINT "No space in your account for this operation."
9440  GOTO 9450
9445  PRINT "No space in the System for this operation."
9450  GOSUB 9700
9455  RETURN 
9460  E=C0
9465  RETURN 
9500  REM <ASSN>
9504  ASSIGN A1$,J3,J, PR 
9508  GOTO J+C1 OF 9564,9512,9512,9524,9998,9998,9532,9532,9540
9512  IF J4=C1 THEN 9564
9516  PRINT "File "A1$" is not available for writing."
9520  GOTO 9548
9524  PRINT "File "A1$" does not exist, or is not accessible."
9528  GOTO 9548
9532  PRINT "File "A1$" is in use by someone else."
9536  GOTO 9548
9540  IF J4=C2 THEN 9564
9544  PRINT "File "A1$" is not available for reading."
9548  GOSUB 9700
9550  E=C1
9552  RETURN 
9564  IF  ERROR  THEN 9584
9568  READ #J3,C1
9572  IF  ERROR  THEN 9998
9576  U2=C1
9580  GOTO 9592
9584  IF  ERROR  THEN 9998
9588  U2=C0
9592  E=C0
9596  RETURN 
9600  REM <HE>
9610  PRINT "Specify the name of your WORK file or use //CREATE to create a"
9611  PRINT "new WORK file (e.g.  //CRE-MYWORK,100)."
9620  RETURN 
9650  REM <TLEB>
9652  FOR J=C1 TO LEN(A$)
9654  IF A$[J,J]#" " THEN 9658
9656  NEXT J
9658  A$=A$[J,LEN(A$)]
9660  RETURN 
9670  REM <TTB>
9672  FOR J=LEN(A$) TO C1 STEP -C1
9674  IF A$[J,J]#" " THEN 9678
9676  NEXT J
9678  A$=A$[C1,J]
9680  RETURN 
9700  REM <ERR>
9720  Z$=""
9730  IF V2#C2 OR W1 THEN 9760
9740  PRINT "USE file abandoned."
9750  V0=V2=W3=C1
9760  RETURN 
9800  REM <GET NEXT STR>
9805  V0$=A$[C1,C1]
9810  IF V0$='34 THEN 9835
9815  IF V0$="@" THEN 9840
9820  PRINT "Missing or illegal string."
9825  GOSUB 9700
9830  RETURN 
9835  V4=C1
9840  J1=C2
9845  J2=POS(A$[J1],V0$)+J1-C1
9850  IF J2=J1-C1 THEN 9820
9855  IF A$[J2+C1,J2+C1]#V0$ THEN 9875
9860  A$[J2]=A$[J2+C1]
9865  J1=J2+C1
9870  GOTO 9845
9875  A1$=A$[C2,J2-C1]
9880  A$=A$[J2+C1,LEN(A$)]
9885  E=C0
9890  RETURN 
9998  PRINT "Fatal error, unable to continue."SYS(0);SYS(1)
9999  END 
