100 REM PURPOSE --
102 REM
104 REM THIS PROGRAM GIVES THE TIME OF
106 REM SUNRISE, SUNSET, AND TWILIGHT
108 REM (ASTRONOMICAL, NAUTICAL, AND
110 REM CIVIL) TO WITHIN A MINUTE OR
112 REM TWO DURING THE SECOND HALF OF
114 REM THE TWENTIETH CENTURY.
116 REM
118 REM INPUTS --
120 REM
122 REM LATITUDE IN DEGREES, MINUTES,
124 REM AND SECONDS, NORTH IS POSITIVE.
126 REM EXAMPLE: 30,0028 REPRESENTS 30
128 REM DEGREES, 00 MINUTES, 28 SECONDS
130 REM NORTH LATITUDE.
132 REM
134 REM LONGITUDE IN DEGREES, MINUTES,
136 REM AND SECONDS. WEST IS POSITIVE.
138 REM EXAMPLE: 90.1109 REPRESENTS 90
140 REM DEGREES, 11 MINUTES, 09 SECONDS
142 REM WEST LONGITUDE.
144 REM
146 REM TIME ZONE IN HOURS AND MINUTES
148 REM THAT ARE ADDED TO WALL CLOCK
150 REM TIME TO YIELD UNIVERSAL TIME.
152 REM IN THE FORTY-EIGHT CONTIGUOUS
154 REM UNITED STATES, SEE TABLE BELOW.
156 REM
158 REM             STANDARD DAYLIGHT
160 REM
162 REM   EASTERN     5.00     4.00
164 REM   CENTRAL     6.00     5.00
166 REM   MOUNTAIN    7.00     6.00
168 REM   PACIFIC     8.00     7.00
170 REM
172 REM YEAR (1951 THRU 2000)
174 REM
176 REM MONTH (1 THRU 12)
178 REM
180 REM DAY (1 THRU 31)
182 REM
184 REM OUYPUTS --
186 REM
188 REM OUTPUTS ARE GIVEN IN HOURS AND
190 REM MINUTES ON A TWENTY-FOUR HOUR
192 REM BASIS. EXAMPLE: 6.25 REPRESENTS
194 REM 6:25 A.M., AND 18.25 REPRESENTS
196 REM 6:25 P.M.
198 REM
200 REM A ZERO OUTPUT INDICATES THAT
202 REM THE PHENOMENON DOES NOT OCCUR
204 REM ON THE SPECIFIED DATE. E.G.,
206 REM THE SUN DOES NOT SET IN MID-
208 REM SUMMER AT HIGH LATITUDES.
210 REM
212 REM SAMPLE --
214 REM
216 REM LAT
218 REM ? 30             33.3123
220 REM LON
222 REM ? 90            112.0205
224 REM ZONE
226 REM ? 5               7
228 REM YEAR
230 REM ? 1983         1984
232 REM MONTH
234 REM ? 5              12
236 REM DAY
238 REM ? 19             12
240 REM
242 REM A DAWN 4.33   5.55
244 REM N DAWN 5.06   6.25
246 REM C DAWN 5.38   6.56
248 REM SUNRIS 6.04   7.24
250 REM SUNSET 19.49 17.21
252 REM C DUSK 20.15 17.49
254 REM N DUSK 20.47 18.20
256 REM A DUSK 21.21 18.50
258 REM
260 REM -------------------------------
262 REM
264 REM - CONSTANTS
266 REM
268   LET A=1.5708
270   LET B=3.14159
272   LET C=4.71239
274   LET D=6.28319
276 REM
278 REM - INPUTS
280 REM
282   PRINT "LAT"
284   INPUT Z
286   GOSUB 452
288   LET E=Z*1.74533E-2
290 REM
292   PRINT "LON"
294   INPUT Z
296   GOSUB 452
298   LET F=Z*1.74533E-2
300 REM
302   PRINT "ZONE"
304   INPUT Z
306   GOSUB 452
308   LET G=Z*2.61799E-1
310 REM
312   PRINT "YEAR"
314   INPUT H
316 REM
318   PRINT "MONTH"
320   INPUT I
322 REM
324   PRINT "DAY"
326   INPUT J
328 REM
330 REM - DAY OF YEAR
332 REM
334   LET K=INT((I+9)/12)
336   LET X=H/4
338   LET Y=INT(X)
340   LET Z=X-Y
342   IF Z=0 THEN 346
344   LET K=K*2
346   LET H=INT(275*I/9)
348   LET H=H+J-K-30
350 REM
352 REM - RISING PHENOMENA
354 REM
356   PRINT " "
358 REM
360   LET I=0
362   LET J=A
364   GOSUB 478
366 REM
368   LET R=-3.09017E-1
370   GOSUB 584
372   PRINT "A DAWN";V
374 REM
376   LET R=-2.07912E-1
378   GOSUB 584
380   PRINT "N DAWN";V
382 REM
384   LET R=-1.04528E-1
386   GOSUB 584
388   PRINT "C DAWN";V
390 REM
392   LET R=-1.45439E-2
394   GOSUB 584
396   PRINT "SUNRIS";V
398 REM
400 REM - SETTING PHENOMENA
402 REM
404   LET I=1
406   LET J=C
408   GOSUB 478
410 REM
412   LET R=-1.45439E-2
414   GOSUB 584
416   PRINT "SUNSET";V
418 REM
420   LET R=-1.04528E-1
422   GOSUB 584
424   PRINT "C DUSK";V
426 REM
428   LET R=-2.07912E-1
430   GOSUB 584
432   PRINT "N DUSK";V
434 REM
436   LET R=-3.09017E-1
438   GOSUB 584
440   PRINT "A DUSK";V
442 REM
444   GOTO 696
446 REM
448 REM - SEXADESIMAL TO DECIMAL
450 REM
452   LET W=1
454   IF Z>=0 THEN 460
456   LET W=-1
458   LET Z=ABS(Z)
460   LET X=INT(Z)
462   LET Z=(Z-X)*100
464   LET Y=INT(Z)
466   LET Z=(Z-Y)*100
468   LET Z=(X+Y/60+Z/3600)*W
470   RETURN
472 REM
474 REM - APPROXIMATE TIME
476 REM
478   LET K=H+((J+F)/D)
480 REM
482 REM - SOLAR MEAN ANOMALY
484 REM
486   LET L=K*1.7202E-2
488   LET L=L-5.74039E-2
490 REM
492 REM - SOLAR TRUE LONGITUDE
494 REM
496   LET Z=SIN (L)
498   LET M=L+3.34405E-2*Z
500   LET Z=SIN(2*L)
502   LET M=M+3.49066E-4*Z
504   LET M=M+4.93289
506 REM
508 REM - QUADRANT DETERMINATION
510 REM
512   LET Z=M
514   GOSUB 682
516   LET M=Z
518   LET X=M/A
520   LET Y=INT(X)
522   LET Z=X-Y
524   IF Z<>0 THEN 528
526   LET M=M+4.84814E-6
528   LET N=2
530   IF M>C THEN 544
532   LET N=1
534   IF M>A THEN 544
536   LET N=0
538 REM
540 REM - SOLAR RIGHT ASCENSION
542 REM
544   LET P=SIN(M)/COS(M)
546   LET P=ATN(.91746*P)
548 REM
550 REM - QUADRANT ADJUSTMENT
552 REM
554   IF N=0 THEN 570
556   IF N=2 THEN 562
558   LET P=P+B
560   GOTO 570
562   LET P=P+D
564 REM
566 REM - SOLAR DECLINATION
568 REM
570   LET Q=.39782*SIN (M)
572   LET Q=Q/SQR(-Q*Q+1)
574   LET Q=ATN(Q)
576   RETURN
578 REM
580 REM - COORDINATE CONVERSION
582 REM
584   LET S=R-(SIN(Q)*SIN(E))
586   LET S=S/(COS(Q)*COS(E))
588 REM
590 REM - NULL PHENOMENON
592 REM
594   LET Z=ABS(S)
596   IF Z<=1 THEN 608
598   LET V=0
600   RETURN
602 REM
604 REM -ADJUSTMENT
606 REM
608   LET S=S/SQR(-S*S+1)
610   LET S=-ATN(S)+A
612   IF I=1 THEN 622
614   LET S=D-S
616 REM
618 REM - LOCAL APPARENT TIME
620 REM
622   LET Z=1.72028E-2*K
624   LET T=S+P-Z-1.73364
626 REM
628 REM - UNIVERSAL TIME
630 REM
632   LET U=T+F
634 REM
636 REM - WALL CLOCK TIME
638 REM
640   LET V=U-G
642 REM
644 REM - DECIMAL TO SEXADESIMAL
646 REM
648   LET Z=V
650   GOSUB 682
652   LET Z=Z*3.81972
654   LET V=INT(Z)
656   LET W=(Z-V)*60
658   LET X=INT(W)
660   LET Y=W-X
662   IF Y<.5 THEN 666
664   LET X=X+1
666   IF X<60 THEN 672
668   LET V=V+1
670   LET X=0
672   LET V=V+X/100
674   RETURN
676 REM
678 REM - NORMALIZATION
680 REM
682   IF Z>=0 THEN 688
684   LET Z=Z+D
686   GOTO 682
688   IF Z<D THEN 694
690   LET Z=Z-D
692   GOTO 688
694   RETURN
696   END