home *** CD-ROM | disk | FTP | other *** search
/ Hacker Chronicles 2 / HACKER2.BIN / 999.QSTMUFPC.BAS < prev    next >
BASIC Source File  |  1987-07-03  |  8KB  |  266 lines

  1. 10 REM***************************************************
  2. 20 REM          MINI IBM-PC MUF DRIVER
  3. 30 REM NATIONAL OCEANIC AND ATMOSPHERIC ADMINISTRATION
  4. 40 REM             BOULDER, COLORADO
  5. 50 REM               AUGUST  1985
  6. 60 REM
  7. 70 REM TAKEN FROM: QST, DEC.82 MINIMUF 3.5 R.B.ROSE, NOSC
  8. 80 REM***************************************************
  9. 90 REM 
  10. 100 REM  UTILIZATION OF FUNCTION:
  11. 110 REM
  12. 120 REM     ARCCOS X = PI/2 - ARCTAN (X / SQR(1 - X*X))
  13. 130 REM
  14. 140 DEF FNC(Z) = 1.5708 - ATN(Z / SQR(1 -Z*Z))
  15. 150 REM INIT
  16. 160 REM OPEN FILE(2,1),"MUFOUT.DAT"
  17. 170 REM DIM M$(37)
  18. 180 DIM M5(24)
  19. 185 ANS2$="N"
  20. 190 A$ = " "
  21. 200 M = 31
  22. 210 M$="JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC"
  23. 220 P9=3.14159
  24. 230 R9=P9/180
  25. 240 P1=2*P9
  26. 250 R1=180/P9
  27. 260 P0=P9/2
  28. 270 CLS
  29. 280 PRINT
  30. 290 PRINT"** MAXIMUM USABLE FREQUENCY - PREDICTION PROGRAM **"
  31. 300 PRINT"___________________________________________________"
  32. 310 PRINT:PRINT
  33. 315 IF ANS2$="y" OR ANS2$="Y" THEN 345
  34. 320 INPUT "Transmitter lat, lon(west) = ";L1,W1
  35. 321 GOTO 380
  36. 330 IF L1<-90 THEN 360
  37. 340 IF L1>90 THEN 360
  38. 345 PRINT "Transmitter lat, lon(west) =  ";L1;",";W1
  39. 350 GOTO 380
  40. 360 PRINT "Invalid latitude. Must be in range (-90,+90)."
  41. 370 GOTO 320
  42. 380 IF W1<-360 THEN 410
  43. 390 IF W1>360  THEN 410
  44. 400 GOTO 430
  45. 410 PRINT "Invalid longitude.  Must be in range (-360,+360)."
  46. 420 GOTO 320
  47. 430 INPUT "Receiver    lat, lon(west) = ";L2,W2
  48. 440 IF L2<-90 THEN 470
  49. 450 IF L2>90  THEN 470
  50. 460 GOTO 490
  51. 470 PRINT "Invalid latitude.  Must be in range (-90,+90)."
  52. 480 GOTO 430
  53. 490 IF W2<-360 THEN 520
  54. 500 IF W2>360  THEN 520
  55. 510 GOTO 540
  56. 520 PRINT "Invalid longitude.  Must be in range (-360,+360)."
  57. 530 GOTO 430
  58. 540 INPUT "Date (dd,mm) = ";D6,M0
  59. 550 IF M0<1 THEN 580
  60. 560 IF M0>12 THEN 580
  61. 570 GOTO 600
  62. 580 PRINT "Invalid month.  Must be in range (1,12)."
  63. 590 GOTO 540
  64. 600 IF D6<1 THEN 630
  65. 610 IF D6>M THEN 630
  66. 620 GOTO 650
  67. 630 PRINT "Invalid day.  Must be in range (1,";M;")."
  68. 640 GOTO 540
  69. 650 INPUT"Entering sunspot number(1) or 10.7cm solar flux(2) ";SUN1
  70. 660 IF SUN1 = 1 THEN 700
  71. 670 INPUT"Solar flux = ";S8
  72. 680 S9 = -62 + 1.08*S8
  73. 690 GOTO 710
  74. 700 INPUT "Sunspot number = ";S9
  75. 710 IF S9>0 THEN 740
  76. 720 PRINT "Invalid sunspot number.  Must be non-negative."
  77. 730 GOTO 650
  78. 740 INPUT"Do you wish to save data to a file (Y or N) ";ANS$
  79. 750 IF ANS$ = "Y" THEN GOSUB 2550
  80. 760 IF ANS$ = "y" THEN GOSUB 2550
  81. 770 INPUT"Will you be using the printer (Y or N) ";PRI$
  82. 780 IF PRI$= "Y" THEN GOSUB 2570
  83. 790 IF PRI$= "y" THEN GOSUB 2570
  84. 800 REM **BEARING ROUTINE**
  85. 810 DR=3.14159265#/180:RD=1/DR
  86. 820 LATS=L1*DR
  87. 830 LONGS=W1*DR
  88. 840 LATD=L2*DR
  89. 850 LONGD=W2*DR
  90. 860 DIF=LONGD-LONGS
  91. 870 X=COS(LATD)*SIN(DIF)
  92. 880 Y=SIN(LATD)-SIN(LATS)
  93. 890 Z=COS(LATD)-COS(LATS)+COS(LATD)*(COS(DIF)-1)
  94. 900 N=Y*COS(LATS)-Z*SIN(LATS)
  95. 910 E=X
  96. 920 IF E>0 THEN 1010
  97. 930 IF N=0 THEN 970
  98. 940 IF N<0 THEN 990
  99. 950 BRG=ATN(E/N)*RD+360
  100. 960 GOTO 1080
  101. 970 BRG=270
  102. 980 GOTO 1080
  103. 990 BRG=ATN(E/N)*RD+180
  104. 1000 GOTO 1080
  105. 1010 IF N=0 THEN 1050
  106. 1020 IF N<0 THEN 1070
  107. 1030 BRG=ATN(E/N)*RD
  108. 1040 GOTO 1080
  109. 1050 BRG=90
  110. 1060 GOTO 1080
  111. 1070 BRG=180+ATN(E/N)*RD
  112. 1080 CH=SQR(X^2+Y^2+Z^2)
  113. 1090 CH1=CH/2
  114. 1100 CH3=SQR(CH1^2/(1-CH1^2))
  115. 1110 ARC=2*ATN(CH3)
  116. 1120 R=3960
  117. 1130 D=ARC*R
  118. 1140 CLS
  119. 1150 A$=MID$(M$,3*M0-2,3)
  120. 1160 PRINT"** MAXIMUM USABLE FREQUENCY - PREDICTION PROGRAM **"
  121. 1170 PRINT"___________________________________________________"
  122. 1180 PRINT
  123. 1190 PRINT "DATE: ";D6,A$
  124. 1200 PRINT"LOCATION:"
  125. 1210 PRINT "   TRANSMITTER : ";"LATITUDE: ";L1;", LONGITUDE: ";W1
  126. 1220 PRINT "   RECEIVER    : ";"LATITUDE: ";L2;", LONGITUDE: ";W2
  127. 1230 PRINT "SUNSPOT NUMBER = ";S9
  128. 1235 PRINT
  129. 1240 PRINT "BEARING  = ";:PRINT USING"#####.##";BRG;:PRINT" DEGREES"
  130. 1250 PRINT "DISTANCE = ";:PRINT USING"#####.##";D;:PRINT" MILES"
  131. 1260 PRINT:PRINT
  132. 1270 PRINT TAB(4);"HOUR";TAB(16);"MUF(MHZ)"
  133. 1280 PRINT "  ------------------------"
  134. 1290 L1 = L1*R9
  135. 1300 W1 = W1*R9
  136. 1310 L2 = L2*R9
  137. 1320 W2 = W2*R9
  138. 1330 FOR T5=0 TO 23
  139. 1340  GOSUB 1580
  140. 1350  T5$ = STR$(T5)
  141. 1360  M5(T5)  = INT(J9*100+1)/100
  142. 1370  J9$ = STR$(INT(J9))
  143. 1380 IF ANS$ = "Y" THEN GOSUB 2500
  144. 1390 IF ANS$ = "y" THEN GOSUB 2500
  145. 1400 PRINT TAB(5)USING"##";T5;
  146. 1410 PRINT TAB(17)USING"##.#";M5(T5)
  147. 1420 NEXT T5
  148. 1430 PRINT
  149. 1440 PRINT"Press 0 to preform next case,"
  150. 1450 PRINT"      1 to perform case over,"
  151. 1460 INPUT"      2 to stop execution ";A1
  152. 1470 L1 = L1/R9
  153. 1480 W1 = W1/R9
  154. 1490 L2 = L2/R9
  155. 1500 W2 = W2/R9
  156. 1510 IF A1 = 2 THEN 1560
  157. 1520 IF A1 = 1 THEN 740
  158. 1530 IF PRI$ = "Y" OR PRI$ = "y" THEN GOSUB 2570
  159. 1540 IF PRI$ = "Y" OR PRI$ = "y" THEN LPRINT CHR$(12)
  160. 1545 PRINT:INPUT"Do you wish to keep same transmitter lat/lon ";ANS2$
  161. 1550 GOTO 270
  162. 1560 BEEP : BEEP
  163. 1570 END
  164. 1580 REM - MINIMUF 3.5
  165. 1590 K7 = SIN(L1)*SIN(L2) + COS(L1)*COS(L2)*COS(W2-W1)
  166. 1600 IF K7>=-1 THEN 1630
  167. 1610 K7 = -1
  168. 1620 GOTO 1650
  169. 1630 IF K7<=1 THEN 1650
  170. 1640 K7 = 1
  171. 1650 G1 = FNC(K7)
  172. 1660 K6 = 1.59*G1
  173. 1670 IF K6 >=1 THEN 1690
  174. 1680 K6 = 1
  175. 1690 K5 = 1/K6
  176. 1700 J9 = 100
  177. 1710 FOR K1 = 1/(2*K6) TO 1-1/(2*K6) STEP .9999-1/K6
  178. 1720  IF K5 = 1 THEN 1740
  179. 1730  K5 = .5
  180. 1740  P = SIN(L2)
  181. 1750  Q = COS(L2)
  182. 1760  A = (SIN(L1) - P*COS(G1)) / (Q*SIN(G1))
  183. 1770  B = G1*K1
  184. 1780  C = P*COS(B) + Q*SIN(B)*A
  185. 1790  D = (COS(B) - C*P) / (Q*SQR(1-C^2))
  186. 1800  IF D=>-1 THEN 1830
  187. 1810  D = -1
  188. 1820  GOTO 1850
  189. 1830  IF D<=1 THEN 1850
  190. 1840  D = 1
  191. 1850  D = FNC(D)
  192. 1860  W0 = W2 + SGN(SIN(W1-W2))*D
  193. 1870  IF W0=>0 THEN 1890
  194. 1880  W0 = W0 + P1
  195. 1890  IF W0 < P1 THEN 1910
  196. 1900  W0 = W0 - P1
  197. 1910  IF C=>-1 THEN 1940
  198. 1920  C = -1
  199. 1930  GOTO 1960
  200. 1940  IF C<=1 THEN 1960
  201. 1950  C = 1
  202. 1960  L0 = P0 - FNC(C)
  203. 1970  Y1 = .0172*(10+(M0-1)*30.4+D6)
  204. 1980  Y2 = .409*COS(Y1)
  205. 1990  K8 = 3.82*W0+12+.13*(SIN(Y1)+1.2*SIN(2*Y1))
  206. 2000  K8 = K8-12*(1+SGN(K8-24))*SGN(ABS(K8-24))
  207. 2010  IF COS(L0+Y2)>-.26 THEN 2100
  208. 2020  K9 = 0
  209. 2030  G0 = 0
  210. 2040  M9 = 2.5*G1*K5
  211. 2050  IF M9<=P0 THEN 2070
  212. 2060  M9 = P0
  213. 2070  M9 = SIN(M9)
  214. 2080  M9 = 1+2.5*M9*SQR(M9)
  215. 2090  GOTO 2350
  216. 2100  K9 = (-.26+SIN(Y2)*SIN(L0))/(COS(Y2)*COS(L0)+.001)
  217. 2110  K9 = 12-ATN(K9/SQR(ABS(1-K9*K9)))*7.63944
  218. 2120  T = K8-K9/2+12*(1-SGN(K8-K9/2))*SGN(ABS(K8-K9/2))
  219. 2130  T4 = K8+K9/2-12*(1+SGN(K8+K9/2-24))*SGN(ABS(K8+K9/2-24))
  220. 2140  C0 = ABS(COS(L0+Y2))
  221. 2150  T9 = 9.7*C0^9.600001
  222. 2160  IF T9>.1 THEN 2180
  223. 2170  T9 = .1
  224. 2180  M9 = 2.5*G1*K5
  225. 2190  IF M9 <= P0 THEN 2210
  226. 2200  M9 = P0
  227. 2210  M9 = SIN(M9)
  228. 2220  M9 = 1+2.5*M9*SQR(M9)
  229. 2230  IF T4<T THEN 2260
  230. 2240  IF (T5-T)*(T4-T5)>0 THEN 2270
  231. 2250  GOTO 2400
  232. 2260  IF (T5-T4)*(T-T5)>0 THEN 2400
  233. 2270  T6 = T5+12*(1+SGN(T-T5))*SGN(ABS(T-T5))
  234. 2280  G9 = P9*(T6-T)/K9
  235. 2290  G8 = P9*T9/K9
  236. 2300  U = (T-T6)/T9
  237. 2310  G0 = C0*(SIN(G9)+G8*(EXP(U)-COS(G9)))/(1+G8*G8)
  238. 2320  G7 = C0*(G8*(EXP(-K9/T9)+1))*EXP((K9-24)/2)/(1+G8*G8)
  239. 2330  IF G0=>G7 THEN 2350
  240. 2340  G0 = G7
  241. 2350  G2 = (1+S9/250)*M9*SQR(6+58*SQR(G0))
  242. 2360  G2 = G2*(1-.1*EXP((K9-24)/3))
  243. 2370  G2 = G2*(1+(1-SGN(L1)*SGN(L2))*.1)
  244. 2380  G2 = G2*(1-.1*(1+SGN(ABS(SIN(L0))-COS(L0))))
  245. 2390  GOTO 2460
  246. 2400  T6 = T5+12*(1+SGN(T4-T5))*SGN(ABS(T4-T5))
  247. 2410  G8 = P9*T9/K9
  248. 2420  U = (T4-T6)/2
  249. 2430  U1 = -K9/T9
  250. 2440  G0 = C0*(G8*(EXP(U1)+1))*EXP(U)/(1+G8*G8)
  251. 2450  GOTO 2350
  252. 2460  IF G2>J9 THEN 2480
  253. 2470  J9 = G2
  254. 2480 NEXT K1
  255. 2490 RETURN
  256. 2500 OPEN FILEN$ FOR APPEND AS #1
  257. 2510 WRITE #1,T5,M5(T5)
  258. 2520 CLOSE #1
  259. 2530 RETURN
  260. 2540 RETURN
  261. 2550 INPUT"Name of data file (.DAT)";FILEN$
  262. 2560 RETURN
  263. 2570 PRINT"Pausing 10 seconds for you to toggle printer <CTRL+PRTSC>... "
  264. 2580 FOR T = 1 TO 5000:NEXT T
  265. 2590 RETURN
  266.