home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib25b.dsk / PLANETARIUM.bas < prev    next >
BASIC Source File  |  2023-02-26  |  16KB  |  280 lines

  1. 10  REM  ************************
  2. 20  REM  *     PLANETARIUM      *
  3. 30  REM  *  BY NELSON R. CAPES  *
  4. 40  REM  *  COPYRIGHT (C) 1985  *
  5. 50  REM  *  BY MICROSPARC, INC  *
  6. 60  REM  *  CONCORD, MA. 01742  *
  7. 70  REM  ************************
  8. 80  TEXT : HOME : VTAB 9: HTAB 5: INVERSE : PRINT "***  NIBBLE PLANETARIUM  ***": NORMAL : IF  PEEK(104) < >64  THEN  POKE 103,1: POKE 104,64: POKE 16384,0: PRINT  CHR$(4)"RUN PLANETARIUM"
  9. 90 D$ =  CHR$(4):G$ =  CHR$(7): HCOLOR= 3: SCALE= 1: ROT= 0:W = 265: REM W IS TIME DELAY VALUE
  10. 100  DIM MD$(1),X$(1):MD$(0) = "INDIVIDUAL":MD$(1) = "CONTINUOUS":X$(0) = "   ":X$(1) = "-->":PFLAG = 0
  11. 110  DIM DD(12): FOR I = 1 TO 12: READ DD(I): NEXT 
  12. 120  DATA  31,28,31,30,31,30,31,31,30,31,30,31
  13. 130  DIM RA(170),DEC(170),MAG(170),NAME$(170),MG(170),XC%(170),YC%(170)
  14. 140  HOME : VTAB 9: HTAB 5: INVERSE : PRINT "***  NIBBLE PLANETARIUM  ***": NORMAL : PRINT : HTAB 11: PRINT "BY NELSON R. CAPES": PRINT : HTAB 2: PRINT "COPYRIGHT (C) 1985 BY MICROSPARC INC"
  15. 150  GOSUB 2760
  16. 160  GOSUB 1050: REM  INITIALIZE ARRAYS
  17. 170  HOME 
  18. 180  PRINT "BE SURE CAPS ARE LOCKED ON.": PRINT 
  19. 190  INPUT "DO YOU WANT TO RESTORE AN OLD SETUP? ";A$
  20. 200  IF A$ = "N"  THEN TF = 1: GOTO 270
  21. 210  IF A$ < >"Y"  THEN  PRINT G$;: VTAB  PEEK(37): CALL  -868: GOTO 190
  22. 220 EF = 1: ONERR  GOTO 2350
  23. 230  VTAB 3: CALL  -868: PRINT "FILE NAME (<RETURN> FOR CATALOG):": INPUT "";A$:NF = 1
  24. 240  IF  LEN(A$) >0  THEN  FOR NC = 1 TO  LEN(A$):NA =  ASC( MID$ (A$,NC,1)):NF = ((NA >64  AND NA <91)  OR (NA = 46)  OR (NA >47  AND NA <58))  AND NF = 1: NEXT : IF  LEN(A$) >13  OR NF = 0  THEN  VTAB 3: CALL  -868: PRINT G$"INVALID NAME": FOR NC = 1 TO 1000: NEXT : GOTO 230
  25. 250  IF A$ = ""  THEN  HOME : PRINT D$"CATALOG": PRINT : INPUT "PRESS <RETURN> TO CONTINUE ... ";B$: HOME : GOTO 230
  26. 260  GOSUB 2270: GOTO 290
  27. 270 S1 = 1:S2 = 1:S3 = 1:S4 = 1:S5 = 0:S6 = 1:S7 = 0:S8 = 0:S9 = 0
  28. 280  PRINT : GOSUB 1140: REM  GET PARAMETERS
  29. 290 S1 = 0:S2 = 0:S3 = 0:S4 = 0:S5 = 0:S6 = 0:S7 = 0:S8 = 0:S9 = 0
  30. 300  FOR I = 1 TO NS:MG(I) = MAG(I): NEXT 
  31. 310  HOME : VTAB 22: PRINT "CALCULATING AND PLOTTING STARS": HGR 
  32. 320  IF HZ$ = "S"  THEN  DRAW 7 AT 2,83: DRAW 8 AT 272,83: DRAW 9 AT 138,157: GOTO 340
  33. 330  DRAW 6 AT 138,157: DRAW 7 AT 272,83: DRAW 8 AT 2,83
  34. 340  HPLOT 0,0 TO 279,0 TO 279,159 TO 0,159 TO 0,0
  35. 350  POKE  -16368,0: FOR I = 1 TO NS
  36. 360  IF  PEEK( -16384) = 155  THEN I = NS: NEXT :CF = 1: GOTO 2470
  37. 370 XP = RA(I):YP = DEC(I)
  38. 380  IF HZ$ = "S"  THEN 410: REM  S. HORIZON
  39. 390 RC = 0: GOSUB 910: REM  N. HORIZON
  40. 400  GOTO 430
  41. 410  REM 
  42. 420 RC = 0: GOSUB 780
  43. 430  IF RC = 1  THEN 510
  44. 440 YC%(I) =  INT(YP):XC%(I) =  INT(XP)
  45. 450  IF XP <2  OR YP <2  OR XP >277  OR YP >157  THEN 510
  46. 460  IF MAG(I) >1.5  THEN  DRAW 4 AT XP,YP: GOTO 500
  47. 470  IF MAG(I) >.5  AND MAG(I) < = 1.5  THEN  DRAW 3 AT XP,YP: GOTO 500
  48. 480  IF MAG(I) > -.5  AND MAG(I) < = .5  THEN  DRAW 2 AT XP,YP: GOTO 500
  49. 490  DRAW 1 AT XP,YP
  50. 500 MG(I) = 99
  51. 510  NEXT 
  52. 520  VTAB 21: HTAB 1: PRINT "LONG  ";LNH" DEG ";LGM;" MIN       LAT  ";LT;" DEG": VTAB 24: PRINT " <ESC> FOR SETUP MENU  <F>IND <N>AME";
  53. 530  VTAB 22: HTAB 1: PRINT  TAB( 16);"DATE ";MN;"/";DAY;"       ": REM  7 SPACES
  54. 540  GOSUB 700
  55. 550 KEY =  PEEK( -16384): IF KEY <128  THEN 640
  56. 560  POKE  -16368,0
  57. 570  IF KEY = 155  THEN  TEXT : HOME : GOTO 2460
  58. 580  IF KEY = 198  THEN S5 = 1: GOSUB 1140: GOTO 650: REM  FIND STAR WITH CURSOR
  59. 590  IF KEY = 206  THEN S7 = 1: GOTO 640: REM  NAME STAR INDICATED BY CURSOR
  60. 600  CALL  -1052: GOTO 640
  61. 610  REM   QUIT
  62. 620  GOSUB 2750: INPUT "ARE YOU SURE YOU WANT TO QUIT? ";A$: IF A$ = "Y"  THEN  TEXT : HOME : END 
  63. 630  VTAB 23: CALL  -868: GOTO 310
  64. 640  GOSUB 1140: REM GET PARAMETERS
  65. 650  IF S1 = 1  OR S2 = 1  OR S3 = 1  OR S4 = 1  OR S6 = 1  OR S9 = 1  THEN S1 = 0:S2 = 0:S3 = 0:S4 = 0:S5 = 0:S6 = 0:S9 = 0: GOTO 300: REM  NEW SETUP
  66. 660  IF S7 = 1  THEN S7 = 0: GOTO 680: REM   CONTINUE IF IDENTIFYING STAR
  67. 670  IF S5 = 1  THEN S5 = 0: GOTO 680: REM  JUST CONTINUE IF DISPLAYING STAR
  68. 680 T = T +1: IF T >1800  THEN T = 0: ON PFLAG +1 GOTO 310,350: REM  HALF-HOUR UP
  69. 690  GOTO 520
  70. 700  REM  TIME DELAY ROUTINE
  71. 710  FOR Z = 1 TO W: NEXT Z
  72. 720 SEC = SEC +1: IF SEC = 60  THEN MIN = MIN +1:SEC = 0
  73. 730  IF MIN = 60  THEN HR = HR +1:MIN = 0
  74. 740  IF HR = 24  THEN HR = 0
  75. 750 LST = HR +(MIN/60) +(SEC/1800)
  76. 760  VTAB 23: PRINT  TAB( 9);"SIDEREAL TIME ";HR; LEFT$(":0",1 +(MIN <10))MIN; LEFT$(":0",1 +(SEC <10))SEC
  77. 770  RETURN 
  78. 780  REM  CIRCUMPOLARS IN N. SKY
  79. 790  IF YP >LT  THEN RC = 1: RETURN 
  80. 800  IF YP <LT -90  THEN RC = 1: RETURN 
  81. 810  REM  SOUTHERN CUTOFF
  82. 820  LET L = LT *3.14/180: LET D = YP *3.14/180
  83. 830  REM  CONVERT LAT AND DEC TO RADIANS
  84. 840  LET H = 3.14 *(LST -XP)/12: REM  HOUR ANGLE IN RADIANS
  85. 850  IF  COS(L) * COS(D) * COS(H) < - SIN(L) * SIN(D)  THEN RC = 1: RETURN 
  86. 860 XP = LST -XP: IF XP < -12  THEN XP = XP +24
  87. 870  IF XP >12  THEN XP = XP -24
  88. 880 XP = 140 +XP *23.33: IF XP >279  OR XP <0  THEN RC = 1: RETURN : REM  ALLOWS 12 HR OF RA
  89. 890 YP = 1.78 *(LT -YP): IF YP <0  OR YP >159  THEN RC = 1: RETURN : REM  ALLOW 90 DEG OF DEC
  90. 900  RETURN 
  91. 910  IF YP <0  THEN RC = 1: RETURN : REM  STARS SOUTH OF EQUATOR IN SOUTHERN HORIZON
  92. 920  LET L = LT *3.14/180: LET D = YP *3.14/180
  93. 930  LET H = 3.14 *(LST -XP)/12: REM  HOUR ANGLE IN RADIANS
  94. 940  IF  COS(L) * COS(D) * COS(H) < - SIN(L) * SIN(D)  THEN RC = 1: RETURN 
  95. 950 XP = XP -LST
  96. 960 YP = YP *3.1416/180: REM  CONVERT DEC TO RADIANS
  97. 970 XP = (XP *15 *3.1416/180) -1.5708: REM  CONVERT RA TO RADIANS AND ROTATE 90 DEG COUNTERCLOCKWISE
  98. 980 F = 140/1.5708: REM  MAP SCALE FACTOR
  99. 990 R1 = F *(1.5708 - ABS(YP))
  100. 1000 X = R1 * COS(XP) +140
  101. 1010 Y = R1 * SIN(XP) +160 -(1.78 *LT)
  102. 1020 XP = X:YP = Y
  103. 1030  IF XP >279  OR XP <0  OR YP >159  OR YP <0  THEN RC = 1
  104. 1040  RETURN 
  105. 1050  REM  INITIALIZE ARRAYS
  106. 1060  HOME : VTAB 11: HTAB 13: INVERSE : PRINT "LOADING TABLES": NORMAL 
  107. 1070 EF = 2: ONERR  GOTO 2350
  108. 1080  PRINT D$"BLOAD STAR.SHAPES,A$300": POKE 232,0: POKE 233,3
  109. 1090 EF = 5
  110. 1100  PRINT D$"OPEN STAR.TABLE": PRINT D$"READ STAR.TABLE"
  111. 1110  INPUT NS
  112. 1120  FOR J = 1 TO NS: INPUT RA(J),DEC(J),MAG(J),NAME$(J): NEXT J
  113. 1130  PRINT D$"CLOSE STAR.TABLE": PRINT D$: POKE 216,0: RETURN 
  114. 1140  REM  PARAMETER GET SUBROUTINE
  115. 1150  IF S1 = 0  AND S2 = 0  AND S3 = 0  AND S4 = 0  AND S5 = 0  AND S6 = 0  AND S7 = 0  AND S8 = 0  AND S9 = 0  THEN  RETURN 
  116. 1160  IF S1 < >1  THEN 1230
  117. 1170  PRINT 
  118. 1180  CALL  -958: INPUT "LONGITUDE (DEG = -180 TO +180): ";LH$
  119. 1190 LH =  INT( VAL(LH$)): IF  LEN(LH$) >4  OR LH$ = ""  OR LH < -180  OR LH >180  THEN  PRINT G$;: VTAB  PEEK(37): HTAB 1: GOTO 1180
  120. 1200  CALL  -958: HTAB 16: INPUT "(MIN = 0 TO 59): ";LM$
  121. 1210 LM =  INT( VAL(LM$)): IF  LEN(LM$) >2  OR LM$ = ""  OR LM <0  OR LM >59  THEN  PRINT G$;: VTAB  PEEK(37): HTAB 1: GOTO 1200
  122. 1220 LNH = LH:LGM = LM:S4 = 1
  123. 1230  IF S2 < >1  THEN 1270
  124. 1240  PRINT 
  125. 1250  CALL  -958: HTAB 13: INPUT "LATITUDE (0 TO 90): ";LT$
  126. 1260 LT =  INT( VAL(LT$)): IF  LEN(LT$) >2  OR LT$ = ""  OR LT <0  OR LT >90  THEN  PRINT G$;: VTAB  PEEK(37): GOTO 1250
  127. 1270  IF S3 < >1  THEN 1340
  128. 1280  PRINT 
  129. 1290  CALL  -958: HTAB 9: INPUT "DATE (MONTH = 1 TO 12): ";M$
  130. 1300 M =  INT( VAL(M$)): IF M <1  OR M >12  THEN  PRINT G$;: VTAB  PEEK(37): HTAB 1: GOTO 1290
  131. 1310  CALL  -958: HTAB 16: PRINT "(DAY = 1 TO "DD(M)"): ";: INPUT "";DA$
  132. 1320 D =  INT( VAL(DA$)): IF D <1  OR D >DD(M)  THEN  PRINT G$;: VTAB  PEEK(37): HTAB 1: GOTO 1310
  133. 1330 MN = M:DAY = D:S4 = 1: IF S1 = 0  THEN  GOSUB 2750
  134. 1340  IF S4 < >1  THEN 1500
  135. 1350 TF = 1
  136. 1360  IF S1 = 0  OR S2 = 0  THEN  GOSUB 2750
  137. 1370  PRINT 
  138. 1380  CALL  -958: HTAB 12: INPUT "TIME (HR = 0 TO 23): ";SH$
  139. 1390 SH =  INT( VAL(SH$)): IF  LEN(SH$) >2  OR SH$ = ""  OR SH <0  OR SH >23  THEN  PRINT G$;: VTAB  PEEK(37): HTAB 1: GOTO 1380
  140. 1400  CALL  -958: HTAB 16: INPUT "(MIN = 0 TO 59): ";SM$
  141. 1410 SM =  INT( VAL(SM$)): IF SM$ = ""  OR  LEN(SM$) >2  OR SM <0  OR SM >59  THEN  PRINT G$;: VTAB  PEEK(37): HTAB 1: GOTO 1400
  142. 1420  IF S1 < >1  THEN 1460
  143. 1430 LH =  ABS(LH)
  144. 1440 LH = LH -15: IF LH > = 0  THEN 1440
  145. 1450 LH = LH +15:LH = LH +(LM/60):LC = (LH *4)/60: REM  LC IS FACTOR TO SUBTRACT FROM STANDARD TIME TO GET LOCAL MEAN TIME
  146. 1460  IF S4 < >1  THEN 1500
  147. 1470 SH = SH +(SM/60)
  148. 1480  IF LNH <0  THEN MLT = SH +LC
  149. 1490  IF LNH > = 0  THEN MLT = SH -LC
  150. 1500  IF S3 < >1  THEN 1640
  151. 1510  ON M GOTO 1630,1620,1610,1600,1590,1580,1570,1560,1550,1540,1530,1520
  152. 1520 D = D +30
  153. 1530 D = D +31
  154. 1540 D = D +30
  155. 1550 D = D +31
  156. 1560 D = D +31
  157. 1570 D = D +30
  158. 1580 D = D +31
  159. 1590 D = D +30
  160. 1600 D = D +31
  161. 1610 D = D +28
  162. 1620 D = D +31
  163. 1630 GST = 6.68 +(D *4)/60: IF GST >24  THEN GST = GST -24: REM  CALC GREENWICH SIDEREAL TIME
  164. 1640  IF S4 < >1  THEN 1700
  165. 1650 LST = MLT +GST: IF LST >24  THEN LST = LST -24: REM  CALC LOCAL SIDEREAL TIME
  166. 1660 HR = 0:MIN = 0
  167. 1670 MIN =  INT(LST *60)
  168. 1680  IF MIN <60  THEN 1700
  169. 1690 HR = HR +1:MIN = MIN -60: GOTO 1680
  170. 1700  IF S5 < >1  THEN 1860
  171. 1710  VTAB 23: CALL  -868: GOSUB 2450: VTAB 23: HTAB 1: INPUT "STAR NAME? ";T$
  172. 1720  IF  LEN(T$) = 0  THEN  VTAB 23: HTAB 1: CALL  -958: GOTO 2220
  173. 1730  VTAB 24: HTAB 1: CALL  -868
  174. 1740 FL = 0: FOR I = 1 TO NS
  175. 1750  IF NAME$(I) = T$  THEN FL = I:I = NS
  176. 1760  NEXT 
  177. 1770  IF FL = 0  THEN 1850
  178. 1780 XP = XC%(FL):YP = YC%(FL): IF MG(FL) < >99  THEN  VTAB 23: HTAB 1: CALL  -868: HTAB 1: PRINT G$"STAR NOT VISIBLE": FOR I = 1 TO 500: NEXT I: GOTO 1710
  179. 1790  FOR Z = 1 TO 10: XDRAW 5 AT XP,YP
  180. 1800  FOR Y = 1 TO 200: NEXT Y
  181. 1810  XDRAW 5 AT XP,YP
  182. 1820  FOR X = 1 TO 200: NEXT 
  183. 1830  NEXT Z
  184. 1840  GOTO 1710
  185. 1850  HTAB 1: VTAB 23: CALL  -868: HTAB 1: PRINT G$"STAR NOT IN TABLES": FOR I = 1 TO 500: NEXT I: GOTO 1710
  186. 1860  IF S6 < >1  THEN 1910
  187. 1870  PRINT 
  188. 1880  CALL  -958: INPUT "HORIZON (N = NORTH, S = SOUTH): ";HZ$
  189. 1890  IF HZ$ < >"N"  AND HZ$ < >"S"  THEN  PRINT G$;: VTAB  PEEK(37): HTAB 1: GOTO 1880
  190. 1900  RETURN 
  191. 1910  IF S7 < >1  THEN 2130
  192. 1920  VTAB 23: CALL  -868: GOSUB 2440:XP = 140:YP = 80: GOTO 1970
  193. 1930  IF YP <2  THEN YP = 157
  194. 1940  IF YP >157  THEN YP = 2
  195. 1950  IF XP <2  THEN XP = 277
  196. 1960  IF XP >277  THEN XP = 2
  197. 1970  GOSUB 2120
  198. 1980 KEY =  PEEK( -16384): IF KEY <128  THEN 1980
  199. 1990  POKE  -16368,0
  200. 2000  IF KEY = 205  THEN  GOSUB 2120:YP = YP +1: GOTO 1940
  201. 2010  IF KEY = 201  THEN  GOSUB 2120:YP = YP -1: GOTO 1930
  202. 2020  IF KEY = 202  THEN  GOSUB 2120:XP = XP -1: GOTO 1950
  203. 2030  IF KEY = 203  THEN  GOSUB 2120:XP = XP +1: GOTO 1960
  204. 2040  IF KEY = 155  THEN  VTAB 23: CALL  -958: XDRAW 5 AT XP,YP: RETURN : REM  RELOAD ARRAYS
  205. 2050  IF KEY < >141  THEN 1980
  206. 2060  VTAB 23: HTAB 1: CALL  -868: PRINT "SEARCHING ...";
  207. 2070 FL = 0: FOR I = 1 TO NS
  208. 2080  IF MG(I) = 99  AND YC%(I) > = YP -1  AND YC%(I) < = YP +1  AND XC%(I) > = XP -1  AND XC%(I) < = XP +1  THEN  VTAB 23: HTAB 1: CALL  -868: PRINT "STAR IS - ";: INVERSE : PRINT NAME$(I): NORMAL :FL = I:I = NS
  209. 2090  NEXT I
  210. 2100  IF FL = 0  THEN  VTAB 23: HTAB 1: CALL  -868: PRINT G$"NO MATCH!"
  211. 2110  GOTO 1980
  212. 2120  XDRAW 5 AT XP,YP: RETURN 
  213. 2130  IF S8 < >1  THEN 2220
  214. 2140 EF = 3: ONERR  GOTO 2350
  215. 2150  GOSUB 2750: INPUT "SAVE FILE NAME: ";A$:NF = 1: IF  LEN(A$) >0  THEN  FOR NC = 1 TO  LEN(A$):NA =  ASC( MID$ (A$,NC,1)):NF = ((NA >64  AND NA <91)  OR (NA = 46)  OR (NA >47  AND NA <58))  AND NF = 1: NEXT : IF  LEN(A$) >13  OR NF = 0  THEN  VTAB 23: CALL  -868: PRINT G$"INVALID NAME": GOSUB 2760: GOTO 2150
  216. 2160  IF  LEN(A$) = 0  THEN  POKE  -16303,0: HOME : PRINT D$"CATALOG": PRINT : INPUT "PRESS <RETURN> TO CONTINUE ... ";B$: HOME : POKE  -16304,0: VTAB 21: PRINT "LONG  "LNH" DEG "LGM" MIN       LAT "LT" DEG": PRINT  TAB( 16)"DATE "MN"/"DAY: GOTO 2150
  217. 2170  PRINT D$"OPEN P."A$
  218. 2180  PRINT D$"WRITE P."A$
  219. 2190  PRINT LNH: PRINT LGM: PRINT LT: PRINT MN: PRINT DAY: PRINT LST: PRINT HR: PRINT MIN: PRINT HZ$
  220. 2200  PRINT D$"CLOSE P."A$
  221. 2210 S8 = 0: POKE 216,0: RETURN 
  222. 2220  IF S9 < >1  THEN S1 = 0:S2 = 0:S3 = 0:S4 = 0:S6 = 0:S8 = 0:S9 = 0: RETURN 
  223. 2230 EF = 4: ONERR  GOTO 2350
  224. 2240  GOSUB 2750: PRINT "LOAD FILE NAME (<RETURN> FOR CATALOG): ": INPUT "";A$:NF = 1
  225. 2250  IF  LEN(A$) >0  THEN  FOR NC = 1 TO  LEN(A$):NA =  ASC( MID$ (A$,NC,1)):NF = ((NA >64  AND NA <91)  OR (NA = 46)  OR (NA >47  AND NA <58))  AND NF = 1: NEXT : IF  LEN(A$) >13  OR NF = 0  THEN  VTAB 23: CALL  -868: PRINT G$"INVALID NAME": GOSUB 2760: GOTO 2240
  226. 2260  IF A$ = ""  THEN  HOME : PRINT D$"CATALOG": PRINT : INPUT "PRESS <RETURN> TO CONTINUE ... ";B$: HOME : GOTO 2240
  227. 2270  IF  LEFT$(A$,2) = "P."  THEN A$ =  MID$ (A$,3)
  228. 2280  PRINT D$"VERIFY P."A$
  229. 2290  PRINT D$"OPEN P."A$
  230. 2300  PRINT D$"READ P."A$
  231. 2310  INPUT LNH,LGM,LT,MN,DAY,LST,HR,MIN,HZ$
  232. 2320  PRINT D$"CLOSE P."A$
  233. 2330 TF = 0:SEC = 0: POKE 216,0: RETURN 
  234. 2340  REM  ERROR HANDLING
  235. 2350 ER =  PEEK(222):EL =  PEEK(218) +256 * PEEK(219): CALL  -3288: PRINT D$"CLOSE": TEXT : HOME : VTAB 12: IF ER = 6  THEN  PRINT "FILE NOT ON THIS DISK": GOTO 2430
  236. 2360  IF (ER = 254  OR ER = 5)  AND EF = 5  THEN  PRINT "ERROR IN STAR.TABLE": PRINT : PRINT "LAST STAR READ SUCCESSFULLY WAS:": PRINT : PRINT NAME$(J -1): GOTO 2430
  237. 2370  IF ER = 4  AND EF = 3  THEN  PRINT "THIS DISK IS WRITE-PROTECTED.": GOTO 2430
  238. 2380  IF (ER = 4  OR ER = 6)  AND EF < >3  THEN  PRINT "FILE NOT ON THIS DISK": GOTO 2430
  239. 2390  IF ER = 9  THEN  PRINT "THIS DISK IS FULL.": GOTO 2430
  240. 2400  IF ER = 10  THEN  PRINT "THE SPECIFIED FILE IS LOCKED.": GOTO 2430
  241. 2410  IF ER = 8  THEN  PRINT "I/O ERROR. CHECK DRIVE DOOR.": GOTO 2430
  242. 2420  PRINT "ERROR #"ER" IN LINE "EL"."
  243. 2430  PRINT : GOSUB 2760: HOME : ON EF GOTO 190,1060,2140,2230,620
  244. 2440  VTAB 24: PRINT "I-J-K-M POSITION <RETURN>    <ESC>APE";: RETURN 
  245. 2450  VTAB 24: CALL  -868: VTAB 24: HTAB 1: PRINT "<RETURN> TO RESUME";: RETURN 
  246. 2460 CF = 0
  247. 2470  TEXT : HOME : HTAB 15: INVERSE : PRINT "SETUP MENU": NORMAL 
  248. 2480 S1 = 0:S2 = 0:S3 = 0:S4 = 0:S5 = 0:S6 = 0:S7 = 0:S8 = 0:S9 = 0
  249. 2490  PRINT : HTAB 5: PRINT "1. LONGITUDE:";: HTAB 20: INVERSE : PRINT LNH;: NORMAL : PRINT " DEG  ";: INVERSE : PRINT LGM;: NORMAL : PRINT " MIN"
  250. 2500  PRINT : HTAB 5: PRINT "2. LATITUDE:   ";: HTAB 20: INVERSE : PRINT LT;: NORMAL : PRINT " DEG"
  251. 2510  PRINT : HTAB 5: PRINT "3. DATE:";: HTAB 20: INVERSE : PRINT MN"/"DAY: NORMAL 
  252. 2520  PRINT : HTAB 5: PRINT "4. SID. TIME:";: HTAB 20: INVERSE : PRINT HR; LEFT$(":0",1 +(MI <10))MIN;: NORMAL : IF   NOT TF  THEN  PRINT 
  253. 2530  IF TF  THEN  PRINT " (" INT(SH); LEFT$(":0",1 +(SM <10))SM" INPUT)"
  254. 2540  PRINT : HTAB 5: PRINT "5. HORIZON:";: HTAB 20: INVERSE : PRINT HZ$: NORMAL 
  255. 2550  PRINT : HTAB 5: PRINT "6. PLOT MODE:";: HTAB 20: INVERSE : PRINT MD$(PFLAG): NORMAL 
  256. 2560  PRINT : HTAB 5: PRINT "7. SAVE PARAMETERS TO DISK"
  257. 2570  PRINT : HTAB 5: PRINT "8. LOAD PARAMETERS FROM DISK"
  258. 2580  PRINT : HTAB 5: PRINT "9. QUIT"
  259. 2590 SL = 1:PX = 29:MX = 9
  260. 2600  VTAB 24: HTAB 1: PRINT "<ESC> TO RETURN TO STAR SCREEN";
  261. 2610  VTAB 21: HTAB 1: PRINT "USE ARROWS OR SELECT NUMBER: ";
  262. 2620  POKE  -16368,0: GOSUB 2770
  263. 2630  IF Z = 20  THEN  ON CF GOTO 300: POKE  -16304,0: GOTO 520
  264. 2640  IF Z = 10  THEN CF = 1
  265. 2650  ON SL GOTO 2660,2670,2680,2690,2700,2710,2720,2730,2740
  266. 2660 S1 = 1: GOSUB 2750: GOSUB 1140: GOTO 2470
  267. 2670 S2 = 1: GOSUB 2750: GOSUB 1140: GOTO 2470
  268. 2680 S3 = 1: GOSUB 2750: GOSUB 1140: GOTO 2470
  269. 2690 S4 = 1: GOSUB 2750: GOSUB 1140: GOTO 2470
  270. 2700 S6 = 1: GOSUB 2750: GOSUB 1140: GOTO 2470
  271. 2710 PFLAG = 1 -PFLAG: GOSUB 2750: GOTO 2470
  272. 2720 S8 = 1: GOSUB 2130: GOTO 2470
  273. 2730 S9 = 1: GOSUB 2220: GOTO 2470
  274. 2740  GOTO 610
  275. 2750  VTAB 21: HTAB 1: CALL  -958: VTAB 21: RETURN 
  276. 2760  VTAB 24: HTAB 6: PRINT "PRESS <RETURN> TO CONTINUE";: GET Z$: PRINT : RETURN 
  277. 2770 N = SL:OS = SL: GOSUB 2800:Z = 0: VTAB 21: HTAB PX: CALL  -868
  278. 2780  VTAB 21: HTAB PX: PRINT SL;: GET Z$: IF Z$ > = "1"  AND Z$ < =  STR$(MX)  THEN SL =  VAL(Z$):N = OS: GOSUB 2800: GOTO 2770
  279. 2790 Z = (Z$ =  CHR$(21)  OR Z$ =  CHR$(10)) -(Z$ =  CHR$(8)  OR Z$ =  CHR$(11)) +10 *(Z$ =  CHR$(13)) +20 *(Z$ =  CHR$(27)): ON   NOT Z GOTO 2780:SL = SL +Z *(Z <10):SL = SL -MX *(SL >MX) +MX *(SL <1):N = OS: GOSUB 2800: ON Z <10 GOTO 2770: RETURN 
  280. 2800  VTAB 1 +2 *N: HTAB 1: PRINT X$(SL = OS);: RETURN