10 REM > M7TREK
   70 :
   90 ENVELOPE1,1,0,0,0,0,0,0,126,0,0,-2,126,126
  100 ENVELOPE2,1,1,0,0,255,0,0,126,0,0,-2,126,126
  110 ENVELOPE3,1,8,1,0,0,0,0,16,0,0,-2,126,126
  120 MODE7:VDU23;8202;0;0;0;
  130 VDU&A,&81,&9D,&93,&A,&D
  135 VDU&81,&9D,&93,&7E,&2F,&2F,&FF,&6A,&2F,&FF,&2F,&35,&FF,&2F,&6F,&35,&FF,&2F,&6F,&34,&20,&6A,&2F,&FF,&2F,&35,&FF,&2F,&6F,&34,&FF,&2F,&2F,&35,&FF,&20,&78,&37,&20,&20
  140 VDU&81,&9D,&93,&FF,&70,&70,&70,&20,&20,&FF,&20,&20,&FF,&2C,&6E,&35,&FF,&2C,&6E,&21,&20,&20,&20,&FF,&20,&20,&FF,&2C,&6E,&21,&FF,&2C,&2C,&20,&FF,&70,&3F,&20,&20,&20
  145 VDU&81,&9D,&93,&20,&20,&20,&FF,&20,&20,&FF,&20,&20,&FF,&20,&6A,&35,&FF,&20,&6A,&35,&20,&20,&20,&FF,&20,&20,&FF,&20,&6A,&35,&FF,&7C,&7C,&35,&FF,&60,&7D,&20,&20,&20
  150 VDU&81,&9D,&93,&FF,&7C,&7C,&3F,&28,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&2C,&24,&FF,&20,&2A,&75,&20,&20,&81,&9D,&93
  160 PRINTTAB(11,6);CHR$&86;CHR$&9C;"T h e   G a m e";CHR$&81;CHR$&9D
  170 PRINTCHR$&91;STRING$(39,CHR$(&60))
  180 R1=RND(-TIME)
  190 DIMG(8,8),Z(8,8),C(9,2),K(3,3),N(3),D(9),Q$(9,9),D$(9)
  200 DATA warp engines,s.r.sensors,l.r.sensors,phaser control,photon tubes,damage control,shield control,central computer,hyperprobe launcher
  210 C(1,1)=-1:C(2,1)=-1:C(7,2)=-1
  220 C(8,1)=-1:C(8,2)=-1:C(6,2)=-1
  230 C(9,1)=-1:C(1,2)=0:C(3,1)=0
  240 C(5,2)=0:C(7,1)=0:C(9,2)=0
  250 C(2,2)=1:C(3,2)=1:C(4,1)=1
  260 C(4,2)=1:C(5,1)=1:C(6,1)=1
  270 CM$="NAVSRSLRSPHATORSHECOMMAPDAMHYPRES"
  280 CP$="MAPSTAPTDCCMKLIACTCOMDOCMOV"
  290 FORI%=1TO9:READ D$(I%):NEXT
  300 ON ERROR:IFERR=17 PRINT'CHR$&83"Resignation accepted.":GOTO2370 ELSE IFERR<>18 REPORT:PRINT" in line ";ERL:GOTO880 ELSE 880
  320 T=(INT((RND(1)+3)*1E4))/10:T0=T
  330 T9=25+INT(RND(10)):T8=T9+T:Q4=0
  340 S9=200:E0=4000:P0=10:P=P0:E=E0:S=0
  350 FORI%=1TO9:D(I%)=4:NEXT
  360 FORI%=1TO8:FORJ%=1TO8
  370     R1=RND(1):K3=0
  380     IFR1>.8 THEN K3=1
  390     IFR1>.95 THEN K3=2
  400     IFR1>.98 THEN K3=3
  410     K9=K9+K3:R1=RND(1):B3=0:IFR1>.96 THEN B3=1
  420     B9=B9+B3:S3=RND(8):G(I%,J%)=K3*100+B3*10+S3
  430 Z(I%,J%)=0:NEXT:NEXT
  440 IFB9>0 THEN 460
  450 G(6,3)=G(6,3)+10:B9=1
  460 PRINT TAB(0,9);:VDU&84,&9D,&D,&A,&84,&9D,&87:PRINT"Your orders are as follows:"
  470 VDU&84,&9D,&87,&A,&D,&84,&9D,&86:PRINT" Seek & destroy the ";K9;" Klingons"
  480 VDU&84,&9D,&86:PRINT" which have invaded Federation"'CHR$&84;CHR$&9D;CHR$&86;" territory."
  490 A$="is ":C$=" ":IFB9>1 THEN A$="are ":C$="s "
  500 VDU&84,&9D,&86,&A,&D,&84,&9D,&86:PRINT" There ";A$;B9;" starbase";C$;"at your"
  510 VDU&84,&9D,&86:PRINT" disposal and you have until ";T8
  520 VDU&84,&9D,&86:PRINT" to complete in.":VDU&84,&9D
  530 PRINTTAB(0,22);:VDU&81,&9D,&87:PRINT"Press SPACE BAR when ready to assume"
  540 PRINTTAB(0,23);:VDU&81,&9D,&87:PRINT"command of Enterprise."
  550 Q1=RND(8):Q2=RND(8):S1=RND(8):S2=RND(8)
  560 REPEAT UNTIL GET=&20:CLS:VDU23;4618;0;0;0;
  570 PRINT" Your mission begins with your ship"'" located in the galactic quadrant ";Q2;",";Q1:GOTO590
  580 PRINT" Now entering quadrant ";Q2;",";Q1;" sector ";S2;",";S1
  590 IFQ1<1 OR Q1>8 OR Q2<1 ORQ2>8 THEN 660
  600 IFG(Q1,Q2)=-1 THEN 3680
  610 X=G(Q1,Q2)*.01:Z(Q1,Q2)=G(Q1,Q2)
  620 K3=INT(X):B3=INT((X-K3)*10)
  630 S3=G(Q1,Q2)-INT(G(Q1,Q2)*.1)*10
  640 IFK3=0 THEN 710
  650 IFS>200 THEN 710 ELSE PRINTCHR$7;CHR$131"WARNING!!! SHIELD POWER ONLY ";S;" UNITS":GOTO710
  660 VDU129:PRINT"WARNING:"'CHR$129"You are at galactic coordinate"
  670 VDU129:PRINT;Q2+S2/10;",";Q1+S1/10;" which is outside your"
  680 VDU129:PRINT"operations area."
  690 VDU129:PRINT"Enterprise does not carry charts for"'CHR$129"this region."
  700 PRINT:GOTO880
  710 FORI%=1TO8:FORJ%=1TO8:Q$(I%,J%)="   ":NEXT:NEXT:Q$(S1,S2)=CHR$134+"-E-"
  720 IFK3<=0 THEN 750
  730 FORI%=1TOK3:PROCrnd:Q$(R1,R2)=CHR$(129)+"+K+"
  740 K(I%,1)=R1:K(I%,2)=R2:K(I%,3)=S9:NEXT
  750 IFB3<1 THEN 770
  760 PROCrnd:Q$(R1,R2)=CHR$(134)+">!<"
  770 IFS3<=0 THEN 800
  780 FORI%=1TOS3:PROCrnd:Q$(R1,R2)=CHR$131+"* ":NEXT
  790 PROCDOK
  800 GOTO2600
  810 PROCATAK
  820 IFRND(1)>0.98 PROCnova
  830 IFRND(1)>.5 PROCproberet
  840 IFRND(1)>.99 PROCmystery
  850 IFRND(1)>.996 PROCdilithium
  860 IFRND(1)>.99 PROCneutron
  870 PROCREP
  880 L%=0:VDU&86:INPUT"Command: "A$:PROCUP:CLS:FORI%=1TO11
  890   IFLEFT$(A$,3)=MID$(CM$,3*I%-2,3) THEN L%=I%
  900 NEXT:PROCANAL:IFL%>0 THEN 1020
  910 PRINT'" NAV = Set course (0-8)"
  920 PRINT" SRS = Short Range Scan"
  930 PRINT" LRS = Long Range Scan"
  940 PRINT" PHA = To fire PHAsors"
  950 PRINT" TOR = To fire TORpedoes"
  960 PRINT" SHE = Shield control"
  970 PRINT" COM = To access central computer"
  980 PRINT" DAM = For damage report"
  990 PRINT" HYP = To send hyperprobe"
 1000 PRINT" RES = To resign"
 1010 GOTO880
 1020 ON L% GOTO1030,2600,1390,1500,1680,1980,2690,2880,2090,3630,2370
 1030 IFLEN(A$)<=4 THEN 1090
 1040 IFL2<L1L2=LEN(A$)+1
 1050 C1=VAL(MID$(A$,L1+1,L2-L1-1))
 1060 IFL2=LEN(A$)+1 THEN 1100
 1070 W1=VAL(MID$(A$,L2+1,LEN(A$)-L2))
 1080 GOTO1110
 1090 INPUT" Bearing (0-8): "C1
 1100 INPUT" Warp (0-8):    "W1
 1110 CLS:C1=C1+1:IFC1=9 THEN C1=1
 1120 IFC1>9 OR C1<1 THEN 880
 1130 IFW1>8 OR W1<.1 THEN 880
 1140 IFW1<=.2 THEN 1160
 1150 IFD(1)<0 VDU7:PRINTCHR$&88"Warp drive is disabled."CHR$&83"Impulse power max speed=0.2":GOTO1090
 1160 N=INT((W1+.0625)*8)
 1170 IFE-N>0 THEN 1190
 1180 VDU7,&88:PRINT"Insufficient energy.":IFE<=0 AND S<=0 THEN 2330 ELSE 810
 1190 Q$(S1,S2)="   ":X=S1:Y=S2:PROCXY
 1200 I%=0
 1210 S1=S1+X1:S2=S2+X2
 1220 IFS1<1 OR S1>8 OR S2<1 OR S2>8 THEN 1320
 1230 IFQ$(S1,S2)="   " THEN 1260
 1240 S1=INT(S1-X1):S2=INT(S2-X2)
 1250 PRINT" Warp engines shut down at sector ";S2;",";S1'" due to bad navigation.":GOTO1270
 1260 I%=I%+1:IFI%<N THEN 1210
 1270 S1=INT(S1+.5):S2=INT(S2+.5):Q$(S1,S2)=CHR$(134)+"-E-"
 1280 E=E-N:T=(INT(10*T+1.1))/10:IFW1<1 THEN 1300
 1290 T=(INT(10*T+9))/10
 1300 IFT>T0+T9 THEN 2340
 1310 PROCDOK:PRINT:GOTO2600
 1320 X=Q1*8+X+X1*N:Y=Q2*8+Y+X2*N
 1330 Q1=INT(X/8):Q2=INT(Y/8):S1=INT(X-Q1*8):S2=INT(Y-Q2*8)
 1340 IFS1<>0 THEN 1360
 1350 Q1=Q1-1:S1=8
 1360 IFS2<>0 THEN 1380
 1370 Q2=Q2-1:S2=8
 1380 T=T+1:E=E-N+5:IFT>T0+T9 THEN 2340 ELSE 580
 1390 IFD(3)<0 VDU7,&81,&88,&AA,&89:PRINT'"Long range sensors inoperable":GOTO810
 1400 PRINTTAB(1,5)"Long Range Scan: Quad ";Q2;",";Q1
 1410 SR$=CHR$129+STRING$(19,"_")
 1420 PRINTSR$:FORI%=Q1-1 TO Q1+1:N(1)=0:N(2)=0:N(3)=0
 1430   FORJ%=Q2-1 TO Q2+1
 1440     IFI%>0 AND I%<9 AND J%>0 AND J%<9 THEN N(J%-Q2+2)=G(I%,J%):Z(I%,J%)=G(I%,J%)
 1450     NEXT:FORL%=1TO3:PRINTCHR$129": ";
 1460     IFN(L%)=0 PRINT" _ ";:GOTO1490
 1470     IFN(L%)=-1 PRINT"***";:GOTO1490
 1480     PRINTRIGHT$(STR$(N(L%)+1000),3);
 1490 NEXT:PRINT" :":PRINTSR$:NEXT:GOTO810
 1500 IFK3>0 THEN1530
 1510 PRINT" Short range sensors report no Klingons  in this quadrant, Captain.":GOTO810
 1520 IFD(4)<0 VDU7,129,136,&AA,137:PRINT"Phasors are damaged *":GOTO810
 1530 IFLEN(A$)<=4 THEN1550
 1540 X=VAL(MID$(A$,L1+1,LEN(A$)-1)):GOTO1570
 1550 PRINT" Phasers locked on target"'" Energy available=";E;" units"'
 1560 INPUT" Enter number of units to fire: "X
 1570 IFX<0 THEN880 ELSE IFE-X<0 THEN1550
 1580 E=E-X
 1590 SOUND0,3,4,5
 1600 PRINTCHR$131"Phaser strike report:"
 1610 FORI%=1 TO3:IFK(I%,3)<=0 THEN1670
 1620   H=INT(X/K3/(FND(0)/2)):K(I%,3)=K(I%,3)-H
 1630   PRINT,H;" unit hit in sector ";K(I%,2);",";K(I%,1)
 1640   PRINTTAB(6)"Target shields have ";K(I%,3);" units"
 1650   IFK(I%,3)>0 THEN1670
 1660   GOSUB2150:IFK9<=0 THEN2380
 1670 NEXT:IFE<1 ANDS<1 THEN2330  ELSE810
 1680 IFP=0 VDU7,&88:PRINT"All torpedoes expended.":GOTO810
 1690 IFD(5)<0 VDU7,129,136,&AA,137:PRINT"Photon tubes are damaged *":GOTO810
 1700 IFLEN(A$)<5 THEN1730
 1710 C1=VAL(MID$(A$,L1+1,LEN(A$)-L1))
 1720 C1=C1+1:IFC1<1 ORC1>9 THEN1730 ELSE1740
 1730 INPUT" Torpedo course: "C1:C1=C1+1:IFC1>9 THEN880
 1740 PROCXY
 1750 X=S1:Y=S2:P=P-1:PRINT" Torpedo track:"
 1760 SOUND1,2,0,20
 1770 X=X+X1:Y=Y+X2:FORI%=1 TO2000:NEXT
 1780 IFX<1 ORX>8 ORY<1 ORY>8 THEN1970
 1790 PRINTTAB(20,VPOS-1);INT(Y+.5);",";INT(X+.5):IFINT(X+.25)<> INT(X+.75) THEN1770
 1800 IFINT(Y+.25)<> INT(Y+.75) THEN1770
 1810 Z1=INT(X+.5):Z2=INT(Y+.5):A$="   ":PROCcheck
 1820 IFZ3<>0 THEN1770
 1830 A$=CHR$(129)+"+K+":PROCcheck:IFZ3=0 THEN1880
 1840 PRINTCHR$131"* KLINGON DESTROYED *":SOUND0,1,6,7:K3=K3-1:K9=K9-1:IFK9<=0 THEN2380
 1850 FORI%=1 TO3:IFZ1<>K(I%,1) THEN1870
 1860   IFZ2=K(I%,2) THENK(I%,3)=0:Q$(Z1,Z2)="   "
 1870 NEXT:GOTO1950
 1880 A$=CHR$131+"* ":PROCcheck:IFZ3=0 THEN1900
 1890 PRINTCHR$131"Star at sector ";Y;",";X;" absorbed torpedo":IFRND(1)>.8 THEN4020   ELSE810
 1900 A$=CHR$134+">!<":PROCcheck
 1910 IFZ3=0 THEN1770
 1920 VDU131,136:PRINT" *** STARBASE DESTROYED ***":SOUND0,1,6,7
 1930 PRINTCHR$129"If you survive, you will appear before"'CHR$129"a court marshall!"
 1940 B3=B3-1:B9=B9-1:Q$(Z1,Z2)="   "
 1950 G(Q1,Q2)=K3*100+B3*10+S3:Z(Q1,Q2)=G(Q1,Q2)
 1960 IFE<1 THEN2350  ELSE810
 1970 VDU7,&88:PRINT"Torpedo missed":IFE<1 THEN2350  ELSE810
 1980 IFD(7)<0 VDU7,129,136,&AA,137:PRINT"Shield control is not operational":GOTO810
 1990 IFLEN(A$)<5 THEN2010
 2000 X=VAL(MID$(A$,L1+1,LEN(A$)-L1)):GOTO2030
 2010 PRINT" Energy available = ";E+S;" units."
 2020 INPUT" Enter num of units to shields: "X
 2030 IFX>E+S THEN PRINTCHR$129"This is not the Federation treasury!":GOTO2010
 2040 PRINTCHR$131"Deflector control room reports:"
 2050 IFX<=0 OR X=S THEN2080
 2060 E=E+S-X:S=X
 2070 PRINT" < Shields now at ";S;" units >":GOTO810
 2080 PRINT" < Shields unchanged at ";S;" units >":GOTO810
 2090 IFD(6)>=0 THEN2110
 2100 VDU7,129,136,&AA,137:PRINT"Damage report is not available":GOTO880
 2110 PRINT'CHR$&82"Device        Repair index"
 2120 FORI%=1 TO9:PRINTCHR$&82+D$(I%);
 2130   PRINTTAB(23);D(I%)
 2140 NEXT:PRINT:GOTO810
 2150 PRINTCHR$131"* Klingon at ";K(I%,2);",";K(I%,1);" destroyed *":SOUND0,1,6,7
 2160 K3=K3-1:K9=K9-1:Z1=K(I%,1):Z2=K(I%,2):Q$(Z1,Z2)="   "
 2170 G(Q1,Q2)=K3*100+B3*10+S3:Z(Q1,Q2)=G(Q1,Q2):RETURN
 2180 DEF PROCATAK
 2190 IFK3=0 THEN2320
 2200 A$="s are":IFK3=1A$=" is"
 2210 PRINTK3;" Klingon";A$;" attacking."
 2220 IFD%=1 PRINT" Starbase shields protect Enterprise.":GOTO2320
 2230 I%=1:REPEAT
 2240   IFK(I%,3)<=0 THEN2310
 2250   H=INT(K(I%,3)/ FND(0)* RND(8))
 2260   S=S-H
 2270   PRINTH;" unit hit from sector ";K(I%,2);",";K(I%,1)
 2280   IFS<0 PRINTCHR$136"*** SHIELDS FAILED ***":GOTO2350
 2290   PRINT" * shields holding at ";S;" units."
 2300   PROCDAM:PROCMOV
 2310 I%=I%+1:UNTILI%=4
 2320 ENDPROC
 2330 VDU7,&81:PRINT"Enterprise is dead in space!":GOTO2360
 2340 PRINT'CHR$&86"It is stardate ";T'CHR$&86"You have run out of time, Lieutenant.":SOUND1,1,127,5:GOTO2370
 2350 PRINT'CHR$129"ENTERPRISE HAS BEEN DESTROYED."'CHR$129"The Federation will be conquered."
 2360 FORI%=127TOSTEP-1:SOUND1,-15,I%,1:NEXT
 2370 PRINT'CHR$&86"There were" CHR$&88;K9;CHR$&89"Klingons left at the"'CHR$&86"end of your mission.":K9=0:B9=0:GOTO2400
 2380 PRINTCHR$134"The last Klingon starship has been des-";CHR$134"troyed. Well done Captain."
 2390 FORI%=1TO3:FORJ%=0TO255 STEP12:SOUND1,-15,J%,2:SOUND2,-15,J%+85,2:NEXT:NEXT
 2400 PRINT'CHR$131"The Federation is in need of a new"'CHR$131"starship commander for a similar"'CHR$131"mission. If there is a volunteer, let"'CHR$131"him now step forward and enter 'AYE'"'
 2410 VDU&86:INPUT">"A$:PROCUP:IFA$="AYE" RUN:CLS:GOTO320 ELSE END
 2420 DEFPROCDOK
 2430 D%=0:FORI%=S1-1 TO S1+1:FORJ%=S2-1 TO S2+1
 2440     IFI%<1 ORI%>8 ORJ%<1 ORJ%>8 THEN2490
 2450     A$=CHR$134+">!<":Z1=I%:Z2=J%:PROCcheck
 2460     IFZ3=0 THEN2490
 2470     D%=1:E=E0:P=P0:S=0
 2480     VDU7,130:PRINT"* DOCKED * Shields lowered."
 2490 NEXTJ%:NEXTI%:IFD%=0 THEN2590
 2500 N%=0:J%=0:FORI%=1 TO9:IFD(I%)<4N%=N%+D(I%)-4:J%=J%+1
 2510 NEXT:IFJ%=0 THEN2590  ELSETl=ABS((N%/J%)/4):IFTl>5Tl=5
 2520 VDU130:PRINT"Estimated time for full overhaul:"'CHR$130;Tl;" stardates. Do you require a full"'CHR$130"overhaul? ";
 2530 INPUT""A$:PROCUP:IFLEFT$(A$,1)="Y"N%=4:T=T+Tl: ELSE PRINTCHR$&86"OK":ENDPROC
 2550 FORI%=1TO9:IFD(I%)>=N% GOTO2570
 2560   D(I%)=4
 2570 NEXT
 2580 PRINTCHR$&86"All systems functional and ready."
 2590 ENDPROC
 2600 IFD(2)<0 VDU7,&81,&88,&AA,&89:PRINT"Short range sensors are out *":GOTO880
 2610 C$=CHR$&82+"Green":IFE<E0*.1 THENC$=CHR$&83+CHR$&88+"YELLOW"
 2620 IFK3>0 THENC$=CHR$&81+CHR$&88+"*RED*"
 2630 IFD%=1 THENC$=CHR$&82+"Docked - shields OFF"
 2640 PRINT'" Stardate ";T
 2650 PRINT" Condition: ";C$
 2660 SR$=CHR$&83+"  -1--2--3--4--5--6--7--8-"
 2670 PRINTSR$:FORJ%=1 TO8
 2680 GOSUB4070:NEXT:PRINTSR$:GOTO880
 2690 F%=0:IFD(8)>=0 THEN2710
 2700 VDU7,&81,&88,&AA,&89:PRINT"Computer disabled *"':GOTO810
 2710 IFLEN(A$)<=4 THEN2740
 2720 A$=MID$(A$,L1+1,LEN(A$)-L1)
 2730 GOTO2750
 2740 VDU&85:INPUT"Program: "A$:PROCUP
 2750 L%=0:FORI%=1 TO9
 2760   IFLEFT$(A$,3)=MID$(CP$,3*I%-2,3) THENL%=I%
 2770 NEXT:PROCANAL:IFL%>0 THEN2870
 2780 PRINT" Programs available:"
 2790 PRINT" MAP : Cumulative galactic record"
 2800 PRINT" STA : Status report"
 2810 PRINT" PTD : Photon torpedo data"
 2820 PRINT" CCM : Course calculator"
 2830 PRINT" KLI : Enemy positions & strengths"
 2840 PRINT" ACT : Activates auto torpedo launcher         (use with PTD)"
 2850 PRINT" COM : Return to COMMAND mode"
 2860 PRINT:GOTO2740
 2870 ONL% GOTO2890,2970,3080,3140,4030,3510,880,2780,2780
 2880 CLS:FORI%=1TO2:VDU132,157,135,141:PRINT"     COMPUTER RECORD OF GALAXY":NEXT
 2890 VDU132,157,10,13,132,157,135:PRINT"   _1___2___3___4___5___6___7___8_"
 2900 FORI%=1TO8:VDU132,157,135:PRINT;I%;:FORJ%=1TO8:PRINTTAB(4*J%-1);
 2910     IFZ(I%,J%)=-1 PRINT"***";:GOTO2960
 2920     IFZ(I%,J%)=0 THEN2950
 2930     N%=Z(I%,J%)+1000
 2940     PRINT;RIGHT$(STR$(N%),3);:GOTO2960
 2950     PRINT" - ";
 2960 NEXT:PRINT:VDU132,157,135:PRINT:NEXT:PRINTTAB(10) CHR$131" You are at ";Q2+(S2/10);",";Q1+(S1/10):GOTO810
 2970 VDU12,10:FORI%=1 TO2:PRINTTAB(7) CHR$&83+ CHR$&8D"___STATUS REPORT___":NEXT
 2980 B$="s":IFB9=1B$=""
 2990 VDU10,131:PRINT"It is stardate";CHR$135;T'CHR$131"The Federation is currently maintaining"CHR$135;B9;CHR$131;"starbase";B$;" in this part of the"'CHR$131"galaxy."
 3000 PRINTCHR$131"You have";CHR$135;(INT(T8-T)*10)/10;CHR$131"stardates left in which"'CHR$131"to eliminate the";CHR$135;K9;CHR$131"remaining Klingons"'
 3010 PRINTCHR$&83"Alert condition.....";C$
 3020 PRINTCHR$&83"Quadrant............";CHR$&87;Q2;",";Q1
 3030 PRINTCHR$&83"Sector..............";CHR$&87;S2;",";S1
 3040 PRINTCHR$&83"Ships energy........";CHR$&87;E
 3050 PRINTCHR$&83"Shield energy.......";CHR$&87;S
 3060 PRINTCHR$&83"Photon torpedoes....";CHR$&87;P
 3070 PRINT:GOTO2740
 3080 IFK3=0 THEN1510
 3090 PRINTCHR$&83"Aiming data for enemy:"
 3100 FORI%=1 TO3:IFK(I%,3)<=0 THEN3130
 3110   C1=S1:A=S2:W1=K(I%,1):X=K(I%,2)
 3120   PRINTCHR$&83"(";I%;")";:GOSUB3190
 3130 NEXT:F%=1:GOTO3430
 3140 VDU&85:INPUT"This (s)ector or new (q)uadrant? "A$:PROCUP:IFLEFT$(A$,1)="S"B$="sector" ELSEB$="quadrant":IFA$<>"Q" THEN880
 3150 VDU&85:PRINT"Enter ";B$;" coordinates:":VDU&85:INPUT" X: "X:VDU&85:INPUT" Y: "W1:IFX<1 ORX>8 ORW1<1 ORW1>8 THEN880
 3160 C1=S1:A=S2:IFB$="quadrant"C1=Q1:A=Q2
 3170 PRINTTAB(3)CHR$&83;:GOSUB3190:IFB$="quadrant" PRINTTAB(6,VPOS-1)"Distance: ";INT(SQR(X*X+A*A));STRING$(20," ")
 3180 GOTO3430
 3190 X=X-A:A=C1-W1
 3200 IFX<0 THEN3300
 3210 IFA<0 THEN3350
 3220 IFX>0 THEN3240
 3230 IFA=0 THEN3320
 3240 C1=0
 3250 IFABS(X)<=ABS(A) THEN3280
 3260 DR=C1+(((ABS(X)- ABS(A))+ ABS(X))/ ABS(X))
 3270 GOTO3400
 3280 DR=C1+(ABS(X)/ ABS(A))
 3290 GOTO3400
 3300 IFA>0 THEN3340
 3310 IFX=0 THEN3350
 3320 IFX=0 THEN RETURN
 3330 C1=4:GOTO3250
 3340 C1=6:GOTO3360
 3350 C1=2
 3360 IFABS(X)>=ABS(A) THEN3390
 3370 DR=C1+(((ABS(A)- ABS(X))+ ABS(A))/ ABS(A))
 3380 GOTO3400
 3390 DR=C1+(ABS(A)/ ABS(X))
 3400 PRINT"  Bearing : ";DR
 3410 PRINTCHR$&83;TAB(6)"Distance: ";SQR(X*X+A*A)/10
 3420 RETURN
 3430 IFL1>=LEN(A$) OR LEN(A$)<=4 THEN880
 3440 A$=MID$(A$,L1+1,LEN(A$)-L1)
 3450 GOTO2750
 3460 DEFPROCrnd
 3470 R1=RND(8):R2=RND(8)
 3480 A$="   ":Z1=R1:Z2=R2:PROCcheck
 3490 IFZ3=0 THEN3470
 3500 ENDPROC
 3510 IFF%<1 PRINT" No aiming data":GOTO2740
 3520 IFP=0 VDU7,&81,&88,&AA,&89:PRINT"All torpedoes expended *":GOTO810
 3530 IFD(5)<0 VDU7,&81,&88,&AA,&89:PRINT"Photon tubes damaged *":GOTO810
 3540 C1=DR+1:GOTO1740
 3550 DEFPROCANAL
 3560 L1=0:L2=0:FORI%=LEN(A$) TOSTEP-1
 3570   IFMID$(A$,I%,1)=" " THENL1=I%
 3580   IFMID$(A$,I%,1)="/" THENL2=I%
 3590 NEXT:ENDPROC
 3600 DEFPROCcheck
 3610 Z3=0:IFQ$(Z1,Z2)=A$ THENZ3=1
 3620 ENDPROC
 3630 IFD(9)<0 VDU7,&81,&88,&AA,&89:PRINT"Hyperprobe is damaged *":GOTO810
 3640 IFQ4<>0 PRINTCHR$&83"Probe already launched.":GOTO810
 3650 VDU&86:PRINT"Send probe to quadrant: ":VDU&86:INPUT" X: "Q5:VDU&86:INPUT" Y: "Q4
 3660 IFQ4<1 ORQ4>8 ORQ5<1 ORQ5>8 PRINTCHR$&81"Sir, the probe is now on an"CHR$&81"     irretrievable trajectory.":Q4=-1 ELSE PRINTCHR$&83"Probe launched to ";Q5;",";Q4;"; sir."
 3670 GOTO810
 3680 PRINTCHR$&85"You have entered a";CHR$&88"SUPERNOVAE";CHR$&89"in ";Q2;",";Q1'
 3690 GOTO2350
 3700 DEFPROCnova
 3710 PROCrnd
 3720 IFZ1<>Q1 THEN3740
 3730 IFZ2=Q2 THEN3710
 3740 IFG(Z1,Z2)=-1 THEN3710
 3750 X=G(Z1,Z2)/100
 3760 X1=INT(X)
 3770 PRINTCHR$&83"Lft. Uhura reports message from SFC:"
 3780 PRINT" Space watch has detected supernova in   quadrant ";Z2;",";Z1;"."
 3790 PRINT" Do NOT enter at sublight speed."
 3800 IFX1<=0 GOTO3850
 3810 A$="":IFX1=1 GOTO3830
 3820 A$="s"
 3830 PRINTX1;" Klingon";A$;" destroyed."
 3840 K9=K9-X1:IFK9<=0 THEN2380
 3850 IF10*(X-X1)<1 THEN3880
 3860 PRINT1;" Starbase destroyed."
 3870 B9=B9-1
 3880 G(Z1,Z2)=-1:Z(Z1,Z2)=-1
 3890 PRINTTAB(30)"SFC out."
 3900 ENDPROC
 3910 DEFPROCproberet:IFQ4<1 THEN ENDPROC
 3920 N%=G(Q4,Q5):IFN%<0 PRINTCHR$&83"Lost contact with hyperprobe, sir.":Q4=-1:ENDPROC
 3930 PRINT" Hyperprobe returned from ";Q5;",";Q4
 3940 PRINTCHR$&83"  STATUS..."
 3950 PRINTCHR$&81"   _______"
 3960 Z(Q4,Q5)=G(Q4,Q5)
 3970 PRINTCHR$&81"   : ";
 3980 Z(Q4,Q5)=G(Q4,Q5)
 3990 PRINTRIGHT$(STR$(N%+1000),3);" :"
 4000 PRINTCHR$&81"   _______"
 4010 Q4=0:ENDPROC
 4020 VDU7,&88:PRINT"You have caused a star to go nova!!":GOTO2350
 4030 IFK3=0 THEN1510
 4040 FORI%=1 TOK3
 4050   PRINTCHR$&83"Klingon at sector ";K(I%,2);",";K(I%,1);" has ";K(I%,3);" units."
 4060 NEXT:GOTO880
 4070 PRINTCHR$131;J%;:FORI%=1TO8:PRINTQ$(J%,I%);:NEXT:PRINTTAB(27);CHR$131;J%;
 4080 ONJ% GOTO4100,4110,4120,4130,4140,4150,4160,4090
 4090 PRINT:RETURN
 4100 PRINTTAB(29);CHR$135+"QUAD:";Q2;",";Q1':RETURN
 4110 PRINTTAB(29);CHR$135"SECT:";S2;",";S1':RETURN
 4120 PRINTTAB(29);CHR$135"ENRG:";E':RETURN
 4130 PRINTTAB(29);CHR$135"SHLD:";S':RETURN
 4140 PRINTTAB(29);CHR$135"TORP:";P':RETURN
 4150 PRINTTAB(29);CHR$135"KLNG:";K9':RETURN
 4160 PRINTTAB(29);CHR$135"TIME:";INT(T8-T)':RETURN
 4170 DEFPROCDAM:IFH<100 THEN4210
 4180 R1=INT(RND(9))
 4190 D(R1)=D(R1)- INT(RND(5)+2)
 4200 VDU131:PRINT"Sir, the ";D$(R1);" area is damaged"
 4210 ENDPROC
 4220 DEFPROCREP
 4230 FORI%=1 TO9
 4240   IFD(I%)>=0 THEN4290
 4250   A$=" being repaired."
 4260   D(I%)=D(I%)+1
 4270   IFD(I%)>=0A$=" now operational."
 4280   VDU131:PRINT;D$(I%);A$
 4290 NEXT:ENDPROC
 4300 DEFPROCMOV
 4310 Z1=K(I%,1):Z2=K(I%,2)
 4320 IFS1-Z1>0Z1=Z1+1
 4330 IFS2-Z2>0Z2=Z2+1
 4340 IFS1-Z1<0Z1=Z1-1
 4350 IFS2-Z2<0Z2=Z2-1
 4360 A$="   ":PROCcheck:IFZ3=0 THEN4390
 4370 Q$(K(I%,1),K(I%,2))="   "
 4380 K(I%,1)=Z1:K(I%,2)=Z2:Q$(Z1,Z2)=CHR$129+"+K+"
 4390 ENDPROC
 4400 DEFFND(D)=SQR((K(I%,1)-S1)^2+(K(I%,2)-S2)^2)
 4410 DEFPROCmystery
 4420 E9=RND(1):IFE9<.2 ORE9>.6 THEN4420
 4430 E=INT(E*E9+1)
 4440 VDU7,&83:PRINT"Spock to captain:"
 4450 PRINT"   Mystery power drain has reduced"'"   ship's power to ";E;" units."
 4460 ENDPROC
 4470 DEFPROCdilithium
 4480 VDU7,&83:PRINT"Scottie to captain:"
 4490 PRINT"   Dilithium crystals have been stolen     by an intruder. No warp power."
 4500 D(1)=-1E2:GOTO4550
 4510 DEFPROCneutron
 4520 VDU7,&83:PRINT"Spock to captain:"
 4530 PRINT"   Collision with neutron mine has         disabled shields & shield control."
 4540 D(7)=-1E2:S=0
 4550 PRINT"   Return to starbase for repairs.":ENDPROC
 4560 DEFPROCXY
 4570 X1=C(C1,1)+(C(C1+1,1)-C(C1,1))*(C1- INT(C1))
 4580 X2=C(C1,2)+(C(C1+1,2)-C(C1,2))*(C1- INT(C1))
 4590 ENDPROC
 4600 DEFPROCUP:LOCAL B$:IF A$="":ENDPROC
 4610 REPEATB$=B$+CHR$(ASCA$AND((A$<"@")OR&DF)):A$=MID$(A$,2):UNTILA$="":A$=B$:ENDPROC