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  --  COMMANDS 17-19
110  REM
120  DEF FNT()=(3.14159*)/180
130  DEF FND()=+((<0)*360)
140  DIM D$[24],A$[24],B$[30],R[3,2]
150  GOTO A1-16 OF 820,170,490
160  REM  ****  COMMAND:  POSITION REPORT  ****
170  IF  NOT A[1,4] THEN 200
180  PRINT "POSITION REPORT INOPERABLE"
190  GOTO 890
200  PRINT TAB(9)'14"WARP COURSE BEARING  RANGE"
210  Z$="#   #"
220  Z[1,1]=S[1,1]
230  Z[2,3]=Z[3,3]=Z[4,3]=0
240  Z[1,3]=-1
250  Z[1,2]=1
260  Z[2,1]=Y[1,1]
270  Z[2,2]=Z[3,2]=2
280  IF  NOT H5 THEN 350
290  IF V9 THEN 320
300  D$=" PURSUING "
310  GOTO 330
320  D$=" RUNNING FROM "
330  Z$[6,6+LEN(D$)]=D$
340  Z$[6+LEN(D$),13+LEN(D$)]=S$[(H5+1)*7-6,(H5+1)*7]
350  PRINT S$[1,7]": ";
360  GOSUB 910
370  Z$="#   #   #   #"
380  FOR S=2 TO N
390  Z[1,1]=S[S,1]
400  Z[2,1]=FND(ABS(Y[S,1]-((Y[S,1]>315)*360)-315)-45)
410  Z[3,1]=V[S-1,1]
420  Z[4,1]=D[S-1]
430  Z[4,2]=6
440  PRINT S$[S*7-6,S*7]": ";
450  GOSUB 910
460  NEXT S
470  CHAIN "*YTREKB"
480  REM  ****  COMMAND:  VISUAL SCAN  ****
490  IF  NOT A[1,4] THEN 520
500  PRINT "VISUAL SCAN INOPERABLE"
510  GOTO 890
520  PRINT "NAVIGATION:  RANGE [5000-1000000]";
530  INPUT R
540  IF R<5000 OR R>1.E+06 THEN 520
550  R=R*2
560  R1=12
570  FOR S=1 TO N-1
580  R[S,1]=INT((R1/2+(R1/R)*(COS(FNT(V[S,1]))*D[S]))+.5)
590  R[S,2]=INT((R1/2-(R1/R)*(SIN(FNT(V[S,1]))*D[S]))+.5)
600  NEXT S
610  A$="------------------------"
620  PRINT A$
630  FOR X0=R1 TO 1 STEP -1
640  P=1
650  D$="                        "
660  FOR S=1 TO N-1
670  IF X0#R[S,1] OR R[S,2] <= 0 OR R[S,2]>R1 THEN 730
680  IF D$[R[S,2]*2,R[S,2]*2]=" " THEN 710
690  D$[R[S,2]*2,R[S,2]*2]="^"
700  GOTO 720
710  D$[R[S,2]*2,R[S,2]*2]=S$[(S+1)*7-6,(S+1)*7-6]
720  P=R[S,2]*2
730  NEXT S
740  IF X0#R1/2 THEN 770
750  D$[R1,R1]="+"
760  P=R1 MAX P
770  PRINT D$[1,P]
780  NEXT X0
790  PRINT A$
800  GOTO 890
810  REM  ****  COMMAND:  SURVIVORS REPORT  ****
820  IF  NOT A[1,4] THEN 850
830  PRINT "SURVIVORS REPORT INOPERABLE"
840  GOTO 890
850  PRINT "SURVIVORS REPORTED:"
860  FOR S=1 TO N
870  PRINT S$[S*7-6,S*7]" --"430-C[S]
880  NEXT S
890  CHAIN "*YTREKB"
900  END 
910  REM  ****  FORMAT SUBROTINE  ****
920  DIM Z$[72],Y$[10],Z[10,3]
930  Y$="0123456789"
940  Z9=0
950  FOR Z5=1 TO LEN(Z$)
960  IF Z$[Z5,Z5]="#" THEN 990
970  PRINT Z$[Z5,Z5];
980  GOTO 1150
990  Z9=Z9+1
1000  Z=ABS(Z[Z9,1])
1010  IF Z[Z9,2] >= 0 THEN 1030
1020  Z[Z9,2]=INT(LOG(Z+.1)/LOG(10))
1030  FOR Z1=Z[Z9,2] TO Z[Z9,3] STEP -1
1040  IF Z1#-1 THEN 1060
1050  PRINT ".";
1060  IF Z1 <= INT(LOG(Z+.1)/LOG(10)) THEN 1130
1070  IF Z1 <= 0 AND Z=0 THEN 1130
1080  IF Z1-1#INT(LOG(Z+.1)/LOG(10)) OR Z[Z9,1] >= 0 THEN 1110
1090  PRINT "-";
1100  GOTO 1140
1110  PRINT " ";
1120  GOTO 1140
1130  PRINT Y$[INT(Z/10^Z1)-INT(Z/10^(Z1+1))*10+1,INT(Z/10^Z1)-INT(Z/10^(Z1+1))*10+1];
1140  NEXT Z1
1150  NEXT Z5
1160  PRINT 
1170  RETURN 
1180  END 
