home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / commodore-users-of-norman / CUON_36_(10-1984).d64 / sunny.bas (.txt) < prev    next >
Commodore BASIC  |  2019-04-13  |  6KB  |  310 lines

  1. 100 REM PURPOSE --
  2. 110 REM
  3. 120 REM  THIS PROGRAM GIVES THE TIME OF SUNRISE, SUNSET, AND TWILIGHT
  4. 130 REM  (ASTRONOMICAL,NAUTICAL, AND CIVIL) TO WITHIN A MINUTE OR TWO
  5. 140 REM  DURING THE SECOND HALF OF THE TWENTIETH CENTURY.
  6. 150 REM
  7. 160 REM INPUTS --
  8. 170 REM
  9. 180 REM  LATITUDE IN DEGREES, MINUTES, AND SECONDS.  NORTH IS POSITIVE.
  10. 190 REM  EXAMPLE: 30.0028 REPRESENTS 30 DEGREES, 00 MINUTES, 28 SECONDS
  11. 200 REM  NORTH LATITUDE.
  12. 210 REM  LONGITUDE IN DEGREES, MINUTES, AND SECONDS.  WEST IS POSITIVE.
  13. 220 REM  EXAMPLE: 90.1109 REPRESENTS 90 DEGREES, 11 MINUTES, 09 SECONDS
  14. 230 REM  WEST LONGITUDE.
  15. 240 REM
  16. 250 REM  TIME ZONE IN HOURS AND MINUTES THAT ARE ADDED TO WALL CLOCK TIME
  17. 260 REM  TO YIELD UNIVERSAL TIME.
  18. 270 REM  IN THE 48 CONTIGUOUS UNITED STATES, SEE TABLE BELOW.
  19. 280 REM
  20. 290 REM              STANDARD  DAYLIGHT
  21. 300 REM
  22. 310 REM    EASTERN     5.00      4.00
  23. 320 REM    CENTRAL     6.00      5.00
  24. 330 REM    MOUNTAIN    7.00      6.00
  25. 340 REM    PACIFIC     8.00      7.00
  26. 350 REM
  27. 360 REM  YEAR (1951 THRU 2000)
  28. 370 REM
  29. 380 REM  MONTH (1 THRU 12)
  30. 390 REM
  31. 400 REM  DAY (1 THRU 31)
  32. 410 REM
  33. 420 REM OUTPUTS --
  34. 430 REM
  35. 440 REM  OUTPUTS ARE GIVEN IN HOURS AND MINUTES ON A 24 HOUR BASIS.
  36. 450 REM  EXAMPLE: 6.25 REPRESENTS 6:25 A.M., AND 18.25 REPRESENTS 6:25 P.M.
  37. 460 REM
  38. 470 REM  A ZERO OUTPUT INDICATES THAT THE PHENOMENON DOES NOT OCCUR
  39. 480 REM  ON THE SPECIFIED DATE, E.G., THE SUN DOES NOT SET IN MID-SUMMER
  40. 490 REM  AT HIGH LATITUDES.
  41. 500 REM
  42. 510 REM SAMPLE --
  43. 520 REM
  44. 530 REM  LAT
  45. 540 REM  ? 30
  46. 550 REM  LON
  47. 560 REM  ? 90
  48. 570 REM  ZONE
  49. 580 REM  ? 5
  50. 590 REM  YEAR
  51. 600 REM  ? 1983
  52. 610 REM  MONTH
  53. 620 REM  ? 5
  54. 630 REM  DAY
  55. 640 REM  ? 19
  56. 650 REM
  57. 660 REM  A DAWN  4.33
  58. 670 REM  N DAWN  5.06
  59. 680 REM  C DAWN  5.38
  60. 690 REM  SUNRIS  6.04
  61. 700 REM  SUSSET  19.49
  62. 710 REM  C DUSK  20.15
  63. 720 REM  N DUSK  20.47
  64. 730 REM  A DUSK  21.21
  65. 740 REM
  66. 750 REM -------------------------------
  67. 760 REM
  68. 770 REM - CONSTANTS
  69. 780 REM
  70. 790 REM     LET
  71. 800 A=1.5708
  72. 810 B=3.14159265
  73. 820 C=4.71239
  74. 830 D=6.28319
  75. 840 DIM DM(12)
  76. 850 REM
  77. 860 REM - INPUTS
  78. 870 REM
  79. 880 PRINTCHR$(147):PRINT"  SOME EXAMPLES ARE:":PRINT
  80. 890 PRINT"      (DEGREES.MINUTESSECONDS[146])":PRINT
  81. 900 GOSUB 3060
  82. 910 PRINT:INPUT"LATITUDE";Z
  83. 920 IFZ>90 ORZ<-90 THEN PRINT"NOT POSSIBLE--TRY AGAIN":FORII=1TO1000:NEXTII:GOTO 880
  84. 930 GOSUB 1830
  85. 940 E=Z*1.74533E-2
  86. 950 REM
  87. 960 INPUT"LONGITUDE";Z
  88. 970 IF Z>360 OR Z<-360 THEN PRINT"PLEASE TRY AGAIN":GOTO 960
  89. 980 GOSUB 1830
  90. 990 F=Z*1.74533E-2
  91. 1000 REM
  92. 1010 PRINT:PRINT:PRINT"      (CENTRAL STANDARD=6 -- DAYLIGHT=5)"
  93. 1020 INPUT"ZONE";Z
  94. 1030 GOSUB 1830
  95. 1040 G=Z*2.61799E-1
  96. 1050 REM
  97. 1060 INPUT"YEAR";H
  98. 1070 IF H<100 THEN H=H+1900:PRINT H " ASSUMED"
  99. 1080 IF H<2000 AND H>1951 THEN 1100
  100. 1090 PRINT"PROG. ONLY WORKS FOR 1951-2000":PRINT"TRY AGAIN":GOTO 1060
  101. 1100 REM
  102. 1110 INPUT"MONTH";I
  103. 1120 IF I<1 OR I>12 THEN PRINT"INVALID RESPONSE--TRY AGAIN":GOTO 1110
  104. 1130 REM
  105. 1140 INPUT"DAY";J
  106. 1150 FOR IJ=1 TO 12:READ DM(IJ):NEXT IJ:RESTORE:IF I=2 THEN GOSUB 3130
  107. 1160 IF J<1 OR J>DM(I) THEN PRINT"INVALID RESPONSE--TRY AGAIN":GOTO1140
  108. 1170 REM
  109. 1180 REM - DAY OF YEAR
  110. 1190 REM
  111. 1200 K=INT((I+9)/12)
  112. 1210 X=H/4
  113. 1220 Y=INT(X)
  114. 1230 Z=X-Y
  115. 1240 IF Z=0 THEN 1260
  116. 1250 K=K*2
  117. 1260 H=INT(275*I/9)
  118. 1270 H=H+J-K-30
  119. 1280 REM
  120. 1290 REM - RISING PHENOMENA
  121. 1300 REM
  122. 1310 PRINT" "
  123. 1320 REM
  124. 1330 I=0
  125. 1340 J=A
  126. 1350 GOSUB 1960
  127. 1360 REM
  128. 1370 R=-3.09017E-1
  129. 1380 GOSUB 2490
  130. 1390 PRINT:PRINT"ANSWER IN     (HOURS.MINUTESSECONDS[146])":PRINT
  131. 1400 PRINT" ASTRONOMICAL DAWN ";V
  132. 1410 REM
  133. 1420 R=-2.07912E-1
  134. 1430 GOSUB 2490
  135. 1440 PRINT" NAUTICAL     DAWN ";V
  136. 1450 REM
  137. 1460 R=-1.04528E-1
  138. 1470 GOSUB 2490
  139. 1480 PRINT" CIVIL        DAWN ";V
  140. 1490 REM
  141. 1500 R=-1.45439E-2
  142. 1510 GOSUB 2490
  143. 1520 PRINT"           SUNRISE ";V
  144. 1530 REM
  145. 1540 REM - SETTING PHENOMENA
  146. 1550 REM
  147. 1560 I=1
  148. 1570 J=C
  149. 1580 GOSUB 1960
  150. 1590 REM
  151. 1600 R=-1.45439E-2
  152. 1610 GOSUB 2490
  153. 1620 PRINT"            SUNSET ";V
  154. 1630 REM
  155. 1640 R=-1.04528E-1
  156. 1650 GOSUB 2490
  157. 1660 PRINT" CIVIL        DUSK ";V
  158. 1670 REM
  159. 1680 R=-2.07912E-1
  160. 1690 GOSUB 2490
  161. 1700 PRINT" NAUTICAL     DUSK ";V
  162. 1710 REM
  163. 1720 R=-3.09017E-1
  164. 1730 GOSUB 2490
  165. 1740 PRINT" ASTRONOMICAL DUSK ";V
  166. 1750 REM
  167. 1760 PRINT"WANT ANOTHER RUN? (Y/N)"
  168. 1770 GET A$: IF A$="" THEN GOTO 1770
  169. 1780 IF A$="Y" GOTO 880
  170. 1790 GOTO 3050
  171. 1800 REM
  172. 1810 REM - SEXAGESIMAL TO DECIMAL
  173. 1820 REM
  174. 1830 W=1
  175. 1840 IFZ>=0 THEN 1870
  176. 1850 W=-1
  177. 1860 Z=ABS(Z)
  178. 1870 X=INT(Z)
  179. 1880 Z=(Z-X)*100
  180. 1890 Y=INT(Z)
  181. 1900 Z=(Z-Y)*100
  182. 1910 Z=(X+Y/60+Z/3600)*W
  183. 1920 RETURN
  184. 1930 REM
  185. 1940 REM - APPROXIMATE TIME
  186. 1950 REM
  187. 1960 K=H+((J+F)/D)
  188. 1970 REM
  189. 1980 REM - SOLAR MEAN ANOMALY
  190. 1990 REM
  191. 2000 L=K*1.7202E-2
  192. 2010 L=L-5.74039E-2
  193. 2020 REM
  194. 2030 REM - SOLAR TRUE LONGITUDE
  195. 2040 REM
  196. 2050 Z=SIN(L)
  197. 2060 M=L+3.34405E-2*Z
  198. 2070 Z=SIN(2*L)
  199. 2080 M=M+3.49066E-4*Z
  200. 2090 M=M+4.93289
  201. 2100 REM
  202. 2110 REM - QUADRANT DETERMINATION
  203. 2120 REM
  204. 2130 Z=M
  205. 2140 GOSUB 2980
  206. 2150 M=Z
  207. 2160 X=M/A
  208. 2170 Y=INT(X)
  209. 2180 Z=X-Y
  210. 2190 IF Z<>0 THEN 2210
  211. 2200 M=M+4.84814E-6
  212. 2210 N=2
  213. 2220 IF M>C THEN 2290
  214. 2230 N=1
  215. 2240 IF M>A THEN 2290
  216. 2250 N=0
  217. 2260 REM
  218. 2270 REM - SOLAR RIGHT ASCENSION
  219. 2280 REM
  220. 2290 P=SIN(M)/COS(M)
  221. 2300 P=ATN(.91746*P)
  222. 2310 REM
  223. 2320 REM - QUADRANT ADJUSTMENT
  224. 2330 REM
  225. 2340 IF N=0 THEN 2420
  226. 2350 IF N=2 THEN 2380
  227. 2360 P=P+B
  228. 2370 GOTO 2420
  229. 2380 P=P+D
  230. 2390 REM
  231. 2400 REM - SOLAR DECLINATION
  232. 2410 REM
  233. 2420 Q=.39782*SIN(M)
  234. 2430 Q=Q/SQR(-Q*Q+1)
  235. 2440 LETQ=ATN(Q)
  236. 2450 RETURN
  237. 2460 REM
  238. 2470 REM - COORDINATE CONVERSION
  239. 2480 REM
  240. 2490 S=R-(SIN(Q)*SIN(E))
  241. 2500 S=S/(COS(Q)*COS(E))
  242. 2510 REM
  243. 2520 REM - NULL PHENOMENON
  244. 2530 REM
  245. 2540 Z=ABS(S)
  246. 2550 IF Z<=1 THEN 2610
  247. 2560 V=0
  248. 2570 RETURN
  249. 2580 REM
  250. 2590 REM - ADJUSTMENT
  251. 2600 REM
  252. 2610 S=S/SQR(-S*S+1)
  253. 2620 S=-ATN(S)+A
  254. 2630 IF I=1 THEN 2680
  255. 2640 S=D-S
  256. 2650 REM
  257. 2660 REM - LOCAL APPARENT TIME
  258. 2670 REM
  259. 2680 Z=1.72028E-2*K
  260. 2690 T=S+P-Z-1.73364
  261. 2700 REM
  262. 2710 REM - UNIVERSAL TIME
  263. 2720 REM
  264. 2730 U=T+F
  265. 2740 REM
  266. 2750 REM - WALL CLOCK TIME
  267. 2760 REM
  268. 2770 V=U-G
  269. 2780 REM
  270. 2790 REM - DECIMAL TO SEXAGESIMAL
  271. 2800 REM
  272. 2810 Z=V
  273. 2820 GOSUB 2980
  274. 2830 Z=Z*3.81972
  275. 2840 V=INT(Z)
  276. 2850 W=(Z-V)*60
  277. 2860 X=INT(W)
  278. 2870 Y=W-X
  279. 2880 IF Y<.5 THEN 2900
  280. 2890 X=X+1
  281. 2900 IF X<60 THEN 2930
  282. 2910 V=V+1
  283. 2920 X=0
  284. 2930 V=V+X/100
  285. 2940 RETURN
  286. 2950 REM
  287. 2960 REM - NORMALIZATION
  288. 2970 REM
  289. 2980 IF Z>=0 THEN 3010
  290. 2990 Z=Z+D
  291. 3000 GOTO 2980
  292. 3010 IF Z<D THEN 3040
  293. 3020 Z=Z-D
  294. 3030 GOTO 3010
  295. 3040 RETURN
  296. 3050 END
  297. 3060 PRINT"  CITY        LAT.       LONG."
  298. 3070 PRINT"MY HOUSE    34.4118    96.4144"
  299. 3080 PRINT"ADA         34.4422    96.4144"
  300. 3090 PRINT"PURCELL     35.0104    97.2128"
  301. 3100 PRINT"ACREAGE     34.5715    97.3000"
  302. 3110 PRINT"NORMAN      35.1138    97.2636"
  303. 3120 RETURN
  304. 3130 X=H/4:Y=INT(X):Z=X-Y:IF Z=0 THEN DM(2)=29
  305. 3140 RETURN
  306. 3150 DATA31,28,31,30,31,30,31,31,30,31,30,31
  307. 3160 REM
  308. 3170 REM     FROM THE LIBRARY OF
  309. 3180 REM     BILL BUCHANAN
  310.