10  COM Z$[72],G[8,8],C[9,2],K[3,3],N[3],Z[8,8],D[8]
20  COM C$[6],D$[72],E$[24],A$[3],Q$[72],R$[72],S$[48],X$[8]
30  COM T,T0,T7,T9,D0,E,E0,P,P0,S,S1,S2,S3,S8,S9,H,H8,Q1,Q2
40  COM Z1,Z2,Z3,R1,R2,C1,C2,W1,X,Y,X1,X2,A,N,B3,B9,K3,K7,K9,O9,O8
50  REM STTR1B
200  DEF FND(D)=SQR((K[I,1]-S1)^2+(K[I,2]-S2)^2)
210  O9=2
220  GOTO O8 OF 3970,4000,2330,2530,2800,3460,3560,4630,3920
230  O9=1
1270  CHAIN "STTR1A"
2330  IF D[3] >= 0 THEN 2370
2340  PRINT "LONG RANGE SENSORS ARE INOPERABLE"
2360  GOTO 1270
2370  PRINT "LONG RANGE SENSOR SCAN FOR QUADRANT";
2371  Z8=Q1
2372  Z9=Q2
2373  GOSUB 9000
2374  PRINT
2380  PRINT "-------------------"
2390  FOR I=Q1-1 TO Q1+1
2400  MAT N=ZER
2410  FOR J=Q2-1 TO Q2+1
2420  IF I<1 OR I>8 OR J<1 OR J>8 THEN 2460
2430  N[J-Q2+2]=G[I,J]
2440  IF D[7]<0 THEN 2460
2450  Z[I,J]=G[I,J]
2460  NEXT J
2470  PRINT N[1]":"N[2]":"N[3]
2480  PRINT "-------------------"
2490  NEXT I
2500  GOTO 1270
2530  IF K3 <= 0 THEN 3670
2540  IF D[4] >= 0 THEN 2570
2550  PRINT "PHASER CONTROL IS DISABLED"
2560  GOTO 1270
2570  IF D[7] >= 0 THEN 2590
2580  PRINT "COMPUTER FAILURE HAMPERS ACCURACY"
2590  PRINT "PHASERS LOCKED ON TARGET.  ENERGY AVAILABLE ="INT(E)
2600  PRINT "NUMBER OF UNITS TO FIRE";
2610  INPUT X
2620  IF X <= 0 THEN 1270
2630  IF E-X<0 THEN 2570
2640  E=E-X
2650  GOSUB 3790
2660  IF D[7] >= 0 THEN 2680
2670  X=X*RND(1)
2680  FOR I=1 TO 3
2690  IF K[I,3] <= 0 THEN 2770
2700  H=(X/K3/FND(0))*(2*RND(1))
2710  K[I,3]=K[I,3]-H
2720  PRINT INT(H)"UNIT HIT ON KLINGON AT SECTOR";
2721  Z8=K[I,1]
2722  Z9=K[I,2]
2723  GOSUB 9000
2725  PRINT "   ("INT(K[I,3])"LEFT )"
2740  IF K[I,3]>0 THEN 2770
2750  GOSUB 3690
2760  IF K9 <= 0 THEN 4040
2770  NEXT I
2780  IF E<0 THEN 4000
2790  GOTO 1270
2800  IF D[5] >= 0 THEN 2830
2810  PRINT "PHOTON TUBES ARE NOT OPERATIONAL"
2820  GOTO 1270
2830  IF P>0 THEN 2860
2840  PRINT "ALL PHOTON TORPEDOES EXPENDED"
2850  GOTO 1270
2860  PRINT "TORPEDO COURSE (1-9)";
2870  INPUT C1
2880  IF C1=0 THEN 1270
2890  IF C1<1 OR C1 >= 9 THEN 2860
2895  C2=INT(C1)
2900  X1=C[C2,1]+(C[C2+1,1]-C[C2,1])*(C1-C2)
2910  X2=C[C2,2]+(C[C2+1,2]-C[C2,2])*(C1-C2)
2920  X=S1
2930  Y=S2
2940  P=P-1
2950  PRINT "TORPEDO TRACK:"
2960  X=X+X1
2970  Y=Y+X2
2980  IF X<.5 OR X >= 8.5 OR Y<.5 OR Y >= 8.5 THEN 3420
2990  PRINT INT(X);INT(Y)
3010  A$="   "
3020  Z1=X
3030  Z2=Y
3040  GOSUB 5680
3050  IF Z3=0 THEN 3070
3060  GOTO 2960
3070  A$="+++"
3080  Z1=X
3090  Z2=Y
3100  GOSUB 5680
3110  IF Z3=0 THEN 3220
3120  PRINT "*** KLINGON DESTROYED ***"
3130  K3=K3-1
3140  K9=K9-1
3150  IF K9 <= 0 THEN 4040
3160  FOR I=1 TO 3
3170  IF INT(X+.5) <> K[I,1] THEN 3190
3180  IF INT(Y+.5)=K[I,2] THEN 3200
3190  NEXT I
3200  K[I,3]=0
3210  GOTO 3360
3220  A$=" * "
3230  Z1=X
3240  Z2=Y
3250  GOSUB 5680
3260  IF Z3=0 THEN 3290
3270  PRINT "YOU CAN'T DESTROY STARS SILLY"
3280  GOTO 3420
3290  A$=">!<"
3300  Z1=X
3310  Z2=Y
3320  GOSUB 5680
3330  IF Z3=0 THEN 2960
3340  PRINT "*** STAR BASE DESTROYED ***  .......CONGRATULATIONS"
3350  B3=B3-1
3360  A$="   "
3370  Z1=INT(X+.5)
3380  Z2=INT(Y+.5)
3390  GOSUB 5510
3400  G[Q1,Q2]=K3*100+B3*10+S3
3410  GOTO 3430
3420  PRINT "TORPEDO MISSED"
3430  GOSUB 3790
3440  IF E<0 THEN 4000
3450  GOTO 1270
3460  IF D[7] >= 0 THEN 3490
3470  PRINT "SHIELD CONTROL IS NON-OPERATIONAL"
3480  GOTO 1270
3490  PRINT "ENERGY AVAILABLE ="INT(E+S)
3492  PRINT "NUMBER OF UNITS TO SHIELDS";
3500  INPUT X
3510  IF X <= 0 THEN 1270
3520  IF E+S-X<0 THEN 3490
3530  E=E+S-X
3540  S=X
3550  GOTO 1270
3560  IF D[6] >= 0 THEN 3590
3570  PRINT "DAMAGE CONTROL REPORT IS NOT AVAILABLE"
3580  GOTO 1270
3590  PRINT
3600  PRINT "DEVICE        STATE OF REPAIR"
3610  FOR R1=1 TO 8
3620  GOSUB 5610
3630  PRINT "",D[R1]
3640  NEXT R1
3650  PRINT
3660  GOTO 1270
3670  PRINT "SHORT RANGE SENSORS REPORT NO KLINGONS IN THIS QUADRANT"
3680  GOTO 1270
3690  PRINT "KLINGON AT SECTOR";
3691  Z8=K[I,1]
3692  Z9=K[I,2]
3693  GOSUB 9000
3694  PRINT "DESTROYED"
3710  K3=K3-1
3720  K9=K9-1
3730  A$="   "
3740  Z1=K[I,1]
3750  Z2=K[I,2]
3760  GOSUB 5510
3770  G[Q1,Q2]=K3*100+B3*10+S3
3780  RETURN
3790  IF C$ <> "DOCKED" THEN 3820
3800  PRINT "STAR BASE SHIELDS PROTECT THE ENTERPRISE"
3810  RETURN
3820  IF K3 <= 0 THEN 3910
3830  FOR I=1 TO 3
3840  IF K[I,3] <= 0 THEN 3900
3850  H=(K[I,3]/FND(0))*(2*RND(1))
3860  S=S-H
3870  PRINT INT(H)"UNIT HIT ON ENTERPRISE AT SECTOR";
3871  Z8=K[I,1]
3872  Z9=K[I,2]
3873  GOSUB 9000
3875  PRINT "("INT(S)"LEFT )"
3890  IF S<0 THEN 4000
3900  NEXT I
3910  RETURN
3920  PRINT "THE ENTERPRISE IS DEAD IN SPACE.  IF YOU SURVIVE ALL IMPENDING"
3930  PRINT "ATTACK YOU WILL BE DEMOTED TO THE RANK OF PRIVATE"
3940  IF K3 <= 0 THEN 4020
3950  GOSUB 3790
3960  GOTO 3940
3970  PRINT
3980  PRINT "IT IS STARDATE"T
3990  GOTO 4020
4000  PRINT
4010  PRINT "THE ENTERPRISE HAS BEEN DESTROYED.  THE FEDERATION WILL BE CONQUERED"
4020  PRINT "THERE ARE STILL"K9"KLINGON BATTLE CRUISERS"
4030  GOTO 230
4040  PRINT
4050  PRINT "THE LAST KLINGON BATTLE CRUISER IN THE GALAXY HAS BEEN DESTROYED"
4060  PRINT "THE FEDERATION HAS BEEN SAVED !!!"
4070  PRINT
4080  PRINT "YOUR EFFICIENCY RATING ="((K7/(T-T0))*1000)
4090  T1=TIM(0)+TIM(1)*60
4100  PRINT "YOUR ACTUAL TIME OF MISSION ="INT((((T1-T7)*.4)-T7)*100)"MINUTES"
4110  GOTO 230
4630  IF D[8] >= 0 THEN 4660
4640  PRINT "COMPUTER DISABLED"
4650  GOTO 1270
4660  PRINT "COMPUTER ACTIVE AND AWAITING COMMAND";
4670  INPUT A
4680  GOTO A+1 OF 4740,4830,4880
4690  PRINT "FUNCTIONS AVAILABLE FROM COMPUTER"
4700  PRINT "   0 = CUMULATIVE GALACTIC RECORD"
4710  PRINT "   1 = STATUS REPORT"
4720  PRINT "   2 = PHOTON TORPEDO DATA"
4730  GOTO 4660
4740  PRINT "COMPUTER RECORD OF GALAXY FOR QUADRANT";
4741  Z8=Q1
4742  Z9=Q2
4743  GOSUB 9000
4744  PRINT
4770  PRINT "----- ----- ----- ----- ----- ----- ----- -----"
4780  FOR I=1 TO 8
4790  PRINT Z[I,1];Z[I,2];Z[I,3];Z[I,4];Z[I,5];Z[I,6];Z[I,7];Z[I,8]
4800  PRINT "----- ----- ----- ----- ----- ----- ----- -----"
4810  NEXT I
4820  GOTO 1270
4830  PRINT "--- STATUS REPORT ---"
4840  PRINT "NUMBER OF KLINGONS LEFT ="K9
4850  PRINT "NUMBER OF STARDATES LEFT ="(T0+T9)-T
4860  PRINT "NUMBER OF STARBASES LEFT ="B9
4870  GOTO 3560
4880  PRINT
4890  H8=0
4900  FOR I=1 TO 3
4910  IF K[I,3] <= 0 THEN 5260
4920  C1=S1
4930  A=S2
4940  W1=K[I,1]
4950  X=K[I,2]
4960  GOTO 5010
4970  PRINT "YOU ARE AT QUADRANT";
4971  Z8=Q1
4972  Z9=Q2
4973  GOSUB 9000
4974  PRINT "SECTOR";
4975  Z8=S1
4976  Z9=S2
4977  GOSUB 9000
4978  PRINT
4990  PRINT "SHIP'S & TARGET'S COORDINATES ARE";
5000  INPUT C1,A,W1,X
5010  X=X-A
5020  A=C1-W1
5030  IF X<0 THEN 5130
5040  IF A<0 THEN 5190
5050  IF X>0 THEN 5070
5060  IF A=0 THEN 5150
5070  C1=1
5080  IF ABS(A) <= ABS(X) THEN 5110
5090  PRINT "DIRECTION ="C1+(((ABS(A)-ABS(X))+ABS(A))/ABS(A))
5100  GOTO 5240
5110  PRINT "DIRECTION ="C1+(ABS(A)/ABS(X))
5120  GOTO 5240
5130  IF A>0 THEN 5170
5140  IF X=0 THEN 5190
5150  C1=5
5160  GOTO 5080
5170  C1=3
5180  GOTO 5200
5190  C1=7
5200  IF ABS(A) >= ABS(X) THEN 5230
5210  PRINT "DIRECTION ="C1+(((ABS(X)-ABS(A))+ABS(X))/ABS(X))
5220  GOTO 5240
5230  PRINT "DIRECTION ="C1+(ABS(X)/ABS(A))
5240  PRINT "DISTANCE ="(SQR(X^2+A^2))
5250  IF H8=1 THEN 5320
5260  NEXT I
5270  H8=0
5280  PRINT "DO YOU WANT TO USE THE CALCULATOR";
5290  INPUT A$
5300  IF A$="YES" THEN 4970
5310  IF A$ <> "NO" THEN 5280
5320  GOTO 1270
5380  R1=INT(RND(1)*8+1)
5390  R2=INT(RND(1)*8+1)
5400  A$="   "
5410  Z1=R1
5420  Z2=R2
5430  GOSUB 5680
5440  IF Z3=0 THEN 5380
5450  RETURN
5510  REM
5520  S8=Z1*24+Z2*3-26
5530  IF S8>72 THEN 5560
5540  Q$[S8,S8+2]=A$
5550  GOTO 5600
5560  IF S8>144 THEN 5590
5570  R$[S8-72,S8-70]=A$
5580  GOTO 5600
5590  S$[S8-144,S8-142]=A$
5600  RETURN
5610  REM
5620  S8=R1*12-11
5630  IF S8>72 THEN 5660
5640  PRINT D$[S8,S8+11];
5650  GOTO 5670
5660  PRINT E$[S8-72,S8-61];
5670  RETURN
5680  REM
5683  Z1=INT(Z1+.5)
5686  Z2=INT(Z2+.5)
5690  S8=Z1*24+Z2*3-26
5700  Z3=0
5710  IF S8>72 THEN 5750
5720  IF Q$[S8,S8+2] <> A$ THEN 5810
5730  Z3=1
5740  GOTO 5810
5750  IF S8>144 THEN 5790
5760  IF R$[S8-72,S8-70] <> A$ THEN 5810
5770  Z3=1
5780  GOTO 5810
5790  IF S$[S8-144,S8-142] <> A$ THEN 5810
5800  Z3=1
5810  RETURN
9000  REM
9010  IF Z8<1 OR Z8>8 THEN 9040
9020  PRINT " "X$[Z8,Z8]",";
9030  GOTO 9050
9040  PRINT " *,";
9050  IF Z9<1 OR Z9>8 THEN 9080
9060  PRINT X$[Z9,Z9]" ";
9070  GOTO 9090
9080  PRINT "* ";
9090  RETURN
9999  END
