home *** CD-ROM | disk | FTP | other *** search
/ Hacker Chronicles 2 / HACKER2.BIN / 117.LAB.BAS < prev    next >
BASIC Source File  |  1986-03-27  |  24KB  |  342 lines

  1. 1 '***********************************************************
  2. 2 '*            SATELLITE LOOK ANGLE PROGRAM                 *
  3. 3 '*    WRITTEN BY JIM WARD, BOBBY JOHNSON, & BOB LORD       *
  4. 4 '* IN THREE MODULES,LAB.BAS,SEM.BAS,LAC.BAS FOR 128K MACH. *
  5. 5 '* MODULES MUST BE SAVED IN ASCII FOR CHAIN MERGE TO WORK  *
  6. 6 '***********************************************************
  7. 7 'THIS PROGRAM WILL ACCEPT TWO CARD MEAN ELEMENT SETS AND COMPUTE LOOK ANGLES FOR A WGS-72 LOCATION. INPUTS ARE(FMU,AE,FI,WE,XJ(2),XJ(3),PI,STA(1-9),MES(1-12))
  8. 8 'FMU IS EARTH CENTRAL GRAVITY CONSTANT (KM3/SEC2). AE IS EARTH EQUATORIAL RADIUS (KM)
  9. 9 'FI IS EARTH INVERSE FLATTENING. WE IS EARTH ROTATIONAL RATE (RAD/SEC)
  10. 10 'XJ(2) IS EARTH GRAVITY SECOND HARMONIC COEFFICIENT
  11. 11 'XJ(3) IS EARTH GRAVITY THIRD HARMONIC COEFFICIENT
  12. 12 'OUTPUT IS TIME (GMT),AZIMUTH(DEG),ELEVATION (DEG),RANGE (KM OR NM)
  13. 13 CLS:GOSUB 384:GOSUB 392
  14. 14 CLS:CLEAR 400:DEFDBL A-H, L-Z:DIM DAT(22),DIR(12),MES(12),B$(40):DIM SC(9),ST(3),X(6),EF(6),U(5),G(6),Y(6),SI(8),DJ(3),DL(3):DIM CO(6),DD(2),EV(5),DS(6),D(6),XJ(3),PI(3),DFF(3),BQ(40),DF(2),SX(2*SQR(LF))
  15. 15 GOSUB 384:LOCATE 2,25:PRINT"* * * * M A I N    M E N U * * * *":LOCATE 4,25:PRINT"1: DISPLAY ELEMENTS AVAILABLE":LOCATE 6,25:PRINT"2: ELEMENT SET MAINTENANCE MENU":LOCATE 8,25:PRINT"3: DISPLAY STATIONS AVAILABLE"
  16. 16 LOCATE 10,25:PRINT"4: STATION CONSTANT MAINTENANCE MENU":LOCATE 12,25:PRINT"5: COMPUTE LOOK ANGLES":LOCATE 14,25:PRINT"6: TERMINATE PROGRAM":LOCATE 20,25:PRINT"INPUT CHOICE BY NUMBER":LOCATE 20,48
  17. 17 ZM$=INKEY$: IF ZM$="1" THEN 72
  18. 18 IF ZM$="2" THEN 23
  19. 19 IF ZM$="3" THEN 247
  20. 20 IF ZM$="4" THEN 206
  21. 21 IF ZM$="5" THEN 349
  22. 22 IF ZM$="6" THEN 380 ELSE 17
  23. 23 GOSUB 384:LOCATE 2,25:PRINT"* * * * E L S E T  M E N U * * * *":LOCATE 4,28:PRINT"1: ADD ELSET":LOCATE 6,28:PRINT"2: DISPLAY ELSET":LOCATE 8,28:PRINT"3: CHANGE ELSET":LOCATE 10,28:PRINT"4: PRINT DATA FILE"
  24. 24 LOCATE 12,28:PRINT"5: SORT DATA FILE (ROUTINE NOT AVAILABLE)":LOCATE 14,28:PRINT"6: SEARCH DATA FILE":LOCATE 16,28:PRINT"7: RETURN TO * MAIN MENU *":LOCATE 18,28:PRINT"8: TERMINATE PROGRAM"
  25. 25 LOCATE 20,28:PRINT"INPUT CHOICE BY NUMBER":LOCATE 20,51
  26. 26 ZZ$=INKEY$: IF ZZ$="1" THEN 83
  27. 27 IF ZZ$="2" THEN 99
  28. 28 IF ZZ$="3" THEN 122
  29. 29 IF ZZ$="4" THEN 172
  30. 30 IF ZZ$="5" THEN 23
  31. 31 IF ZZ$="6" THEN 192
  32. 32 IF ZZ$="7" THEN 15
  33. 33 IF ZZ$="8" THEN 380 ELSE 26
  34. 34 CLS:LOCATE 15,25:PRINT"LOADING SEM.BAS":BEEP
  35. 35 CHAIN MERGE "B:SEM.BAS",15,ALL,DELETE 392-1136
  36. 36 '**********************************************************
  37. 37 '*                  SORT ROUTINE                          *
  38. 38 '**********************************************************
  39. 39 'SORT ROUTINE GOES HERE.
  40. 69 '**********************************************************
  41. 70 '*           ELEMENT SETS AVAILABLE ROUTINE               *
  42. 71 '**********************************************************
  43. 72 CLS:LOCATE 2,25:PRINT"* * * ELEMENT SETS AVAILABLE * * *":PRINT:OPEN "R",#1,"B:ELSET.FIL",119:ZN$=""
  44. 73 FOR I=1 TO LOF(1)/119:FIELD #1,8 AS Z1$,15 AS NA$,56 AS Z2$,8 AS I$,32 AS Z3$:GET #1,I:PRINT CVD(I$);"-";CVD(Z1$);"/";NA$:Y1=CSRLIN
  45. 74 IF Y1=>18 THEN GOSUB 76:LOCATE 4,1
  46. 75 NEXT I:CLOSE:GOTO 78
  47. 76 LOCATE 20,25:INPUT"<ENTER> TO CONTINUE";ZN$
  48. 77 ZN$=INKEY$:IF ZN$="" THEN RETURN ELSE 77
  49. 78 LOCATE 20,20:INPUT"<ENTER> TO RETURN TO MAIN MENU";ZN$
  50. 79 ZN$=INKEY$:IF ZN$="" THEN 15 ELSE 79
  51. 80 '**********************************************************
  52. 81 '*               ADD ELSET ROUTINE                        *
  53. 82 '**********************************************************
  54. 83 OPEN "R",#1,"B:ELSET.FIL",119:IF LOF(1)/119<1 THEN I=1 ELSE I=LOF(1)/119+1
  55. 84 CLS:PRINT"FILE NUMBER ";I:INPUT"OBJECT NUMBER (NNNNNN)";MES(1)
  56. 85 INPUT"SATELLITE NAME (15 CHAR)";NA1$:IF LEN(NA1$)>15 THEN BEEP:GOTO 85
  57. 86 INPUT"DATE OF ELSET (YYDDD)";MES(2):INPUT"FRACTIONAL PART OF DAY (.NNNNNNNN)";MES(3):INPUT"1ST DERIVATIVE OF MEAN MOTION (.NNNNNNNN)";MES(4):INPUT"2D DERIVATIVE OF MEAN MOTION (.NNNNNNN)";MES(5)
  58. 87 INPUT"INCLINATION ANGLE (NNN.NNN)";MES(6):INPUT"LONGITUDE OF ASCENDING NODE(NNN.NNNNN)";MES(7):INPUT"ECCENTRICITY(.NNNNNNNN)";MES(8):INPUT"ARGUMENT OF PERIGEE(NNN.NNNN)";MES(9)
  59. 88 INPUT"MEAN ANOMALY(NNN.NNNN)";MES(10):INPUT"MEAN MOTION(N.NNNNNNNNN)";MES(11):INPUT"REV NUMBER(NNNNNNNN)";MES(12)
  60. 89 I=(LOF(1)/119)+1:FIELD #1,8 AS A$,15 AS NA$,8 AS B$,8 AS C$,8 AS D$,8 AS E$,8 AS F$,8 AS G$,8 AS H$,8 AS I$,8 AS J$,8 AS K$,8 AS L$,8 AS M$:GET #1,I
  61. 90 LSET A$=MKD$(MES(1)): LSET NA$=NA1$: LSET B$=MKD$(MES(2)): LSET C$=MKD$(MES(3)): LSET D$=MKD$(MES(4)): LSET E$=MKD$(MES(5)): LSET F$=MKD$(MES(6)): LSET G$=MKD$(MES(7)): LSET H$=MKD$(MES(8)): LSET I$=MKD$(I): LSET J$=MKD$(MES(9))
  62. 91 LSET K$=MKD$(MES(10)): LSET L$=MKD$(MES(11)): LSET M$=MKD$(MES(12))
  63. 92 PUT #1,I:PRINT: PRINT"ANOTHER ? <Y OR N>"
  64. 93 AN$=INKEY$: IF AN$="N" THEN 95
  65. 94 IF AN$="Y" THEN 84 ELSE 93
  66. 95 CLOSE: GOTO 23
  67. 96 '**********************************************************
  68. 97 '*              DISPLAY ELSET ROUTINE                     *
  69. 98 '**********************************************************
  70. 99 OPEN "R",#1,"B:ELSET.FIL",119
  71. 100 CLS:LOCATE 12,25:INPUT "FILE NUMBER <NNN>";Y$:CLS:IF VAL(Y$)<1 OR VAL(Y$)>LOF(1)/119 THEN BEEP:GOTO 100
  72. 101 I=VAL(Y$)
  73. 102 CLS:FIELD #1,8 AS A$,15 AS NA$,8 AS B$,8 AS C$,8 AS D$,8 AS E$,8 AS F$,8 AS G$,8 AS H$,8 AS I$,8 AS J$,8 AS K$,8 AS L$,8 AS M$:GET #1,I
  74. 103 IF CVD(I$)=VAL(Y$) THEN 105
  75. 104 PRINT"ITEM NOT FOUND":GOTO 109
  76. 105 PRINT"FILE NUMBER: ";CVD(I$):PRINT"OBJECT NUMBER/NAME: ";CVD(A$);"/";NA$:MES(1)=CVD(A$):PRINT"DATE OF ELSET: ";CVD(B$):MES(2)=CVD(B$):PRINT"FRACTIONAL PART OF DAY: ";CVD(C$):MES(3)=CVD(C$)
  77. 106 PRINT"1ST DERIVATIVE OF MEAN MOTION: ";CVD(D$):MES(4)=CVD(D$):PRINT"2ND DERIVATIVE OF MEAN MOTION: ";CVD(E$):MES(5)=CVD(E$):PRINT"INCLINATION ANGLE: ";CVD(F$):MES(6)=CVD(F$):PRINT"LONGITUDE OF ASCENDING NODE: ";CVD(G$):MES(7)=CVD(G$)
  78. 107 PRINT"ECCENTRICITLY: ";CVD(H$):MES(8)=CVD(H$):PRINT"ARGUMENT OF PERIGEE: ";CVD(J$):MES(9)=CVD(J$):PRINT"MEAN ANOMALY: ";CVD(K$):MES(10)=CVD(K$):PRINT"MEAN MOTION: ";CVD(L$):MES(11)=CVD(L$):PRINT"REV NUMBER: ";CVD(M$):MES(12)=CVD(M$)
  79. 108 Q$="":IF ZM$="5" THEN PRINT:PRINT"IF CORRECT ELSET PRESS <C>ONTINUE"
  80. 109 PRINT:PRINT "<F>ORWARD THRU DATA BASE---<B>ACKWARD THRU DATA BASE---<M>ODIFY CURRENT FILE    <S>EARCH DATA BASE---------<R>ETURN TO ELSET MENU------<J>UMP TO MAIN MENU
  81. 110 Q$=INKEY$
  82. 111 IF Q$="C" THEN ZM$="":CLOSE:GOTO 390
  83. 112 IF Q$="F" THEN GOSUB 370:GOTO 101
  84. 113 IF Q$="B" THEN GOSUB 375:GOTO 101
  85. 114 IF Q$="R" THEN 118
  86. 115 IF Q$="S" THEN CLOSE:GOTO 192
  87. 116 IF Q$="J" THEN CLOSE:GOTO 15
  88. 117 IF Q$="M" THEN 125 ELSE 110
  89. 118 CLOSE:GOTO 23
  90. 119 '*********************************************************
  91. 120 '*             CHANGE ELSET ROUTINE                      *
  92. 121 '*********************************************************
  93. 122 OPEN "R",#1,"B:ELSET.FIL",119
  94. 123 CLS:LOCATE 12,25:INPUT"FILE NUMBER ";Y$:IF VAL(Y$)<1 OR VAL(Y$)>LOF(1)/119 THEN BEEP:GOTO 123
  95. 124 I=VAL(Y$)
  96. 125 CLS:FIELD #1,8 AS A$,15 AS NA$,8 AS B$,8 AS C$,8 AS D$,8 AS E$,8 AS F$,8 AS G$,8 AS H$,8 AS I$,8 AS J$,8 AS K$,8 AS L$,8 AS M$:GET #1,I
  97. 126 CLS:LOCATE 7,12:PRINT"REPLY WITH <ENTER> IF YOU DO NOT WISH TO CHANGE AN ITEM.":LOCATE 9,20:PRINT"REPLY WITH <D> IF ITEM IS TO BE DELETED.":PRINT:LOCATE 11,26:PRINT"OTHERWISE ENTER THE NEW DATA.":FOR II=1 TO 3500:NEXT II:CLS
  98. 127 PRINT"FILE NUMBER: ";CVD(I$):A1=CVD(A$):PRINT"OBJECT NUMBER (NNNNNN): ";A1;:INPUT A1$
  99. 128 IF A1$="D" THEN GOSUB 388:GOTO 167
  100. 129 IF A1$="" THEN A1=CVD(A$):GOTO 131
  101. 130 A1=VAL(A1$)
  102. 131 NA1$=NA$:PRINT"SATELLITE NAME (15 CHAR): ";NA1$;:INPUT NA1$
  103. 132 IF NA1$="" THEN NA1$=NA$:GOTO 134
  104. 133 IF LEN(NA1$)>15 THEN BEEP:GOTO 131
  105. 134 B1=CVD(B$):PRINT"DATE OF ELSET (YYDDDD): ";B1;:INPUT B1$
  106. 135 IF B1$="" THEN B1=CVD(B$):GOTO 137
  107. 136 B1=VAL(B1$)
  108. 137 C1=CVD(C$):PRINT"FRACTIONAL PART OF DAY (.NNNNNNNN): ";C1;:INPUT C1$
  109. 138 IF C1$="" THEN C1=CVD(C$):GOTO 140
  110. 139 C1=VAL(C1$)
  111. 140 D1=CVD(D$):PRINT"1ST DERIVATIVE OF MEAN MOTION (.NNNNNNNN): ";D1;:INPUT D1$
  112. 141 IF D1$="" THEN D1=CVD(D$):GOTO 143
  113. 142 D1=VAL(D1$)
  114. 143 E1=CVD(E$):PRINT"2ND DERIVATIVE OF MEAN MOTION (.NNNNNNNN): ";E1;:INPUT E1$
  115. 144 IF E1$="" THEN E1=CVD(E$):GOTO 146
  116. 145 E1=VAL(E1$)
  117. 146 F1=CVD(F$):PRINT"INCLINATION ANGLE (NNN.NNN): ";F1;:INPUT F1$
  118. 147 IF F1$="" THEN F1=CVD(F$):GOTO 149
  119. 148 F1=VAL(F1$)
  120. 149 G1=CVD(G$):PRINT"LONGITUDE OF ASCENDING NODE (NNN.NNNNN): ";G1;:INPUT G1$
  121. 150 IF G1$="" THEN G1=CVD(G$):GOTO 152
  122. 151 G1=VAL(G1$)
  123. 152 H1=CVD(H$):PRINT"ECCENTRICITY (.NNNNNNNN): ";H1;:INPUT H1$
  124. 153 IF H1$="" THEN H1=CVD(H$):GOTO 155
  125. 154 H1=VAL(H1$)
  126. 155 J1=CVD(J$):PRINT"ARGUMENT OF PERIGEE (NNN.NNNN): ";J1;:INPUT J1$
  127. 156 IF J1$="" THEN J1=CVD(J$):GOTO 158
  128. 157 J1=VAL(J1$)
  129. 158 K1=CVD(K$):PRINT"MEAN ANOMALY (NNN.NNNN): ";K1;:INPUT K1$
  130. 159 IF K1$="" THEN K1=CVD(K$):GOTO 161
  131. 160 K1=VAL(K1$)
  132. 161 L1=CVD(L$):PRINT"MEAN MOTION (N.NNNNNNNN): ";L1;:INPUT L1$
  133. 162 IF L1$="" THEN L1=CVD(L$):GOTO 164
  134. 163 L1=VAL(L1$)
  135. 164 M1=CVD(M$):PRINT"REV NUMBER (NNNNNNNN): ";M1;:INPUT M1$
  136. 165 IF M1$="" THEN M1=CVD(M$):GOTO 167
  137. 166 M1=VAL(M1$)
  138. 167 LSET A$=MKD$(A1): LSET NA$=NA1$: LSET B$=MKD$(B1): LSET C$=MKD$(C1): LSET D$=MKD$(D1): LSET E$=MKD$(E1): LSET F$=MKD$(F1): LSET G$=MKD$(G1): LSET H$=MKD$(H1): LSET I$=MKD$(I): LSET J$=MKD$(J1)
  139. 168 LSET K$=MKD$(K1):LSET L$=MKD$(L1): LSET M$=MKD$(M1):PUT #1,I:GOTO 102
  140. 169 '*********************************************************
  141. 170 '*                 PRINT ROUTINE                         *
  142. 171 '*********************************************************
  143. 172 CLS:PN=0:H=0 'H=1 CAUSES PAGE HEADER TO BE PRINTED
  144. 173 LC=13:PN=PN+1:LPRINT:LPRINT:LPRINT:LPRINT:LPRINT TAB(51)"PAGE "PN:PRINT TAB(51)"PAGE "PN:LPRINT TAB(51)"DATE ";DATE$:LPRINT TAB(51)"TIME ";TIME$:LPRINT:LPRINT:PRINT TAB(51)"DATE ";DATE$:PRINT TAB(51)"TIME ";TIME$:PRINT:PRINT
  145. 174 LPRINT TAB(30)"ELEMENT SET DATA FILE":PRINT TAB(30)"ELEMENT SET DATA FILE":LPRINT TAB(30)"******* *** **** ****":LPRINT:LPRINT:PRINT TAB(30)"******* *** **** ****"
  146. 175 IF H=1 THEN H=0:GOTO 188
  147. 176 OPEN "R",#1,"B:ELSET.FIL",119
  148. 177 FOR I=1 TO LOF(1)/119:FIELD #1,8 AS A$,15 AS NA$,8 AS B$,8 AS C$,8 AS D$,8 AS E$,8 AS F$,8 AS G$,8 AS H$,8 AS I$,8 AS J$,8 AS K$,8 AS L$,8 AS M$:GET #1,I
  149. 178 LPRINT TAB(12)"FILE NUMBER: ";CVD(I$):LOCATE 10,12:PRINT"FILE NUMBER: ";CVD(I$):LPRINT TAB(12)"OBJECT NUMBER/NAME: ";CVD(A$);"/";NA$:LOCATE 11,12:PRINT"OBJECT NUMBER/NAME: ";CVD(A$);"/";NA$
  150. 179 LPRINT TAB(12)"DATE OF ELSET: ";CVD(B$):LOCATE 12,12:PRINT"DATE OF ELSET: ";CVD(B$):LPRINT TAB(12)"FRACTIONAL PART OF DAY: ";CVD(C$):LOCATE 13,12:PRINT"FRACTIONAL PART OF DAY: ";CVD(C$)
  151. 180 LPRINT TAB(12)"1ST DERIVATIVE OF MEAN MOTION: ";CVD(D$):LOCATE 14,12:PRINT"1ST DERIVATIVE OF MEAN MOTION: ";CVD(D$)
  152. 181 LPRINT TAB(12)"2ND DERIVATIVE OF MEAN MOTION: ";CVD(E$):LOCATE 15,12:PRINT"2ND DERIVATIVE OF MEAN MOTION: ";CVD(E$):LPRINT TAB(12)"INCLINATION ANGLE: ";CVD(F$):LOCATE 16,12:PRINT"INCLINATION ANGLE: ";CVD(F$)
  153. 182 LPRINT TAB(12)"LONGITUDE OF ASCENDING NODE(RAN): ";CVD(G$):LOCATE 17,12:PRINT"LONGITUDE OF ASCENDING NODE(RAN): ";CVD(G$)
  154. 183 LPRINT TAB(12)"ECCENTRICITY: ";CVD(H$):LOCATE 18,12:PRINT"ECCENTRICITY: ";CVD(H$):LPRINT TAB(12)"ARGUMENT OF PERIGEE: ";CVD(J$):LOCATE 19,12:PRINT"ARGUMENT OF PERIGEE: ";CVD(J$)
  155. 184 LPRINT TAB(12)"MEAN ANOMALY: ";CVD(K$):LOCATE 20,12:PRINT"MEAN ANOMALY: ";CVD(K$)
  156. 185 LPRINT TAB(12)"MEAN MOTION: ";CVD(L$):LOCATE 21,12:PRINT"MEAN MOTION: ";CVD(L$):LPRINT TAB(12)"REV NUMBER: ";CVD(M$):LOCATE 22,12:PRINT"REV NUMBER: ";CVD(M$):LPRINT:LPRINT:LC=LC+15
  157. 186 IF LC=>56 THEN LPRINT CHR$(12):H=1:CLS:GOTO 173
  158. 187 CLS
  159. 188 NEXT I:LPRINT CHR$(12):CLOSE:GOTO 23
  160. 189 '*********************************************************
  161. 190 '*              ELSET SEARCH ROUTINE                     *
  162. 191 '*********************************************************
  163. 192 GOSUB 384:LOCATE 4,25:PRINT"* * * * ELSET SEARCH * * * *":LOCATE 6,25:PRINT"BY OBJECT NUMBER OR SATELLITE NAME":LOCATE 8,25:INPUT "OBJECT NUMBER (NNNNNN): ";A1$
  164. 193 LOCATE 10,25:INPUT"SATELLITE NAME (MAX 15 CHAR): ";SN$:IF A1$ ="" AND SN$="" THEN CLOSE:GOTO 23:IF LEN(SN$)>15 THEN BEEP:GOTO 193
  165. 194 OPEN "R",#1,"B:ELSET.FIL",119
  166. 195 FOR I=1 TO LOF(1)/119:FIELD #1,8 AS A$,15 AS NA$,8 AS B$,8 AS C$,8 AS D$,8 AS E$,8 AS F$,8 AS G$,8 AS H$,8 AS I$,8 AS J$,8 AS K$,8 AS L$,8 AS M$:GET #1,I
  167. 196 LOCATE 12,25:PRINT"SEARCHING FILE: ";I:GOSUB 201:NEXT I:CLOSE
  168. 197 LOCATE 14,25:PRINT"OBJECT ";A1$;" ";SN$" NOT FOUND!":BEEP:LOCATE 16,28:PRINT"<R>ETURN TO MENU":LOCATE 18,28:PRINT"<A>NOTHER":LOCATE 18,38
  169. 198 QQ$=INKEY$
  170. 199 IF QQ$="A" THEN CLOSE:GOTO 192
  171. 200 IF QQ$="R" THEN 23 ELSE 198
  172. 201 IF A1$="" THEN 204
  173. 202 IF CVD(A$)=VAL(A1$) THEN Y$=STR$(I):GOTO 101
  174. 203 IF SN$="" THEN RETURN
  175. 204 IF INSTR(NA$,SN$)>0 THEN Y$=STR$(I):GOTO 101
  176. 205 RETURN
  177. 206 GOSUB 384:LOCATE 2,13:PRINT"* * * * S T A T I O N  C O N S T A N T  M E N U * * * *":LOCATE 4,28:PRINT"1: ADD STATION":LOCATE 6,28:PRINT"2: DISPLAY STATION":LOCATE 8,28:PRINT"3: CHANGE STATION"
  178. 207 LOCATE 10,28:PRINT"4: PRINT DATA FILE":LOCATE 12,28:PRINT"5: SORT DATA FILE (ROUTINE NOT AVAILABLE)":LOCATE 14,28:PRINT"6: SEARCH DATA FILE":LOCATE 16,28:PRINT"7: RETURN TO * MAIN MENU *"
  179. 208 LOCATE 18,28:PRINT"8: TERMINATE PROGRAM":LOCATE 20,28:PRINT"INPUT CHOICE BY NUMBER":LOCATE 20,51
  180. 209 ZZ$=INKEY$: IF ZZ$="1" THEN 258
  181. 210 IF ZZ$="2" THEN 271
  182. 211 IF ZZ$="3" THEN 293
  183. 212 IF ZZ$="4" THEN 331
  184. 213 IF ZZ$="5" THEN 206 'CHANGE WHEN ROUTINE DEBUGGED
  185. 214 IF ZZ$="6" THEN 349
  186. 215 IF ZZ$="7" THEN 15
  187. 216 IF ZZ$="8" THEN 380 ELSE 209
  188. 217 '********************************************************
  189. 218 '*                 SORT ROUTINE                         *
  190. 219 '********************************************************
  191. 220 'SORT ROUTINE GOES HERE.
  192. 244 '********************************************************
  193. 245 '*           STATIONS AVAILABLE ROUTINE                 *
  194. 246 '********************************************************
  195. 247 CLS:LOCATE 2,25:PRINT"* * * STATIONS AVAILABLE * * *":PRINT:OPEN "R",#1,"B:STATION.FIL",88
  196. 248 FOR I=1 TO LOF(1)/88:FIELD #1,8 AS Z1$,56 AS Z2$,8 AS I$,16 AS Z3$:GET #1,I:PRINT CVD(I$);"-";Z1$,:Y1=CSRLIN
  197. 249 IF Y1=>18 THEN GOSUB 251:LOCATE 4,1
  198. 250 NEXT I:CLOSE:GOTO 253
  199. 251 LOCATE 20,25:INPUT"<ENTER> TO CONTINUE";ZN$
  200. 252 ZN$=INKEY$:IF ZN$="" THEN RETURN ELSE 252
  201. 253 LOCATE 20,20:INPUT"<ENTER> TO RETURN TO MAIN MENU";ZN$
  202. 254 ZN$=INKEY$:IF ZN$="" THEN 15 ELSE 254
  203. 255 '********************************************************
  204. 256 '*              ADD STATION ROUTINE                     *
  205. 257 '********************************************************
  206. 258 OPEN "R",#1,"B:STATION.FIL",88
  207. 259 IF LOF(1)/88<1 THEN I=1 ELSE I=LOF(1)/88+1
  208. 260 CLS:PRINT"FILE NUMBER ";I:INPUT"STATION (XXXXXXXX)";A1$:INPUT"LATITUDE (DD,MM,SS.SSSSS)";SC(1),SC(2),SC(3):INPUT"LONGITUDE (DD,MM,SS.SSSSS)";SC(4),SC(5),SC(6)
  209. 261 INPUT"HEIGHT ABOVE SPHERIOD (METERS)";SC(7):INPUT"DEFLECTION OF VERTICAL IN MERIDAN (DEG)";SC(8):INPUT"DEFLECTION OF VERTICAL IN PRIME (DEG)";SC(9)
  210. 262 I=(LOF(1)/88)+1:FIELD #1,8 AS A$,8 AS B$,8 AS C$,8 AS D$,8 AS E$,8 AS F$,8 AS G$,8 AS H$,8 AS I$,8 AS J$,8 AS K$:GET #1,I
  211. 263 LSET A$=A1$: LSET B$=MKD$(SC(1)): LSET C$=MKD$(SC(2)): LSET D$=MKD$(SC(3)): LSET E$=MKD$(SC(4)): LSET F$=MKD$(SC(5)): LSET G$=MKD$(SC(6)): LSET H$=MKD$(SC(7)): LSET I$=MKD$(I): LSET J$=MKD$(SC(8)): LSET K$=MKD$(SC(9))
  212. 264 PUT #1,I:PRINT: PRINT"ANOTHER ? <Y OR N>"
  213. 265 AN$=INKEY$: IF AN$="N" THEN 267
  214. 266 IF AN$="Y" THEN 259 ELSE 265
  215. 267 CLOSE: GOTO 15
  216. 268 '********************************************************
  217. 269 '*            DISPLAY STATION ROUTINE                   *
  218. 270 '********************************************************
  219. 271 OPEN "R",#1,"B:STATION.FIL",88
  220. 272 CLS:LOCATE 12,25:INPUT "FILE NUMBER <NNN>";Y$:CLS
  221. 273 IF VAL(Y$)<1 OR VAL(Y$)>LOF(1)/88 THEN BEEP:GOTO 272
  222. 274 I=VAL(Y$)
  223. 275 CLS:FIELD #1,8 AS A$,8 AS B$,8 AS C$,8 AS D$,8 AS E$,8 AS F$,8 AS G$,8 AS H$,8 AS I$,8 AS J$,8 AS K$:GET #1,I
  224. 276 IF CVD(I$)=VAL(Y$) THEN 278
  225. 277 PRINT"ITEM NOT FOUND":GOTO 281
  226. 278 PRINT"FILE NUMBER: ";CVD(I$):PRINT"STATION: ";A$:B$(AQ!)=A$:PRINT"LATITUDE: ";CVD(B$);CVD(C$);CVD(D$):SC(1)=CVD(B$):SC(2)=CVD(C$):SC(3)=CVD(D$):PRINT"LONGITUDE: ";CVD(E$);CVD(F$);CVD(G$):SC(4)=CVD(E$):SC(5)=CVD(F$):SC(6)=CVD(G$)
  227. 279 PRINT"HEIGHT ABOVE SPHERIOD: ";CVD(H$);" METERS":SC(7)=CVD(H$):PRINT"DEFLECTION OF VERTICAL IN MERIDAN: ";CVD(J$);" DEG.":SC(8)=CVD(J$):PRINT"DEFLECTION OF VERTICAL IN PRIME: ";CVD(K$);" DEG.":SC(9)=CVD(K$)
  228. 280 Q$="":IF ZM$="5" THEN PRINT:PRINT"IF CORRECT STATION PRESS <C>ONTINUE"
  229. 281 PRINT:PRINT "<F>ORWARD THRU DATA BASE---<B>ACKWARD THRU DATA BASE---<M>ODIFY CURRENT FILE    <S>EARCH DATA BASE---------<R>ETURN TO STATION MENU----<J>UMP TO MAIN MENU
  230. 282 Q$=INKEY$:IF Q$="C" THEN CLOSE:GOTO 192
  231. 283 IF Q$="F" THEN GOSUB 360:GOTO 274
  232. 284 IF Q$="B" THEN GOSUB 365:GOTO 274
  233. 285 IF Q$="R" THEN 289
  234. 286 IF Q$="S" THEN CLOSE:GOTO 349
  235. 287 IF Q$="J" THEN CLOSE:GOTO 15
  236. 288 IF Q$="M" THEN 297 ELSE 282
  237. 289 CLOSE:GOTO 206
  238. 290 '********************************************************
  239. 291 '*            CHANGE STATION ROUTINE                    *
  240. 292 '********************************************************
  241. 293 OPEN "R",#1,"B:STATION.FIL",88
  242. 294 CLS:LOCATE 12,25:INPUT"FILE NUMBER ";Y$
  243. 295 IF VAL(Y$)<1 OR VAL(Y$)>LOF(1)/88 THEN BEEP:GOTO 294
  244. 296 I=VAL(Y$)
  245. 297 CLS:FIELD #1,8 AS A$,8 AS B$,8 AS C$,8 AS D$,8 AS E$,8 AS F$,8 AS G$,8 AS H$,8 AS I$,8 AS J$,8 AS K$:GET #1,I
  246. 298 CLS:LOCATE 7,12:PRINT"REPLY WITH <ENTER> IF YOU DO NOT WISH TO CHANGE AN ITEM.":LOCATE 9,20:PRINT"REPLY WITH <D> IF ITEM IS TO BE DELETED.":PRINT:LOCATE 11,26:PRINT"OTHERWISE ENTER THE NEW DATA.":FOR II=1 TO 3500:NEXT II:CLS
  247. 299 PRINT"FILE NUMBER: ";CVD(I$):A1$=A$:PRINT"STATION (XXXXXXXX): ";A1$;:INPUT A1$
  248. 300 IF A1$="D" THEN GOSUB 388:GOTO 326
  249. 301 IF A1$="" THEN A1$=A$:GOTO 303
  250. 302 A1=VAL(A1$)
  251. 303 B1=CVD(B$):C1=CVD(C$):D1=CVD(D$):PRINT"LATITUDE (DD,MM,SS.SSSSS): ";B1;C1;D1:INPUT "DEG ";B1$:INPUT "MIN ";C1$:INPUT "SEC ";D1$
  252. 304 IF B1$="" THEN B1=CVD(B$):GOTO 306
  253. 305 B1=VAL(B1$)
  254. 306 IF C1$="" THEN C1=CVD(C$):GOTO 308
  255. 307 C1=VAL(C1$)
  256. 308 IF D1$="" THEN D1=CVD(D$):GOTO 310
  257. 309 D1=VAL(D1$)
  258. 310 E1=CVD(E$):F1=CVD(F$):G1=CVD(G$):PRINT"LONGITUDE (DD,MM,SS.SSSSS): ";E1;F1;G1:INPUT "DEG ";E1$:INPUT "MIN ";F1$:INPUT "SEC ";G1$
  259. 311 IF E1$="" THEN E1=CVD(E$):GOTO 313
  260. 312 E1=VAL(E1$)
  261. 313 IF F1$="" THEN F1=CVD(F$):GOTO 315
  262. 314 F1=VAL(F1$)
  263. 315 IF G1$="" THEN G1=CVD(G$):GOTO 317
  264. 316 G1=VAL(G1$)
  265. 317 H1=CVD(H$):PRINT"HEIGHT ABOVE SPHERIOD (METERS): ";H1;:INPUT H1$
  266. 318 IF H1$="" THEN H1=CVD(H$):GOTO 320
  267. 319 H1=VAL(H1$)
  268. 320 J1=CVD(J$):PRINT"DEFLECTION OF VERTICAL IN MERIDAN (DEG): ";J1;:INPUT J1$
  269. 321 IF J1$="" THEN J1=CVD(J$):GOTO 323
  270. 322 J1=VAL(J1$)
  271. 323 K1=CVD(K$):PRINT"DEFLECTION OF VERTICAL IN PRIME (DEG): ";K1;:INPUT K1$
  272. 324 IF K1$="" THEN K1=CVD(K$):GOTO 326
  273. 325 K1=VAL(K1$)
  274. 326 LSET A$=A1$:LSET B$=MKD$(B1):LSET C$=MKD$(C1):LSET D$=MKD$(D1):LSET E$=MKD$(E1):LSET F$=MKD$(F1):LSET G$=MKD$(G1):LSET H$=MKD$(H1):LSET I$=MKD$(I):LSET J$=MKD$(J1):LSET K$=MKD$(K1)
  275. 327 PUT #1,I:GOTO 275
  276. 328 '********************************************************
  277. 329 '*                PRINT ROUTINE                         *
  278. 330 '********************************************************
  279. 331 CLS:PN=0:H=0 'H=1 CAUSES PAGE HEADER TO BE PRINTED
  280. 332 LC=13:PN=PN+1:LPRINT:LPRINT:LPRINT:LPRINT:LPRINT TAB(51)"PAGE "PN:PRINT TAB(51)"PAGE "PN:LPRINT TAB(51)"DATE ";DATE$:LPRINT TAB(51)"TIME ";TIME$:LPRINT:LPRINT:PRINT TAB(51)"DATE ";DATE$:PRINT TAB(51)"TIME ";TIME$:PRINT:PRINT
  281. 333 LPRINT TAB(30)"STATION CONSTANT DATA FILE":PRINT TAB(30)"STATION CONSTANT DATA FILE":LPRINT TAB(30)"******* ******** **** ****":LPRINT:LPRINT:PRINT TAB(30)"******* ******** **** ****"
  282. 334 IF H=1 THEN H=0:GOTO 345
  283. 335 OPEN "R",#1,"B:STATION.FIL",88
  284. 336 FOR I=1 TO LOF(1)/88:FIELD #1,8 AS A$,8 AS B$,8 AS C$,8 AS D$,8 AS E$,8 AS F$,8 AS G$,8 AS H$,8 AS I$,8 AS J$,8 AS K$:GET #1,I
  285. 337 LPRINT TAB(12)"FILE NUMBER: ";CVD(I$):LOCATE 10,12:PRINT"FILE NUMBER: ";CVD(I$):LPRINT TAB(12)"STATION: ";A$:LOCATE 11,12:PRINT"STATION: ";A$
  286. 338 LPRINT TAB(12)"LATITUDE :";CVD(B$);"DEG";CVD(C$);"MIN";CVD(D$);"SEC  ":LOCATE 12,12:PRINT"LATITUDE: ";CVD(B$);"DEG";CVD(C$);"MIN";CVD(D$);"SEC  "
  287. 339 LPRINT TAB(12)"LONGITUDE: ";CVD(E$);"DEG";CVD(F$);"MIN";CVD(G$);"SEC  ":LOCATE 13,12:PRINT"LONGITUDE: ";CVD(E$);"DEG";CVD(F$);"MIN";CVD(G$);"SEC  "
  288. 340 LPRINT TAB(12)"HEIGHT ABOVE SPHERIOD: ";CVD(H$);" METERS":LOCATE 14,12:PRINT"HEIGHT ABOVE SPHERIOD: ";CVD(H$);" METERS"
  289. 341 LPRINT TAB(12)"DEFLECTION OF VERTICAL IN MERIDAN: ";CVD(J$);" DEG":LOCATE 15,12:PRINT"DEFLECTION OF VERTICAL IN MERIDAN: ";CVD(J$);" DEG"
  290. 342 LPRINT TAB(12)"DEFLECTION OF VERTICAL IN PRIME: ";CVD(K$);" DEG":LOCATE 16,12:PRINT"DEFLECTION OF VERTICAL IN PRIME: ";CVD(K$);" DEG":LPRINT:LPRINT:LC=LC+9
  291. 343 IF LC=>56 THEN LPRINT CHR$(12):H=1:CLS:GOTO 332
  292. 344 CLS
  293. 345 NEXT I:LPRINT CHR$(12):CLOSE:GOTO 206
  294. 346 '********************************************************
  295. 347 '*            STATION SEARCH ROUTINE                    *
  296. 348 '********************************************************
  297. 349 GOSUB 384:LOCATE 4,25:PRINT"* * * * STATION SEARCH * * * *":LOCATE 6,25:INPUT "STATION: ";A1$:IF A1$="" THEN 206
  298. 350 OPEN "R",#1,"B:STATION.FIL",88
  299. 351 FOR I=1 TO LOF(1)/88:FIELD #1,8 AS A$,8 AS B$,8 AS C$,8 AS D$,8 AS E$,8 AS F$,8 AS G$,8 AS H$,8 AS I$,8 AS J$,8 AS K$:GET #1,I:LOCATE 8,25:PRINT"SEARCHING FILE: ";I:GOSUB 355:NEXT I:CLOSE
  300. 352 LOCATE 10,25:PRINT"STATION ";A1$;" NOT FOUND!":BEEP:LOCATE 16,28:PRINT"<R>ETURN TO MENU":LOCATE 18,28:PRINT"<A>NOTHER":LOCATE 18,38
  301. 353 QQ$=INKEY$:IF QQ$="A" THEN CLOSE:GOTO 349
  302. 354 IF QQ$="R" THEN 206 ELSE 353
  303. 355 IF INSTR(A$,A1$)>0 THEN Y$=STR$(I):GOTO 274
  304. 356 RETURN
  305. 357 '********************************************************
  306. 358 '*           FORWARD ROUTINE (STATION)                  *
  307. 359 '********************************************************
  308. 360 IF I=LOF(1)/88 THEN I=1:Y$=STR$(I):RETURN
  309. 361 I=I+1:Y$=STR$(I):RETURN
  310. 362 '********************************************************
  311. 363 '*           BACKWARD ROUTINE (STATION)                 *
  312. 364 '********************************************************
  313. 365 I=I-1:IF I=0 THEN I=LOF(1)/88
  314. 366 Y$=STR$(I):RETURN
  315. 367 '********************************************************
  316. 368 '*            FORWARD ROUTINE (ELSET)                   *
  317. 369 '********************************************************
  318. 370 IF I=LOF(1)/119 THEN I=1:Y$=STR$(I):RETURN
  319. 371 I=I+1:Y$=STR$(I):RETURN
  320. 372 '********************************************************
  321. 373 '*            BACKWARD ROUTINE (ELSET)                  *
  322. 374 '********************************************************
  323. 375 I=I-1:IF I=0 THEN I=LOF(1)/119
  324. 376 Y$=STR$(I):RETURN
  325. 377 '********************************************************
  326. 378 '*                TERMINATION                           *
  327. 379 '********************************************************
  328. 380 CLOSE:CLS:LOCATE 9,24:PRINT"ALL FILES CLOSED, PROGRAM TERMINATED.":LOCATE 11,20:PRINT"REMOVE DISKETTES BEFORE POWERING DOWN SYSTEM!!!!":LOCATE 1,1:SYSTEM
  329. 381 '********************************************************
  330. 382 '*             MENU BORDER ROUTINE                      *
  331. 383 '********************************************************
  332. 384 CLS:LOCATE 1,1:FOR I=1 TO 80:PRINT CHR$(223);:NEXT:FOR I=1 TO 23:LOCATE I,1:PRINT CHR$(219):LOCATE I,80:PRINT CHR$(219):NEXT:LOCATE 23,1:FOR I=1 TO 80:PRINT CHR$(223);:NEXT:RETURN
  333. 385 '********************************************************
  334. 386 '*              DELETE ROUTINE                          *
  335. 387 '********************************************************
  336. 388 A1$=" ":B1$=" ":C1$=" ":D1$=" ":E1$=" ":F1$=" ":G1$=" ":H1$=" ":J1$=" ":K1$=" ":L1$=" ":M1$=" ":NA1$=" ":A1=VAL(A1$):B1=VAL(B1$):C1=VAL(C1$):D1=VAL(D1$):E1=VAL(E1$):F1=VAL(F1$):G1=VAL(G1$):H1=VAL(H1$):J1=VAL(J1$):K1=VAL(K1$)
  337. 389 L1=VAL(L1$):M1=VAL(M1$):RETURN
  338. 390 CLS:LOCATE 15,25:PRINT"LOADING LAC.BAS":BEEP
  339. 391 CHAIN MERGE "B:LAC.BAS",395,ALL,DELETE 36-356
  340. 392 LOCATE 10,25:PRINT"SATELLITE LOOK ANGLE PROGRAM":LOCATE 12,37:PRINT"BY":LOCATE 14,21:PRINT"J. A. WARD, B. G. JOHNSON, R. B. LORD"
  341. 393 FOR PQ=1 TO 3000:NEXT PQ:RETURN
  342.