home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / BEEHIVE / UTILITYS / SKYSHOW.LBR / SKYPLOT.BYS / SKYPLOT.BYS
Text File  |  2000-06-30  |  20KB  |  604 lines

  1. 5 ' SKYPLOT.BAS : ADAPTED FROM SKYPLA.BAS BY ERNEST HELLIWELL
  2. 7 ' ORIGINAL PROGRAM FOR EXIDY SORCERER BY ERIC BURGESS
  3. 8 ' FROM HIS BOOK "CELESTIAL BASIC", PUBL BY SYBEX, 1982
  4. 9 ' ADJUSTED TO WORK WITH ADM-3A TYPE SCREENS (24x80)
  5. 10 CLEAR:WIDTH 255
  6. 20 DEF FNASN(X)=ATN(X/SQR(-X*X+1))
  7. 30 DEF FNACO(X)=-ATN(X/SQR(-X*X+1))+3.14159/2
  8. 40 DEF FNRAD(X)=(X)*3.14159/180
  9. 50 DEF FNDEG(X)=(X)*180/3.14159
  10. 55 CURON$=CHR$(5)+CHR$(2):CUROF$=CHR$(5)+CHR$(32)
  11. 57 BLINK$=CHR$(27)+CHR$(41)+CHR$(27)+CHR$(52)
  12. 58 BLOFF$=CHR$(27)+CHR$(40):BEL$=CHR$(7)
  13. 60 PI=3.14159:CL$=CHR$(26):HOME$=CHR$(30)
  14. 65 DEF FNAT$(ROW,COL)=CHR$(27)+CHR$(61)+CHR$(ROW+32)+CHR$(COL+32)
  15. 70 PRINT CL$;
  16. 80 PRINT FNAT$(2,28)"S K Y   P L O T";
  17. 90 PRINT FNAT$(6,14)"Astronomy program for ADM-3A type terminals"
  18. 120 ZN=8:LA=FNRAD(38.24):L$="SEBASTOPOL, CA":LO=122.49
  19. 140 PRINT FNAT$(10,12)"Initial conditions are set for..."L$
  20. 160 PRINT FNAT$(13,25)"LATITUDE: "FNDEG(LA)
  21. 170 PRINT FNAT$(14,25)"LONGITUDE:"LO
  22. 180 PRINT FNAT$(15,25)"TIME ZONE:"ZN
  23. 190 PRINT FNAT$(18,15)"You can change these later, if you wish"
  24. 200 DF=0
  25. 210 FOR J7=2500 TO 1 STEP -1:NEXT J7
  26. 220 PRINT CL$;
  27. 230 PRINT FNAT$(2,32)"SKY PLOT"
  28. 240 PRINT FNAT$(4,35)"by"
  29. 250 PRINT FNAT$(6,25)"ERIC BURGESS  F.R.A.S."
  30. 260 PRINT FNAT$(8,20)"Plots the stars for a requested"
  31. 270 PRINT FNAT$(9,22)"time and date, and shows the"
  32. 280 PRINT FNAT$(10,20)"Planets, Sun and Moon above the"
  33. 290 PRINT FNAT$(11,32)"horizon."
  34. 300 PRINT FNAT$(13,18)"Close to full the Moon is shown as 'o',"
  35. 310 PRINT FNAT$(14,20)"before full it is shown as ')' and"
  36. 320 PRINT FNAT$(15,22)"after full it is shown as '('."
  37. 330 PRINT FNAT$(17,26)"All rights reserved"
  38. 340 PRINT FNAT$(18,28)"S & T Software"
  39. 360 FOR J=2500 TO 1 STEP -1:NEXT J:PRINT CL$;
  40. 370 GOTO 1490
  41. 380 'DAYS FROM EPOCH
  42. 390 G=365*Y+D+((M-1)*31)
  43. 400 IF M>=3 THEN GOTO 420
  44. 410 G=G+INT((Y-1)/4)-INT(.75*INT((Y-1)/100+1)):RETURN
  45. 420 G=G-INT(2.3+M*.4)+INT(Y/4)-INT(.75*INT((Y/100)+1))
  46. 430 RETURN
  47. 440 'CALCUL OF LST
  48. 450 SG=.065711
  49. 460 T2=SG*NS+12.064707#+(((ZN+T1)/24)*SG)+T1
  50. 470 IF T2>24 THEN T2=T2-24:GOTO 470
  51. 480 IF T2<-24 THEN T2=T2+24:GOTO 480
  52. 490 IF T2<0 THEN T2=T2+24
  53. 500 T2$=STR$(T2)
  54. 510 T2=VAL(LEFT$(T2$,5))
  55. 520 RETURN
  56. 530 'ENTER VAR. FOR CALC LST
  57. 540 GOSUB 380:NS=G-722895!:GOSUB 440
  58. 550 'ENTER VAR. FOR CALC NO. OF DAYS
  59. 560 MO=M:DA=D:YR=Y
  60. 570 GOSUB 380:ND=G-715875!+T1/24
  61. 580 'STORE DATA FOR CALCS
  62. 590 IF F4=1 GOTO 870
  63. 600 RESTORE
  64. 610 DIM PD(9,9)
  65. 620 FOR YY=0 TO 8
  66. 630 FOR XX=0 TO 8
  67. 640 READ PD(YY,XX)
  68. 650 NEXT XX
  69. 655 NEXT YY
  70. 660 'ORBITAL ELEMENTS OF PLANETS, MERCURY-PLUTO
  71. 670 DATA .071425,3.8494,.388301,1.34041,.3871
  72. 680 DATA .07974,2.73514,.122173,.836013
  73. 690 DATA .027962,3.02812,.013195,2.28638,.7233
  74. 700 DATA .00506,3.85017,.059341,1.33168
  75. 710 DATA .017202,1.74022,.032044,1.78547,1,.017,3.33926,0
  76. 720 DATA 0,.009146,4.51234,.175301,5.85209,1.5237
  77. 730 DATA .141704,1.04656,.03142,.858702
  78. 740 DATA .001451,4.53364,.090478,.23911,5.2028
  79. 750 DATA .249374,1.76188,.01972,1.74533
  80. 760 DATA .000584,4.89884,.105558,1.61094,9.5385
  81. 770 DATA .534156,3.1257,.043633,1.977458
  82. 780 DATA .000205,2.46615,.088593,2.96706,19.182
  83. 790 DATA .901554,4.49084,.01396,1.28805
  84. 800 DATA .000104,3.78556,.016965,.773181,30.06
  85. 810 DATA .27054,2.33498,.031416,2.29162
  86. 820 DATA .000069,3.16948,.471239,3.91303,39.44
  87. 830 DATA 9.86,5.23114,.300197,1.91812
  88. 840 FOR I9=1 TO 9
  89. 850 READ P(I9):NEXT I9
  90. 860 DATA 109,86,83,77,74,83,85,78,80
  91. 870 F4=1
  92. 880 I=1
  93. 890 FOR J=0 TO 8
  94. 900 GOSUB 1000
  95. 910 A(I)=A:D(I)=D:L(I)=L
  96. 920 I=I+1:NEXT
  97. 930 FOR I=1 TO 9
  98. 940 IF I=3 THEN GOTO 980
  99. 950 PRINT CL$;"COMPUTING...PLEASE WAIT"
  100. 960 GOSUB 1110
  101. 970 Z(I)=Z:Q(I)=Q:X(I)=X:R(I)=R:V(I)=V:AL(I)=AL:AZ(I)=AZ
  102. 980 NEXT
  103. 990 RETURN
  104. 1000 'SUB FOR A, D, L
  105. 1010 A=ND*PD(J,0)+PD(J,1)
  106. 1020 IF A>PI*2 THEN A=(A/(PI*2)-INT(A/PI*2))*PI*2
  107. 1030 IF A<0 THEN A=A+PI*2:GOTO 1030
  108. 1040 C=PD(J,2)*SIN(A-PD(J,3))
  109. 1050 A=A+C
  110. 1060 IF A>PI*2 THEN A=A-PI*2
  111. 1070 IF A<0 THEN A=A+PI*2:GOTO 1070
  112. 1080 D=PD(J,4)+PD(J,5)*SIN(A-PD(J,6))
  113. 1090 L=PD(J,7)*SIN(A-PD(J,8))
  114. 1100 RETURN
  115. 1110 'ELEV AND AZ OF SUN AND PLANETS
  116. 1120 F=0:Z=A(3)-A(I)
  117. 1130 IF ABS(Z)>PI AND Z<0 THEN Z=Z+(PI*2)
  118. 1140 IF ABS(Z)>PI AND Z>0 THEN Z=Z-(PI*2)
  119. 1150 Q=SQR(D(I)^2+D(3)^2-2*D(I)*D(3)*COS(Z))
  120. 1160 P=(D(I)+D(3)+Q)/2
  121. 1170 X=2*FNACO(SQR(((P*(P-D(I)))/(D(3)*Q))))
  122. 1180 T=X*(12/PI)
  123. 1190 IF Z<0 THEN R=FNDEG(A(3)+PI-X)/15
  124. 1200 IF Z>0 THEN R=FNDEG(A(3)+PI+X)/15
  125. 1210 IF R>24 THEN R=R-24:GOTO 1220
  126. 1220 IF R<-24 THEN R=R+24:GOTO 1220
  127. 1230 IF R<0 THEN R=R+24:GOTO 1230
  128. 1240 IF Z<0 THEN V=SIN(A(3)+PI-X)*23.4419+FNDEG(L(I))
  129. 1250 IF Z>0 THEN V=SIN(A(3)+PI+X)*23.4419+FNDEG(L(I))
  130. 1260 HA=T2-R
  131. 1270 IF HA<-12 THEN HA=HA+24
  132. 1280 IF HA>12 THEN HA=HA-24
  133. 1290 HA=FNRAD(HA*15):V=FNRAD(V)
  134. 1300 AL=FNASN(SIN(V)*SIN(LA)+COS(V)*COS(LA)*COS(HA))
  135. 1310 AZ=FNACO((SIN(V)-SIN(LA)*SIN(AL))/(COS(LA)*COS(AL)))
  136. 1320 IF HA>0 THEN AZ=PI*2-AZ
  137. 1330 AL=FNDEG(AL):AZ=FNDEG(AZ)
  138. 1340 RS=FNDEG(A(3)+PI)/15
  139. 1350 IF RS>24 THEN RS=RS-24:GOTO 1350
  140. 1360 IF RS<-24 THEN RS=RS+24:GOTO 1360
  141. 1370 IF RS<0 THEN RS=RS+24:GOTO 1370
  142. 1380 VS=SIN(A(3)+PI)*23.4419
  143. 1390 HS=T2-RS
  144. 1400 IF HS<-12 THEN HS=HS+24
  145. 1410 IF HS>12 THEN HS=HS-24
  146. 1420 HS=FNRAD(HS*15):VS=FNRAD(VS)
  147. 1430 AS=FNASN(SIN(VS)*SIN(LA)+COS(VS)*COS(LA)*COS(HS))
  148. 1440 ZS=FNACO((SIN(VS)-SIN(LA)*SIN(AS))/(COS(LA)*COS(AS)))
  149. 1450 IF HS>0 THEN ZS=PI*2-ZS
  150. 1460 AS=FNDEG(AS):ZS=FNDEG(ZS)
  151. 1470 RETURN
  152. 1480 'BEGIN MAIN PROGRAM
  153. 1490 PRINT CL$;
  154. 1500 IF DF=0 THEN PRINT:PRINT:PRINT:GOTO 1640
  155. 1510 PRINT:PRINT "Want to see the variables Y/N? ";:AB$=INPUT$(1)
  156. 1520 IF AB$="N" THEN GOTO 1560
  157. 1530 PRINT:PRINT "Date:";YR;MO;DA;"      LMT:";T1;"HRS";
  158. 1540 PRINT "      Time Zone:";ZN
  159. 1550 PRINT "LAT:";FNDEG(LA);:PRINT "   LONG:";LO:PRINT
  160. 1560 PRINT
  161. 1570 PRINT "Want to enter or change any variables Y/N? ";:A$=INPUT$(1)
  162. 1580 IF A$="N" THEN GOTO 1980
  163. 1590 PRINT CL$
  164. 1600 PRINT "Want to change the date of: ";YR;MO;DA;"Y/N? ";
  165. 1620 A1$=INPUT$(1)
  166. 1630 IF A1$="N" THEN GOTO 1740
  167. 1640 PRINT:PRINT "What is the date required?"
  168. 1650 PRINT:INPUT " Enter the YEAR: ",Y
  169. 1660 PRINT:INPUT " Enter the MONTH: ",M
  170. 1670 PRINT:INPUT " Enter the DAY: ",D
  171. 1680 MO=M:DA=D:YR=Y
  172. 1690 IF Y>1800 GOTO 1740
  173. 1700 PRINT:PRINT:PRINT "Is";Y;"the year you want Y/N? ";
  174. 1710 Y$=INPUT$(1)
  175. 1720 IF Y$="Y" GOTO 1740
  176. 1730 IF Y$="N" THEN GOTO 1640
  177. 1740 PRINT:PRINT:GOSUB 3440
  178. 1750 IF DF=0 THEN 1780
  179. 1760 PRINT TAB(16)"The LMT of: "T1"Y/N? ";
  180. 1770 A1$=INPUT$(1):IF A1$="N" THEN GOTO 1830
  181. 1780 PRINT CL$;"Input the LMT for the display":GOSUB 3320
  182. 1790 PRINT:PRINT "To change variables, answer 'Y' when asked, otherwise 'N'"
  183. 1810 IF DF=0 THEN 1830
  184. 1820 PRINT:Y$="LMT":GOSUB 3320
  185. 1830 PRINT
  186. 1840 PRINT TAB(16)"The TIME ZONE of: "ZN"      Y/N? ";:A1$=INPUT$(1)
  187. 1850 IF A1$="N" THEN GOTO 1870
  188. 1855 PRINT
  189. 1860 PRINT:INPUT "Enter the TIME ZONE (West coast is 8): ",ZN
  190. 1870 PRINT
  191. 1880 PRINT TAB(15)"The LONGITUDE of: "LO"  Y/N? ";:A1$=INPUT$(1)
  192. 1890 IF A1$="N" THEN GOTO 1910
  193. 1900 PRINT:GOSUB 3510
  194. 1910 PRINT
  195. 1920 PRINT TAB(16)"The LATITUDE of: ";FNDEG(LA);"   Y/N? ";
  196. 1930 A1$=INPUT$(1)
  197. 1940 IF A1$="N" THEN GOTO 1980
  198. 1950 PRINT:INPUT "Enter the LATITUDE (Sebastopol=38.24): ",LA
  199. 1960 LA=FNRAD(LA)
  200. 1980 IF HR=1 AND A$="N" THEN HR=0:A$="":GOTO 2680
  201. 1990 IF HR=1 AND A$="Y" THEN HR=0:A$="":GOTO 2120
  202. 2000 PRINT CL$;
  203. 2010 PRINT FNAT$(6,0);"Which horizon do you want to see?"
  204. 2030 PRINT FNAT$(9,5);"1 EAST horizon ...  0 to 180 deg."
  205. 2040 PRINT FNAT$(10,5);"2 WEST horizon ...180 to 360 deg."
  206. 2050 PRINT FNAT$(11,5);"3 SOUTH horizon .. 90 to 270 deg."
  207. 2060 PRINT FNAT$(12,5);"4 NORTH horizon ..270 to  90 deg."
  208. 2070 PRINT:PRINT "Select one: ";:HZ$=INPUT$(1)
  209. 2080 IF (HZ$="1" OR HZ$="2" OR HZ$="3" OR HZ$="4") THEN 2100
  210. 2090 PRINT "INVALID ENTRY":GOTO 2010
  211. 2100 HZ=VAL(HZ$)
  212. 2109 DS=0:PRINT:PRINT
  213. 2110 PRINT "Do you want Stars displayed, as well as Planets,";
  214. 2111 PRINT " Sun and Moon (Y/N)? ";
  215. 2112 DS$=INPUT$(1):IF DS$="N" THEN DS=1:GOTO 2120
  216. 2113 IF DS$<>"Y" THEN PRINT "INVALID RESPONSE":PRINT:GOTO 2110
  217. 2120 'BEGIN CALCS
  218. 2130 FL=3
  219. 2140 PRINT CL$;"COMPUTING...PLEASE WAIT"
  220. 2150 IF FP=1 GOTO 2330
  221. 2160 DIM PO(30,64)
  222. 2170 P=-3968
  223. 2180 FOR YY=29 TO 0 STEP -1
  224. 2190 FOR XX=0 TO 63
  225. 2200 PO(YY,XX)=P
  226. 2210 P=P+1
  227. 2220 NEXT XX
  228. 2230 PRINT CL$;"COMPUTING...PLEASE WAIT"
  229. 2240 NEXT YY
  230. 2250 'DIM PP(8,8)
  231. 2260 'P=192
  232. 2270 'FOR X8=0 TO 7
  233. 2280 'FOR Y8=0 TO 7
  234. 2290 'PP(Y8,X8)=P
  235. 2300 'P=P+1
  236. 2310 'NEXT Y8
  237. 2315 'NEXT X8
  238. 2320 FP=1
  239. 2330 'SET UP GRAPHICS
  240. 2335 IF DS=1 THEN 2670
  241. 2350 GOTO 2670
  242. 2360 PRINT
  243. 2370 'PRINT COORDINATES
  244. 2380 ROW=0
  245. 2390 FOR I3=80 TO 20 STEP -10
  246. 2395 I3$=STR$(I3)
  247. 2400 PRINT FNAT$(ROW,1);MID$(I3$,2,2);" +";
  248. 2405 'PRINTS VERTICAL SCALE
  249. 2410 PRINT FNAT$(ROW+1,4);"|";
  250. 2420 PRINT FNAT$(ROW+2,4);"|";
  251. 2430 ROW=ROW+3
  252. 2435 NEXT I3
  253. 2440 PRINT FNAT$(21,1);"10 +";
  254. 2495 'PRINTS HORIZONTAL SCALE
  255. 2500 PRINT FNAT$(22,4)"|--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|";
  256. 2520 IF HZ=2 GOTO 2580
  257. 2530 IF HZ=3 GOTO 2610
  258. 2540 IF HZ=4 GOTO 2640
  259. 2550 PRINT FNAT$(23,4)"N    20    40    60    80  E 100   120   140   160    S";
  260. 2570 F6=1:PRINT HOME$;:RETURN
  261. 2580 PRINT FNAT$(23,4)"S    200   220   240   260 W 280   300   320   340    N";
  262. 2600 F6=1:PRINT HOME$;:RETURN
  263. 2610 PRINT FNAT$(23,4)"E    110   130   150   170 S 190   210   230   250    W";
  264. 2630 F6=1:PRINT HOME$;:RETURN
  265. 2640 PRINT FNAT$(23,4)"W    290   310   330   350 N 10    30    50    70     E";
  266. 2660 F6=1:PRINT HOME$;:RETURN
  267. 2670 GOSUB 530
  268. 2680 PRINT CL$;
  269. 2690 IF HZ=1 THEN HZ$="EAST horizon"
  270. 2700 IF HZ=2 THEN HZ$="WEST horizon"
  271. 2710 IF HZ=3 THEN HZ$="SOUTH horizon"
  272. 2720 IF HZ=4 THEN HZ$="NORTH horizon"
  273. 2730 GOSUB 3440
  274. 2740 GOSUB 2380
  275. 2750 U$="North"
  276. 2760 IF LA<0 THEN U$="South"
  277. 2770 PRINT FNAT$(0,63);"DATE"YR;MO;DA;
  278. 2775 PRINT FNAT$(1,63);"LMT"T1;"hrs";
  279. 2780 PRINT FNAT$(2,63);"LST"T2"hrs"
  280. 2785 PRINT FNAT$(3,63);HZ$;
  281. 2790 PRINT FNAT$(4,63);"LAT";ABS(FNDEG(LA));U$;
  282. 2800 PRINT FNAT$(6,63);BLINK$;"Please wait...";BLOFF$;
  283. 2810 PRINT HOME$;CUROF$;
  284. 2820 'PRINT SKY DOME
  285. 2825 IF DS=1 THEN 2850
  286. 2830 'POSITION STARS
  287. 2840 GOSUB 3580
  288. 2850 'POSITION SUN
  289. 2860 IF AS<0 GOTO 2950
  290. 2870 BS=ZS
  291. 2880 IF HZ=3 AND (BS>90 AND BS<270) THEN X1=BS-90:Y1=AS:GOTO 2930
  292. 2890 IF HZ=4 AND (BS>270 AND BS<360) THEN X1=BS-270:Y1=AS:GOTO 2930
  293. 2900 IF HZ=4 AND (BS>0 AND BS<85) THEN X1=BS+90:Y1=AS:GOTO 2930
  294. 2910 IF HZ=1 AND BS<=180 THEN X1=BS:Y1=AS:GOTO 2930
  295. 2920 IF HZ=2 AND BS>180 THEN X1=BS-180:Y1=AS:GOTO 2930
  296. 2925 GOTO 2950
  297. 2930 Y2=28/90*Y1+2.5:X2=55/180*X1+4
  298. 2940 XV=ABS(PO(INT(Y2),INT(X2))-192):GOSUB 5950:PRINT "@";
  299. 2950 'SELECT AND POSITION PLANETS
  300. 2960 FOR I8=1 TO 9
  301. 2970 BZ(I8)=AZ(I8)
  302. 2980 IF AL(I8)<5 OR AL(I8)>80 THEN GOTO 3110
  303. 2990 IF I8=3 THEN GOTO 3110
  304. 3000 IF HZ=1 AND BZ(I8)<=180 THEN GOTO 3060
  305. 3010 IF HZ=2 AND BZ(I8)>180 THEN BZ(I8)=BZ(I8)-180:GOTO 3060
  306. 3020 IF HZ=3 AND (BZ(I8)>90 AND BZ(I8)<270) THEN BZ(I8)=BZ(I8)-90:GOTO 3060
  307. 3030 IF HZ=4 AND (BZ(I8)>270 AND BZ(I8)<=360) THEN GOTO 3050
  308. 3040 IF HZ=4 AND (BZ(I8)>0 AND BZ(I8)<85) THEN BZ(I8)=BZ(I8)+90:GOTO 3060
  309. 3045 GOTO 3110
  310. 3050 BZ(I8)=BZ(I8)-270
  311. 3060 'POSITIONING ROUTINE
  312. 3070 X1=BZ(I8):Y1=AL(I8)
  313. 3080 IF (X1<5 OR X1>175) THEN GOTO 3110
  314. 3090 Y2=28/90*Y1+2.5:X2=55/180*X1+4
  315. 3100 XV=ABS(PO(INT(Y2),INT(X2))-192):GOSUB 5950:PRINT CHR$(P(I8));
  316. 3110 NEXT I8
  317. 3120 GOSUB 5230
  318. 3130 GOTO 3145
  319. 3140 'END SEQUENCE
  320. 3145 PRINT CURON$;BEL$;
  321. 3150 PRINT FNAT$(6,63);"Another       ";
  322. 3155 PRINT FNAT$(7,65);"horizon Y/N? ";
  323. 3160 A$=INPUT$(1)
  324. 3170 M=MO:D=DA:Y=YR
  325. 3180 FP=1
  326. 3190 IF A$="N" THEN GOTO 3250
  327. 3200 HR=1:PRINT CL$;"Which horizon?"
  328. 3210 PRINT:PRINT TAB(7)"1 = EAST":PRINT TAB(7)"2 = WEST"
  329. 3220 PRINT TAB(7)"3 = SOUTH":PRINT TAB(7)"4 = NORTH"
  330. 3230 PRINT:PRINT "Select: ";:HZ$=INPUT$(1):HZ=VAL(HZ$)
  331. 3240 PRINT CL$;:HR=1:PRINT:PRINT:PRINT:GOTO 1570
  332. 3250 PRINT CL$;
  333. 3260 PRINT "Want another date Y/N? ";:A$=INPUT$(1)
  334. 3270 IF A$="Y" THEN GOTO 1510
  335. 3280 IF A$<>"N" THEN PRINT:PRINT "INVALID REPLY":GOTO 3260
  336. 3290 PRINT CL$;"ENDING SKY PLOT"
  337. 3300 END
  338. 3310 'TIME INPUT
  339. 3320 PRINT:PRINT "Want to input in    (1) DEC. HRS"
  340. 3330 PRINT:PRINT TAB(12)"or in    (2) HR,MI,SE?":PRINT
  341. 3335 PRINT "ENTER CHOICE: ";
  342. 3340 PT$=INPUT$(1):PT=VAL(PT$)
  343. 3350 IF PT=1 THEN PRINT:GOTO 3380
  344. 3360 IF PT=2 THEN PRINT:GOTO 3400
  345. 3370 PRINT "INVALID REPLY":PRINT:GOTO 3320
  346. 3380 PRINT:PRINT "Enter the LMT (hh.xxxx): ";
  347. 3390 INPUT "",T1:PRINT:GOTO 3430
  348. 3400 PRINT:PRINT:PRINT "Enter the LMT (HR,MI,SE): ";
  349. 3410 INPUT "",HR,MI,SE
  350. 3420 T1=HR+MI/60+SE/3600:PRINT
  351. 3430 RETURN
  352. 3440 'PRINTING HR,MI,SE
  353. 3450 RR=INT(T1)
  354. 3460 IM=(T1-INT(T1))*60
  355. 3470 ES=(IM-INT(IM))*60
  356. 3480 ES=INT(ES)
  357. 3490 IM=INT(IM)
  358. 3500 RETURN
  359. 3510 'CORRECT ZN FOR LONGITUDE
  360. 3520 PRINT:INPUT "Enter the LONGITUDE (Sebastopol is 122.49): ",LO
  361. 3530 LGC=(ZN*15)-LO
  362. 3540 IF LGC<0 THEN GOTO 3560
  363. 3550 ZN=ZN+ABS(LGC/15):GOTO 3570
  364. 3560 ZN=ZN+LGC/15
  365. 3570 RETURN
  366. 3580 'DEVELOP HA, RA, AZ AND AL FOR STARS
  367. 3590 IF SF=1 THEN 4620
  368. 3600 DIM ST(237,2)
  369. 3610 FOR SY=0 TO 236: FOR SX=0 TO 1
  370. 3620 READ ST(SY,SX)
  371. 3630 NEXT SX
  372. 3635 NEXT SY
  373. 3640 'DATA ON RA AND DEC OF STARS
  374. 3650 'URSA MINOR
  375. 3660 DATA 2,89,18,86,17,82,16,78,15,75,15.4,72,16.3,76
  376. 3670 'CEPHEUS
  377. 3680 DATA 20.8,61,21.5,70
  378. 3690 'CASSIOPEIA
  379. 3700 DATA 1.9,63,1.4,60,.9,60,.6,56,.1,59
  380. 3710 'PERSEUS
  381. 3720 DATA 3.3,50,3,53,3.7,48,3.1,41,3.9,40,3.9,32
  382. 3730 'URSA MAJOR
  383. 3740 DATA 11,57,11,63,11.9,54,12.2,58,12.9,57,13.4,55,13.7,50
  384. 3750 'DRACO
  385. 3760 DATA 16,59,16.4,62,17.1,66,17.5,52,17.9,51,18.3,73,19.2,68
  386. 3770 'CEPHEUS
  387. 3780 DATA 23.8,78,21.3,62,22.1,58,22.8,67
  388. 3790 'ANDROMEDA
  389. 3800 DATA 2,42,1.1,35,.6,31
  390. 3810 'TRIANGULUM
  391. 3820 DATA 2.1,35,1.8,29,2.2,34
  392. 3830 'PEGASUS
  393. 3840 DATA 22.7,30,.1,29,.2,14,21.7,10,22.2,6,22.7,10,23,4,23,28
  394. 3860 'AURIGA
  395. 3870 DATA 5.2,46,5.9,45,5.9,37,4.9,33,5,41
  396. 3880 'BOOTES
  397. 3890 DATA 14.5,39,15,40,15.3,33,14.2,20,13.9,19,14.7,27,15.5,27,15.4,29
  398. 3910 'CORONA
  399. 3920 DATA 15.6,27
  400. 3930 'HERCULES
  401. 3940 DATA 16.7,39,16.7,31,17,31,17.2,37,17.2,25,16.5,21,16.4,19
  402. 3950 'LYRA
  403. 3960 DATA 18.7,39,18.8,33,19,32
  404. 3970 'CYGNUS
  405. 3980 DATA 20.7,45,20.3,40,19.8,45,20.8,34,19.5,28
  406. 3990 'TAURUS
  407. 4000 DATA 3.6,24,3,4,2.7,3,4.5,17,5.4,29,5.6,21,3.7,24,4.3,15,4.45,19
  408. 4030 'ARIES
  409. 4040 DATA 2.1,23,1.8,21,1.8,19
  410. 4050 'ERIDANUS
  411. 4060 DATA 3.9,-13,3.3,-20
  412. 4070 'PISCES
  413. 4080 DATA 1.5,-9,1.2,-10
  414. 4090 'CETUS
  415. 4100 DATA .7,-18,1.1,-10,1.3,-9,2,2
  416. 4110 'ORION
  417. 4120 DATA 5.9,8,5.4,8,5.75,-2,5.6,-1,5.45,0,5.8,-10,5.6,-6,5.6,10,5.5,-21,5.2,-9
  418. 4140 'CANIS MAJOR
  419. 4150 DATA 6.7,-17,6.3,-18,6.9,-29,7.2,-27,7.4,-29
  420. 4160 'CANIS MINOR
  421. 4170 DATA 7.6,7,7.4,9
  422. 4180 'GEMINI
  423. 4190 DATA 7.6,32,7.7,28,7.3,22,6.7,25,6.6,16,6.4,22,6.3,22
  424. 4200 'LEO
  425. 4210 DATA 10.1,12,10.1,17,10.3,20,10.3,24,11.2,20,11.2,16,11.8,15,9.8,28,9.7,26
  426. 4230 'CANCER
  427. 4240 DATA 8.7,29,8.6,21
  428. 4250 'HYDRA
  429. 4260 DATA 9.5,-9,8.7,7,8.9,7,9.2,2,10.4,-17
  430. 4270 'VIRGO
  431. 4280 DATA 11.8,2,13.4,-11,13,11,12.9,3,12.7,-1,12.3,-1,13.1,-5
  432. 4290 'CRATER
  433. 4300 DATA 10.8,-16,10.9,-18,11.3,-15,11.4,-18
  434. 4310 'CORVUS
  435. 4320 DATA 12.5,-16,12.2,-17,12.5,-23,12.2,-22
  436. 4330 'SERPENS
  437. 4340 DATA 15.8,17,15.5,10,15.7,7,15.8,5,15.8,-3
  438. 4350 'LIBRA
  439. 4360 DATA 15.3,-9,14.8,-16
  440. 4370 'OPHIUCHUS
  441. 4380 DATA 17.5,12,17.2,25,17.6,5,17.7,3
  442. 4390 'SAGITTARIUS
  443. 4400 DATA 18.3,-30,18,-30,18.4,-25,18.9,-26,19,-30,19.1,-21,18.3,-21
  444. 4420 'SCORPIO
  445. 4430 DATA 16.5,-26,16.6,-28,16.4,-24,16,-20,15.9,-22,15.9,-26
  446. 4440 DATA 18.6,-43,16.7,-34,18.5,-37,18.7,-40,16.7,-38,22.9,-30
  447. 4460 'CAPRICORNUS
  448. 4470 DATA 21.7,-18,21.6,-18,21.4,-22,20.8,-28,20.7,-26,20.3,-14
  449. 4480 DATA 20.2,-12,22.9,-30
  450. 4490 'DELPHINUS
  451. 4500 DATA 20.5,11,20.6,15,20.7,15,20.6,16,20.8,16
  452. 4510 'AQUARIUS
  453. 4520 DATA 22.6,0,22.5,0,22.4,1,22.3,-2,22,0,21.5,-6
  454. 4530 'AQUILA
  455. 4540 DATA 19.8,9,19.7,10.5,19.9,6,19.1,13,18.95,14,20.1,-1
  456. 4550 'SOUTH POLAR REGION
  457. 4560 DATA 12.2,-59,12.1,-50,12.4,-57,12.7,-59,12.3,-63
  458. 4570 DATA 14,-60,14.7,-60,14.7,-65,15.9,-63,15.1,-69,16.9,-69
  459. 4580 DATA 20.3,-57,1.7,-57,2,-62,.4,-63,6.3,-52,6.8,-51
  460. 4590 DATA 8.8,-55,9.3,-55,9.2,-59,8.3,-60,9.1,-70,9.8,-65
  461. 4600 DATA 3.9,-75,12.5,-69,12.6,-68
  462. 4610 SF=1
  463. 4620 'GET AZ AND EL FOR EACH STAR AND POSITION IT ON SCREEN
  464. 4630 FOR K=0 TO 236
  465. 4640 SR=ST(K,0):SD=ST(K,1)
  466. 4650 HD=T2-SR
  467. 4660 IF HD<-12 THEN HD=HD+24
  468. 4670 IF HD>12 THEN HD=HD-24
  469. 4680 HA=HD*15
  470. 4690 HA=FNRAD(HA):SD=FNRAD(SD)
  471. 4700 SL=FNASN(SIN(SD)*SIN(LA)+COS(SD)*COS(LA)*COS(HA))
  472. 4710 SZ=(SIN(SD)-SIN(LA)*SIN(SL))/(COS(LA)*COS(SL))
  473. 4720 IF SZ>=1 THEN SZ=0:GOTO 4760
  474. 4730 IF SZ<=-1 THEN SZ=3.14159:GOTO 4760
  475. 4740 SZ=FNACO(SZ)
  476. 4750 IF HA>0 THEN SZ=PI*2-SZ
  477. 4760 SZ=FNDEG(SZ)
  478. 4770 IF SZ>360 THEN SZ=SZ-360
  479. 4780 IF SZ<0 THEN SZ=SZ+360
  480. 4790 SL=FNDEG(SL)
  481. 4800 IF SL>70 OR SL<10 THEN 4990
  482. 4810 IF HZ=1 THEN 4850
  483. 4820 IF HZ=2 THEN 4870
  484. 4830 IF HZ=3 THEN 4890
  485. 4840 IF HZ=4 THEN 4910
  486. 4850 IF (SZ>5 AND SZ<175) THEN GOTO 4940
  487. 4860 GOTO 4990
  488. 4870 IF (SZ>185 AND SZ<355) THEN SZ=SZ-180:GOTO 4940
  489. 4880 GOTO 4990
  490. 4890 IF (SZ>95 AND SZ<265) THEN SZ=SZ-90:GOTO 4940
  491. 4900 GOTO 4990
  492. 4910 IF (SZ>275 AND SZ<360) THEN SZ=SZ-270:GOTO 4940
  493. 4920 IF (SZ>=0 AND SZ<85) THEN SZ=SZ+90:GOTO 4940
  494. 4930 GOTO 4990
  495. 4940 'POSITION STAR
  496. 4950 X1=SZ:Y1=SL
  497. 4960 Y2=28/90*Y1+2.5:X2=55/180*X1+4
  498. 4970 Y3=8*(Y2-INT(Y2)):X3=8*(X2-INT(X2))
  499. 4980 XV=ABS(PO(INT(Y2),INT(X2))-192):GOSUB 5950:PRINT ".";
  500. 4990 NEXT K
  501. 5000 X1=0:Y1=0:Y2=0:X2=0:X=0
  502. 5010 RETURN
  503. 5020 'SET 8 X 8 GRID
  504. 5030 IF FS=1 THEN RETURN
  505. 5040 'LP=-512:XP=0:AP=7:GP=128
  506. 5050 'FOR IP=1 TO 8:FOR JP=1 TO 9
  507. 5060 'IF JP=9 THEN AP=AP+1
  508. 5070 'FOR KP=1 TO AP
  509. 5080 'XV=ABS((LP)-192):GOSUB 5950:PRINT CHR$(XP);
  510. 5090 'LP=LP+1
  511. 5100 'NEXT KP
  512. 5110 'IF JP=9 GOTO 5200
  513. 5120 'XV=ABS((LP)-192):GOSUB 5950:PRINT CHR$(GP);
  514. 5130 'LP=LP+1
  515. 5140 IF FP<>1 GOTO 5170
  516. 5150 PRINT CL$;"COMPUTING...PLEASE WAIT"
  517. 5160 GOTO 5190
  518. 5170 'IF JP=9 GOTO 5190
  519. 5180 'AP=AP-1:FP=1
  520. 5190 'NEXT JP
  521. 5200 FP=0:AP=7:XP=0:GP=GP*.5
  522. 5210 'NEXT IP
  523. 5220 FS=1:RETURN
  524. 5230 'POSITION MOON ON SCREEN
  525. 5240 ND=ND-.5
  526. 5250 LP=255.743
  527. 5260 LZ=311.169:LE=178.699:LM=LZ+360*ND/27.3216
  528. 5270 MD=LM:GOSUB 5890:LM=MD
  529. 5280 'CORRECT GOR ELLIPTICAL ORBIT
  530. 5300 PG=.111404*ND+LP
  531. 5310 MD=PG:GOSUB 5890
  532. 5320 PG=MD
  533. 5330 PG=LM-PG
  534. 5340 DR=6.2886*(SIN(FNRAD(PG)))
  535. 5350 LM=LM+DR
  536. 5360 RQ=LM:RM=LM/15
  537. 5370 IF RM>24 THEN RM=RM-24:GOTO 5370
  538. 5380 IF RM<0 THEN RM=RM+24
  539. 5390 AL=LE-ND*.052954
  540. 5400 ND=ND+.5
  541. 5410 MD=AL:GOSUB 5890
  542. 5420 AL=MD
  543. 5430 AL=RQ-AL
  544. 5440 IF AL<360 THEN AL=AL+360
  545. 5450 IF AL>360 THEN AL=AL-360
  546. 5460 HE=5.1333*SIN(AL*PI/180)
  547. 5470 DM=HE+23.1444*SIN(RQ*PI/180)
  548. 5480 HD=T2-RM
  549. 5490 IF HD<-12 THEN HD=HD+24
  550. 5500 IF HD>12 THEN HD=HD-24
  551. 5510 IF (HD>12 OR HD<-12) THEN GOTO 5940
  552. 5520 HA=FNRAD(HD*15):DM=FNRAD(DM)
  553. 5530 ML=FNASN(SIN(DM)*SIN(LA)+COS(DM)*COS(LA)*COS(HA))
  554. 5540 MZ=FNACO((SIN(DM)-SIN(LA)*SIN(ML))/(COS(LA)*COS(ML)))
  555. 5560 IF HA>0 THEN MZ=PI*2-MZ
  556. 5570 MZ=FNDEG(MZ)
  557. 5580 ML=FNDEG(ML)
  558. 5600 IF ML>80 OR ML<5 THEN 5800
  559. 5610 MX=MZ
  560. 5620 IF HZ=1 THEN 5660
  561. 5630 IF HZ=2 THEN 5680
  562. 5640 IF HZ=3 THEN 5700
  563. 5650 IF HZ=4 THEN 5720
  564. 5660 IF (MX>10 AND MX<170) THEN GOTO 5750
  565. 5670 GOTO 5800
  566. 5680 IF (MX>190 AND MX<350) THEN MX=MX-180:GOTO 5750
  567. 5690 GOTO 5800
  568. 5700 IF (MX>100 AND MX<260) THEN MX=MX-90:GOTO 5750
  569. 5710 GOTO 5800
  570. 5720 IF (MX>275 AND MX<=360) THEN MX=MX-270:GOTO 5750
  571. 5730 IF (MX>0 AND MX<85) THEN MX=MX+90:GOTO 5750
  572. 5740 GOTO 5800
  573. 5750 'POSITION MOON
  574. 5760 X1=MX:Y1=ML
  575. 5770 Y2=28/90*Y1+2.5:X2=55/180*X1+4
  576. 5780 GOSUB 5820
  577. 5790 XV=ABS(PO(INT(Y2),INT(X2))-192):GOSUB 5950:PRINT CHR$(MS);
  578. 5800 X1=0:X2=0:Y1=0:Y2=0
  579. 5810 RETURN
  580. 5820 PM=RS+12-RQ/15
  581. 5830 IF PM>24 THEN PM=PM-24
  582. 5840 IF PM>12 THEN PM=PM-24
  583. 5850 IF (PM>=-2 AND PM<=2) THEN MS=111:RETURN
  584. 5855 IF LA<0 AND PM<-2 THEN MS=41:RETURN
  585. 5860 IF PM<-2 THEN MS=40:RETURN
  586. 5865 IF LA<0 AND PM>2 THEN MS=40:RETURN
  587. 5870 IF PM>2 THEN MS=41
  588. 5880 RETURN
  589. 5890 IF MD<-3600 THEN MD=MD+3600:GOTO 5890
  590. 5900 IF MD<-360 THEN MD=MD+360:GOTO 5900
  591. 5910 IF MD<0 THEN MD=MD+360
  592. 5920 IF MD>3600 THEN MD=MD-3600:GOTO 5920
  593. 5930 IF MD>360 THEN MD=MD-360:GOTO 5930
  594. 5940 RETURN
  595. 5945 'CURSOR POSITIONING TRANSLATION ROUTINE
  596. 5950 BOL=3968:EOL=3905:NUM=0:ROW=0:COL=0
  597. 5960 IF (XV<=BOL AND XV>=EOL) THEN ROW=NUM:GOTO 5970 ELSE NUM=NUM+1:EOL=EOL-64:GOTO 5960
  598. 5970 EOL=3905
  599. 5980 IF ROW=0 THEN YV=XV-EOL:COL=63-YV:GOTO 6010
  600. 5990 LCOL=EOL-(ROW*64)
  601. 6000 YV=XV-LCOL:COL=63-YV
  602. 6010 PRINT FNAT$(ROW,COL);
  603. 6020 RETURN
  604. HEN YV=XV-EOL:COL=63