home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 1 / HamRadio.cdr / misc / storm / storm.bas (.txt) < prev    next >
Encoding:
GW-BASIC  |  1985-10-27  |  33.0 KB  |  616 lines

  1. 100  ' **************************************************************
  2. 110  ' *******               HURRICANE TRACKER              *********
  3. 120  ' *******       From a program by WHMC - 7/27/84       *********
  4. 130  ' ******* modified by: Thomas Pesek, Sugar Land, Texas *********
  5. 140  ' *******            VERSION 2.0    10/24/85           *********
  6. 150  ' *******     With Hewlett Packard Plotter Support     *********
  7. 160  ' **************************************************************
  8. 170  KEY OFF:DEF SEG=0:POKE &H417, &H40
  9. 180  GOSUB 5880
  10. 190  GOSUB 4520
  11. 200  DEFINT I
  12. 210  DIM C$(15),D$(200),T$(200),X(200),Y(200),MAPXY(20,2),IMAP(200,2),E$(50),HURICARRAY(90),STOR.SCR(4002)
  13. 220  U$="&    &  ##.#  ###.#  ####.# MI    ##.# MPH  ###.# DEG &"
  14. 230  M$="& & ##.# ###.# "
  15. 240  V$="  &  &  ###.#  ###.#  ####.# MI  ##.# MPH ###.# DEG &"
  16. 250  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"
  17. 260  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
  18. 270  MAP2$="BM-16,-18L4U3R2E2R2F1D4L2BM-4,-14U1BM+2,-2U2BM-2,-2U1BM-1,-2U2BU3U1L1U1G3F1E1R1BM-6,-4U1BM-2,-2U1BM-2,-4U1BU2U1BH2U1BG4U1BL6L2BL4BU3G2L8U3H2RR2F1R5F2BL20" ' LITTLE ISLANDS PUERTO RICO
  19. 280  MAP3$="E2U2M-6,-2E2L3H1L2M-11,-3G2H1L6G2D1M+5,+3D4L12F3R13F4E4R3E2R4F1E2BL54L6G3R2F3R10E1U2L3H3BM-33,-18U2H1L2G1D2R4BL12BU6" ' HAITI , JAMAICA
  20. 290  MAP4$="E2R2U3R3E2M+10,-2M+10,+2F4R6D2M+11,+7R2F2R4F2R4D2M-10,+3H1L6M-9,+2E5H2M-7,-2H4M-10,-3H2M-12,+2L4C3" 'CUBA
  21. 300  MAP5$="BM+42,-13U2L1D2BU4U3H3G1D2F3BM+3,-6U2BU8BR1D2R1U2H3BL2U1L3D1NR3L3BM+17,+8L4D1R4F1BF4F3U1H3BG4F3D1BE3BR4BD1D2F3U1H2BR6BD5F1R3D2G3L1E2U1H2" '                NASSAU AND BAHAMAS
  22. 310  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)
  23. 320  MAP7$="M+4,+2D2M+9,+11D4R1M+5,+7R3M+4,-6R8F3R3F1D3M+8,+10D2M+6,+5R3M+9,+4"    '  TEXAS BORDER
  24. 330  STORM$="R2E1U1H1L3G2D3F2R3E4U2H4L4G4D4F5"
  25. 340  HUR$="BH4U1E3R3D1U2L3G2D4L1BF8D1G3L3U1D2R3E2U4R1BH4"
  26. 350  STORMNAME$="* none *"
  27. 360  FOR I=0 TO 19:READ MAPXY(I,0):READ MAPXY(I,1):NEXT ' 0-10=X, 11-17=Y
  28. 370  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
  29. 380  DATA 0,199,10,185,15,158,20,125,25,90,30,50,35,8,50,0
  30. 390  GOSUB 3520
  31. 400  GOSUB 3610
  32. 410  GOSUB 1770
  33. 420  REM ******* UPDATE/LIST DATA ON EXISTING STORMS *********
  34. 430  IF ERR=53 THEN BEEP:PRINT "STORM NOT FOUND ON DISK!":PRINT :RESUME 470 ELSE PRINT "ERROR ";ERR:END
  35. 440  CLS:COLOR 0,7:LOCATE 2,25:PRINT " HURRICANE       TRACKER (c) "
  36. 450  LOCATE 3,5:PRINT"Generate your own Tracking Record of Tropical Storms or Hurricanes":COLOR 7,1:PRINT
  37. 460  GOSUB 1900
  38. 470  LOCATE 24,1:PRINT "What is the name of the HURRICANE/STORM? (Default = ";STORMNAME$;")   ";:INPUT A$
  39. 480  IF A$="" AND STORMNAME$="* none *" THEN BEEP:PRINT :GOTO 470
  40. 490  IF A$<> "" THEN STORMNAME$=A$
  41. 500  ON ERROR GOTO 420
  42. 510  PRINT:PRINT "Any ";:COLOR 4,0:PRINT " NEW ";:COLOR 7,1:INPUT " coordinates to add (Y or N)";Z$
  43. 520  IF Z$="" THEN 730
  44. 530  IF Z$="N" OR Z$="n" THEN 730
  45. 540  PRINT :PRINT :PRINT
  46. 550  OPEN STORMNAME$ FOR APPEND AS #1
  47. 560  ON ERROR GOTO 0
  48. 570  PRINT :PRINT "      Enter new data ( or <blank> or <END> to end)"
  49. 580  INPUT "     Enter DATE (MM/DD/YY) ";D$
  50. 590  IF D$="END" OR D$="end" OR D$="" THEN 720
  51. 600  IF LEN(D$) <> 8 THEN LOCATE CSRLIN-1,1:COLOR 23,0:PRINT "   Form must be  MM/DD/YY   ";:COLOR 7,1:PRINT :GOTO 580
  52. 610   INPUT "     Enter TIME (16:45)   ";T$
  53. 620  IF LEN(T$) <> 5 THEN LOCATE CSRLIN-1,1:COLOR 23,0:PRINT "   Form must be  15:30   ";:COLOR 7,1:PRINT :GOTO 610
  54. 630  INPUT "     Enter LATITUDE (Between 10 and 35) == (xx.x) ";Y
  55. 640  IF (Y <10) OR (Y >35) THEN PRINT "MUST BE >10 NORTH OR <35 NORTH.":GOTO 630
  56. 650  INPUT "     Enter LONGITUDE (Between 60 and 105) || (xx.x) ";X
  57. 660  IF (X <60) OR (X >105) THEN PRINT "MUST BE >60 WEST OR <105 WEST.":GOTO 650
  58. 670  PRINT :PRINT "Date: ";D$;"  Time: ";T$;"  Longit.: ";X;"  Lat.: ";Y;
  59. 680  PRINT :INPUT "Is this data OK? (Y/N)";QA$
  60. 690  IF QA$="" OR QA$="n" OR QA$="N" THEN PRINT :PRINT "Re-enter last data point!":BEEP:GOTO 570
  61. 700  WRITE #1, D$;T$;X;Y
  62. 710  GOTO 570
  63. 720  CLOSE #1
  64. 730  OPEN STORMNAME$ FOR INPUT AS #1
  65. 740  ON ERROR GOTO 0
  66. 750  PRINT :INPUT "Do you want a hard copy (Y or N)";Z$
  67. 760  IF Z$="Y" OR Z$="y" THEN H=1 ELSE H=0
  68. 770  IF H=1 THEN 790
  69. 780  PRINT :PRINT :PRINT
  70. 790  P1=20 'Set page counter
  71. 800  INPUT #1,D$,T$,X,Y
  72. 810  PRINT "              Initial tracking began on - ";D$;" , at - ";T$
  73. 820  IF H=1 THEN LPRINT "              Initial tracking began on - ";D$;" , at - ";T$
  74. 830  PRINT "  Hurricane ";STORMNAME$;"'s Initial Position was LATITUDE -";Y;", LONGITUDE -";X;
  75. 840  IF H=1 THEN LPRINT "       Hurricane ";STORMNAME$;"'s Initial Position was LAT -";Y;" , LON -";X;
  76. 850  OLDDAY=VAL(MID$(D$,4,2))
  77. 860  TH=VAL(LEFT$(T$,2))*100:TM=VAL(MID$(T$,4,2))
  78. 870  OLDTIME=TH+TM 'STORE ORIGINAL TIME
  79. 880  COUNT = 0:ASOA = 0:TSOA = 0
  80. 890  PRINT STRING$(80,61)
  81. 900  IF H=1 THEN LPRINT STRING$(80,61)
  82. 910  X0=X
  83. 920  Y0=Y
  84. 930  IF EOF(1) THEN 1090
  85. 940  INPUT #1,D1$,T1$,X1,Y1
  86. 950  GOSUB 1530
  87. 960  IF P1<20 THEN 1000
  88. 970  COLOR 2,0:PRINT "  DATE      TIME   LAT    LON    DISTANCE     SPEED     DIRECTION OF TRAVEL  ";:COLOR 7,1:PRINT:PRINT
  89. 980  IF H=1 THEN LPRINT "    DATE    TIME    LAT    LON    DISTANCE   SPEED    DIRECTION OF TRAVEL":LPRINT
  90. 990  P1=1
  91. 1000  GOSUB 4340
  92. 1010  PRINT USING U$;D1$,T1$,Y1,X1,Q,SOA,D,C$
  93. 1020  IF H=1 THEN LPRINT USING V$;D1$,T1$,Y1,X1,Q,SOA,D,C$
  94. 1030  IF H=0 THEN P1=P1+1 ELSE 1060
  95. 1040  IF P1<>20 THEN 1060
  96. 1050  INPUT "     Press <ENTER> to continue";Z$
  97. 1060  X=X1
  98. 1070  Y=Y1
  99. 1080  GOTO 930
  100. 1090  X=X0
  101. 1100  Y=Y0
  102. 1110  GOSUB 1530
  103. 1120  T2=D:ASOA = TSOA/COUNT 'compute average speed of advance
  104. 1130  PRINT :PRINT "TOTAL movement has been ";T2;" DEGREES ";C$;" AT ";ASOA;" MPH":PRINT
  105. 1140  IF H=1 THEN LPRINT :LPRINT USING "    TOTAL MOVEMENT HAS BEEN ##.# DEGREES & AT ##.# MPH";T2,C$,ASOA:ASOA=0
  106. 1150  ON CITY GOTO 1160,1170,1180,1190,1200,1210,1220,1230,1240,1250,1260,1270,1280,1290,1300,1310
  107. 1160  X=97.22 : Y=27.48 :GOTO 1320'x=long, y=lat of city to track to 1
  108. 1170  X=96.56 : Y=28.51:GOTO 1320 'CITY 2
  109. 1180  X=97.93 : Y=26.43:GOTO 1320 'CITY 3
  110. 1190  X=94.65 : Y=29.45:GOTO 1320 'CITY 4
  111. 1200  X=89.56 : Y=30.05:GOTO 1320 'CITY 5
  112. 1210  X=95.37 : Y=29.77:GOTO 1320 'CITY 6
  113. 1220  X=80.17 : Y=25.43:GOTO 1320 'CITY 7
  114. 1230  X=88.08 : Y=30.7:GOTO 1320  'CITY 8
  115. 1240  X=87.22 : Y=30.42:GOTO 1320 'CITY 9
  116. 1250  X=82.63 : Y=27.77:GOTO 1320 'CITY 10
  117. 1260  X=81.66 : Y=30.33:GOTO 1320 'CITY 11
  118. 1270  X=97.85 : Y=22.22:GOTO 1320 'CITY 12
  119. 1280  X=86.92 : Y=20.42:GOTO 1320 'CITY 13
  120. 1290  X=93.2 : Y=30.22:GOTO 1320 'CITY 14
  121. 1300  X=81.08 : Y=32.07:GOTO 1320 'CITY 15
  122. 1310  X=XCITY : Y=YCITY 'CITY 16
  123. 1320  GOSUB 1530
  124. 1330  COLOR 4,0:PRINT USING "    & IS ####.# MILES AT ##.# DEGREES & FROM  &.";STORMNAME$,Q,D,C$,CITY1$;:COLOR 7,1:PRINT :PRINT
  125. 1340  IF H=1 THEN LPRINT USING "    & IS ####.# MILES AT ##.# DEGREES & FROM & .";STORMNAME$,Q,D,C$,CITY1$
  126. 1350  P1=P1+3
  127. 1360  FOR I=P1 TO 10:PRINT :NEXT
  128. 1370  CLOSE #1
  129. 1380  IF Q >= 100 THEN 1450
  130. 1390  PRINT :PRINT :PRINT
  131. 1400  COLOR 16,7:PRINT "   ************************************************************************     ";
  132. 1410  PRINT "   *        W A R N I N G  -  HURRICANE IS LESS THAN 100 MILES AWAY       *   "
  133. 1420  PRINT "   ************************************************************************   ";:COLOR 7,1
  134. 1430  FOR I=1 TO 3:SOUND 4400,8:SOUND 220,8:NEXT
  135. 1440  FOR I=1 TO 6:PRINT :NEXT : IF H=1 THEN LPRINT CHR$(12);
  136. 1450  COLOR 7,1:INPUT "Press <ENTER>";Z$: RETURN
  137. 1460  ' This Subroutine computes the direction and distance between two points
  138. 1470  ' on the globe. Input is - Starting coordinates X,Y and ending coordinates
  139. 1480  ' x1,y1.  Output is - C$ -- contains the heading in words, IE north of west
  140. 1490  ' due south, etc.     D  -- contains the Angular Heading in degrees
  141. 1500  '                     Q  -- contains the Distance between two points
  142. 1510  ' Uses variables A,B,Q,Q2,D,S,N,U
  143. 1520  '      Variables X,X1,Y,Y1 are unchanged
  144. 1530  IF X1 = X AND Y1 = Y THEN C$="NO MOVEMENT"
  145. 1540  IF X1 > X AND Y1 = Y THEN C$="DUE WEST"
  146. 1550  IF X1 > X AND Y1 > Y THEN C$="NORTH OF WEST"
  147. 1560  IF X1 = X AND Y1 > Y THEN C$="DUE NORTH"
  148. 1570  IF X1 < X AND Y1 > Y THEN C$="NORTH OF EAST"
  149. 1580  IF X1 < X AND Y1 = Y THEN C$="DUE EAST"
  150. 1590  IF X1 < X AND Y1 < Y THEN C$="SOUTH OF EAST"
  151. 1600  IF X1 = X AND Y1 < Y THEN C$="DUE SOUTH"
  152. 1610  IF X1 > X AND Y1 < Y THEN C$="SOUTH OF WEST"
  153. 1620  U=57.2958
  154. 1630  Q=0: D=0
  155. 1640  N=ABS(X-X1)
  156. 1650  B=90 - Y
  157. 1660  A=90 - Y1
  158. 1670  S=COS(A/U)*COS(B/U)+SIN(A/U)*SIN(B/U)*COS(N/U)
  159. 1680  IF S*S >= 1 THEN RETURN
  160. 1690  Q2=ATN(SQR(1-S*S)/S)
  161. 1700  Q=Q2*U*69.5
  162. 1710  IF Y=Y1 THEN RETURN
  163. 1720  S=SIN(A/U)*SIN(N/U)/SIN(Q2)
  164. 1730  IF S*S >= 1 THEN RETURN
  165. 1740  D=ATN(S/SQR(1-S*S))*U
  166. 1750  D=90-D
  167. 1760  RETURN
  168. 1770  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 "
  169. 1780  LOCATE  4,20:COLOR 7,1:PRINT "Current Track-to city is: ";:COLOR 4,7:PRINT " ";CITY1$;" ";:COLOR 7,1
  170. 1790  COLOR 4,7:LOCATE 7,20:PRINT " 1 ";:LOCATE 9,20:PRINT " 2 ";:LOCATE 11,20:PRINT " 3 ";:LOCATE 13,20:PRINT " 4 ";:LOCATE 15,20:PRINT " 5 ";:COLOR 7,1
  171. 1800  LOCATE  7,26:PRINT "Enter a NEW Storm/Hurricane         "
  172. 1810  LOCATE  9,26 :PRINT "Update or List Position of Existing Storm/Hurricane  "
  173. 1820  LOCATE  11,26 :PRINT "Track a Storm/Hurricane on the MAP.           "
  174. 1830  LOCATE  13,26 :PRINT "Change track to City/Area           "
  175. 1840  LOCATE 15,26 :PRINT "END Program.                        "
  176. 1850  LOCATE 18,20 :PRINT "Enter function ";:COLOR 31:PRINT "===> _";:COLOR 7
  177. 1860  A$=INKEY$:IF A$="" THEN 1860
  178. 1870  ON VAL(A$) GOSUB 1930,440,2220,3610,1890
  179. 1880  GOTO 1770
  180. 1890  LOCATE 22,1:CLS:SYSTEM:END
  181. 1900  REM *********** DISPLAY STORMS ***********
  182. 1910  LOCATE 5,20:COLOR 15:PRINT "The Storms currently on this disk are:";:COLOR 7:LOCATE 7,10:PRINT :FILES "*."
  183. 1920  RETURN
  184. 1930  CLS:COLOR 0,7:LOCATE 2,22:PRINT " This program creates a NEW storm. ";:COLOR 7,1:PRINT
  185. 1940  GOSUB 1900
  186. 1950  LOCATE 24,5:INPUT "      What is the name of the Storm"; A$
  187. 1960  IF A$="" THEN BEEP: PRINT :GOTO 1950
  188. 1970  STORMNAME$=A$
  189. 1980  ON ERROR GOTO 2040
  190. 1990  OPEN STORMNAME$ FOR INPUT AS #1
  191. 2000  CLOSE #1
  192. 2010  INPUT "FILE EXISTS! Do you want to overwrite it? (Y/N)"; YN$
  193. 2020  IF YN$<>"y" OR YN$<>"Y" THEN GOTO 1940
  194. 2030  GOTO 2050
  195. 2040  RESUME 2050
  196. 2050  OPEN STORMNAME$ FOR OUTPUT AS #1
  197. 2060  INPUT "     Enter Initial DATE (MM/DD/YY) ";D$
  198. 2070  IF LEN(D$) <> 8 THEN LOCATE CSRLIN-1,1:COLOR 23,0:PRINT "   Form must be  MM/DD/YY   ";:COLOR 7,1:PRINT :GOTO 2060
  199. 2080  INPUT "     Enter Initial TIME (16:45)   ";T$
  200. 2090  IF LEN(T$) <> 5 THEN LOCATE CSRLIN-1,1:COLOR 23,0:PRINT "   Form must be  15:30   ";:COLOR 7,1:PRINT :GOTO 2080
  201. 2100  INPUT "     Enter Initial LATITUDE (Between 10 and 35)  == (xx.x) ";Y
  202. 2110  IF (Y <10) OR (Y >35) THEN PRINT "MUST BE >10 DEGREES NORTH AND <35 DEGREES NORTH.":GOTO 2100
  203. 2120  INPUT "     Enter Initial LONGITUDE (Between 60 and 105) || (xx.x) ";X
  204. 2130  IF (X <60) OR (X >105) THEN PRINT "MUST BE >60 DEGREES WEST AND <105 DEGREES WEST.":GOTO 2120
  205. 2140  PRINT :PRINT "Date: ";D$;"  Time: ";T$;"  Longit.: ";X;"  Lat.: ";Y;
  206. 2150  PRINT :INPUT "Is this data OK? (Y/N)";QA$
  207. 2160  IF QA$="" OR QA$="n" OR QA$="N" THEN PRINT :PRINT "Re-enter initial data point!":BEEP:GOTO 2060
  208. 2170  WRITE #1, D$;T$;X;Y
  209. 2180  CLOSE #1
  210. 2190  RETURN
  211. 2200  ' ********* Routine to draw storm on map ********
  212. 2210  IF ERR=53 THEN BEEP:PRINT "STORM NOT FOUND ON DISK!":PRINT :RESUME 2250 ELSE PRINT "ERROR ";ERR:END
  213. 2220  CLS:COLOR 0,7:LOCATE 2,18
  214. 2230  PRINT " This program tracks a storm on the map. ";:COLOR 7,1:PRINT
  215. 2240  GOSUB 1900
  216. 2250  LOCATE 24,1:PRINT "What is the name of the STORM? (Default = ";STORMNAME$;")    ";:INPUT A$
  217. 2260  IF A$="" AND STORMNAME$="* none *" THEN BEEP:PRINT :GOTO 2250
  218. 2270  IF A$<>"" THEN STORMNAME$=A$
  219. 2280  ON ERROR GOTO 2200
  220. 2290  OPEN STORMNAME$ FOR INPUT AS #1
  221. 2300  I=0: GOSUB 2490 :NP=I
  222. 2310  ON ERROR GOTO 0
  223. 2320  INPUT "Do you want auto advance for the storm? (Y/N)";Q$
  224. 2330  IF Q$="N" OR Q$="n" THEN AUTO.ADVANCE=-1 ELSE AUTO.ADVANCE=1
  225. 2340  INPUT "Draw latitude and longitude lines at five degree increments? (Y/N)";I$
  226. 2350  IF I$="N" OR I$="n" THEN I.DO.LATLON =0 ELSE I.DO.LATLON = -1
  227. 2360  INPUT "Do you want to plot additional storm tracks (Y/N)";A$
  228. 2370  IF A$<>"Y" AND A$<>"y" THEN NSTORM=1:GOTO 2560
  229. 2380  FOR J=2 TO 4
  230. 2390  PRINT "What is the name of Storm ";J;" (Blank to end)";:INPUT STORMNAME$(J)
  231. 2400  IF STORMNAME$(J)="" THEN NSTORM=J-1:GOTO 2550
  232. 2410  ON ERROR GOTO 2480
  233. 2420  OPEN STORMNAME$(J) FOR INPUT AS #1
  234. 2430  I=(J-1)*50+1
  235. 2440  GOSUB 2490:LP(J)=I
  236. 2450  NEXT J
  237. 2460  NSTORM=4
  238. 2470  GOTO 2550
  239. 2480  IF ERR=53 THEN BEEP:PRINT "STORM NOT FOUND ON DISK!":PRINT :RESUME 2390 ELSE PRINT "ERROR ";ERR:END
  240. 2490  WHILE NOT EOF(1)
  241. 2500  INPUT#1,D$(I),T$(I),X(I),Y(I)
  242. 2510  I=I+1
  243. 2520  WEND
  244. 2530  CLOSE #1
  245. 2540  RETURN
  246. 2550  ON ERROR GOTO 0
  247. 2560  GOSUB 3230 ' ****** go set up graphics and basic map ****
  248. 2570  LOCATE 1,1:PRINT STORMNAME$;"            ";:IF AUTO.ADVANCE =-1 THEN LOCATE 23,1:PRINT "HIT ANY KEY";
  249. 2580  FOR I0=0 TO NP-1
  250. 2590  OUT.OF.RANGE=0:IMAP(I0,2)=0:GOSUB 3070
  251. 2600  IF OUT.OF.RANGE THEN LOCATE 1,15:PRINT USING M$;D$(I0),T$(I0),Y(I0),X(I0);:GOTO 2620
  252. 2610  LOCATE 1,15:PRINT USING M$;D$(I0),T$(I0),Y(I0),X(I0);
  253. 2620  IF I0 > 0 THEN IF IMAP(I0-1,2) <> -1 THEN PUT (IMAP(I0-1,0)-7,IMAP(I0-1,1)-10),HURICARRAY,XOR
  254. 2630  IF I0 > 0 THEN LINE (IMAP(I0-1,0),IMAP(I0-1,1))-(IMAP(I0,0),IMAP(I0,1)),2
  255. 2640  IF IMAP(I0,2) <> -1 THEN PUT (IMAP(I0,0)-7,IMAP(I0,1)-10),HURICARRAY,XOR
  256. 2650  IF AUTO.ADVANCE=1 THEN GOTO 2670
  257. 2660  I$="":WHILE I$="":I$=INKEY$:WEND
  258. 2670  NEXT
  259. 2680  IF NSTORM<2 THEN GOTO 2820
  260. 2690  FOR J=2 TO NSTORM
  261. 2700  LOCATE J,1:PRINT STORMNAME$(J)
  262. 2710  I=((J-1)*50+1)
  263. 2720  FOR I0=I TO LP(J)-1
  264. 2730  OUT.OF.RANGE=0:IMAP(I0,2)=0:GOSUB 3070
  265. 2740  IF I0 > I THEN IF IMAP(I0-1,2) <> -1 THEN PUT (IMAP(I0-1,0)-7,IMAP(I0-1,1)-10),HURICARRAY,XOR
  266. 2750  IF J=2 THEN LT=&HAAAA
  267. 2760  IF J=3 THEN LT=&H3333
  268. 2770  IF J=4 THEN LT=&HF18F
  269. 2780  IF I0 > I THEN LINE (IMAP(I0-1,0),IMAP(I0-1,1))-(IMAP(I0,0),IMAP(I0,1)),2,,LT
  270. 2790  IF IMAP(I0,2) <> -1 THEN PUT (IMAP(I0,0)-7,IMAP(I0,1)-10),HURICARRAY,XOR
  271. 2800  NEXT I0
  272. 2810  NEXT J
  273. 2820  LOCATE 23,1:Z$=INPUT$(1): IF Z$=CHR$(13) THEN 2830 ELSE 2820
  274. 2830  GOSUB 3520
  275. 2840  COLOR 7,1,1:CLS:LOCATE 3,1:PRINT "Do you want to plot the map on a Hewlett Packard plotter? (Y/N)";
  276. 2850  A$=INKEY$:IF A$="" THEN 2850
  277. 2860  IF A$="Y" OR A$="y" THEN LOCATE 5,1:INPUT "To which COM port is the plotter connected? (Default=2)";PORT ELSE RETURN
  278. 2870  IF PORT=0 THEN PORT$="COM2" ELSE PORT$="COM"+RIGHT$(STR$(PORT),1)
  279. 2880  ON ERROR GOTO 2890: GOTO 2920
  280. 2890  CLOSE:PRINT "ERROR OPENING COM PORT! CHECK PLOTTER AND PRESS ANY KEY TO CONTINUE."
  281. 2900  A$=INKEY$:IF A$="" THEN 2900
  282. 2910  RESUME 2920
  283. 2920  OPEN PORT$+":9600,S,7,1,RS,CS65535,DS,CD" AS #1
  284. 2930  PRINT #1, "IN;OI;"
  285. 2940  INPUT #1, ID$
  286. 2950  CLOSE #1
  287. 2960  LOCATE 7,5:PRINT "(1) INSTALL ";:COLOR 0,7:PRINT " BLACK P.7 PEN ";:COLOR 7,1:PRINT " IN PEN POSITION 1";
  288. 2970  LOCATE 9,5:PRINT "(2) INSTALL ";:COLOR 4,7:PRINT " RED P.7 PEN ";:COLOR 7,1:PRINT " IN PEN POSITION 2";
  289. 2980  IF ID$<>"7470A" THEN LOCATE 11,5:PRINT "(3) INSTALL ";:COLOR 2,7:PRINT " GREEN P.3 PEN ";:COLOR 7,1:PRINT " IN PEN POSITION 3"; ELSE GOTO 3000
  290. 2990  LOCATE 13,5:PRINT "(4) INSTALL PENS FOR OTHER STORMTRACKS IN PEN POSITIONS 4, 5, & 6";
  291. 3000  IF ID$="7470A" THEN LOCATE 11,5:STP$="3" ELSE LOCATE 15,5:STP$="5"
  292. 3010  PRINT "("+STP$+") LOAD SHEET OF PAPER, IF NECESSARY";
  293. 3020  LOCATE 24,20:COLOR 0,7:PRINT "  PRESS ANY KEY TO CONTINUE  ";:COLOR 7,1
  294. 3030  A$=INKEY$:IF A$="" THEN 3030
  295. 3040  LOCATE 20,22:COLOR 31:PRINT "PLOTTING....PLEASE WAIT";:COLOR 7
  296. 3050  GOSUB 4870
  297. 3060  CLS:RETURN
  298. 3070  ' *** Subroutine to translate Lat and Lon to Screen Coordinates ***
  299. 3080  IF X(I0) > 105 OR X(I0) < 60 THEN OUT.OF.RANGE=-1:IMAP(I0,2)=-1
  300. 3090  IF Y(I0) >  33 OR Y(I0) < 10 THEN OUT.OF.RANGE=-1:IMAP(I0,2)=-1
  301. 3100  FOR IB=0 TO 10: IF X(I0) >= MAPXY(IB,0) AND X(I0) < MAPXY(IB+1,0) THEN GOSUB 3150
  302. 3110  NEXT
  303. 3120  FOR IB=12 TO 18:IF Y(I0) >= MAPXY(IB,0) AND Y(I0) < MAPXY(IB+1,0) THEN GOSUB 3190
  304. 3130  NEXT
  305. 3140  RETURN
  306. 3150  ' ****** calculate x(longitude) ******
  307. 3160  Z=MAPXY(IB+1,0)-MAPXY(IB,0)
  308. 3170  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
  309. 3180  RETURN
  310. 3190  ' ****** calculate y(latitude) *******
  311. 3200  Z=MAPXY(IB+1,0)-MAPXY(IB,0)
  312. 3210  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
  313. 3220  RETURN
  314. 3230  SCREEN 1,0:COLOR 3,0
  315. 3240  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
  316. 3250  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
  317. 3260  PAINT (180,110),1,3 : PAINT (234,132),1,3 :PAINT (265,136),1,3 :PAINT (194,138),1,3:PAINT (304,181),1,3:PAINT (161,115),1,3:PAINT (191,91),1,3
  318. 3270  PSET (275,30),3:DRAW "C3R2D1L3" : ' BERMUDA
  319. 3280  GOSUB 3490
  320. 3290  IF CITY=1 THEN CIRCLE (65,67),2,2:PAINT (65,67),2:LOCATE 9,1:PRINT CITY$; ' CORPUS CHRISTI,TEXAS
  321. 3300  IF CITY=2 THEN CIRCLE (71,60),2,2:PAINT (71,60),2:LOCATE 8,1:PRINT CITY$; 'Victoria,Texas
  322. 3310  IF CITY=3 THEN CIRCLE (66,79),2,2:PAINT (66,79),2:LOCATE 10,1:PRINT CITY$; 'BROWNSVILLE,TEXAS
  323. 3320  IF CITY=4 THEN CIRCLE (80,55),2,2:PAINT (80,55),2:LOCATE 6,3:PRINT CITY$; 'GALVESTON,TEXAS
  324. 3330  IF CITY=5 THEN CIRCLE (119,48),2,2:PAINT (119,48),2:LOCATE 5,12:PRINT CITY$; 'NEW ORLEANS, LA
  325. 3340  IF CITY=6 THEN CIRCLE (81,52),2,2:PAINT (81,52),2:LOCATE 6,8:PRINT CITY$; ' HOUSTON, TEX
  326. 3350  IF CITY=7 THEN CIRCLE (175,86),2,2:PAINT (175,86),2:LOCATE 11,24:PRINT CITY$; ' MIAMI, FLA
  327. 3360  IF CITY=8 THEN CIRCLE (130,45),2,2:PAINT (130,45),2:LOCATE 5,18:PRINT CITY$;' MOBILE, ALA.
  328. 3370  IF CITY=9 THEN CIRCLE (136,47),2,2:PAINT (136,47),2:LOCATE 5,13:PRINT CITY$; ' PENSACOLA
  329. 3380  IF CITY=10 THEN CIRCLE (165,68),2,2:PAINT (165,68),2:LOCATE 10,22:PRINT CITY$; ' ST PETERSBURG
  330. 3390  IF CITY=11 THEN CIRCLE (171,48),2,2:PAINT (171,48),2:LOCATE 6,9:PRINT CITY$; ' JACKSONVILLE
  331. 3400  IF CITY=12 THEN CIRCLE (63,110),2,2:PAINT (63,110),2:LOCATE 14,1:PRINT CITY$; ' TAMPICO
  332. 3410  IF CITY=13 THEN CIRCLE (138,123),2,2:PAINT (138,123),2:LOCATE 15,18:PRINT CITY$; ' COZUMEL
  333. 3420  IF CITY=14 THEN CIRCLE (96,49),2,2:PAINT (96,49),2:LOCATE 5,7:PRINT CITY$; ' LAKE CHARLES
  334. 3430  IF CITY=15 THEN CIRCLE (174,33),2,2:PAINT (174,33),2:LOCATE 3,18:PRINT CITY$; ' SAVANNAH
  335. 3440  IF CITY=16 THEN I0=50:X(50)=XCITY:Y(50)=YCITY:GOSUB 3070 ELSE GOTO 3460
  336. 3450  CIRCLE (IMAP(50,0),IMAP(50,1)),2,2:PAINT (IMAP(50,0),IMAP(50,1)),2:LOCATE (IMAP(50,1)/8)-1,(IMAP(50,0)/8)-2:PRINT CITY$;' your city
  337. 3460  LOCATE 3,11:PRINT " U S A";:LOCATE 6,29:PRINT "ATLANTIC";:LOCATE 8,31:PRINT "OCEAN";:LOCATE 16,4:PRINT "MEXICO";:LOCATE 21,3:PRINT "PACIFIC";:LOCATE 21,22:PRINT "CARIBBEAN ";
  338. 3470  RETURN
  339. 3480  IF NOT STORED THEN GET (0,0)-(319,199),STOR.SCR:STORED=-1
  340. 3490  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
  341. 3500  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";
  342. 3510  RETURN
  343. 3520  ' ******* switch to color 80 char mode **
  344. 3530  DEF SEG = 0
  345. 3540  POKE &H410,(PEEK(&H410) AND &HCF) OR &H10
  346. 3550  SCREEN 1,0,0,0
  347. 3560  SCREEN 0
  348. 3570  WIDTH 80
  349. 3580  LOCATE ,,1,6,7
  350. 3590  COLOR 7,1
  351. 3600  RETURN
  352. 3610  CLS: LOCATE  2,15 :COLOR 0,7,1: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,1
  353. 3620  LOCATE  4,20 :PRINT "(1)   GALVESTON, TEXAS                    "
  354. 3630  LOCATE  5,20 :PRINT "(2)   VICTORIA, TEXAS                     "
  355. 3640  LOCATE  6,20 :PRINT "(3)   BROWNSVILLE, TEXAS                  "
  356. 3650  LOCATE  7,20 :PRINT "(4)   CORPUS CHRISTI, TEXAS               "
  357. 3660  LOCATE  8,20 :PRINT "(5)   NEW ORLEANS, LOUISIANA              "
  358. 3670  LOCATE  9,20 :PRINT "(6)   HOUSTON, TEXAS                      "
  359. 3680  LOCATE 10,20 :PRINT "(7)   MIAMI, FLORIDA                      "
  360. 3690  LOCATE 11,20 :PRINT "(8)   MOBILE, ALABAMA                     "
  361. 3700  LOCATE 12,20 :PRINT "(9)   PENSACOLA, FLORIDA                  "
  362. 3710  LOCATE 13,19 :PRINT "(10)   ST. PETERSBURG, FLORIDA             "
  363. 3720  LOCATE 14,19 :PRINT "(11)   JACKSONVILLE, FLORIDA               "
  364. 3730  LOCATE 15,19 :PRINT "(12)   TAMPICO, MEXICO                     "
  365. 3740  LOCATE 16,19 :PRINT "(13)   COZUMEL, MEXICO                     "
  366. 3750  LOCATE 17,19 :PRINT "(14)   LAKE CHARLES, LOUISIANA             "
  367. 3760  LOCATE 18,19 :PRINT "(15)   SAVANNAH, GEORGIA                   "
  368. 3770  LOCATE 19,19 :PRINT "(16)   other city                          "
  369. 3780  LOCATE 23,20 :INPUT "Enter number of your CITY/AREA ===> ";M
  370. 3790  ON M GOSUB 3880,3840,3860,3820,3900,3920,3940,3960,3980,4000,4020,4040,4060,4080,4100,4120
  371. 3800  IF M=0 THEN GOTO 3920
  372. 3810  RETURN
  373. 3820  CITY=1:X=97.22:Y=27.48 'x=longitude,y=latitude of city to track to
  374. 3830  CITY$=" CORPUS":CITY1$="CORPUS CHRISTI":RETURN
  375. 3840  CITY=2:X=96.56:Y=28.51
  376. 3850  CITY$="VICTORIA":CITY1$="VICTORIA":RETURN
  377. 3860  CITY=3:X=97.93:Y=26.43
  378. 3870  CITY$="BROWNSV":CITY1$="BROWNSVILLE":RETURN
  379. 3880  CITY=4:X=94.65:Y=29.45
  380. 3890  CITY$="GALVESTON":CITY1$="GALVESTON, TEXAS":RETURN
  381. 3900  CITY=5:X=89.56:Y=30.05
  382. 3910  CITY$=" NEW ORL.":CITY1$="NEW ORLEANS":RETURN
  383. 3920  CITY=6:X=95.37:Y=29.77
  384. 3930  CITY$="HOUSTON":CITY1$="HOUSTON, TEX":RETURN
  385. 3940  CITY=7:X=80.17:Y=25.43
  386. 3950  CITY$=" MIAMI":CITY1$="MIAMI, FLA":RETURN
  387. 3960  CITY=8:X=88.08:Y=30.7
  388. 3970  CITY$="MOBILE":CITY1$="MOBILE, ALA":RETURN
  389. 3980  CITY=9:X=87.22:Y=30.42
  390. 3990  CITY$="PENSACOLA":CITY1$="PENSACOLA, FLA":RETURN
  391. 4000  CITY=10:X=82.63:Y=27.77
  392. 4010  CITY$="ST PETERSBURG":CITY1$="ST. PETERSBURG, FLA":RETURN
  393. 4020  CITY=11:X=81.66:Y=30.33
  394. 4030  CITY$="JACKSONVILLE":CITY1$="JACKSONVILLE, FLA":RETURN
  395. 4040  CITY=12:X=97.85:Y=22.22
  396. 4050  CITY$="TAMPICO":CITY1$="TAMPICO, MEXICO":RETURN
  397. 4060  CITY=13:X=86.92:Y=20.42
  398. 4070  CITY$="COZUMEL":CITY1$="COZUMEL, MEXICO":RETURN
  399. 4080  CITY=14:X=93.2:Y=30.22
  400. 4090  CITY$="LAKE CHARLES":CITY1$="LAKE CHARLES, LA":RETURN
  401. 4100  CITY=15:X=81.08:Y=32.07
  402. 4110  CITY$="SAVANNAH":CITY1$="SAVANNAH, GA":RETURN
  403. 4120  CITY=16
  404. 4130  ON ERROR GOTO 4230
  405. 4140  OPEN "YOURCITY.DAT" FOR INPUT AS #1
  406. 4150  INPUT #1,CITY1$,XCITY,YCITY
  407. 4160  CITY$=CITY1$:X=XCITY:Y=YCITY:CLOSE:ON ERROR GOTO 0
  408. 4170  CLS:LOCATE 2,22:COLOR 0,7:PRINT " CURRENT ADDITIONAL CITY INFORMATION ";:COLOR 7,1
  409. 4180  LOCATE 4,25:COLOR 0,7:PRINT "      CITY: ";:COLOR 7,1:PRINT " ";CITY1$
  410. 4190  LOCATE 6,25:COLOR 0,7:PRINT " LONGITUDE: ";:COLOR 7,1:PRINT XCITY
  411. 4200  LOCATE 8,25:COLOR 0,7:PRINT "  LATITUDE: ";:COLOR 7,1:PRINT YCITY
  412. 4210  LOCATE 10,5:INPUT "DO YOU WISH TO MAKE CHANGES? (Y/N)";QUEST$
  413. 4220  IF QUEST$<>"Y" AND QUEST$<>"y" THEN RETURN
  414. 4230  CLS:LOCATE 2,5:INPUT "         NAME OF YOUR CITY (15 CHRS) ===>";CITY1$
  415. 4240  CITY$=CITY1$
  416. 4250  LOCATE 4,5:INPUT "LONGITUDE OF CITY (BETWEEN 60 & 105) ===>";XCITY
  417. 4260  IF XCITY<60 OR XCITY>105 THEN LOCATE 6,10:COLOR 23:PRINT "ERROR! RE-INPUT DATA.":COLOR 7:BEEP:FOR WT=1 TO 3000:NEXT WT:LOCATE 6,10:PRINT "                         ":GOTO 4250
  418. 4270  LOCATE 6,5:INPUT "  LATITUDE OF CITY (BETWEEN 10 & 33) ===>";YCITY
  419. 4280  IF YCITY<10 OR YCITY>33 THEN LOCATE 8,10:COLOR 23:PRINT "ERROR! RE-INPUT DATA.":COLOR 7:BEEP:FOR WT=1 TO 3000:NEXT WT:LOCATE 8,10:PRINT "                         ":GOTO 4270
  420. 4290  X=XCITY:Y=YCITY
  421. 4300  OPEN "YOURCITY.DAT" FOR OUTPUT AS #1
  422. 4310  WRITE #1,CITY1$,XCITY,YCITY
  423. 4320  CLOSE
  424. 4330  RETURN
  425. 4340  '**** SUBROUTINE TO COMPUTE THE SPEED OF ADVANCE
  426. 4350  'Variables are OLDDAY,OLDTIME - where it was
  427. 4360  '              D1$,T1         - where it is   and  q=distance moved
  428. 4370  NUDAY=VAL(MID$(D1$,4,2)) 'extract the day
  429. 4380  DAYINT=NUDAY-OLDDAY      'determine # of 24hr periods
  430. 4390  IF DAYINT <0 THEN HR24 = 2400
  431. 4400  IF DAYINT = 0 THEN HR24 = 0
  432. 4410  IF DAYINT = 1 THEN HR24 = 2400
  433. 4420  IF DAYINT = 2 THEN HR24 = 4800
  434. 4430  IF DAYINT = 3 THEN HR24 = 7200
  435. 4440  IF DAYINT > 3 THEN HR24 = 9999
  436. 4450  TH1=VAL(LEFT$(T1$,2))*100:TM1=VAL(MID$(T1$,4,2)) 'EXTRACT SEMICOLN
  437. 4460  TIME1=TH1 + TM1 'STORE NEW TIME
  438. 4470  LAPSTIME=(HR24 + (TIME1 - OLDTIME))/100 'calculate total hours
  439. 4480  SOA = Q/LAPSTIME  'calculate speed of advance
  440. 4490  TSOA = TSOA + SOA:COUNT = COUNT + 1 'SUM SPEED FOR AVERAGE CALC.
  441. 4500  OLDDAY = NUDAY:OLDTIME = TIME1:RETURN
  442. 4510  END
  443. 4520  COLOR 7,1,1:CLS:LOCATE 10,20:COLOR 15:PRINT "DO YOU NEED INSTRUCTIONS?"
  444. 4530  PRINT:PRINT TAB(20);:INPUT "PRESS Y OR N, THEN PRESS THE <ENTER> KEY";QUEST$
  445. 4540  IF QUEST$<>"Y" AND QUEST$<>"y" THEN RETURN
  446. 4550  CLS:PRINT:PRINT "     The purpose of this program is to track HURRICANES.  It will track a storm"
  447. 4560  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
  448. 4570  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."
  449. 4580   PRINT :PRINT :PRINT: INPUT "PRESS <ENTER> TO CONTINUE"; QUEST$
  450. 4590  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
  451. 4600  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."
  452. 4610  PRINT "   4) Change track to city.":PRINT "   5) End the program."
  453. 4620  PRINT: INPUT "PRESS <ENTER> TO CONTINUE";QUEST$
  454. 4630  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
  455. 4640  PRINT "1) DATE ":PRINT "2) TIME ":PRINT "3) LATITUDE":PRINT "4) LONGITUDE"
  456. 4650  COLOR 14: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."
  457. 4660  PRINT: COLOR 0,15 :PRINT  "WARNING: This option must NOT be used for storms that are now stored on the disk":COLOR 7,1
  458. 4670  PRINT: INPUT "PRESS <ENTER> TO CONTINUE";QUEST$
  459. 4680  COLOR 7,1: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
  460. 4690  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"
  461. 4700  PRINT "currently stored on the disk.":PRINT
  462. 4710  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."
  463. 4720  PRINT :PRINT "In addition, if the storm is within 100 miles of the current 'TRACK TO CITY,' a warning will be issued!"
  464. 4730  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
  465. 4740  PRINT :INPUT "PRESS <ENTER> TO CONTINUE";QUEST$
  466. 4750  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."
  467. 4760  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."
  468. 4770  PRINT :PRINT "The program also supports Hewlett Packard 7470A, 7475A, and 7550A Plotters.     You will be prompted as to pen selections."
  469. 4780  PRINT :PRINT "Up to 4 Storm/Hurricanes can be plotted at one time. This allows you to         compare the current storm track with previous storm tracks."
  470. 4790  PRINT :INPUT "PRESS <ENTER> TO CONTINUE";QUEST$
  471. 4800  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
  472. 4810  PRINT:PRINT "Option 5 will terminate the program."
  473. 4820  PRINT:COLOR 2:PRINT "ENJOY THE PROGRAM AND HAPPY HURRICANE TRACKING!"
  474. 4830  PRINT: INPUT "ANOTHER REVIEW (Y/N)";QUEST$:COLOR 7
  475. 4840  IF QUEST$ = "Y" OR QUEST$ = "y" THEN GOTO 4550 ELSE RETURN
  476. 4850  CLOSE #1
  477. 4860  RESUME 4880
  478. 4870  ON ERROR GOTO 4850
  479. 4880  OPEN PORT$+":9600,S,7,1,RS,CS65535,DS,CD" AS #1
  480. 4890  PRINT #1, "IN;OI;"
  481. 4900  INPUT #1, ID$
  482. 4910  IF ID$="7470A" THEN PRINT #1, "IP 130,279,10000,7479;"
  483. 4920  PRINT #1, "SP1; SC 0,319,199,-15;"
  484. 4930  PRINT #1, "PA 0,0,PD0,199,319,199,319,0,0,0,PU;"
  485. 4940  PRINT #1, "PA 120,-14.5;LBHURRICANE TRACKING MAP"+CHR$(3)
  486. 4950  PRINT #1, "PA 202,0;"
  487. 4960  'EAST COAST OF U.S.
  488. 4970  PRINT #1, "PRPD 2,2,-2,2,2,2,0,5,-1,0,-1,1,2,2,-2,2,-2,0,-20,14,-2,4,-3,0,-4,12,0,8,4,8,4,10,0,1,2,2,-2,2,-3,8,0,2,-2,2,-3,0,0,-3,-5,-7,-2,0,0,-2,2,-2,0,-1,-4,-4,0,-6,-2,-2,0,-6,-8,-8,-4,0,-4,4,-4,-4,-4,0,0,-2,-2,2,-16,0;"
  489. 4980  'GULF COAST OF U.S.
  490. 4990  PRINT #1, "PR0,2,2,2,0,1,-1,1,2,2,-6,0,-1,1,-6,0,-6,-4,-2,2,-12,-2,-4,4,-16,10,0,15,-6,6,0,17,2,2,12,18,10,6,8,0,2,2,11,0,0,-2,5,-8,0,-8,15,-5,1,1,6,0,2,6,-5,5,0,6,-2,2,-2,6;"
  491. 5000  'NORTH COAST OF SOUTH AMERICA
  492. 5010  PRINT #1, "PR-2,0,0,-4,-2,2,0,10,-4,4,0,1,4,3,13,0,2,-2,2,2,3,0,1,1,6,0,0,2,2,1,4,0,1,1,-1,1,1,1,0,4,-2,2,0,8,-2,2,0,2,2,2,-2,2,2,2,0,2,3,3,0,2,3,0,7,2,12,-4,8,0,8,6,8,-6,2,0,0,-3,5,-3,4,0,2,-2,6,0,12,-5,2,2,0,2,-4,4,0,2,12,0,2,-2,0,-3,1,-1;"
  493. 5020  PRINT #1, "PR3,0,3,3,4,0,1,1,0,1,18,0,3,3,19,-2,0,4,5,0,6,8,5,2;"
  494. 5030  'LITTLE ISLANDS AND PUERTO RICO
  495. 5040  PRINT #1, "PRPU-11,-16,PD-4,0,0,-3,2,0,2,-2,2,0,1,1,0,4,-3,0,PU-3,-14,PD0,-1,PU2,-2,PD0,-2,PU-2,-2,PD0,-1,PU-1,-2,PD0,-2,PU0,-3,PD0,-1,-1,0,0,-1,-3,3,1,1,1,-1,1,0,1,-1,PU-7,-3,PD0,-1,PU-2,-2,PD0,-1,PU-2,-4,PD0,-1,PU0,-2,PD0,-1,PU-2,-2;"
  496. 5050  PRINT #1, "PRPD0,-1,PU-4,4,PD0,-1,PU-6,0,PD-2,0,PU-4,0,0,-3,PD-2,2,-8,0,0,-3,-2,-2,4,0,1,1,5,0,2,2,PU-20,0;"
  497. 5060  'HAITI AND JAMAICA
  498. 5070  PRINT #1, "PRPD2,-2,0,-2,-6,-2,2,-2,-3,0,-1,-1,-2,0,-11,-3,-2,2,-1,-1,-6,0,-2,2,0,1,5,3,0,4,-12,0,3,3,13,0,4,4,4,-4,3,0,2,-2,4,0,3,1,2,-2,PU-56,0,PD-6,0,-3,3,2,0,3,3,10,0,1,-1,0,-2,-4,0,-3,-3,PU-32,-18,PD0,-2,-1,-1,-2,0,-1,1,0,2,4,0,PU-12,-6;"
  499. 5080  'CUBA
  500. 5090  PRINT #1, "PRPD2,-2,2,0,0,-3,3,0,2,-2,10,-2,10,2,4,4,6,0,0,2,11,7,2,0,2,2,4,0,2,2,4,0,0,2,-10,3,-1,-1,-6,0,-9,2,5,-5,-2,-2,-7,-2,-4,-4,-10,-3,-2,-2,-12,2,-6,0;"
  501. 5100  'NASSAU AND BAHAMAS
  502. 5110  PRINT #1, "PRPU44,-13,PD0,-2,-1,0,0,2,1,0,PU-1,-4,PD0,-3,-3,-3,-1,1,0,1,4,4,PU2,-6PD,0,-2,PU2,-8,PD-1,0,0,2,1,0,0,-2,-3,-3,PU-2,0,PD0,-1,-3,0,0,1,3,0,-3,0,-3,0,PU17,9,PD0,-1,-4,0,0,1,4,0,1,1,PU4,4,PD3,3,0,-1,-3,-3,0,1,PU-4,3,PD3,3,0,1;"
  503. 5120  PRINT #1, "PRPU3,-3,4,0,0,1,PD0,2,3,3,0,-1,-2,-2,-1,0,PU7,0,0,5,PD1,1,3,0,0,2,-3,3,-1,0,2,-2,0,-1,-2,-2,0,-1,PU;"
  504. 5130  'PACIFIC SIDE OF MAP
  505. 5140  PRINT #1, "PA 0,96;"
  506. 5150  PRINT #1, "PRPD4,4,0,3,4,5,0,2,2,2,0,3,-2,3,2,0,0,2,14,14,10,0,4,4,30,12,2,2,10,-4,0,-1,3,0,0,2,4,0,15,15,6,0,20,8,14,4,13,14,0,5,4,4,3,0,0,-3,6,3,PU;"
  507. 5160  'TEXAS-MEXICO BORDER
  508. 5170  PRINT #1, "PA 0,34;"
  509. 5180  PRINT #1, "PRPD4,2,0,2,9,11,0,4,1,0,5,7,3,0,4,-6,8,0,3,3,3,0,1,1,0,3,8,10,0,2,6,5,3,0,9,4,PU;"
  510. 5190  'BERMUDA
  511. 5200  PRINT #1, "PA275,31;"
  512. 5210  PRINT #1, "PRPD0,-1,2,0,0,1,-3,0,PU;"
  513. 5220  PRINT #1, "SI .30,.40;"
  514. 5230  PRINT #1, "PA225,48;LBATLANTIC"+CHR$(3): PRINT #1, "PA233,57;LBOCEAN"+CHR$(3): PRINT #1, "PA170,170;LBCARIBBEAN"+CHR$(3): PRINT #1, "PA25,170;LBPACIFIC"+CHR$(3):PRINT #1, "PA30,179;LBOCEAN"+CHR$(3):PRINT #1, "PA25,123;LBMEXICO"+CHR$(3)
  515. 5240  PRINT #1, "PA65,15;LBUNITED STATES"+CHR$(3)
  516. 5250  IF I.DO.LATLON=0 THEN GOTO 5350
  517. 5260  IF ID$="7470A" THEN PRINT #1, "SP0;":BEEP:PRINT :PRINT :PRINT TAB(6);"PLEASE INSTALL ";:COLOR 2,7:PRINT " GREEN P.3 PEN ";:COLOR 7,1:PRINT " IN PEN 1 AND PRESS ANY KEY TO CONTINUE" ELSE GOTO 5290
  518. 5270  A$=INKEY$:IF A$="" THEN 5270
  519. 5280  PRINT #1, "LT1,1;SP1;":GOTO 5300
  520. 5290  PRINT #1, "LT1,1;SP3;"
  521. 5300  FOR I=1 TO 10:PRINT #1, "PAPU",MAPXY(I,1),",0PD,",MAPXY(I,1),",199PU;":NEXT I
  522. 5310  FOR I=13 TO 18:PRINT #1, "PAPU0,",MAPXY(I,1),"PD,319,",MAPXY(I,1),"PU;":NEXT
  523. 5320  PRINT #1, "LT;SI .25,.35;"
  524. 5330  PRINT #1, "PA301,187;LB10"+CHR$(3): PRINT #1, "PA301,160;LB15"+CHR$(3): PRINT #1, "PA301,127;LB20"+CHR$(3): PRINT #1, "PA301,92;LB25"+CHR$(3): PRINT #1, "PA301,52;LB30"+CHR$(3):PRINT #1, "PA301,10;LB35"+CHR$(3)
  525. 5340  PRINT #1, "PA308,198;LB60"+CHR$(3): PRINT #1, "PA238,198;LB70"+CHR$(3): PRINT #1, "PA176,198;LB80"+CHR$(3): PRINT #1, "PA113,198;LB90"+CHR$(3): PRINT #1, "PA40,198;LB100"+CHR$(3)
  526. 5350  PRINT #1, "SI .30,.40;"
  527. 5360  PRINT #1, "SP2;"
  528. 5370  IF CITY=1 THEN PRINT #1,"SM*;PA65,67;SM;SL.15;PA20,69;LB";CITY$+CHR$(3) 'CORPUS CHRISTI, TEX
  529. 5380  IF CITY=2 THEN PRINT #1, "SM*;PA71,60;SM;SL.15;PA20,62;LB"CITY$+CHR$(3) 'Victoria,Texas
  530. 5390  IF CITY=3 THEN PRINT #1, "SM*;PA66,79;SM;SL.15;PA20,80;LB"CITY$+CHR$(3) 'BROWNSVILLE, TEXAS
  531. 5400  IF CITY=4 THEN PRINT #1, "SM*;PA80,55;SM;SL.15;PA30,50;LB"CITY$+CHR$(3) 'GALVESTON, TEXAS
  532. 5410  IF CITY=5 THEN PRINT #1, "SM*;PA119,48;SM;SL.15;PA120,46;LB"CITY$+CHR$(3) 'NEW ORLEANS, LA
  533. 5420  IF CITY=6 THEN PRINT #1, "SM*;PA81,52;SM;SL.15;PA38,49;LB"CITY$+CHR$(3) 'HOUSTON, TEXAS
  534. 5430  IF CITY=7 THEN PRINT #1, "SM*;PA175,86;SM;SL.15;PA178,88;LB"CITY$+CHR$(3) 'MIAMI, FLA
  535. 5440  IF CITY=8 THEN PRINT #1, "SM*;PA130,45;SM;SL.15;PA135,42;LB"CITY$+CHR$(3) 'MOBILE, ALA
  536. 5450  IF CITY=9 THEN PRINT #1, "SM*;PA136,47;SM;SL.15;PA82,45;LB"CITY$+CHR$(3) 'PENSACOLA
  537. 5460  IF CITY=10 THEN PRINT #1, "SM*;PA165,68;SM;SL.15;PA172,68;LB"CITY$+CHR$(3) 'ST PETERSBURG
  538. 5470  IF CITY=11 THEN PRINT #1, "SM*;PA171,48;SM;SL.15;PA98,45;LB"CITY$+CHR$(3) 'JACKSONVILLE
  539. 5480  IF CITY=12 THEN PRINT #1, "SM*;PA63,110;SM;SL.15;PA17,112;LB"CITY$+CHR$(3) 'TAMPICO, MEXICO
  540. 5490  IF CITY=13 THEN PRINT #1, "SM*;PA138,123;SM;SL.15;PA144,125;LB"CITY$+CHR$(3) 'COZUMEL, MEXICO
  541. 5500  IF CITY=14 THEN PRINT #1, "SM*;PA96,49;SM;SL.15;PA24,46;LB"CITY$+CHR$(3) 'LAKE CHARLES
  542. 5510  IF CITY=15 THEN PRINT #1, "SM*;PA174,33;SM;SL.15;PA122,35;LB"CITY$+CHR$(3) 'SAVANNAH, GA
  543. 5520  IF CITY=16 THEN I0=50:X(50)=XCITY:Y(50)=YCITY:GOSUB 3070 ELSE GOTO 5540
  544. 5530  PRINT #1, "SM*;PA",IMAP(50,0),IMAP(50,1),";SM;SL.15;PA",IMAP(50,0)-8*(LEN(CITY$)/2),IMAP(50,1)-8;"LB"CITY$+CHR$(3) ' your city
  545. 5540  PRINT #1, "PA5,-5;LB";STORMNAME$;"     ";D$(NP-1);"     ";T$(NP-1);"     ";Y(NP-1);"     ";X(NP-1);" "+CHR$(3)
  546. 5550  IF ID$="7475A" THEN PRINT #1, "IW250,596,10250,7290;"
  547. 5560  IF ID$="7550A" THEN PRINT #1, "IW80,320,10080,7000;"
  548. 5570  IF ID$="7470A" THEN PRINT #1, "IW130,279,10000,6965;"
  549. 5580  FOR I0=0 TO NP-1
  550. 5590  OUT.OF.RANGE=0:IMAP(I0,2)=0:GOSUB 3070
  551. 5600  IF I0=0 THEN PRINT #1, "PA";IMAP(I0,0),IMAP(I0,1);"PD;"
  552. 5610  PRINT #1, "PA";IMAP(I0,0),IMAP(I0,1)
  553. 5620  NEXT
  554. 5630  GOSUB 5640:GOTO 5690
  555. 5640  IF ID$="7470A" THEN PRINT #1, "PA";IMAP(I0-1,0),IMAP(I0-1,1);";CI 4,5;CI 3.5,5;CI3,5;CI 2.5,5;CI2,5;CI1.5,5;CI1,5;PU;"
  556. 5650  IF ID$<>"7470A" THEN PRINT #1, "PA";IMAP(I0-1,0),IMAP(I0-1,1);";CI 4,5;WG4,0,360,5;PU;"
  557. 5660  PRINT #1,"PR0,-4PD;AR6,2,90,5;PU;PA";IMAP(I0-1,0),IMAP(I0-1,1);"PR0.7,-4PD;AR6.7,2.7,70,5;PU;PA";IMAP(I0-1,0),IMAP(I0-1,1);"PR1,-4PD;AR7,3,60,5;PU;"
  558. 5670  PRINT #1,"PA";IMAP(I0-1,0),IMAP(I0-1,1);"PR0,4PD;AR-6,-2,90,5;PU;PA";IMAP(I0-1,0),IMAP(I0-1,1);"PR-.7,4PD;AR-6.7,-2.7,70,5;PU;PA";IMAP(I0-1,0),IMAP(I0-1,1);"PR-1,4PD;AR-7,-3,60,5;PU;"
  559. 5680  RETURN
  560. 5690  IF NSTORM<2 THEN GOTO 5850
  561. 5700  FOR J=2 TO NSTORM
  562. 5710  IF ID$<>"7470A" THEN PRINT #1,"SP",(J+2),";":GOTO 5760
  563. 5720  IF J=3 THEN 5750
  564. 5730  PRINT #1, "SP0;":BEEP:PRINT :PRINT TAB(6);"PLEASE INSTALL PENS FOR ADDITIONAL STORM TRACKS; PRESS ANY KEY TO CONTINUE":BEEP
  565. 5740  A$=INKEY$:IF A$="" THEN 5740
  566. 5750  IF J=3 THEN PRINT #1, "SP2;" ELSE PRINT #1, "SP1;"
  567. 5760  PRINT #1, "PA5,";(8*(J-1));";LB";STORMNAME$(J);" "+CHR$(3)
  568. 5770  I=((J-1)*50+1)
  569. 5780  FOR I0=I TO LP(J)-1
  570. 5790  OUT.OF.RANGE=0:IMAP(I0,2)=0:GOSUB 3070
  571. 5800  IF I0=I THEN PRINT #1, "PA";IMAP(I0,0),IMAP(I0,1);"PD;"
  572. 5810  PRINT #1, "PA";IMAP(I0,0),IMAP(I0,1)
  573. 5820  NEXT I0
  574. 5830  GOSUB 5640
  575. 5840  NEXT J
  576. 5850  PRINT #1,"SP0;"
  577. 5852  IF ID$="7550A" THEN PRINT #1,"PG;"
  578. 5860  CLOSE #1
  579. 5870  RETURN
  580. 5880  REM ****************** INTRO LOGO *******************
  581. 5890  CLS
  582. 5900  LETRS$="C2R30M+3,-2E2M+3,-4U6M-12,-26M+2,-6E4R22M+6,-10L30M-4,+1M-4,3M-4,+8M-1,+4D4M+12,+24M-2,+6L20M-6,+10BM+6,-10M-5,+2M-7,+12R30M+6,-4BM-9,-10E2U2M-12,-26U4M+2,-6M+7,-5BM+7,+11M+4,-2R19E4"
  583. 5910  LETRT$="R10M+30,-50R15M+6,-10L40M-6,+10R15M-30,+50BR10M-8,+4L10M+30,-50L15M+6,-10M+8,-4BM+34,+10M-6,+4L11"
  584. 5920  LETRO$="R40M+36,-60L40M-36,+60BM+16,-10R20M+24,-40L20M-24,+40BM+24,+10M-8,+4L40M+36,-60M+8,-4BM+2,+14R15M-22,+36"
  585. 5930  LETRR$="R10M+12,-20R2M+9,+20R10M-9,-20R14M+3,-2E4M+13,-20M+1,-3U3M-1,-4H2M-1,-2L28M-37,+60BM+28,-30R15M+2,-1M+3,-2E2M+6,-10M+1,-2M-1,-2M-2,-1L15M-12,+20BR11M+2,-1M+3,-2E2M+4,-6M+1,-2M-1,-2M-2,-1L11BM-17,+27M+10,+23R10M+3,-4"
  586. 5940  LETRR2$="BM-33,+0M-8,+4L10M+37,-60M+8,-4"
  587. 5950  LETRM$="R10M+28,-47M-2,+21M+18,-14M-24,+40R10M+36,-60L10M-22,+20M+2,-20L10M-36,+60BR10M-8,+4L10M+36,-60M+8,-4BM-3,+20M-1,+17M+4,-3BM+8,-6M-22,+36R10M+8,-4"
  588. 5960  TREE$="C2R7M+2,-5H1F1M+3,-5H1F1M+4,-5H1F1E5H1F1M+6,-5H1F1M+6,-3H1F1M+5,-3H1F1M+5,-2H1F1M+5,-2H1F1M+5,-2H1F1M+5,-1H1F1R5U1D1R7H2E2L7D1U1L5D1U1M-7,+1F1H1M-5,+2F1H1M-6,+2F1H1M-4,+2F1H1M-5,+2F1H1M-7,+3F1H1G5F1H1G6F1H1M-4,+5F1H1M-4,+5F1H1M-4,+8"
  589. 5970  TREE2$="M+5,+2M+9,+3M+10,+5M+7,+4H2M-2,-4M-8,-4M-5,-3M-5,-2R7M+3,+1M+10,+5M+9,+5R3H3M-14,-7M+16,+3H2M-19,-5M-9,-1M+7,-2R9M+12,+3E1H2M-11,-3L12M-9,+3M-7,+3G2F2"
  590. 5980  SCREEN 1,0:COLOR 1,0
  591. 5990  PSET (5,120),2:DRAW "XLETRS$;"
  592. 6000  PSET (64,120),2:DRAW "XLETRT$;"
  593. 6010  PSET (109,120),2:DRAW "XLETRO$;"
  594. 6020  PSET (169,120),2:DRAW "XLETRR$;XLETRR2$;"
  595. 6030  PSET (229,120),2:DRAW "XLETRM$;"
  596. 6040  PSET (20,55),2:DRAW "XTREE$;BM+70,-37XTREE2$;"
  597. 6050  PSET (40,55),2:DRAW "S3XTREE$;BM+65,-31XTREE2$;"
  598. 6060  PSET (105,55),2:DRAW "S3XTREE$;"
  599. 6070  PSET (200,35),2:DRAW "A2XTREE2$;"
  600. 6080  PAINT (20,115),2,2:PAINT (5,121),3,2:PAINT (31,106),3,2:PAINT (45,72),3,2
  601. 6090  PAINT (70,116),2,2:PAINT (64,122),3,2:PAINT (105,72),3,2
  602. 6100  PAINT (113,118),2,2:PAINT (109,122),3,2:PAINT (153,72),3,2
  603. 6110  PAINT (173,118),2,2:PAINT (167,122),3,2:PAINT (203,122),3,2:PAINT (213,72),3,2
  604. 6120  PAINT (232,118),2,2:PAINT (227,122),3,2:PAINT (265,80),3,2:PAINT (258,122),3,2
  605. 6130  PAINT (23,53),3,2:PAINT (93,16),1,2
  606. 6140  PAINT (108,53),3,2:
  607. 6150  PAINT (43,53),3,2:PAINT (100,30),1,2:PAINT (110,30),1,2:PAINT (110,36),1,2:PAINT (112,37),1,2:PAINT (108,35),1,2:PAINT (106,34),1,2:PAINT (104,33),1,2
  608. 6160  PAINT (190,34),1,2:PAINT (177,33),1,2:PAINT (175,32),1,2:PAINT (173,31),1,2
  609. 6170  LOCATE 19,10:PRINT "VERSION 2.0  10/24/85";
  610. 6180  LOCATE 21,5:PRINT "FROM A PROGRAM BY WHMC  7/27/84";
  611. 6190  LOCATE 23,2:PRINT "PROGRAM ENHANCEMENTS BY: THOMAS PESEK";
  612. 6200  LOCATE 25,8:PRINT "Press any key to continue";
  613. 6210  A$=INKEY$:IF A$="" THEN 6210
  614. 6220  SCREEN 0,0,0:WIDTH 80
  615. 6230  RETURN
  616.