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 *,*
99  CHAIN "$EDITOR"
100  REM **START**
110  ASSIGN U0$,C1,J, PR 
120  IF J THEN 9998
125  IF  ERROR  THEN 9998
170  U0=V6=H=C0
175  D1=D
180  U1=C2
185  IF  NOT D THEN 200
190  GOSUB D=C9 OF 1000
195  GOSUB D=15 OF 2000
197  GOSUB D=23 OF 3000
200  V0=C1
205  GOSUB 8300
210  IF D=C9 OR D=15 OR D=23 THEN 190
220  A1$="EDIT"
230  IF D>C9 THEN 250
240  A1$[C5]="0"
250  CONVERT D TO A1$[LEN(A1$)+C1]
260  A1$[LEN(A1$)+C1]=B0$
270  CHAIN J,A1$,100
280  PRINT "Program "A1$" is missing!"
290  GOSUB 9700
300  GOTO 200
1000  REM >>PRINT<<
1010  V4=C2
1020  GOSUB 9800
1030  IF E THEN 1100
1040  IF  NOT LEN(A$) THEN 1080
1050  PRINT "Incorrect format for the PRINT command."
1060  GOSUB 9700
1070  RETURN 
1080  PRINT A1$
1090  E=C0
1100  RETURN 
2000  REMP >>USE<<
2005  IF  NOT LEN(Z$) THEN 2020
2010  PRINT "Nothing permitted beyond a USE command."
2015  GOTO 2070
2020  A1$=A$
2025  IF A1$#U0$ THEN 2040
2030  PRINT "You can't use your WORK file as a USE file."
2035  GOTO 2070
2040  J3=U1
2045  J4=1
2050  GOSUB 9500
2055  IF E THEN 2070
2060  IF U2 THEN 2080
2065  PRINT A1$" is not a BASIC formatted file."
2070  GOSUB 9700
2075  RETURN 
2080  V2=2
2085  V6=1
2090  U1$=A1$
2095  W3=V7
2100  W8=REC(U1)
2105  W9=ITM(U1)
2110  RETURN 
3000  REMP >>DEFINE<<
3005  FOR J=1 TO LEN(A$)
3010  J1=NUM(A$[J])
3015  IF J1#254 AND J1#255 THEN 3030
3020  PRINT "Illegal character in definition."
3025  GOTO 3315
3030  NEXT J
3035  GOSUB 9650
3040  J=POS(A$,"=")
3045  IF J THEN 3060
3050  PRINT "An equal sign must follow the item to be defined."
3055  GOTO 3315
3060  IF J>C1 THEN 3075
3065  PRINT "A name must precede the equal sign."
3070  GOTO 3315
3075  A1$=A$[C1,J-C1]
3080  GOSUB 3325
3085  IF A1$[C1,C2]#"//" THEN 3100
3090  PRINT "A defined name cannot begin with two slashes."
3095  GOTO 3315
3100  W1$=A1$
3105  A1$=A$[J+C1,LEN(A$)]
3110  GOSUB 3325
3115  A$=A1$
3120  IF LEN(A$) THEN 3200
3125  J1=1
3130  J2=POS(D0$[J1,LEN(D0$)],W1$)+J1-1
3135  IF J2=J1-1 THEN 3165
3140  IF D0$[J2+LEN(W1$),J2+LEN(W1$)]#'254 THEN 3155
3145  IF J2=1 THEN 3175
3150  IF D0$[J2-1,J2-1]='255 THEN 3175
3155  J1=J2+1
3160  GOTO 3130
3165  PRINT "'"W1$"' is not a defined name."
3170  GOTO 3315
3175  J3=POS(D0$[J2,LEN(D0$)],'255)+J2-1
3180  D0$[J2]=D0$[J3+1,LEN(D0$)]
3185  IF  NOT V7 THEN 3295
3190  PRINT "'"W1$"' is now removed."
3195  GOTO 3295
3200  J1=1
3205  J2=POS(D0$[J1,LEN(D0$)],W1$)+J1-1
3210  IF J2=J1-1 THEN 3250
3215  IF D0$[J2+LEN(W1$),J2+LEN(W1$)]#'254 THEN 3230
3220  IF J2=1 THEN 3240
3225  IF D0$[J2-1,J2-1]='255 THEN 3240
3230  J1=J2+1
3235  GOTO 3205
3240  J3=POS(D0$[J2,LEN(D0$)],'255)+J2-1
3245  D0$[J2]=D0$[J3+1,LEN(D0$)]
3250  IF LEN(D0$)+LEN(W1$)+LEN(A$)+2 <= 255 THEN 3265
3255  PRINT "Definition dictionary full; '"W1$"' not defined."
3260  GOTO 3320
3265  D0$[LEN(D0$)+1]=W1$
3270  D0$[LEN(D0$)+1]='254
3275  D0$[LEN(D0$)+C1]=A$
3280  D0$[LEN(D0$)+1]='255
3285  IF  NOT V7 THEN 3295
3290  PRINT "'"W1$"' is now a defined name."
3295  E=0
3300  MAT  PRINT #C1,C1;A,V
3305  PRINT #C1;D0$,F0$,H0$,H1$,N0$,N1$
3310  RETURN 
3315  GOSUB 9700
3320  RETURN 
3325  FOR J1=C1 TO LEN(A1$)
3330  IF A1$[J1,J1]#" " THEN 3340
3335  NEXT J1
3340  A1$=A1$[J1,LEN(A1$)]
3345  FOR J1=LEN(A1$) TO C1 STEP -C1
3350  IF A1$[J1,J1]#" " THEN 3360
3355  NEXT J1
3360  A1$=A1$[C1,J1]
3365  RETURN 
6000  REM <L#>
6005  F1=POS(A1$,".")
6010  IF (A[C1]=C2 OR (A[C1]=C3 AND H)) AND F1 THEN 6050
6015  IF  NOT F1 THEN 6025
6020  IF LEN(A1$[F1])>C3+(A[C1]=C3) THEN 6050
6025  CONVERT A1$ TO F1,4634
6030  IF A[C1]=C3 AND H THEN 6040
6035  F1=INT(F1*100*(((A[C1]=C3)*D0) MAX C1)+.5)
6040  IF (A[C1]=C2 AND F1>999900.) OR F1>999999. OR F1 <= C0 THEN 6050
6045  RETURN 
6050  F1=C0
6055  RETURN 
8300  REM <INPUT>
8301  V8=C1
8302  J=SYS(C3)
8303  E=C0
8304  IF V0#C1 THEN 8312
8306  IF  NOT LEN(Z$) THEN 8312
8308  A$=Z$
8310  GOTO 8600
8312  A$=""
8316  J0=W7=C0
8318  IF  NOT J0 THEN 8321
8319  P1$="????"
8320  GOTO 8327
8321  GOTO V0 OF 8322,8324,8326
8322  P1$=">"
8323  GOTO 8327
8324  P1$="#"
8325  GOTO 8327
8326  P1$=":"
8327  IF V2=C2 AND  NOT W1 THEN 8376
8328  IF J0 THEN 8368
8329  GOTO V0 OF 8368,8368,8331
8331  I9=V7*(C8-(A[C1]=C2)*C3)+ NOT V7
8332  IF V1=I9 AND  NOT W5 OR  NOT V3 OR  NOT A[13] THEN 8362
8334  REM2 TABS
8336  SYSTEM J,"ECHO-OFF"
8338  PRINT  USING "#,"'34'9'27"2"'27"a"'34
8344  ENTER D0,J1,A1$
8346  IF A1$[C4,C6]#"000" THEN 8338
8348  A1$='27"&a  C"
8350  FOR J1=C1 TO A[13]
8351  IF V[C1,J1]<A[C2] THEN 8358
8352  CONVERT V[C1,J1]+I9-A[C2] TO J0$
8354  A1$[C6-LEN(J0$),C5]=J0$
8356  PRINT  USING "#,6A";A1$
8357  PRINT  USING "#,"'34'27"1"'34
8358  NEXT J1
8359  PRINT  USING "#,"'34'13'27"A"'27"J"'34
8360  SYSTEM J,"ECHO-ON"
8362  V1=I9
8364  W5=C0
8366  PRINT P0$;
8367  GOTO 8373
8368  IF SYS(C4)#C9 THEN 8370
8369  PRINT '0'0'0;
8370  PRINT P1$;
8371  IF V0#C1 OR  NOT V3 THEN 8373
8372  PRINT '27"J";
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 8426
8422  PRINT "Total line length exceeds 255 characters."
8424  GOTO 8984
8426  IF V0#C3 OR J0 THEN 8430
8428  A$=P0$[V9+C1,LEN(P0$)]
8429  P0$=P0$[C1,V9]
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]
8438  IF J0 OR LEN(A$) >= G8 THEN 8442
8440  W7=LEN(A$)+C1
8442  J0=C1
8444  V8=V8+C1
8446  GOTO 8318
8448  IF  NOT A[24] THEN 8464
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."
8459  IF V0<C3 THEN 8984
8460  P0$[LEN(P0$)+C1]=A$[C1,J-C1]
8461  GOTO 8984
8462  NEXT J
8464  GOTO V0 OF 8600,8478,8466
8466  REM2 TEXT
8468  IF LEN(A$)-A[C7]*LEN(P0$[V9+C1,LEN(P0$)])>C0 THEN 8474
8470  V5=C1
8472  GOTO 8586
8474  V5=C2
8475  IF  NOT A[D0] THEN 8542
8476  IF A$[C1,C2]="//" THEN 8802
8477  GOTO 8542
8478  REM2 #
8480  GOSUB 9650
8482  IF  NOT A[D0] THEN 8490
8484  IF A$[C1,C2]="//" THEN 8802
8490  IF LEN(A$) THEN 8500
8492  IF  NOT SYS(C3) THEN 8534
8494  V0=V5=C1
8496  W1=C0
8498  RETURN 
8500  J3=C0
8502  FOR J1=C1 TO LEN(A$)
8504  J2=NUM(A$[J1,J1])
8506  IF J2 >= 48 AND J2 <= 57 THEN 8512
8508  IF J2#46 OR J3 THEN 8514
8510  J3=C1
8512  NEXT J1
8514  IF J1=C1 THEN 8534
8515  A1$=A$[C1,J1-C1]
8516  IF J1#LEN(A$)+C1 THEN 8522
8518  A$=""
8520  GOTO 8530
8522  IF J2=32 OR J2=58 THEN 8528
8524  PRINT "Missing space or colon after the line number."
8526  GOTO 8984
8528  A$=A$[J1+C1,LEN(A$)]
8530  GOSUB 6000
8532  IF F1 THEN 8538
8534  PRINT "Missing or illegal line number."
8536  GOTO 8984
8538  L=F1
8540  V5=C2
8542  GOSUB D=C3 OR D=C5 OF 9670
8546  IF  NOT A[13] OR  NOT LEN(A$) OR V0#C3 THEN 8576
8548  J3=POS(A$,'9)
8550  IF  NOT J3 THEN 8572
8551  J5=LEN(A$)
8552  FOR J1=C1 TO A[13]
8553  IF V[C1,J1]<A[C2] THEN 8558
8554  J4=V[C1,J1]-(D=26)*(V9-V1)-A[C2]+C1
8556  IF J3<J4 THEN 8564
8558  NEXT J1
8560  A$[J3]=A$[J3+C1,LEN(A$)]
8562  GOTO 8548
8564  A$=A$[C1,J4 MAX LEN(A$)]
8566  A$[J4]=A$[J3+C1,J5]
8568  A$[J3,J4-C1]=""
8570  GOTO 8548
8572  GOSUB D=C3 OR D=C5 OF 9670
8576  IF V0=C3 THEN 8586
8578  IF D=C3 OR D=C5 OR D=20 OR  NOT LEN(A$) THEN 8586
8580  PRINT "Type only the number of the line you want to "W0$"."
8582  GOTO 8984
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 
8600  REM2 >
8602  IF LEN(Z$) THEN 8680
8604  J0=C0
8606  J1=C1
8608  J3=C1
8610  J6=C0
8612  J4=POS(D0$[J3,LEN(D0$)],'254)+J3-C2
8614  IF J4=J3-C2 THEN 8656
8616  I1=J1
8618  J2=POS(A$[I1,LEN(A$)],D0$[J3,J4])+I1-C1
8620  IF J2=I1-C1 OR J6 AND J6<J2 THEN 8652
8622  IF J2=1 THEN 8630
8624  J0$=UOS$(A$[J2-C1,J2-C1])
8626  I3=NUM(J0$)
8628  IF I3 >= 48 AND I3 <= 57 OR I3 >= 65 AND I3 <= 90 THEN 8640
8630  J5=J2+J4-J3
8632  IF J5=LEN(A$) THEN 8644
8634  J0$=UOS$(A$[J5+C1,J5+C1])
8636  I3=NUM(J0$)
8638  IF I3<48 OR I3>57 AND I3<65 AND I3#61 OR I3>90 THEN 8644
8640  I1=J2+C1
8642  GOTO 8618
8644  J6=J2
8646  J7=J5
8648  J8=J4+C2
8650  J9=POS(D0$[J8],'255)+J8-C2
8652  J3=POS(D0$[J4],'255)+J4
8654  GOTO 8612
8656  IF  NOT J6 THEN 8676
8658  IF LEN(A$)-(J7-J6)+(J9-J8) <= 255 THEN 8664
8660  PRINT "DEFINE substitutions have made the line too long."
8662  GOTO 8984
8664  A1$=A$[J7+C1,LEN(A$)]
8666  A$[J6]=D0$[J8,J9]
8668  A$[LEN(A$)+C1]=A1$
8670  J0=C1
8672  J1=J6+J9-J8+C1
8674  GOTO 8608
8676  IF  NOT J0 OR  NOT A[C8] THEN 8680
8678  PRINT "=>"A$
8680  GOSUB 9650
8681  IF  NOT A[D0] THEN 8683
8682  IF A$[C1,C2]="//" THEN 8802
8683  IF LEN(A$) THEN 8688
8684  IF SYS(C3) AND V2=C2 AND  NOT W1 THEN 8984
8685  GOTO 8300
8688  IF A$[C1,C1]#";" THEN 8694
8690  Z$=A$[C2,LEN(A$)]
8692  GOTO 8300
8694  FOR J=C1 TO LEN(A$)
8696  J0$=UOS$(A$[J,J])
8698  J1=NUM(J0$)
8700  IF J1<65 OR J1>90 THEN 8704
8702  NEXT J
8704  A1$=UOS$(A$[C1,J-C1])
8706  A$=A$[J,LEN(A$)]
8708  IF A$[C1,C1]#"#" THEN 8724
8710  GOSUB 9670
8712  IF LEN(A$)=C1 THEN 8718
8714  PRINT "Characters not permitted after '#'"
8716  GOTO 8984
8718  A$=""
8720  W4=C2
8722  GOTO 8750
8724  W4=C3
8726  GOTO LEN(A1$)+C1 OF 8766,8732
8728  IF A1$[LEN(A1$)]="Q" THEN 8742
8730  IF A1$[LEN(A1$)]="D" THEN 8746
8732  IF A1$[C1,C1]#"U" THEN 8738
8734  V7=C0
8736  GOTO 8750
8738  V7=A[C4]
8740  GOTO 8750
8742  V7=C0
8744  GOTO 8748
8746  V7=C1
8748  A1$=A1$[C1,LEN(A1$)-C1]
8750  RESTORE 8752
8752  DATA 24,1,"LIST",2,"MODIFY",1,"ADD",2,"CHANGE",3,"REPLACE"
8754  DATA 3,"DELETE",3,"FIND",1,"INSERT",1,"PRINT",2,"SET",2,"SHOW"
8756  DATA 3,"RENUMBER",1,"TEXT",1,"KEEP",1,"USE",3,"FILL",1,"EXPLAIN"
8758  DATA 1,"JUSTIFY",3,"COPY",2,"MERGE",3,"MOVE",2,"CENTER"
8760  DATA 3,"DEFINE",3,"COMPRESS"
8762  GOSUB 9300
8764  IF K2 THEN 8770
8766  PRINT "Missing or illegal command name."
8768  GOTO 8984
8770  D=K2
8772  W0$=K1$
8774  IF D#23 THEN 8780
8776  A1$=""
8778  GOTO 8784
8780  GOSUB 8988
8782  IF E THEN 8984
8784  IF W4#C2 OR D=C2 OR D=C3 OR D=C5 OR D=C6 OR D=16 OR D=18 OR D=20 OR D=22 OR D=24 THEN 8790
8786  PRINT "The '#' convention is not permitted for this command."
8788  GOTO 8984
8790  IF W4=C2 OR W4=C3 OR D=C2 OR D=C3 OR D=C5 OR D=C8 THEN 8794
8792  W4=C1
8794  Z$=A1$
8796  IF SYS(C3) AND V2=C2 AND  NOT W1 THEN 8984
8798  V0=W4
8800  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 4,1,"HELP",2,"STOP",1,"ASK",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  GOTO V0 OF 8878,8892,8912
8878  PRINT "To see a brief description of an EDITOR command, type the word"
8880  PRINT "'EXPLAIN', followed by the command name, e.g.:"
8882  PRINT 
8884  PRINT "            >EXPLAIN COPY"
8886  PRINT 
8888  PRINT "To see a list of all EDITOR commands, type just the word 'EXPLAIN'."
8890  GOTO 8920
8892  PRINT "Type the number of the line you want to "W0$;
8894  IF D#C3 AND D#C5 AND D#20 THEN 8908
8896  PRINT ", followed by a colon,"
8898  PRINT "and then the line, e.g.:"
8900  PRINT 
8902  PRINT "               # 150.4: Here is my line of text."
8904  PRINT 
8906  GOTO 8912
8908  PRINT "."
8910  GOTO 8914
8912  PRINT "Type the next line you want to "W0$"."
8914  PRINT "To terminate this operation, press the BREAK key before pressing RETURN."
8920  IF SYS(C3) AND V2=C2 AND  NOT W1 THEN 8984
8922  GOTO 8300
8924  REMP //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  GOTO 8300
8988  REM2 CLEANUP
8990  J8=C1
8992  J0=J3=C0
8994  A1$=A$
8996  A$=""
8998  FOR J1=J8 TO LEN(A1$)
9000  J2=NUM(A1$[J1])
9002  GOTO SGN(J2-64)+C2 OF 9004,9106,9012
9004  GOTO SGN(J2-59)+C2 OF 9006,9022,9012
9006  GOTO SGN(J2-39)+C2 OF 9008,9044,9012
9008  GOTO SGN(J2-34)+C2 OF 9010,9106,9012
9010  IF J2=32 THEN 9084
9012  IF  NOT J0 THEN 9018
9014  A$[LEN(A$)+C1]=CHR$(J0)
9016  J0=C0
9018  J3=C0
9020  NEXT J1
9022  REM2 ; OR END
9024  IF  NOT J0 THEN 9028
9026  A$[LEN(A$)+C1]=CHR$(J0)
9028  A$[LEN(A$)+C1]=UOS$(A1$[J8,J1-C1])
9036  IF  NOT LEN(A1$) THEN 9040
9038  A1$=A1$[J1,LEN(A1$)]
9040  E=C0
9042  RETURN 
9044  REM2 '
9046  IF J3 THEN 9116
9048  FOR J2=J1+C1 TO LEN(A1$)
9050  IF NUM(A1$[J2])<48 OR NUM(A1$[J2])>57 THEN 9054
9052  NEXT J2
9054  CONVERT A1$[J1+C1,J2-C1] TO J4,8132
9056  IF J4 <= 255 THEN 9062
9058  PRINT "Illegal use of the apostrophe convention."
9060  GOTO 9154
9062  IF  NOT J0 THEN 9068
9064  IF J0=64 THEN 9116
9066  GOTO 9074
9068  A$[LEN(A$)+C1]=UOS$(A1$[J8,J1-C1])
9070  A$[LEN(A$)+C1]='34
9072  J0=34
9074  A$[LEN(A$)+C1]=CHR$(J4)
9076  IF J4#34 THEN 9080
9078  A$[LEN(A$)+C1]='34
9080  J8=J2
9082  GOTO 8998
9084  REM2 SPACE
9086  IF  NOT J0 THEN 9096
9088  A$[LEN(A$)+C1]=CHR$(J0)
9090  J0=C0
9092  J3=C1
9094  GOTO 9098
9096  A$[LEN(A$)+C1]=UOS$(A1$[J8,J1-C1])
9098  FOR J8=J1+C1 TO LEN(A1$)
9100  IF A1$[J8,J8]#" " THEN 8998
9102  NEXT J8
9104  GOTO 8998
9106  REMP @ OR "
9108  IF J3 THEN 9116
9110  V0$=CHR$(J2)
9112  IF  NOT J0 THEN 9120
9114  IF J0=J2 THEN 9126
9116  PRINT "Illegal string."
9118  GOTO 9154
9120  A$[LEN(A$)+1]=UOS$(A1$[J8,J1-1])
9122  A$[LEN(A$)+C1]=V0$
9124  J0=J2
9126  J4=J1
9128  J2=POS(A1$[J4+C1],V0$)+J4
9130  IF J4#J2 THEN 9142
9132  IF V0$="@" THEN 9138
9134  PRINT "Missing quotation marks."
9136  GOTO 9154
9138  PRINT "Missing "'34"@"'34"."
9140  GOTO 9154
9142  IF A1$[J2+C1,J2+C1]#V0$ THEN 9148
9144  J4=J2+C1
9146  GOTO 9128
9148  A$[LEN(A$)+C1]=A1$[J1+C1,J2-C1]
9150  J8=J2+C1
9152  GOTO 8998
9154  E=C1
9156  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 
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
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 
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 
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 
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 
