10  COM X[2048],Y[10],P
20  COM F$[7]
25  REM   HPASMB, HP 36806A, 2/74,   PART 1 OF 4
30  DIM A$[72],B$[72],C$[72]
40  FILES *,ASMWRK,$ASCII
50  Y[10]=1
70  PRINT "HP ASSEMBLER PACKAGE"'10
100  PRINT '10"@";
110  ENTER 255,T,A$
120  IF T<0 THEN 110
130  PRINT 
150  IF A$[1,1]#":" THEN 5180
160  B$="LIDUSTEDJFJOEJRUPR"
170  FOR J9=1 TO LEN(B$) STEP 2
180  IF A$[2,3]=B$[J9,J9+1] THEN 212
190  NEXT J9
200  GOTO 5180
212  F=E=L=1
215  GOSUB 3220
300  J9=INT((J9+1)/2)
302  IF Y[10]=0 OR J9=6 THEN 305
303  PRINT "*IGNORED"
304  GOTO 100
305  GOTO J9 OF 310,665,700,900,1600,1900,2000,2100,2200
310  REM--:LIST
315  IF J<4 THEN 5100
321  IF A$[C[1]+1,C[2]-1]#"S" THEN 5260
322  IF A$[C[2]+1,C[3]-1]#"1" THEN 5240
328  C1=3
330  GOSUB 5000
335  IF T>2 THEN 5050
340  IF  END #1 THEN 580
345  READ #1,1
350  IF C[5]=0 THEN 420
360  C1=4
370  GOSUB 6000
380  IF J#C[5] THEN 5120
390  FOR L=1 TO N-1
400  READ #1;B$
410  NEXT L
420  IF C[6]=0 THEN 480
430  C1=5
440  GOSUB 6000
450  IF J#C[6] THEN 5120
460  GOTO 490
480  N=9999
490  IF J9=1 THEN 498
491  PRINT '18;
492  READ #3;B$[1,1]
493  FOR J=1 TO 50
494  B$[J+1]=B$[J,J]
495  PRINT B$[J,J];
496  NEXT J
498  FOR L=L TO N
500  READ #1;A$
510  IF J9=2 THEN 560
520  GOSUB 630
550  PRINT SPA(2);
560  PRINT A$" "
570  NEXT L
580  IF J9=1 THEN 610
590  PRINT ":: "
595  PRINT B$'20
600  GOTO 100
610  PRINT "****LIST END****"
620  GOTO 100
630  FOR J=3 TO 0 STEP -1
640  PRINT  USING "#,D";INT(L/10^J)-INT(L/10^(J+1))*10
650  NEXT J
660  RETURN 
664  REM--:DUMP
665  IF J#3 THEN 5100
670  IF A$[C[1]+1,C[2]-1]#"1" THEN 5240
674  C1=2
676  GOSUB 5000
678  IF T>2 THEN 5050
680  J9=2
682  IF  END #1 THEN 580
685  GOTO 480
700  REM--:STORE
710  IF J#4 THEN 5100
712  IF A$[C[1]+1,C[2]-1]#"S" THEN 5260
715  C1=2
720  GOSUB 5000
730  IF T=0 THEN 752
740  IF T<3 THEN 5080
750  GOTO 5050
752  J9=3
754  IF A$[C[3]+1,C[4]-1]="1" THEN 760
756  J9=0
758  IF A$[C[3]+1,C[4]-1]="5" THEN 763
759  GOTO 5240
760  PRINT "@"'7
763  READ #1,1
765  IF  END #1 THEN 5160
770  ENTER 255,T,A$
780  IF T<0 THEN 770
783  PRINT LIN(J9=3);
785  IF A$[1,2]="::" THEN 840
787  IF A$[1,1]=":" THEN 5180
790  GOSUB 6200
800  PRINT #1;A$, END 
810  L=L+1
830  GOTO 770
840  L=L-1
845  PRINT LIN(J9#3);
850  GOSUB 630
860  PRINT " LINES"
870  GOTO 100
900  REM--:EDIT
910  IF J<3 THEN 5100
915  E=2
920  GOTO 1700
930  IF A$[C[2]+1,C[3]-1]#"1" THEN 5240
958  READ #1,1
959  READ #2,1
960  PRINT "@"
970  ENTER 255,T,A$
980  IF T<0 THEN 970
990  PRINT 
1000  IF A$[1,1]="/" THEN 1050
1010  IF A$[1,1]=":" THEN 1040
1015  GOSUB 6200
1020  PRINT #2;A$, END 
1030  GOTO 960
1040  PRINT "BAD CONTROL STATE"'13'10"RE-ENTER STATEMENT ON TTY"'13'10"@"
1041  ENTER 255,T,A$
1042  IF T<0 THEN 1050
1043  PRINT 
1044  IF A$[1,1]#":" THEN 1000
1045  GOTO 5200
1050  GOSUB 3220
1060  B$="IDRE"
1070  FOR J1=1 TO 4
1080  IF A$[2,2]=B$[J1,J1] THEN 1120
1090  NEXT J1
1100  PRINT "INVALID EDIT FUNCTION"
1110  GOTO 5280
1120  IF J1=4 AND C[2]#0 THEN 5140
1125  IF J1=4 THEN 1420
1130  IF C[2]=0 THEN 5100
1140  C1=1
1150  GOSUB 6000
1160  IF J#C[2] THEN 5120
1165  F1=F2=N
1170  IF C[3]=0 THEN 1230
1180  C1=2
1190  GOSUB 6000
1200  IF J#C[3] THEN 5120
1210  F2=N
1220  IF J1=1 THEN 5140
1230  IF F1 <= F2 AND F1 >= L THEN 1260
1240  PRINT "LIMIT ERROR"
1250  GOTO 5280
1260  IF  END #1 THEN 5195
1265  IF  END #2 THEN 5220
1270  FOR L=L TO F1-1
1280  READ #1;A$
1290  PRINT #2;A$, END 
1300  NEXT L
1310  GOTO J1 OF 1320,1370,1370
1320  REM--/INSERT
1340  READ #1;A$
1350  PRINT #2;A$, END 
1355  L=L+1
1360  GOTO 960
1370  REM--/REPLACE AND /DELETE
1380  FOR L=F1 TO F2
1390  READ #1;A$
1400  NEXT L
1410  GOTO 960
1420  REM--/END
1430  IF  END #1 THEN 1470
1440  READ #1;A$
1450  PRINT #2;A$, END 
1460  GOTO 1440
1470  IF F=2 THEN 1520
1475  IF  END #1 THEN 5160
1480  IF  END #2 THEN 1520
1483  READ #1,1
1484  READ #2,1
1490  READ #2;A$
1500  PRINT #1;A$, END 
1510  GOTO 1490
1520  PRINT "EDITING COMPLETE"
1525  ASSIGN "ASMWRK",2,T
1530  GOTO 100
1600  REM--:JFILE
1610  IF C[2]=0 THEN 5100
1615  C1=1
1620  GOSUB 5000
1630  IF T>2 THEN 5050
1635  F$=C$
1640  GOTO 100
1700  REM
1720  C1=1
1730  GOSUB 5000
1740  IF T>2 THEN 5050
1745  IF T#0 AND J#4 THEN 5080
1747  IF J=3 THEN 1780
1750  C1=3
1760  F=2
1765  E=3
1767  GOSUB 5000
1770  IF T=0 THEN 930
1774  IF T<3 THEN 5080
1776  GOTO 5050
1780  ASSIGN "ASMWRK",2,T
1790  GOTO 930
1900  REM--:JOB
1905  MAT Y=ZER
1907  F$=""
1910  GOTO 100
2000  REM--:EJOB
2010  STOP 
2100  REM--:RUN
2110  IF Y[9]=1 THEN 2135
2120  PRINT "LOADR NOT RUN"
2130  GOTO 100
2135  Y[9]=2
2140  CHAIN "$HPRUN",5
2200  REM--:PROGRAM
2210  IF C[2]=0 THEN 5100
2220  IF A$[C[1]+1,C[2]-1]="ASMB" THEN 2250
2230  IF A$[C[1]+1,C[2]-1]="LOADR" THEN 2400
2240  PRINT "NO SUCH PROGRAM"
2245  GOTO 100
2250  IF LEN(F$) THEN 2260
2254  PRINT "$END ASMB NPRG"
2256  GOTO 100
2260  ASSIGN F$,1,T
2270  READ #1,1;A$
2275  GOSUB 3220
2280  IF A$[1,C[1]-1]="ASMB" THEN 2310
2283  GOSUB 630
2285  PRINT SPA(15);A$
2290  PRINT "$END ASMB CS"
2300  GOTO 100
2310  B$="LTCAR"
2315  Y[3]=Y[4]=Y[5]=Y[6]=Y[7]=0
2320  J=1
2330  IF C[J+1]=0 THEN 2390
2340  FOR K=1 TO 5
2350  IF A$[C[J]+1,C[J+1]-1]=B$[K,K] THEN 2380
2360  NEXT K
2370  GOTO 2290
2380  IF Y[K+2] THEN 2283
2382  Y[K+2]=1
2384  J=J+1
2386  GOTO 2330
2390  IF Y[6]=Y[7] THEN 2283
2395  CHAIN "$ASMB",10
2400  IF Y[9]=0 THEN 2440
2410  PRINT "L06"
2420  PRINT "LOADR TERMINATED"
2430  GOTO 100
2440  Y[9]=1
2445  IF Y[1] THEN 2450
2447  PRINT "NO PROGRAMS LOADED."
2448  Y[9]=0
2450  PRINT "LOADR COMPLETE"
2460  GOTO 100
3220  REM--FIND COMMAS
3225  MAT C=ZER[10]
3230  J=1
3240  FOR K=3 TO LEN(A$)
3245  IF A$[K,K]=" " THEN 3295
3250  IF A$[K,K]#"," THEN 3290
3260  C[J]=K
3270  J=J+1
3280  IF J>9 THEN 5140
3290  NEXT K
3295  C[J]=K
3297  RETURN 
5000  REM--ASSIGN FILE
5020  C$=A$[C[C1]+1,C[C1+1]-1]
5030  ASSIGN C$,F,T
5040  RETURN 
5050  PRINT C$" UNDEFINED"
5060  GOTO 100
5080  PRINT C$" IS READ-ONLY"
5090  GOTO 100
5100  PRINT "MISSING PARAMETER"
5110  GOTO 5280
5120  PRINT "ILLEGAL DIGIT"
5130  GOTO 5280
5140  PRINT "INVALID FORMAT"
5150  GOTO 5280
5160  PRINT C$" IS TOO SMALL"
5162  GOTO E OF 100,5164,100
5164  PRINT "EDITED PROGRAM IS ON ASMWRK"
5168  GOTO 100
5180  PRINT "BAD CONTROL STATE"
5185  E=1
5190  GOTO 5280
5195  PRINT "END FILE"
5200  PRINT "EDITING ABORTED!"
5210  GOTO 100
5220  PRINT "ASMWRK IS TOO SMALL"
5230  GOTO 5200
5240  PRINT "ILLEGAL LUN"
5250  GOTO 5280
5260  PRINT "PARAMETER ILLEGAL"
5280  PRINT "RE-ENTER STATEMENT ON TTY"
5290  GOTO E OF 100,960,960
6000  REM--STRING TO NUMERIC
6010  B$="0123456789"
6020  N=0
6030  FOR J=C[C1]+1 TO C[C1+1]-1
6040  FOR K=1 TO 10
6050  IF A$[J,J]=B$[K,K] THEN 6090
6060  NEXT K
6080  RETURN 
6090  N=N*10+K-1
6100  NEXT J
6110  RETURN 
6200  REM--TAB AND DELETE TRAILING BLANKS
6210  FOR J=LEN(A$) TO 1 STEP -1
6220  IF A$[J,J]#" " THEN 6240
6230  NEXT J
6240  A$[J+1]=""
6250  FOR J=1 TO 6
6260  IF A$[J,J]='9 THEN 6290
6270  NEXT J
6280  RETURN 
6290  B$=A$
6300  A$[J,6]=" "
6310  A$[7]=B$[J+1]
6320  RETURN 
9999  END 
