home *** CD-ROM | disk | FTP | other *** search
/ RBBS in a Box Volume 1 #3.1 / RBBSIABOX31.cdr / inst / hurrican.bas < prev    next >
Encoding:
BASIC Source File  |  1990-09-29  |  20.4 KB  |  343 lines

  1. 1 ' HURRICAN TRACKER 1.1 - 7/27/84  WHMC
  2. 80 KEY OFF:DEF SEG=0:POKE &H417, &H40
  3. 82 GOSUB 3000
  4. 90 DEFINT I
  5. 100 DIM C$(15),D$(50),T$(50),X(50),Y(50),MAPXY(20,2),IMAP(50,2),E$(50),HURICARRAY(90),STOR.SCR(4002)
  6. 110 U$="&    &  ##.#  ###.#  ####.# MI    ##.# MPH  ###.# DEG &"
  7. 120 M$="& & ##.# ###.#"
  8. 130 V$="  &  &  ###.#  ###.#  ####.# MI  ##.# MPH ###.# DEG &"
  9. 140 MAP0$="F2G2F2D5L1G1F2G2L2M-20,+14M-2,+4L3M-4,+12D8M+4,+8M+4,+10D1F2G2M-3,+8D2G2L3U3M-5,-7L2U2E2U1H4U6H2U6H8L4G4H4L4U2G2L16D2F2D1G1F2L6G1L6M-6,-4G2M-12,-2G4M-16,+10D15G6D17F2M+12,+18M+10,+6R8F2R11U2M+5,-8U8M+15,-5F1R6M+2,+6G5D6G2M-2,+6"
  10. 150 MAP1$="L2U4G2D10G4D1M+4,+3R13E2F2R3F1R6D2M+2,+1R4F1G1F1D4G2D8G2D2F2G2F2D2F3D2R3M+7,+2M+12,-4R8M+8,+6M+8,-6R2U3M+5,-3R4E2R6M+12,-5F2D2G4D2R12E2U3E1R3F3R4F1D1R18F3M+19,-2D4R5M+6,+8M+10,+4" 'GULF SIDE AND SOUTH AMERICA
  11. 160 MAP2$="BM-16,-18L4U3R2E2R2F1D4L2BM-4,-14U1BM+2,-2U2BM-2,-2U1BM-1,-2U2BU3U1L1U1G3F1E1R1BM-6,-4U1BM-2,-2U1BM-2,-4U1BU2U1BH2U1BG4U1BL6L2BL4BU3G2L8U3H2RR2F1R5F2BL20" ' LITTLE ISLANDS PUERTO RICO
  12. 170 MAP3$="E2U2M-6,-2E2L3H1L2M-11,-3G2H1L6G2D1M+5,+3D4L12F3R13F4E4R3E2R4F1E2BL54L6G3R2F3R10E1U2L3H3BM-33,-18U2H1L2G1D2R4BL12BU6" ' HAITI , JAMAICA
  13. 180 MAP4$="C2E2R2U3R3E2M+10,-2M+10,+2F4R6D2M+11,+7R2F2R4F2R4D2M-10,+3H1L6M-9,+2E5H2M-7,-2H4M-10,-3H2M-12,+2L4C3" 'CUBA
  14. 190 MAP5$="BM+42,-13U2L1D2BU4U3H3G1D2F3BM+3,-6U2BU8BR1D2R1U2H3BL2U1L3D1NR3L3BM+17,+8L4D1R4F1BF4F3U1H3BG4F3D1BE3BR4BD1D2F3U1H2BR6BD5F1R3D2G3L1E2U1H2" '                NASSAU AND BAHAMAS
  15. 200 MAP6$="F4D3M+4,+5D2F2D3M-2,+3R2D2F14R10F4M+30,+12F2M+10,-4U1R3D2R4F15R6M+20,+8M+14,+4M+13,+14D5F4R3U3M+7,+4D3F2D2" 'PACIFIC SIDE (SET X,Y=96,0)
  16. 210 MAP7$="M+4,+2D2M+9,+11D4R1M+5,+7R3M+4,-6R8F3R3F1D3M+8,+10D2M+6,+5R3M+9,+4"    '  TEXAS BORDER
  17. 220 STORM$="R2E1U1H1L3G2D3F2R3E4U2H4L4G4D4F5"
  18. 230 HUR$="BH4U1E3R3D1U2L3G2D4L1BF8D1G3L3U1D2R3E2U4R1BH4"
  19. 240 FOR I=0 TO 19:READ MAPXY(I,0):READ MAPXY(I,1):NEXT ' 0-10=X, 11-17=Y
  20. 250 DATA 0,319,60,312,65,275,70,242,75,210,80,180,85,150,90,117,95,83,100,47,105,12,120,0
  21. 260 DATA 0,199,10,185,15,158,20,125,25,90,30,50,35,8,50,0
  22. 270 GOSUB 2410
  23. 272 GOSUB 2500
  24. 274 GOSUB 1310
  25. 280 FOR I=1 TO 22:PRINT :NEXT
  26. 290 COLOR 0,7:LOCATE 3,5:PRINT"H U R R I C A N E       T R A C K E R (c)"
  27. 291 LOCATE 5,2:PRINT"Generate your own Tracking Record of Tropical Storms or Hurricanes":COLOR 7,0:PRINT
  28. 300 LINE INPUT "      What is the name of the HURRICANE/STORM? ";A$
  29. 310 PRINT "      Any";:COLOR 4,0:PRINT " NEW ";:COLOR 7,0:INPUT "coordinates to add (Y or N)";Z$
  30. 320 IF Z$="" THEN 470
  31. 330 IF Z$="N" OR Z$="n" THEN 470
  32. 340 PRINT :PRINT :PRINT
  33. 350 OPEN A$ FOR APPEND AS #1
  34. 360 PRINT :PRINT "      Enter new data ( or <END>)"
  35. 370 INPUT "     Enter DATE (MM/DD/YY) ";D$
  36. 380 IF D$="END" OR D$="end" THEN 460
  37. 390 IF LEN(D$) <> 8 THEN LOCATE CSRLIN-1,1:COLOR 23,0:PRINT "   Form must be  MM/DD/YY   ";:COLOR 7,0:PRINT :GOTO 370
  38. 400  INPUT "     Enter TIME (16:45)   ";T$
  39. 410 IF LEN(T$) <> 5 THEN LOCATE CSRLIN-1,1:COLOR 23,0:PRINT "   Form must be  15:30   ";:COLOR 7,0:PRINT :GOTO 400
  40. 420 INPUT "     Enter LATITUDE  == (xx.x) ";Y
  41. 422 IF (Y <10) OR (Y >35) THEN PRINT "MUST BE >10 NORTH OR <35 NORTH.":GOTO 420
  42. 430 INPUT "     Enter LONGITUDE || (xx.x) ";X
  43. 435 IF (X <60) OR (X >105) THEN PRINT "MUST BE >60 WEST OR <105 WEST.":GOTO 430
  44. 440 WRITE #1, D$;T$;X;Y
  45. 450 GOTO 360
  46. 460 CLOSE #1
  47. 470 PRINT :INPUT "Do you want a hard copy (Y or N)";Z$
  48. 475 ' CLS
  49. 480 IF Z$="Y" OR Z$="y" THEN H=1 ELSE H=0
  50. 490 IF H=1 THEN 510
  51. 500 PRINT :PRINT :PRINT
  52. 510 OPEN A$ FOR INPUT AS #1
  53. 520 P1=20 'Set page counter
  54. 530 INPUT #1,D$,T$,X,Y
  55. 535 PRINT "              Initial tracking began on - ";D$;" , at - ";T$
  56. 537 IF H=1 THEN LPRINT "              Initial tracking began on - ";D$;" , at - ";T$
  57. 540 PRINT "  Hurricane ";A$;"'s Initial Position was LATITUDE -";Y;", LONGITUDE -";X;
  58. 550 IF H=1 THEN LPRINT "       Hurricane ";A$;"'s Initial Position was LAT -";Y;" , LON -";X;
  59. 560 OLDDAY=VAL(MID$(D$,4,2))
  60. 562 TH=VAL(LEFT$(T$,2))*100:TM=VAL(MID$(T$,4,2))
  61. 564 OLDTIME=TH+TM 'STORE ORIGINAL TIME
  62. 566 COUNT = 0:ASOA = 0:TSOA = 0
  63. 570 PRINT STRING$(80,61)
  64. 575 IF H=1 THEN LPRINT STRING$(80,61)
  65. 580 X0=X
  66. 590 Y0=Y
  67. 600 IF EOF(1) THEN 750
  68. 610 INPUT #1,D1$,T1$,X1,Y1
  69. 620 GOSUB 1040
  70. 630 IF P1<20 THEN 665
  71. 640 COLOR 2,0:PRINT "  DATE      TIME   LAT    LON    DISTANCE     SPEED     DIRECTION OF TRAVEL";:COLOR 7,0:PRINT
  72. 650 IF H=1 THEN LPRINT "    DATE    TIME    LAT    LON    DISTANCE   SPEED    DIRECTION OF TRAVEL"
  73. 660 P1=1
  74. 665 GOSUB 2800
  75. 670 PRINT USING U$;D1$,T1$,Y1,X1,Q,SOA,D,C$
  76. 680 IF H=1 THEN LPRINT USING V$;D1$,T1$,Y1,X1,Q,SOA,D,C$
  77. 690 IF H=0 THEN P1=P1+1 ELSE 720
  78. 700 IF P1<>20 THEN 720
  79. 710 INPUT "     Press <ENTER> to continue";Z$
  80. 720 X=X1
  81. 730 Y=Y1
  82. 740 GOTO 600
  83. 750 X=X0
  84. 760 Y=Y0
  85. 770 GOSUB 1040
  86. 780 T2=D:ASOA = TSOA/COUNT 'compute average speed of advance
  87. 790 PRINT :PRINT "TOTAL movement has been ";T2;" DEGREES ";C$;" AT ";ASOA;" MPH":PRINT
  88. 800 IF H=1 THEN LPRINT :LPRINT USING "    TOTAL MOVEMENT HAS BEEN ##.# DEGREES & AT ##.# MPH";T2,C$,ASOA:ASOA=0
  89. 810 IF CITY=1 THEN X=97.22 : Y=27.48 'x=long, y=lat of city to track to
  90. 811 IF CITY=2 THEN X=96.56 : Y=28.51
  91. 812 IF CITY=3 THEN X=97.93 : Y=26.43
  92. 813 IF CITY=4 THEN X=94.65 : Y=29.45
  93. 814 IF CITY=5 THEN X=89.56 : Y=30.05
  94. 815 IF CITY=6 THEN X=80.05 : Y=26.21
  95. 816 IF CITY=7 THEN X=80.17 : Y=25.43
  96. 817 IF CITY=8 THEN X=0!    : Y=0!
  97. 818 IF CITY=9 THEN X=0!    : Y=0!
  98. 830 GOSUB 1040
  99. 840 COLOR 4,0:PRINT USING "    & IS ####.# MILES AT ##.# DEGREES & FROM  &.";A$,Q,D,C$,CITY1$
  100. 850 IF H=1 THEN LPRINT USING "    & IS ####.# MILES AT ##.# DEGREES & FROM & .";A$,Q,D,C$,CITY1$
  101. 860 P1=P1+3
  102. 870 FOR I=P1 TO 10:PRINT :NEXT
  103. 880 CLOSE #1
  104. 890 IF Q >= 100 THEN 960
  105. 900 PRINT :PRINT :PRINT
  106. 910 COLOR 16,7:PRINT "   ************************************************************************     ";
  107. 920 PRINT "   *        W A R N I N G  -  HURRICANE IS LESS THAN 100 MILES AWAY       *   "
  108. 930 PRINT "   ************************************************************************   ";:COLOR 7,0
  109. 940 FOR I=1 TO 3:SOUND 4400,8:SOUND 220,8:NEXT
  110. 950 FOR I=1 TO 6:PRINT :NEXT : IF H=1 THEN LPRINT CHR$(12);
  111. 960 COLOR 7,0:INPUT "Press <ENTER>";Z$: RETURN
  112. 970 ' This Subroutine computes the direction and distance between two points
  113. 980 ' on the globe. Input is - Starting coordinates X,Y and ending coordinates
  114. 990 ' x1,y1.  Output is - C$ -- contains the heading in words, IE north of west
  115. 1000 ' due south, etc.     D  -- contains the Angular Heading in degrees
  116. 1010 '                     Q  -- contains the Distance between two points
  117. 1020 ' Uses variables A,B,Q,Q2,D,S,N,U
  118. 1030 '      Variables X,X1,Y,Y1 are unchanged
  119. 1040 IF X1 = X AND Y1 = Y THEN C$="NO MOVEMENT"
  120. 1050 IF X1 > X AND Y1 = Y THEN C$="DUE WEST"
  121. 1060 IF X1 > X AND Y1 > Y THEN C$="NORTH OF WEST"
  122. 1070 IF X1 = X AND Y1 > Y THEN C$="DUE NORTH"
  123. 1080 IF X1 < X AND Y1 > Y THEN C$="NORTH OF EAST"
  124. 1090 IF X1 < X AND Y1 = Y THEN C$="DUE EAST"
  125. 1100 IF X1 < X AND Y1 < Y THEN C$="SOUTH OF EAST"
  126. 1110 IF X1 = X AND Y1 < Y THEN C$="DUE SOUTH"
  127. 1120 IF X1 > X AND Y1 < Y THEN C$="SOUTH OF WEST"
  128. 1160 U=57.29578
  129. 1170 Q=0: D=0
  130. 1180 N=ABS(X-X1)
  131. 1190 B=90 - Y
  132. 1200 A=90 - Y1
  133. 1210 S=COS(A/U)*COS(B/U)+SIN(A/U)*SIN(B/U)*COS(N/U)
  134. 1220 IF S*S >= 1 THEN RETURN
  135. 1230 Q2=ATN(SQR(1-S*S)/S)
  136. 1240 Q=Q2*U*69.5
  137. 1250 IF Y=Y1 THEN RETURN
  138. 1260 S=SIN(A/U)*SIN(N/U)/SIN(Q2)
  139. 1270 IF S*S >= 1 THEN RETURN
  140. 1280 D=ATN(S/SQR(1-S*S))*U
  141. 1290 D=90-D
  142. 1300 RETURN
  143. 1310 CLS: LOCATE  2,15 :COLOR 0,15:PRINT " H U R R I C A N E   T R A C K I N G   P R O G R A M "
  144. 1315 LOCATE  4,24:COLOR 7,0:PRINT "Track to city is ";CITY1$
  145. 1320 LOCATE  6,20 :PRINT "(1)   Enter a NEW Storm/Hurricane         "
  146. 1330 LOCATE  7,20 :PRINT "(2)   Update Position on Existing Storm/Hurricane  "
  147. 1340 LOCATE  8,20 :PRINT "(3)   Track a Storm/Hurricane on the MAP.           "
  148. 1350 LOCATE  9,20 :PRINT "(4)   Change track to City/Area           "
  149. 1355 LOCATE 10,20 :PRINT "(5)   END Program.                        "
  150. 1360 GOSUB 1400
  151. 1370 LOCATE 12,20 :INPUT "Enter function ===> ";M:ON M GOSUB 1425,280,1540,2500,1390
  152. 1380 GOTO 1310
  153. 1390 LOCATE 22,1:CLS:END
  154. 1400 REM DISPLAY STORMS
  155. 1410 LOCATE 14,20:COLOR 15:PRINT "The Storms currently on this disk are:";:COLOR 7:LOCATE 16,10:PRINT :FILES "*."
  156. 1420 RETURN
  157. 1425 FOR I=1 TO 22:PRINT :NEXT
  158. 1427 COLOR 0,7:PRINT " This program creates a NEW storm. ";:COLOR 7,0:PRINT
  159. 1430 LINE INPUT "      What is the name of the Storm? ";A$
  160. 1440 OPEN A$ FOR OUTPUT AS #1
  161. 1450 INPUT "     Enter Initial DATE (MM/DD/YY) ";D$
  162. 1460 IF LEN(D$) <> 8 THEN LOCATE CSRLIN-1,1:COLOR 23,0:PRINT "   Form must be  MM/DD/YY   ";:COLOR 7,0:PRINT :GOTO 1450
  163. 1470 INPUT "     Enter Initial TIME (16:45)   ";T$
  164. 1480 IF LEN(T$) <> 5 THEN LOCATE CSRLIN-1,1:COLOR 23,0:PRINT "   Form must be  15:30   ";:COLOR 7,0:PRINT :GOTO 1470
  165. 1490 INPUT "     Enter Initial LATITUDE  == (xx.x) ";Y
  166. 1495 IF (Y <10) OR (Y >35) THEN PRINT "MUST BE >10 DEGREES NORTH AND <35 DEGREES NORTH.":GOTO 1490
  167. 1500 INPUT "     Enter Initial LONGITUDE || (xx.x) ";X
  168. 1505 IF (X <60) OR (X >105) THEN PRINT "MUST BE >60 DEGREES WEST AND <105 DEGREES WEST.":GOTO 1500
  169. 1510 WRITE #1, D$;T$;X;Y
  170. 1520 CLOSE #1
  171. 1530 RETURN
  172. 1540 ' Routine to draw storm on map
  173. 1550 FOR I=1 TO 22:PRINT :NEXT:COLOR 0,7
  174. 1552 PRINT " This program tracks a storm on the map. ";:COLOR 7,0:PRINT
  175. 1553 LINE INPUT "What is the name of the storm? ";A$:GOSUB 2150
  176. 1555 INPUT "Do you want auto advance for the storm? (Y/N)";Q$
  177. 1557 IF Q$="y" OR Q$="Y" THEN AUTO.ADVANCE=1 ELSE AUTO.ADVANCE=-1
  178. 1560 INPUT "Draw latitude and longitude lines at five degree increments? (Y/N)";I$
  179. 1570 'I$="":WHILE I$="":I$=INKEY$:WEND
  180. 1580 IF I$="y" OR I$="Y" THEN I.DO.LATLON =-1 ELSE I.DO.LATLON = 0
  181. 1590 I=0:GOSUB 1960 ' go set up graphics and basic map
  182. 1600 OPEN A$ FOR INPUT AS #1
  183. 1610 WHILE NOT EOF(1)
  184. 1620 INPUT#1,D$(I),T$(I),X(I),Y(I)
  185. 1630 I=I+1
  186. 1640 WEND
  187. 1650 CLOSE #1
  188. 1660 LOCATE 1,1:PRINT A$;:IF AUTO.ADVANCE =-1 THEN LOCATE 23,1:PRINT "HIT ANY KEY";
  189. 1670 FOR I0=0 TO I-1
  190. 1680 OUT.OF.RANGE=0:IMAP(I0,2)=0:GOSUB 1800
  191. 1690 IF OUT.OF.RANGE THEN LOCATE 1,15:PRINT USING M$;D$(I0),T$(I0),Y(I0),X(I0);:GOTO 1710
  192. 1700 LOCATE 1,15:PRINT USING M$;D$(I0),T$(I0),Y(I0),X(I0);
  193. 1710 IF I0 > 0 THEN IF IMAP(I0-1,2) <> -1 THEN PUT (IMAP(I0-1,0)-7,IMAP(I0-1,1)-10),HURICARRAY,XOR
  194. 1720 IF I0 > 0 THEN LINE (IMAP(I0-1,0),IMAP(I0-1,1))-(IMAP(I0,0),IMAP(I0,1)),2
  195. 1730 IF IMAP(I0,2) <> -1 THEN PUT (IMAP(I0,0)-7,IMAP(I0,1)-10),HURICARRAY,XOR
  196. 1735 IF AUTO.ADVANCE=1 THEN GOTO 1750
  197. 1740 I$="":WHILE I$="":I$=INKEY$:WEND
  198. 1750 NEXT
  199. 1760 I$=""
  200. 1770 LOCATE 23,1:INPUT "Press ENTER";Z$
  201. 1780 GOSUB 2410
  202. 1790 RETURN
  203. 1800 ' Subroutine to translate Lat and Lon to Screen Coordinates
  204. 1810 IF X(I0) > 105 OR X(I0) < 60 THEN OUT.OF.RANGE=-1:IMAP(I0,2)=-1
  205. 1820 IF Y(I0) >  33 OR Y(I0) < 10 THEN OUT.OF.RANGE=-1:IMAP(I0,2)=-1
  206. 1830 FOR IB=0 TO 10: IF X(I0) >= MAPXY(IB,0) AND X(I0) < MAPXY(IB+1,0) THEN GOSUB 1880
  207. 1840 NEXT
  208. 1850 FOR IB=12 TO 18:IF Y(I0) >= MAPXY(IB,0) AND Y(I0) < MAPXY(IB+1,0) THEN GOSUB 1920
  209. 1860 NEXT
  210. 1870 RETURN
  211. 1880 ' calculate x(longitude)
  212. 1890 Z=MAPXY(IB+1,0)-MAPXY(IB,0)
  213. 1900 X=X(I0)-MAPXY(IB,0):XX=MAPXY(IB,1)-MAPXY(IB+1,1):IPOS=INT((X/Z)*XX) :IMAP(I0,0)=INT(MAPXY(IB,1))-IPOS
  214. 1910 RETURN
  215. 1920 ' calculate y(latitude)
  216. 1930 Z=MAPXY(IB+1,0)-MAPXY(IB,0)
  217. 1940 Y=Y(I0)-MAPXY(IB,0):YY=MAPXY(IB,1)-MAPXY(IB+1,1):IPOS=INT((Y/Z)*YY) :IMAP(I0,1)=INT(MAPXY(IB,1))-IPOS
  218. 1950 RETURN
  219. 1960 SCREEN 1,0:COLOR 0,1 ':OUT 980,2:OUT 981,43
  220. 1970 'IF STORED THEN THEN PUT(0,0),STOR.SCR,PSET:GOTO 2060
  221. 1980 CIRCLE (160,100),4,2,,,1:PAINT (160,100),2,2:PSET(160,100),2:DRAW "C2XHUR$;":GET (153,90)-(167,111),HURICARRAY:PUT (153,90),HURICARRAY,XOR
  222. 1990 PSET (202,0),3:DRAW "C3XMAP0$;XMAP1$;XMAP2$;XMAP3$;XMAP4$;XMAP5$;":PSET (0,96),3:DRAW "XMAP6$;":PSET (0,34),3:DRAW "XMAP7$;": PAINT (80,0),3,3: PAINT (40,80),1,3
  223. 2000 PAINT (180,110),2,2:PAINT (234,132),2,3:PAINT (265,136),2,3:PAINT (194,138),2,3:PAINT (304,181),2,3:PAINT (161,115),2,3:PAINT (191,91),2,3
  224. 2010 PSET (275,30),3:DRAW "C3R2D1L3" : ' BERMUDA
  225. 2015 GOSUB 2060
  226. 2020 IF CITY=1 THEN PSET (65,67),2:DRAW "C2H1R2G2R2U1L2":LOCATE 9,2:PRINT CITY$; ' CORPUS CHRISTI,TEXAS
  227. 2021 IF CITY=2 THEN PSET (71,60),2:DRAW "C2H1R2G2R2U1L2":LOCATE 8,1:PRINT CITY$; 'Victoria,Texas
  228. 2022 IF CITY=3 THEN PSET (66,79),2:DRAW "C2H1R2G2R2U1L2":LOCATE 10,2:PRINT CITY$; 'BROWNSVILLE,TEXAS
  229. 2023 IF CITY=4 THEN PSET (80,55),2:DRAW "C2H1R2G2R2U1L2":LOCATE 7,4:PRINT CITY$; 'GALVESTON,TEXAS
  230. 2024 IF CITY=5 THEN PSET (119,48),2:DRAW "C2H1R2G2R2U1L2":LOCATE 6,7:PRINT CITY$; 'NEW ORLEANS, LA
  231. 2025 IF CITY=6 THEN PSET (176,80),2:DRAW "C2H1R2G2R2U1L2":LOCATE 10,18:PRINT CITY$; ' BOCA RATON, FLA
  232. 2026 IF CITY=7 THEN PSET (175,86),2:DRAW "C2H1R2G2R2U1L2":LOCATE 11,16:PRINT CITY$; ' MIAMI, FLA
  233. 2027 IF CITY=8 THEN PSET (0,0),2:DRAW "C2H1R2G2R2U1L2":LOCATE 0,0:PRINT CITY$;' city
  234. 2028 IF CITY=9 THEN PSET (0,0),2:DRAW "C2H1R2G2R2U1L2":LOCATE 0,0:PRINT CITY$; ' city
  235. 2030 LOCATE 3,7:PRINT " U S A";:LOCATE 6,29:PRINT "ATLANTIC";:LOCATE 8,31:PRINT "OCEAN";:LOCATE 14,2:PRINT " MEXICO";:LOCATE 21,3:PRINT "PACIFIC";:LOCATE 21,22:PRINT "CARIBBEAN ";
  236. 2040 RETURN: ' LOCATE 10,12:PRINT "GULF";:LOCATE 11,14:PRINT "OF";:LOCATE 12,13:PRINT "MEXICO";
  237. 2050 IF NOT STORED THEN GET (0,0)-(319,199),STOR.SCR:STORED=-1
  238. 2060 IF I.DO.LATLON THEN FOR I=0 TO 10:LINE(MAPXY(I,1),0)-(MAPXY(I,1),199),1:NEXT:FOR I=12 TO 18:LINE(0,MAPXY(I,1))-(319,MAPXY(I,1)),1:NEXT:I=0
  239. 2070 IF I.DO.LATLON THEN LOCATE 7,38:PRINT "30";:LOCATE 12,38:PRINT "25";:LOCATE 16,38:PRINT "20";:LOCATE 20,38:PRINT "15";:LOCATE 25,5:PRINT "100";:LOCATE 25,15:PRINT "90";:LOCATE 25,22:PRINT "80";:LOCATE 25,30:PRINT "70";
  240. 2080 RETURN
  241. 2090 REM ERROR TRAPS
  242. 2100 IF ERR=53 THEN CLS:COLOR 0,7:LOCATE 1,1:PRINT "THERE IS NO STORM ";A$;" RECORDED.":PRINT "THE STORMS ON THIS DISK ARE:":FILES "*.":COLOR 7,8
  243. 2110 IF ERR=53 THEN PRINT "TRY ONE OF THESE STORMS, OR <RETURN>.":LINE INPUT "==> ";A$
  244. 2120 IF ERR=53 AND A$="" THEN GOSUB 2410:RESUME 1310
  245. 2130 IF ERR=53 AND LEN(A$) <> 0 THEN CLS:RESUME 1590
  246. 2140 ON ERROR GOTO 0
  247. 2150 FOR ICAP=1 TO LEN(A$):E$=MID$(A$,ICAP,1):IF E$ >="a" AND E$ <="z" THEN MID$(A$,ICAP,1) = CHR$(ASC(E$)-32)
  248. 2160 NEXT:RETURN
  249. 2200 REM toggle color graphics
  250. 2210 DEF SEG=0
  251. 2220 POKE &H410, (PEEK(&H410) AND &HCF) OR &H10
  252. 2230 SCREEN 1,0,0,0: SCREEN 0:WIDTH 40:LOCATE ,,1,6,7
  253. 2240 RETURN
  254. 2250 REM toggle monochrome display
  255. 2260 DEF SEG=0
  256. 2270 POKE &H410, (PEEK(&H410) OR &H30)
  257. 2280 SCREEN 0:WIDTH 40:WIDTH 80:LOCATE ,,1,12,13
  258. 2290 STOP 'RETURN
  259. 2410 ' switch to color 80 char mode
  260. 2420 DEF SEG = 0
  261. 2430 POKE &H410,(PEEK(&H410) AND &HCF) OR &H10
  262. 2440 SCREEN 1,0,0,0
  263. 2450 SCREEN 0
  264. 2460 WIDTH 80
  265. 2470 LOCATE ,,1,6,7
  266. 2480 RETURN
  267. 2500 CLS: LOCATE  2,15 :COLOR 0,7:PRINT " H U R R I C A N E   T R A C K I N G   P R O G R A M ";:COLOR 7,0
  268. 2510 LOCATE  4,20 :PRINT "(1)   GALVESTON, TEXAS                    "
  269. 2520 LOCATE  5,20 :PRINT "(2)   VICTORIA, TEXAS                     "
  270. 2530 LOCATE  6,20 :PRINT "(3)   BROWNSVILLE, TEXAS                  "
  271. 2540 LOCATE  7,20 :PRINT "(4)   CORPUS CHRISTI, TEXAS               "
  272. 2550 LOCATE  8,20 :PRINT "(5)   NEW ORLEANS, LOUISIANA              "
  273. 2560 LOCATE  9,20 :PRINT "(6)   BOCA RATON, FLORIDA                 "
  274. 2570 LOCATE 10,20 :PRINT "(7)   MIAMI, FLORIDA                      "
  275. 2580 LOCATE 12,20 :INPUT "Enter number of your CITY/AREA --> ";M
  276. 2590 ON M GOSUB 2640,2620,2630,2610,2650,2660,2670,2500,2500
  277. 2600 RETURN
  278. 2610 CITY=1:X=97.22:Y=27.48 'x=longitude,y=latitude of city to track to
  279. 2615 CITY$=" CORPUS":CITY1$="CORPUS CHRISTI":RETURN
  280. 2620 CITY=2:X=96.56:Y=28.51
  281. 2625 CITY$="VICTORIA":CITY1$="VICTORIA":RETURN
  282. 2630 CITY=3:X=97.93:Y=26.43
  283. 2635 CITY$="BROWNSV":CITY1$="BROWNSVILLE":RETURN
  284. 2640 CITY=4:X=94.65:Y=29.45
  285. 2645 CITY$=" GALVST":CITY1$="GALVESTON":RETURN
  286. 2650 CITY=5:X=89.56:Y=30.05
  287. 2655 CITY$=" NEW ORL.":CITY1$="NEW ORLEANS":RETURN
  288. 2660 CITY=6:X=80.05:Y=26.21
  289. 2665 CITY$=" BOCA":CITY1$="BOCA RATON":RETURN
  290. 2670 CITY=7:X=80.17:Y=25.43
  291. 2675 CITY$=" MIAMI":CITY1$="MIAMI, FLA":RETURN
  292. 2700 RETURN
  293. 2800 'SUBROUTINE TO COMPUTE THE SPEED OF ADVANCE
  294. 2810 'Variables are OLDDAY,OLDTIME - where it was
  295. 2820 '              D1$,T1         - where it is   and  q=distance moved
  296. 2830 NUDAY=VAL(MID$(D1$,4,2)) 'extract the day
  297. 2840 DAYINT=NUDAY-OLDDAY      'determine # of 24hr periods
  298. 2845 IF DAYINT <0 THEN HR24 = 2400
  299. 2850 IF DAYINT = 0 THEN HR24 = 0
  300. 2860 IF DAYINT = 1 THEN HR24 = 2400
  301. 2870 IF DAYINT = 2 THEN HR24 = 4800
  302. 2880 IF DAYINT = 3 THEN HR24 = 7200
  303. 2890 IF DAYINT > 3 THEN HR24 = 9999
  304. 2892 TH1=VAL(LEFT$(T1$,2))*100:TM1=VAL(MID$(T1$,4,2)) 'EXTRACT SEMICOLN
  305. 2894 TIME1=TH1 + TM1 'STORE NEW TIME
  306. 2900 LAPSTIME=(HR24 + (TIME1 - OLDTIME))/100 'calculate total hours
  307. 2910 SOA = Q/LAPSTIME  'calculate speed of advance
  308. 2915 TSOA = TSOA + SOA:COUNT = COUNT + 1 'SUM SPEED FOR AVERAGE CALC.
  309. 2920 OLDDAY = NUDAY:OLDTIME = TIME1:RETURN
  310. 2930 END
  311. 3000 CLS:LOCATE 10,5:COLOR 15:PRINT "   WOULD YOU LIKE TO REVIEW OPERATIONAL NOTES?"
  312. 3005 PRINT:PRINT:INPUT "PRESS Y OR N, THEN PRESS <ENTER>.";QUEST$
  313. 3010 COLOR 7,8
  314. 3020 IF QUEST$="N" OR QUEST$="n" THEN RETURN
  315. 3030 CLS:PRINT:PRINT "     The purpose of this program is to track HURRICANES.  It will track a storm"
  316. 3033 PRINT "from history or a new storm.  The program allows you to enter data on a current storm as often as you wish and print out a list of the storms' location by date and time. ":PRINT
  317. 3050 PRINT "     In addition, the program will provide a warning if the storm is within l00 miles of the city selected as the 'TRACK TO CITY', and display the selected     storm super-imposed on a color map."
  318. 3060  PRINT :PRINT :PRINT: INPUT "PRESS <ENTER> TO CONTINUE"; QUEST$
  319. 3070 CLS:PRINT:PRINT:PRINT "There are two menus associated with this program.":PRINT:PRINT "The first menu simply presents the list of cities which are currently available as a 'TRACK TO CITY ', from which you may select ONE.":PRINT
  320. 3080 PRINT "The second menu is the operational menu.  It presents five (5) options.  The    options are as follow:":PRINT :PRINT "   1) Enter a NEW storm.":PRINT "   2) ADD or LIST storm data.":PRINT "   3) Display storm on map."
  321. 3083 PRINT "   4) Change track to city.":PRINT "   5) End the program."
  322. 3086 PRINT: INPUT "PRESS <ENTER> TO CONTINUE";QUEST$
  323. 3089 CLS:PRINT "    The first option (l) allows you to enter the INITIAL data on a storm which  is not currently on the disk. You will be prompted to enter:":PRINT
  324. 3090 PRINT "1) DATE ":PRINT "2) TIME ":PRINT "3) LATITUDE":PRINT "4) LONGITUDE"
  325. 3093 COLOR 3:PRINT :PRINT "NOTE:":PRINT "Latitude MUST be greater than l0 Degrees North and LESS than 35 Degrees North.  Longitude MUST be greater than 60 Degrees West and LESS than l05 Degrees West."
  326. 3100 PRINT: COLOR 0,15 :PRINT  "WARNING: This option must NOT be used for storms that are now stored on the disk":COLOR 7,0
  327. 3110 PRINT: INPUT "PRESS <ENTER> TO CONTINUE";QUEST$
  328. 3120 CLS: PRINT "     The second option (2) allows you to enter ADDITONAL data about an active   storm or list data for a storm stored on disk and may be used as often as you   wish.":PRINT
  329. 3130 PRINT "     You will be asked for the name of the storm.  Next, you will be asked if   you wish to ADD any new coordinates.  Type 'Y' to ADD more data to an active    storm.  Do not add data to an old storm unless you have better data than is"
  330. 3140 PRINT "currently stored on the disk.":PRINT
  331. 3160 PRINT "You will be prompted thru the data entry process.  Keep in mind that the storm  coordinates must be >10 N and <35 N and >60 W and <105 W.  After entering 'END' you will have a choice of hard copy along with the display list."
  332. 3170 PRINT :PRINT "In addition, if the storm is within 100 miles of the current 'TRACK TO CITY,' a warning will be issued!"
  333. 3180 PRINT :PRINT "If you only want to list an old storm then enter 'N' and you will be prompted   for hard copy as above.":PRINT
  334. 3190 PRINT :INPUT "PRESS <ENTER> TO CONTINUE";QUEST$
  335. 3200 CLS: PRINT:PRINT  "     Option 3 will allow you to track the storm on a map with either 'AUTO      ADVANCE' or 'MANUAL' advance ('Press any key' prompt) and with or without       Latutide/Longitude lines in 5 degree increments."
  336. 3210 PRINT :PRINT "When the storm is not moving on the map, you may 'PRINT SCREEN' and the IBM     Printer will produce a 'shades of grey' hard copy of the map."
  337. 3220 PRINT :INPUT "PRESS <ENTER> TO CONTINUE";QUEST$
  338. 3230 CLS: PRINT :PRINT "   Option 4 of the operational menu will return you to the first menu to change the 'TRACK TO CITY'.  After you select a new city, you will be returned to the  operational menu.":PRINT
  339. 3240 PRINT:PRINT "Option 5 will terminate the program."
  340. 3250 PRINT:COLOR 2:PRINT "ENJOY THE PROGRAM AND HAPPY HURRICANE TRACKING!"
  341. 3260 PRINT: INPUT "ANOTHER REVIEW (Y/N)";QUEST$:COLOR 7
  342. 3270 IF QUEST$ = "Y" OR QUEST$ = "y" THEN GOTO 3030 ELSE RETURN
  343.