home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / basic / astrmenu.lbr / SUNNY.BZS / SUNNY.BAS
BASIC Source File  |  1987-04-26  |  6KB  |  270 lines

  1. 1 PRINT "FROM THE APRIL 1984 ASTRONOMY, PAGES 75-77, AS CORRECTED IN THE"
  2. 2 PRINT "JULY 1984 ASTRONOMY, PAGES 33-34."
  3. 9 PRINT
  4. 100 PRINT "--PURPOSE"
  5. 102 PRINT
  6. 104 PRINT "THIS PROGRAM CALCULATES THE BEGINNING OF DAWN (ASTRONOMICAL,"
  7. 106 PRINT "NAUTICAL, AND CIVIL), SUNRISE, SUNSET, AND THE END OF DUSK"
  8. 108 PRINT "(CIVIL, NAUTICAL, AND ASTRONOMICAL). IT IS ACCURATE TO"
  9. 110 PRINT "WITHIN A MINUTE OR SO DURING THE SECOND HALF OF THE TWENTIETH"
  10. 112 PRINT "CENTURY.  ITS PRECISION DEGRADES NEAR THE POLES WHEN THE SUN"
  11. 114 PRINT "REMAINS CLOSE TO THE HORIZON FOR LONG PERIODS OF TIME."
  12. 116 PRINT
  13. 118 PRINT "--INPUTS--"
  14. 120 PRINT
  15. 122 PRINT "LAT.  : LATITUDE EXPRESSED IN DEGREES, MINUTES, AND SECONDS"
  16. 124 PRINT "        WHERE NORTH IS POSITIVE AND SOUTH IS NEGATIVE. FOR"
  17. 126 PRINT "        EXAMPLE, 30.0029 REPRESENTS 30 DEGREES, 00 MINUTES,"
  18. 128 PRINT "        29 SECONDS NORTH LATITUDE."
  19. 130 PRINT
  20. 132 PRINT "LON.  : LONGITUDE EXPRESSED IN DEGREES, MINUTES, AND SECONDS"
  21. 134 PRINT "        WHERE WEST IS POSITIVE AND EAST IS NEGATIVE. FOR"
  22. 136 PRINT "        EXAMPLE, 90.1108 REPRESENTS 90 DEGREES, 11 MINUTES,"
  23. 138 PRINT "        08 SECONDS WEST LONGITUDE."
  24. 140 PRINT
  25. 142 PRINT "YEAR  : ENTER A NUMBER BETWEEN 1951 AND 2000 INCLUSIVE."
  26. 144 PRINT
  27. 146 PRINT "MONTH : ENTER A NUMBER BETWEEN 1 AND 12 INCLUSIVE."
  28. 148 PRINT
  29. 150 PRINT "DAY   : ENTER A NUMBER BETWEEN 1 AND 31 INCLUSIVE."
  30. 152 PRINT
  31. 154 PRINT "ZONE  : TIME ZONE, I.E., THE TIME IN HOURS AND MINUTES THAT"
  32. 156 PRINT "        IS ADDED TO WALL CLOCK TIME TO YIELD UNIVERSAL TIME."
  33. 158 PRINT "        IN THE FORTY-EIGHT CONTIGUOUS UNITED STATES, REFER"
  34. 160 PRINT "        TO THE TABLE BELOW."
  35. 162 PRINT
  36. 164 PRINT "                      STANDARD    DAYLIGHT"
  37. 166 PRINT
  38. 168 PRINT "        EASTERN         5.00        4.00"
  39. 170 PRINT "        CENTRAL         6.00        5.00"
  40. 172 PRINT "        MOUNTAIN        7.00        6.00"
  41. 174 PRINT "        PACIFIC         8.00        7.00"
  42. 176 PRINT
  43. 178 PRINT "--OUTPUTS--"
  44. 180 PRINT
  45. 182 PRINT "OUTPUTS ARE EXPRESSED IN HOURS AND MINUTES ON A TWENTY-FOUR"
  46. 184 PRINT "HOUR BASIS. FOR EXAMPLE, 6.25 REPRESENTS 6:25 A.M. AND 18.25"
  47. 186 PRINT "REPRESENTS 6:25 P.M."
  48. 188 PRINT
  49. 190 PRINT "THE OUTPUT 0.00 IS A SPECIAL CASE.  IT INDICATES THAT THE"
  50. 192 PRINT "PHENOMENON DOES NOT OCCUR ON THE SPECIFIC DATE.  FOR EXAMPLE,"
  51. 194 PRINT "THE SUN DOES NOT SET IN MIDSUMMER AT HIGH LATITUDES."
  52. 196 PRINT
  53. 198 REM
  54. 200 REM - CONSTANTS
  55. 202 REM
  56. 204   A=1.5708
  57. 206   B=3.14159
  58. 208   C=4.71239
  59. 210   D=6.28319
  60. 212 REM
  61. 214 REM - INPUTS
  62. 216 REM
  63. 218   INPUT "LAT.  ";Z
  64. 220   GOSUB 378
  65. 222   E=Z*.0174533
  66. 224 REM
  67. 226   INPUT "LON.  ";Z
  68. 228   GOSUB 378
  69. 230   F=Z*.0174533
  70. 232 REM
  71. 234   INPUT "YEAR  ";H
  72. 235   IF H=0 THEN RUN "ASTRMENU.BAS"
  73. 236   INPUT "MONTH ";I
  74. 238   INPUT "DAY   ";J
  75. 240 REM
  76. 242   INPUT "ZONE  ";Z
  77. 244   GOSUB 378
  78. 246   G=Z*.261799
  79. 248 REM
  80. 250 REM - DAY OF YEAR
  81. 252 REM
  82. 254   K=INT((I+9)/12)
  83. 256   X=H/4
  84. 258   Y=INT(X)
  85. 260   Z=X-Y
  86. 262   IF Z=0 THEN 266
  87. 264   K=K*2
  88. 266   H=INT(275*I/9)
  89. 268   H=H+J-K-30
  90. 270 REM
  91. 272 REM - RISING PHENOMENA
  92. 274 REM
  93. 276   PRINT " "
  94. 278 REM
  95. 280   I=0
  96. 282   J=A
  97. 284   GOSUB 404
  98. 286 REM
  99. 288   R=-.309017
  100. 290   GOSUB 510
  101. 292   PRINT "A DAWN ";V
  102. 294 REM
  103. 296   R=-.207912
  104. 298   GOSUB 510
  105. 300   PRINT "N DAWN ";V
  106. 302 REM
  107. 304   R=-.104528
  108. 306   GOSUB 510
  109. 308   PRINT "C DAWN ";V
  110. 310 REM
  111. 312   R=-.0145439
  112. 314   GOSUB 510
  113. 316   PRINT "SUNRIS ";V
  114. 318 REM
  115. 320 REM - SETTING PHENOMRNA
  116. 322 REM
  117. 324   I=1
  118. 326   J=C
  119. 328   GOSUB 404
  120. 330 REM
  121. 332   R=-.0145439
  122. 334   GOSUB 510
  123. 336   PRINT "SUNSET ";V
  124. 338 REM
  125. 340   R=-.104528
  126. 342   GOSUB 510
  127. 344   PRINT "C DUSK ";V
  128. 346 REM
  129. 348   R=-.207912
  130. 350   GOSUB 510
  131. 352   PRINT "N DUSK ";V
  132. 354 REM
  133. 356   R=-.309017
  134. 358   GOSUB 510
  135. 360   PRINT "A DUSK ";V
  136. 362 REM
  137. 364   PRINT " "
  138. 366   PRINT "------------"
  139. 368   PRINT " "
  140. 369   PRINT "TYPE 0 AT THE NEXT PROMPT TO END" : PRINT " "
  141. 370   GOTO 234
  142. 372 REM
  143. 374 REM - SEXAGESIMAL TO DECIMAL
  144. 376 REM
  145. 378   W=1
  146. 380   IF Z>=0 THEN 386
  147. 382   W=-1
  148. 384   Z=ABS(Z)
  149. 386   X=INT(Z)
  150. 388   Z=(Z-X)*100
  151. 390   Y=INT(Z)
  152. 392   Z=(Z-Y)*100
  153. 394   Z=(X+Y/60+Z/3600)*W
  154. 396   RETURN
  155. 398 REM
  156. 400 REM - APPROXIMATE TIME
  157. 402 REM
  158. 404   K=H+((J+F)/D)
  159. 406 REM
  160. 408 REM - SOLAR MEAN ANOMALY
  161. 410 REM
  162. 412   L=K*.017202
  163. 414   L=L-.0574039
  164. 416 REM
  165. 418 REM - SOLAR TRUE LONGITUDE
  166. 420 REM
  167. 422   Z=SIN(L)
  168. 424   M=L+.0334405*Z
  169. 426   Z=SIN(2*L)
  170. 428   M=M+3.49066E-04*Z
  171. 430   M=M+4.93289
  172. 432   REM
  173. 434   REM - QUADRANT DETERMINATION
  174. 436   REM
  175. 438     Z=M
  176. 440     GOSUB 608
  177. 442     M=Z
  178. 444     X=M/A
  179. 446     Y=INT(X)
  180. 448     Z=X-Y
  181. 450     IF Z<>0 THEN 454
  182. 452     M=M+4.84814E-06
  183. 454     N=2
  184. 456     IF M>C THEN 470
  185. 458     N=1
  186. 460     IF M>A THEN 470
  187. 462     N=0
  188. 464   REM
  189. 466   REM - SOLAR RIGHT ASCENSION
  190. 468   REM
  191. 470     P=.91746*TAN(M)
  192. 472     P=ATN(P)
  193. 474   REM
  194. 476   REM - QUADRANT ADJUSTMENT
  195. 478   REM
  196. 480     IF N=0 THEN 496
  197. 482     IF N=2 THEN 488
  198. 484     P=P+B
  199. 486     GOTO 496
  200. 488     P=P+D
  201. 490   REM
  202. 492   REM - SOLAR DECLINATION
  203. 494   REM
  204. 496     Q=.39782*SIN(M)
  205. 498     Q=Q/SQR(-Q*Q+1)
  206. 500     Q=ATN(Q)
  207. 502     RETURN
  208. 504  REM
  209. 506  REM - COORDINATE CONVERSION
  210. 508  REM
  211. 510    S=R-(SIN(Q)*SIN(E))
  212. 512    S=S/(COS(Q)*COS(E))
  213. 514  REM
  214. 516  REM - NULL PHENOMENON
  215. 518  REM
  216. 520    Z=ABS(S)
  217. 522    IF Z<=1 THEN 534
  218. 524    V=0
  219. 526    RETURN
  220. 528  REM
  221. 530  REM - ADJUSTMENT
  222. 532  REM
  223. 534    S=S/SQR(-S*S+1)
  224. 536    S=-ATN(S)+A
  225. 538    IF I=1 THEN 548
  226. 540    S=D-S
  227. 542  REM
  228. 544  REM - LOVAL APPARENT TIME
  229. 546  REM
  230. 548    Z=.0172028*K
  231. 550    T=S+P-Z-1.73364
  232. 552  REM
  233. 554  REM - UNIVERSAL TIME
  234. 556  REM
  235. 558    U=T+F
  236. 560  REM
  237. 562  REM - WALL CLOCK TIME
  238. 564  REM
  239. 566    V=U-G
  240. 568  REM
  241. 570  REM - DECIMAL TO SEXAGESIMAL
  242. 572  REM
  243. 574    Z=V
  244. 576    GOSUB 608
  245. 578    Z=Z*3.81972
  246. 580    V=INT(Z)
  247. 582    W=(Z-V)*60
  248. 584    X=INT(W)
  249. 586    Y=W-X
  250. 588    IF Y<.5 THEN 592
  251. 590    X=X+1
  252. 592    IF X<60 THEN 598
  253. 594    V=V+1
  254. 596    X=0
  255. 598    V=V+X/100
  256. 600    RETURN
  257. 602  REM
  258. 604  REM - NORMALIZATION
  259. 606  REM
  260. 608    IF Z>=0 THEN 614
  261. 610    Z=Z+D
  262. 612  GOTO 608
  263. 614  IF Z<D THEN 620
  264. 616  Z=Z-D
  265. 618  GOTO 614
  266. 620  RETURN
  267. 622  RUN "ASTRMENU.BAS"
  268.  THEN 614
  269. 610    Z=Z+D
  270. 6