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
13  DIM A0$[6]
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 *,*
99  CHAIN "$EDITOR"
100  REM *ENTRY*
110  IF  ERROR  THEN 9998
140  U0=V6=C0
150  U1=C2
160  GOSUB 1000
165  W1=C0
170  A1$="EDIT00"
175  A1$[C7]=B0$
180  CHAIN J,A1$,100
190  GOTO 9998
1000  REMP >>//COMMANDS<<
1002  GOSUB 2200
1004  GOSUB D2 OF 1200,1300,1400,1500,1500,3000,3000,3000
1006  IF D1#-C1 THEN 170
1008  A1$="EDITOR"
1010  A1$[C7]=B0$
1012  CHAIN J,A1$,100
1014  GOTO 9998
1016  PRINT "Missing parameter"
1018  GOTO 1152
1020  PRINT "'"A1$"' is an illegal file name."
1022  GOTO 1152
1024  PRINT "Illegal format"
1026  GOTO 1152
1028  PRINT "File length must be numeric; '"A1$"' is not."
1030  GOTO 1152
1032  PRINT "Characters after command end."
1034  GOTO 1152
1036  PRINT "Record size must be numeric and between 64 and 255;"
1038  PRINT "'"A1$"' is not."
1040  GOTO 1152
1042  PRINT "'"A1$"' is an illegal library name."
1044  GOTO 1152
1046  PRINT "Only BASIC formatted files can be lengthened or shortened."
1048  GOTO 1152
1050  PRINT "File length already greater than "F1" records."
1052  GOTO 1152
1054  PRINT "Maximum file length is 32767 records."
1056  GOTO 1152
1058  PRINT "No room in your account (or system) for temporary file."
1060  GOTO 1152
1062  PRINT "File length already less than or equal to "F1" records."
1064  GOTO 1152
1066  PRINT B3" is an illegal number of records."
1068  GOTO 1152
1070  PRINT "You may not purge your WORK file while using EDITOR."
1072  GOTO 1152
1074  PRINT "You may not shorten your WORK file while using EDITOR."
1076  GOTO 1152
1078  REM2 *CRE ERR*
1080  GOTO J OF 1082,1086,1090,1094
1082  PRINT F1$" already exists or is a program."
1084  GOTO 1152
1086  PRINT "File name bad, no such account, invalid access, or bad file length."
1088  GOTO 1152
1090  PRINT "Insufficient space to create file "F1$"."
1092  GOTO 1152
1094  PRINT "Insufficient space on system to create file "F1$"."
1096  GOTO 1152
1098  REM2 *PUR ERR*
1100  PRINT "File "A1$;
1102  GOTO J OF 1104,1108,1112
1104  PRINT " is in use and cannot be purged."
1106  GOTO 1152
1108  PRINT " is not accessible."
1110  GOTO 1152
1112  PRINT " does not exist."
1114  GOTO 1152
1116  PRINT "FILE command '"A1$"' was unsuccessful."
1118  GOTO 1152
1120  REM2 *ASSIGN ERR*
1122  PRINT "File "A1$;
1124  GOTO J OF 1126,1130,1134,1138,1140,1144,1140,1148
1126  PRINT " is available for read only."
1128  GOTO 1152
1130  PRINT " is protected."
1132  GOTO 1152
1134  PRINT " does not exist or is not accessible."
1136  GOTO 1152
1138  GOTO 9998
1140  PRINT " cannot be assigned."
1142  GOTO 1152
1144  PRINT " is in use."
1146  GOTO 1152
1148  PRINT " is available for write only."
1150  GOTO 1152
1152  GOSUB 9700
1154  IF D2#C4 THEN 1158
1156  PURGE I,A0$
1158  RETURN 
1200  REM2 *CREATE*
1205  J2=256
1210  IF  NOT LEN(A$) THEN 1016
1215  GOSUB 6900
1220  IF LEN(A1$)>11 THEN 1020
1225  F1$=A1$
1230  IF  NOT LEN(A$) THEN 1016
1235  GOSUB 6900
1240  CONVERT A1$ TO J1,3526
1245  IF  NOT LEN(A$) THEN 1260
1250  CONVERT A1$ TO J2,3579
1255  IF J2<64 OR J2>256 THEN 1036
1260  CREATE J,F1$,J1,J2
1265  IF J THEN 1078
1270  PRINT "File "F1$" created."
1275  RETURN 
1300  REM2 *PURGE*
1305  IF  NOT LEN(A$) THEN 1016
1310  A1$=UOS$(A$)
1315  IF LEN(A1$)>11 THEN 1016
1320  GOSUB 2300
1325  IF E THEN 1070
1330  PURGE J,A1$
1335  IF J THEN 1100
1340  PRINT "File "A1$" purged."
1345  RETURN 
1400  REM2 *FILE*
1405  IF  NOT LEN(A$) THEN 1016
1410  A1$="FILE-"
1415  A1$[C6]=A$
1420  SYSTEM J,A1$
1425  IF J THEN 1116
1430  GOSUB 6900
1435  PRINT "File "A1$" created."
1440  RETURN 
1500  REM2 *LEN/SHORT*
1505  IF LEN(A$)<C4 THEN 1016
1510  B1=C0
1515  FOR I=LEN(A$)-C2 TO C2 STEP -C1
1520  IF A$[I,I+C1]="TO" THEN 1540
1525  IF A$[I,I+C1]="BY" THEN 1545
1530  NEXT I
1535  GOTO 1016
1540  B1=C1
1545  A1$=A$[I+C2]
1550  CONVERT A1$ TO F1,3526
1555  IF  NOT F1 THEN 1028
1560  A1$=A$[C1,I-C1]
1565  IF LEN(A1$)>11 THEN 1020
1570  F1$=A1$
1575  ASSIGN A1$,C1,J, PR 
1580  IF J THEN 1120
1585  IF  ERROR  THEN 1605
1590  READ #C1,C1
1595  IF  ERROR  THEN 9998
1600  GOTO 1615
1605  IF  ERROR  THEN 9998
1610  GOTO 1046
1615  REM2 *LEN*
1620  I=C1
1625  J2=33000.
1630  IF  END #C1 THEN 1645
1635  J1=I
1640  GOTO 1650
1645  J2=I-C1
1650  IF J1=J2 THEN 1670
1655  I=INT((J2-J1)/C2+.51)+J1
1660  READ #C1,I
1665  GOTO 1635
1670  B2=J1
1675  IF D2=C5 THEN 1725
1680  IF  NOT B1 THEN 1700
1685  IF F1 <= B2 THEN 1050
1690  B3=F1
1695  GOTO 1705
1700  B3=B2+F1
1705  IF B3>32767 THEN 1054
1710  GOSUB 2400
1715  IF E THEN 1152
1720  GOTO 1755
1725  IF  NOT B1 THEN 1745
1730  IF F1 >= B2 THEN 1062
1735  B3=F1
1740  GOTO 1755
1745  B3=B2-F1
1750  IF B3<C1 THEN 1066
1755  J5=C2
1760  GOSUB 2075
1765  IF E=100 THEN 1152
1770  IF E THEN 1058
1775  A1$=F1$
1780  GOSUB 2300
1785  IF E AND D2=C5 THEN 1074
1790  E=C0
1795  M9=B3
1800  REM2 *COPY*
1805  I1=C1
1810  I2=C2
1815  GOSUB 2000
1820  REM2 *REC LEN*
1825  IF  END #C1 THEN 1850
1830  READ #C1,B2
1835  FOR I=C1 TO 255
1840  PRINT #C1;""
1845  NEXT I
1850  B4=I
1855  REM2 *PUR ORIG*
1860  ASSIGN *,C1
1865  PURGE I,F1$
1870  IF  NOT I THEN 1895
1871  PRINT "Task failed; file "F1$" being restored."
1872  IF D2=C5 THEN 1915
1873  PURGE I,A0$
1874  GOTO 1915
1875  PRINT "Record "B2" in file "F1$" destroyed."
1880  PRINT "Task failed; file "F1$" no longer exists."
1882  PRINT "However, a complete copy exists in file "S0$"."
1883  PRINT "You must use $FCOPY immediately to copy the contents of"
1884  PRINT S0$" to another file.  DO NOT RUN EDITOR BEFORE YOU COPY"
1885  PRINT "BECAUSE EDITOR WILL PURGE "S0$"!"
1890  STOP 
1895  IF D2=C5 THEN 1905
1900  PURGE I,A0$
1905  CREATE I,F1$,B3,B4
1910  IF I THEN 1880
1915  ASSIGN F1$,C1,J, PR 
1920  I1=C2
1925  I2=C1
1930  GOSUB 2000
1935  ASSIGN *,C2
1940  PURGE I,S0$
1945  S0=C0
1950  PRINT "File "F1$;
1955  IF D2=C5 THEN 1970
1960  PRINT " lengthened."
1965  RETURN 
1970  PRINT " shortened."
1975  RETURN 
2000  REM2 <COPY>
2005  FOR I=C1 TO B2 MIN B3
2010  READ #I1,I
2015  READ #I2,I
2020  J=TYP(-I1)
2025  GOTO J OF 2030,2045,2060,2065
2030  READ #I1;J1
2035  PRINT #I2;J1
2040  GOTO 2020
2045  READ #I1;A$
2050  PRINT #I2;A$
2055  GOTO 2020
2060  PRINT #I2; END 
2065  NEXT I
2070  RETURN 
2075  REM2 <SETUP SCR>
2080  A1$=S0$
2085  IF  NOT S0 THEN 2100
2090  PURGE J,A1$
2095  IF J=C1 THEN 2125
2100  J1=B3
2105  GOSUB 9400
2110  IF E THEN 2130
2115  ASSIGN A1$,J5,J, PR 
2120  IF  NOT J THEN 2145
2125  PRINT "Someone else is using your temporary file."
2130  E=100
2135  RETURN 
2140  E=C0
2145  RETURN 
2200  REM2 <CLEAN A$>
2205  A$=UOS$(A$)
2210  GOSUB 9650
2215  GOSUB 9670
2220  I=C0
2225  I=I+C1
2230  IF I >= LEN(A$) THEN 2250
2235  IF A$[I,I]#" " THEN 2225
2240  A$[I]=A$[I+C1,LEN(A$)]
2245  GOTO 2235
2250  RETURN 
2300  REM2 <WORK FILE?>
2305  E=C0
2310  I=POS(A1$,".")
2315  IF I THEN 2330
2320  IF A1$=U0$ THEN 2350
2325  RETURN 
2330  SYSTEM A$,"TIM"
2335  IF A1$[I+C1,LEN(A1$)]#A$[C1,C4] THEN 2355
2340  IF A1$[C1,I-C1]=U0$ THEN 2350
2345  RETURN 
2350  E=C1
2355  RETURN 
2400  REM2 <SPACE HOLDER>
2405  A1$="ED   Z"
2410  ENTER #J1
2415  CONVERT J1+200 TO A1$[C3,C5]
2420  J1=B3
2425  GOSUB 9400
2430  IF E THEN 2440
2435  A0$=A1$
2440  RETURN 
3000  REM2 *CAT/GRO/LIB*
3005  W6=C0
3010  A1$=A$
3015  IF  NOT LEN(A$) THEN 3035
3020  IF LEN(A$)>C6 THEN 1042
3025  A$=UOS$(A$)
3030  GOTO 3040
3035  A$="!"
3040  GOTO D2-C5 OF 3045,3055,3065
3045  F1$="CAT-"
3050  GOTO 3070
3055  F1$="GRO-"
3060  GOTO 3070
3065  F1$="LIB-"
3070  PRINT "NAME     LENGTH RECORD  NAME     LENGTH RECORD  NAME     LENGTH RECORD"
3075  F1$[C5]=A$
3080  SYSTEM P0$,F1$
3085  IF  NOT LEN(P0$) THEN 3125
3090  GOSUB 6400
3095  IF SYS(C3) OR LEN(P0$)<49 THEN 3125
3100  A$=P0$[49,54]
3105  GOSUB 9670
3110  I=NUM(A$[LEN(A$)])
3115  A$[LEN(A$)]=CHR$(I+C1)
3120  GOTO 3075
3125  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 
6900  REM <SUBP>
6910  J4=POS(A$,",")
6920  IF J4<C2 OR J4=LEN(A$) THEN 6960
6930  A1$=A$[C1,J4-C1]
6940  A$=A$[J4+C1]
6950  RETURN 
6960  A1$=A$
6970  A$=""
6980  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 
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 <ERROR>
9710  E=C1
9720  Z$=""
9730  IF V2#C2 OR W1 THEN 9760
9740  PRINT "USE file abandoned."
9750  V0=V2=W3=C1
9760  RETURN 
9990  REM <ERR>
9991  M4=SYS(C0)
9992  N4=SYS(C1)
9993  A1$="EDIT31"
9994  A1$[C7]=B0$
9995  CHAIN J,A1$,100
9996  PRINT A1$" is missing.  ERROR"
9997  STOP 
9998  GOTO 9991
9999  END 
