10  COM B$[15],L$[72],M$[72],N$[72]
11  COM I,E,L[108],F[200],E[100],I[200,2]
12  COM L,X,Y,Z
13  COM A$[72]
2380  P=0
2390  N1=1
2400  K=I[I,1]
2410  S1=I1=0
2420  O=I[I,2]
2430  IF (F[I]=1 OR F[I]=4) OR F[I]=5 THEN 2850
2440  IF F[I]=3 THEN 2760
2450  IF F[I]=2 THEN 2790
2460  REM STATEMENTS OUTSIDE DEFINED RANGE
2470  PRINT "ATTEMPT TO EXECUTE OUTSIDE DEFINED AREA AT";I
2480  PRINT "NUMBER OF STATEMENTS EXECUTED";N1
2481  PRINT "DO YOU WISH TO CORRECT THE MACHINE LANGUAGE PROGRAM";
2482  INPUT A$
2483  IF A$[1,2]="NO" THEN 2490
2484  CHAIN "STPAL3"
2490  CHAIN "STPAL"
2570  PRINT "A CONSTANT MAY NOT BE THE NEXT INSTRUCTION."
2580  PRINT "MEANINGLESS OP CODE AT ";I
2590  I=I+1
2600  N1=N1+1
2610  IF I>999 THEN 2640
2620  IF N1>25000 THEN 2660
2630  GOTO 2400
2640  PRINT "ATTEMPT TO EXECUTE BEYOND CORE"
2650  GOTO 2480
2660  PRINT "CANCELED DUE TO STATEMENT LIMIT EXCEEDED."
2670  GOTO 2480
2680  IF A>99999. OR A<-99999. THEN 2700
2690  GOTO 2590
2700  P1=INT(A/100000.)
2710  A=A-P1*100000.
2720  PRINT "ACCUMULATOR OVERFLOW.  HIGH ORDER DIGITS TRUNCATED."
2730  PRINT "VALUE OF ACCUMULATOR";A
2740  GOTO 2590
2750  REM IMMEDIATE INSTRUCTION AS A LITERAL
2760  S1=2
2770  GOTO 2870
2780  REM INDIRECT INSTRUCTION  CHECK DEPTH
2790  O=I[O,2]
2800  I1=I1+1
2810  IF I1>9 THEN 2830
2820  IF F[O]=2 THEN 2790
2823  IF F[O]=1 OR (F[O]=4 OR F[O]=5) THEN 2850
2825  IF F[O]=3 THEN 2760
2828  GOTO 2470
2830  PRINT "INDIRECT ADDRESSING MORE THAN 10 LEVELS DEEP."
2840  PRINT "FURTHER LEVELS IGNORED."
2850  S1=1
2860  REM  OP CODES ROUTINES USING COMPUTED GOTO.
2870  N=K+1
2890  GOTO N OF 3100,3300,3500,4500,5100,5300,4300,4100,3700,4900,4700
2900  N=N-11
2910  GOTO N OF 4100,5500,2590,5900,6100,6300,6500,6700,7100,2590,7300
2920  N=N-11
2930  GOTO N OF 7500,7600,7900
2940  GOTO 2580
2950  STOP 
2955  REM  THE S/R USED IN ALL ARITHMETIC OPERATIONS
2960  IF S1=1 THEN 2990
2970  P1=O
2980  GOTO 3020
2990  P1=I[O,2]+I[O,1]*1000
3000  IF F[O]=1 OR F[O]=5 THEN 3020
3010  P1=-P1
3020  RETURN 
3100  IF S1=1 THEN 3130
3110  PRINT "ATTEMPT TO REDEFINE CONSTANT BY READ."
3120  GOTO 2580
3130  IF O=0 THEN 2580
3135  INPUT P1
3140  IF P1>99999. OR P1<-99999. THEN 3230
3150  IF P1<0 THEN 3200
3160  F[O]=5
3170  I[O,1]=INT(P1/1000)
3180  I[O,2]=P1-I[O,1]*1000
3190  GOTO 2590
3200  F[O]=4
3210  P1=-P1
3220  GOTO 3170
3230  PRINT "VALUE HAS TOO MANY DIGITS.  RE-INPUT."
3240  GOTO 3130
3300  A=0
3500  GOSUB 2960
3510  A=A+P1
3520  GOTO 2680
3700  IF S1 <> 1 THEN 2570
3710  IF A >= 0 THEN 2590
3720  I=O
3730  GOTO 2600
3900  IF S1=1 THEN 3930
3910  W=O
3920  GOTO 3940
3930  W=I[O,2]
3940  I1=INT(W/10)
3950  I2=W-I1*10
3960  IF I1>5 OR I2>4 THEN 3990
3962  A1=0
3963  IF A >= 0 THEN 3970
3964  A=-A
3965  A1=1
3970  A=INT((10^I1*(A-INT(A/10^(5-I1))*10^(5-I1)))/10^I2)
3971  IF A1=0 THEN 3980
3972  A=-A
3980  GOTO 2680
3990  A=0
4000  GOTO 2590
4100  GOSUB 2960
4105  IF K=11 THEN 4140
4110  IF I[I+1,1]=20 THEN 4140
4120  PRINT P1
4130  GOTO 2590
4140  PRINT P1;
4150  GOTO 2590
4300  IF S1=1 THEN 4330
4310  PRINT " A CONSTANT MAY NOT BE CHANGED BY STORING."
4320  GOTO 2580
4330  P1=A
4340  IF P1<0 THEN 4370
4350  F[O]=5
4360  GOTO 4390
4370  F[O]=4
4380  P1=-P1
4390  I[O,1]=INT(P1/1000)
4400  I[O,2]=P1-I[O,1]*1000
4410  GOTO 2590
4500  GOSUB 2960
4510  A=A-P1
4520  GOTO 2680
4700  IF S1 <> 1 THEN 2570
4710  GOTO 3720
4900  PRINT "HALT ENCOUNTERED.  EXECUTION COMPLETE."
4910  GOTO 2480
5100  GOSUB 2960
5110  A=A*P1
5120  GOTO 2680
5300  GOSUB 2960
5310  IF P1=0 THEN 5400
5320  A=INT(A/P1)
5330  GOTO 2590
5400  PRINT "ATTEMPT TO DIVIDE BY ZERO."
5410  GOTO 2580
5500  GOSUB 2960
5510  IF P1=0 THEN 5400
5520  A=A-INT(A/P1)*P1
5530  GOTO 2590
5900  A=0
5910  GOTO 2590
6100  IF S1 <> 1 THEN 2570
6110  IF A=0 THEN 3720
6120  GOTO 2590
6300  IF S1 <> 1 THEN 2570
6310  IF A>0 THEN 3720
6320  GOTO 2590
6500  P1=A/10^O
6510  IF I[I+1,1]=20 THEN 6540
6520  PRINT P1
6530  GOTO 2590
6540  PRINT P1;
6550  GOTO 2590
6700  IF S1 <> 1 THEN 2570
6703  IF O=999 THEN 6740
6706  IF O=998 THEN 6810
6710  I[O,2]=I+1
6720  F[O]=1
6730  I=O
6735  GOTO 2590
6740  P1=I[I+1,2]+I[I+1,1]*1000
6750  N=INT(SQR(P1*10000))
6760  F[I+2]=5
6770  I[I+2,1]=INT(N/1000)
6780  I[I+2,2]=N-I[I+2,1]*1000
6790  I=I+3
6800  GOTO 2600
6810  P1=I[I+2,2]
6815  X=I[I+1,2]+I[I+1,1]*1000
6820  IF P1 <= 6 THEN 6900
6825  IF P1 >= 9 THEN 6875
6830  N=INT(ATN(X/1000)*10000)
6835  IF P1=8 THEN 6860
6840  N=INT(N*180/314.16+.5)
6845  IF F[I+1]=5 THEN 6760
6850  N=18000-N
6855  GOTO 6760
6860  IF F[I+1]=5 THEN 6760
6865  N=31416-N
6870  GOTO 6760
6875  PRINT P1," IS IMPROPER PARAMETER"
6880  N=0
6890  GOTO 6760
6900  IF (P1=1 OR P1=2) OR P1=5 THEN 6930
6910  X=X/10000
6920  GOTO 6940
6930  X=X*3.1416/18000
6940  N2=INT(SIN(X)*10000+.5)
6950  N=INT(COS(X)*10000+.5)
6960  IF P1 >= 5 THEN 7020
6970  IF P1=2 OR P1=4 THEN 6760
6980  N=N2
6990  IF F[I+1]=5 THEN 6760
7000  F[I+2]=4
7010  GOTO 6770
7020  I[I+1,1]=INT(N2/1000)
7030  I[I+1,2]=N2-I[I+1,1]*1000
7040  GOTO 6760
7100  PRINT 
7110  GOTO 2590
7300  I1=0
7310  I2=O
7320  GOTO 3960
7500  I1=O
7510  I2=0
7520  GOTO 3960
7600  IF P=1 THEN 7610
7601  PRINT "INPUT DATA. FORMAT SXXXXX,ETC."
7602  P=1
7610  INPUT A$
7620  F1=0
7630  H=7
7640  FOR I1=O TO O+9
7650  IF F1=1 THEN 7860
7660  IF A$[H,H]="," THEN 7670
7661  IF A$[H,H]=" " THEN 7665
7662  J=H
7663  GOTO 7678
7665  F1=1
7670  C=N=0
7671  FOR J=H-1 TO H-5 STEP -1
7672  X=0
7673  FOR G=1 TO 10
7674  IF A$[J,J]=" " THEN 7681
7675  IF A$[J,J]=B$[G,G] THEN 7682
7676  X=X+1
7677  NEXT G
7678  PRINT "ILLEGAL ITEM IN COLUMN";J;"RE-ENTER LINE."
7679  PRINT A$
7680  GOTO 7610
7681  X=0
7682  N=N+X*10^C
7683  C=C+1
7684  NEXT J
7730  I[I1,1]=INT(N/1000)
7740  I[I1,2]=N-I[I1,1]*1000
7750  IF A$[H-6,H-6]="+" THEN 7800
7760  IF A$[H-6,H-6]="-" THEN 7820
7770  IF A$[H-6,H-6]=" " THEN 7800
7780  PRINT "ONLY +,-, OR BLANK ALLOWED IN SIGN POSITION AT";H-6
7790  GOTO 7679
7800  F[I1]=5
7810  GOTO 7830
7820  F[I1]=4
7830  H=H+7
7840  NEXT I1
7850  GOTO 2590
7860  F[I1]=1
7870  I[I1,1]=0
7880  I[I1,2]=0
7890  GOTO 7830
7900  I1=O+A
7910  PRINT " CONTENT OF LOCATIONS";O;"TO";I1
7920  FOR X=O TO I1
7930  P1=I[X,1]*1000+I[X,2]
7940  PRINT P1;
7950  NEXT X
7960  GOTO 2590
8000  END 
