10  COM S$[28],N$[72],N,Y,D[3],L[3],I[3],Y[4,2],V[3,2],S[4,2],W[4],E[4],K[4]
20  COM P[4,12],F[4,9],C[4],Q[4,8],T[4,30],O[4],A[4,5],A1,H5,U,W0,F3,O,G
30  COM W,V9,N1,U[4],S
40  REM  ****  $TREK4T  FOUR-TERMINAL STAR TREK GAME  ****
50  REM
60  REM  WRITTEN BY WARD RUTH  MONTEREY HIGH SCHOOL  4-24-78
70  REM
80  REM  FORMATTING BASED ON TREK73 BY W.K. CHAR
90  REM  LOOSLY RELATED TO *TREK BY K.A. MASON  MHS
100  REM  --  WEAPON LOCKING, ETC.
110  REM
120  FILES *YTREKL
130  DEF FNT()=(3.14159*)/180
140  DEF FNN()=FND((ATN()*180)/3.14159)
150  DEF FNE()=-((>360)*360)
160  DEF FND()=+((<0)*360)
170  DEF FNV()=FND(ABS(-((>315)*360)-315)-45)
180  DIM D$[10],B$[30],C$[10],X$[12],W$[12],B[6]
190  D$="0123456789"
200  W$="   "
210  GOTO A1-8 OF 240,470,700,870,990,1520
220  IF A1=23 THEN 1190
230  REM  ****  COMMAND:  LOCK PHASERS ONTO TARGET  ****
240  IF A[1,5] THEN 1810
250  PRINT "NAVIGATION:  LOCK PHASERS [1-3]";
260  INPUT B$
270  GOSUB 2060
280  FOR G5=1 TO LEN(B$)
290  GOSUB 1860
300  IF C3>3 OR C3 <= 0 THEN 320
310  P[1,C3*4]=S
320  NEXT G5
330  FOR C=1 TO 3
340  S=P[1,C*4]-(P[1,C*4]>4)*4
350  IF S>0 THEN 370
360  S=-FNV(-S)
370  GOSUB 1940
380  B[C]=F
390  NEXT C
400  GOSUB 2220
410  PRINT #1;A1
420  FOR C=1 TO 3
430  PRINT #1;B[C]
440  NEXT C
450  GOTO 1830
460  REM  ****  COMMAND:  LOCK TORPEDOES ONTO TARGET  ****
470  IF A[1,5] THEN 1810
480  PRINT "NAVIGATION:  LOCK TORPEDOES [1-6]";
490  INPUT B$
500  GOSUB 2060
510  FOR G5=1 TO LEN(B$)
520  GOSUB 1860
530  IF C3>6 OR C3 <= 0 THEN 550
540  T[1,C3*5]=S
550  NEXT G5
560  FOR C=1 TO 6
570  S=T[1,C*5]-(T[1,C*5]>4)*4
580  IF S>0 THEN 600
590  S=-FNV(-S)
600  GOSUB 1940
610  B[C]=F
620  NEXT C
630  GOSUB 2220
640  PRINT #1;A1
650  FOR C=1 TO 6
660  PRINT #1;B[C]
670  NEXT C
680  GOTO 1830
690  REM  ****  COMMAND:  MANUALLY ROTATE PHASERS  ****
700  PRINT "NAVIGATION:  ROTATE PHASERS [1-3]";
710  INPUT B$
720  FOR G5=1 TO LEN(B$)
730  GOSUB 1860
740  IF C3>3 OR C3 <= 0 THEN 840
750  RESTORE 2360
760  FOR C=1 TO C3
770  READ W$
780  NEXT C
790  PRINT "PHASER "D$[C3+1,C3+1]" TO ["W$"]";
800  INPUT C2
810  IF C3=1 AND (C2 <= 60 OR C2 >= 300) THEN 830
820  IF C2<(C3*120-180) OR C2>(C3*120-60) THEN 1770
830  P[1,C3*4]=-C2
840  NEXT G5
850  GOTO 330
860  REM  ****  COMMAND:  MANUALLY TARGET TORPEDOES  ****
870  PRINT "NAVIGATION:  TARGET TORPEDOES [1-6]";
880  INPUT B$
890  PRINT "TO [0-90,0-270]";
900  INPUT C2
910  IF C2>90 AND C2<270 THEN 1770
920  FOR G5=1 TO LEN(B$)
930  GOSUB 1860
940  IF C3>6 OR C3 <= 0 THEN 960
950  T[1,C3*5]=-C2
960  NEXT G5
970  GOTO 560
980  REM  ****  COMMAND:  CHANGE DEFLECTORS  ****
990  PRINT "DEFENSE:  CHANGE DEFLECTORS [1-4]";
1000  INPUT B$
1010  FOR G5=1 TO LEN(B$)
1020  GOSUB 1860
1030  IF C3=0 OR C3>4 THEN 1110
1040  RESTORE 2370
1050  FOR C=1 TO C3
1060  READ C$
1070  NEXT C
1080  PRINT C$" DEFLECTOR";
1090  INPUT Q[1,C3*2-1]
1100  IF Q[1,C3*2-1]<0 THEN 1790
1110  NEXT G5
1120  GOSUB 2220
1130  PRINT #1;13
1140  FOR C=1 TO 7 STEP 2
1150  PRINT #1;Q[1,C]
1160  NEXT C
1170  GOTO 1830
1180  REM  ****  COMMAND:  LOAD/UNLOAD TORPEDOES  ****
1190  PRINT "ENGINEERING:  LOAD OR UNLOAD";
1200  INPUT C$
1210  B$="LOAD"
1220  C7=0
1230  IF C$[1,1]="L" THEN 1270
1240  IF C$[1,1]#"U" THEN 1790
1250  B$="UNLOAD"
1260  C7=1
1270  PRINT B$" TORPEDOES [1-6]";
1280  INPUT B$
1290  FOR G5=1 TO LEN(B$)
1300  GOSUB 1860
1310  IF C3 <= 0 OR C3>6 THEN 1410
1320  IF C7 THEN 1380
1330  C8=T[1,C3*5-3]
1340  T[1,C3*5-3]=C8+((10-C8) MIN E[1])
1350  W[1]=W[1]-((10-C8) MIN E[1])
1360  E[1]=E[1]-((10-C8) MIN E[1])
1370  GOTO 1410
1380  W[1]=W[1]+T[1,C3*5-3]
1390  E[1]=E[1]+T[1,C3*5-3]
1400  T[1,C3*5-3]=0
1410  NEXT G5
1420  GOSUB 2220
1430  PRINT #1;23,W[1]
1440  PRINT "TORPEDOE UNITS NOW  ";
1450  FOR C7=2 TO 27 STEP 5
1460  PRINT INT(T[1,C7]);
1470  PRINT #1;T[1,C7]
1480  NEXT C7
1490  PRINT "FUEL @"E[1]
1500  GOTO 1830
1510  REM  ****  COMMAND:  MODIFY ENERGY FLOW  ****
1520  PRINT "ENGINEERING:  CHARGE OR DISCHARGE";
1530  INPUT C$
1540  B$="CHARGE"
1550  C7=0
1560  IF C$[1,1]="C" THEN 1600
1570  IF C$[1,1]#"D" THEN 1790
1580  B$="DISCHARGE"
1590  C7=1
1600  PRINT B$" BANKS [1-3]";
1610  INPUT B$
1620  FOR G5=1 TO LEN(B$)
1630  GOSUB 1860
1640  IF C3>3 OR C3 <= 0 THEN 1730
1650  IF P[1,C3*4-2] >= 0 THEN 1690
1660  W$[3,3]=D$[C3+1,C3+1]
1670  X$[LEN(X$)+1,LEN(X$)+4]=W$
1680  GOTO 1730
1690  P[1,C3*4-2]=C7
1700  IF  NOT C7 THEN 1730
1710  E[1]=E[1]+P[1,C3*4-3]
1720  P[1,C3*4-3]=0
1730  NEXT G5
1740  IF  NOT LEN(X$) THEN 1820
1750  PRINT "COMPUTER:  BANK(S)"X$" UNABLE TO "C$
1760  GOTO 1820
1770  PRINT "BAD PARAMETERS"
1780  GOTO 1820
1790  PRINT "WHAT?"
1800  GOTO 1820
1810  PRINT "COMPUTER DISABLED"
1820  GOSUB 2220
1830  A1=0
1840  CHAIN "*YTREKF"
1850  REM  ****  NUMBER DEFINITION SUBROUTINE  ****
1860  FOR M5=1 TO 10
1870  IF B$[G5,G5]=D$[M5,M5] THEN 1910
1880  NEXT M5
1890  C3=0
1900  RETURN 
1910  C3=M5-1
1920  RETURN 
1930  REM  ****  FILE ADRESS SUBROUTINE  ****
1940  IF S <= 0 THEN 2030
1950  FOR F=1 TO N1+1
1960  IF F=Y THEN 2010
1970  READ #1,F;S2
1980  IF S2=-1 THEN 2010
1990  READ #1;C6,C6,C6,C6,B$
2000  IF B$=S$[S*7-6,S*7] THEN 2040
2010  NEXT F
2020  RETURN 
2030  F=S
2040  RETURN 
2050  REM  ****  SHIP IDENTIFICATION SUBROUTINE  ****
2060  PRINT "ON [WHOM]";
2070  INPUT C$
2080  C5=0
2090  IF C$[1,1]#"*" THEN 2130
2100  IF LEN(C$) <= 1 THEN 2170
2110  C5=4
2120  C$=C$[2]
2130  IF LEN(C$)>7 THEN 2170
2140  FOR C3=2 TO N
2150  IF C$=S$[C3*7-6,C3*7-7+LEN(C$)] THEN 2190
2160  NEXT C3
2170  PRINT "SHIP NOT FOUND"
2180  GOTO 1820
2190  S=C3+C5
2200  RETURN 
2210  REM  ****  FILE UPDATE SUBROUTINE  ****
2220  READ #1,Y;S,O2,T2,T1,T0
2230  T8=T2*1440+T1*60+T0
2240  T9=TIM(2)*1440+TIM(1)*60+TIM(0)
2250  IF T9-T8 <= 3 THEN 2290
2260  PRINT "**DEFAULT**"
2270  PRINT #1,Y;-2,O2,T2,T1,T0,S$[1,7]
2280  CHAIN "*YTREKM"
2290  PRINT #1,Y;2,O,TIM(2),TIM(1),TIM(0),S$[1,7]
2300  IF  NOT H5 THEN 2330
2310  PRINT #1;0,FNV(FND(V[H5,1]-V9*180))
2320  Y[1,2]=FND(V[H5,1]-V9*180)
2330  IF U[1] THEN 2350
2340  PRINT #1;2
2350  RETURN 
2360  DATA "0-60,0-300","60-180","180-300"
2370  DATA "FORWARD","PORT","REAR","STARBOARD"
2380  END 
