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