home *** CD-ROM | disk | FTP | other *** search
/ Current Shareware 1994 January / SHAR194.ISO / engineer / sly138.zip / CAVEMAP1.BAS < prev    next >
BASIC Source File  |  1993-08-21  |  32KB  |  451 lines

  1. 1 CLS : PRINT "CAVEMAP1, a program in GW-BASIC to calculate preliminary land surveys.": PRINT "Copywright (c) 1993 by Dave Byter. Send shareware fee to CAVE Inc, ½ Fast Road, Ritner KY  42639": CLOSE
  2. 2 PRINT "This one should run under QBASIC too"
  3. 3 PRINT "Shareware registration fee:"
  4. 4 PRINT "$ 10 = private use, one parcel"
  5. 5 PRINT "$ 25 = private use, multiple parcels"
  6. 6 PRINT "$ 50 = commercial use on your own lands, developers, foresters, miners"
  7. 7 PRINT "$100 = commercial use for hire, governments, realtors, attorneys, appraisors"
  8. 20 PRINT "Buy your $75 surveying instruments here too.": PRINT "See file REGISTER.ME to order."
  9. 30 PRINT "For this program to be of any use, you first must read": PRINT : PRINT "                             SURVEY IT YOURSELF": PRINT : PRINT "contained in files SIY*.TXT"
  10. 35 PRINT "Copied 20 Aug 93 for Shareware Distribution Network"
  11. 40 PRINT "CAVEMAP1  Control=CMTAB4P.029½  Date=930714": GOSUB 480: KEY OFF
  12. 42 IF NN% = 0 THEN NMAX% = 100: PRINT : PRINT "Will you be using more than"; NMAX%; "stations? N"; : GOSUB 520: IF IN$ = "Y" THEN INPUT "Maximum number of stations ->", NMAX%
  13. 43 IF NN% = 0 THEN DIM TT$(NMAX%), FR$(NMAX%), COMP(NMAX%), TAPE(NMAX%), INCL(NMAX%), DT$(NMAX%), NI(NMAX%), EI(NMAX%), NS(NMAX%), ES(NMAX%), RM$(NMAX%): GOSUB 3560
  14. 44 'To, From, Compass, Tape, Inclinometer, Data, North increment, East increment, North sum, East sum, Remark
  15. 50 PRINT "Whachawannado?"
  16. 60 PRINT : PRINT "A = Assign coordinates"
  17. 70 PRINT "B = Reassign coordinates"
  18. 80 PRINT "C = Close this loop"
  19. 90 PRINT "D = Display duh data"
  20. 100 PRINT "E = Eliminate intermediate stations"
  21. 110 PRINT "H = Help!"
  22. 120 PRINT "I = Instrument definitions"
  23. 130 PRINT "K = Kalibrate the map"
  24. 140 PRINT "L = List the coordinates"
  25. 150 PRINT "M = Map screen mode 2 (CGA)"
  26. 155 PRINT "* = Map screen mode 0 (80*25)"
  27. 160 PRINT "O = Offsets"
  28. 170 PRINT "P = Precision"
  29. 180 PRINT "Q = Quit"
  30. 190 PRINT "R = Read file from disk"
  31. 200 PRINT "S = Shoot a station"
  32. 210 PRINT "T = Throw out this data"
  33. 220 PRINT "W = Write file to disk"
  34. 230 PRINT "X = Segments"
  35. 235 A = FRE(0): PRINT A; " bytes free. "; : IF A < 1000 THEN PRINT "Garbage collection time. "; FRE(""); " bytes free";
  36. 240 PRINT : PRINT "A B C D E H I K L M * O P Q R S T W X ?"; : GOSUB 520
  37. 250 IF IN$ = "A" THEN GOSUB 550: GOTO 50
  38. 260 IF IN$ = "B" THEN GOSUB 2890: GOTO 50
  39. 270 IF IN$ = "C" THEN GOSUB 2960: GOTO 50
  40. 280 IF IN$ = "D" THEN GOSUB 1250: GOTO 50
  41. 290 IF IN$ = "E" THEN PRINT "I am too simple to eliminate intermediate stations.": PRINT "PRINT "; PLEASE; USE; CAVEMAP.BIG&; O0; UGLY; ": GOTO 50"
  42. 300 IF IN$ = "H" OR IN$ = "?" THEN PRINT "Help is available in file CAVEMAP1.DOC or from Dave Byter"
  43. 310 IF IN$ = "I" THEN GOSUB 3340: GOTO 50
  44. 320 IF IN$ = "K" THEN GOSUB 2450: GOTO 50
  45. 330 IF IN$ = "L" THEN GOSUB 2300: GOTO 50
  46. 340 IF IN$ = "M" THEN GOSUB 2600: GOTO 50
  47. 345 IF IN$ = "*" THEN GOSUB 12600: GOTO 50
  48. 350 IF IN$ = "O" THEN PRINT "I am too simple to calculate offsets.": PRINT "Please use CAVEMAP.BIG'UN"
  49. 360 IF IN$ = "P" THEN PRINT "Precision not calculated with this version.": GOTO 50
  50. 370 IF IN$ = "Q" THEN PRINT "Re-enter with GOTO 1": PRINT "Good riddance!": BEEP: END
  51. 380 IF IN$ = "R" THEN GOSUB 1680: GOTO 50
  52. 390 IF IN$ = "S" THEN GOSUB 600: GOTO 50
  53. 400 IF IN$ = "T" THEN PRINT "Wanna save it first? Y"; : GOSUB 520: IF IN$ = "N" THEN NN% = 0: GOTO 50 ELSE GOSUB 1990: GOTO 50
  54. 410 IF IN$ = "W" THEN GOSUB 1990: GOTO 50
  55. 420 IF IN$ = "X" THEN PRINT "Segments are not implemented in this version.": GOSUB 480: GOTO 50
  56. 430 BEEP: PRINT IN$; " is not a choice!": GOTO 50
  57. 440 BEEP: PRINT "QUIET! I'm thinking.": RETURN
  58. 450 REM common subroutines
  59. 460 II% = 0: IF IN$ = "" THEN II% = -1: RETURN ELSE IF ASC(IN$) = 96 THEN IN$ = PX$ + RIGHT$(IN$, LEN(IN$) - 1)  'FROM finder. SPLIT ME
  60. 470 IF IN$ = TT$(II%) THEN RETURN ELSE IF II% <= NN% THEN II% = II% + 1: GOTO 470 ELSE II% = -1: BEEP: PRINT "I can't find "; IN$: RETURN
  61. 480 PRINT "Stroke my key. ";
  62. 490 IN$ = INKEY$: IF IN$ = "" THEN 490 ELSE PRINT CHR$(168): RETURN
  63. 500 IF ASC(IN$) > 96 AND ASC(IN$) < 123 THEN IN$ = CHR$(ASC(IN$) - 32)'shift to CAPS
  64. 510 RETURN
  65. 520 I% = POS(I%): IF I% = 1 THEN PRINT : LOCATE , 1, 1, 0, 15 ELSE LOCATE , I% - 1, 1, 0, 15'back over last character for choice
  66. 530 IN$ = INKEY$: IF IN$ = "" THEN 530 ELSE GOSUB 500: LOCATE , , 1, 12, 14: PRINT IN$: RETURN
  67. 540 REM AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  68. 550 CLS : PRINT "Should I prefix this station with "; CHR$(34); PX$; CHR$(34); "Y"; : GOSUB 520: A$ = PX$: IF IN$ = "N" THEN A$ = ""
  69. 555 PRINT "Assign coordinates to station -> "; A$; : INPUT "", TT$(NN%): IF TT$(NN%) = "" OR TT$(NN%) = "-" THEN PRINT "Assign cancelled.": RETURN ELSE TT$(NN%) = A$ + TT$(NN%)
  70. 560 IN$ = "it. Must be a new station.": GOSUB 460: IF II% = -1 THEN N% = NN%: PRINT "Assign original coordinates":  ELSE N% = II%: PRINT "Assign new coordinates to existing station"
  71. 570 INPUT "North ->", NS(N%): INPUT "East ->", ES(N%): IF II% = -1 THEN FR$(N%) = TT$(N%): LINE INPUT "Remark ->", RM$(N%): INCL(N%) = 0: NI(N%) = 0: EI(N%) = 0: COMP(N%) = 0: TAPE(N%) = 0: DT$(N%) = " c0 t0": PR$ = TT$(N%): NN% = NN% + 1
  72. 580 RETURN
  73. 590 REM SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
  74. 600 IF NN% = 0 THEN PRINT "You ain't got nowheres to start!": GOSUB 480: GOSUB 550
  75. 605 PRINT "Shoot stations": PRINT "Prefix stations with "; CHR$(34); PX$; CHR$(34); "? Y"; : GOSUB 520: IF IN$ = "N" THEN INPUT "New station name prefix ->", PX$
  76. 610 N% = NN%: F$ = "": GOSUB 630: IF F$ = "" THEN RETURN ELSE IF F$ = "-" THEN 610 ELSE GOSUB 800: NN% = NN% + 1: GOTO 610'get inputs: calculate position
  77. 630 A = FRE(0): IF A < 300 THEN PRINT "Collecting garbage, "; FRE(""); " bytes free."
  78. 635 PRINT : PRINT "TO ->"; PX$; : INPUT "", IN$: IF IN$ = "" OR IN$ = "-" THEN F$ = IN$: RETURN
  79. 640 TT$(N%) = PX$ + IN$
  80. 650 PRINT "FROM is "; PR$; " -> "; : INPUT "", IN$: IF IN$ = "-" THEN 630
  81. 660 IF IN$ = "" THEN IN$ = PR$ ELSE IF ASC(IN$) = 27 THEN RETURN
  82. 670 GOSUB 460: IF II% = -1 THEN 650 ELSE FR$(N%) = IN$
  83. 680 PR$ = TT$(N%)
  84. 690 DT$(N%) = ""
  85. 700 INPUT "Compass ->", IN$: IF IN$ = "-" THEN 650 ELSE DT$(N%) = DT$(N%) + " c" + IN$: GOSUB 940: IF A >= 0 AND A <= 360 THEN COMP(N%) = A ELSE BEEP: PRINT "Compass out of range. Try again!": GOTO 700
  86. 710 PRINT "COMPASS "; COMP(N%)
  87. 720 IF BZ THEN INPUT "Backcompass ->", IN$: IF IN$ = "-" THEN 700 ELSE DT$(N%) = DT$(N%) + " b" + IN$'but not used in this version
  88. 730 INPUT "Tape ->", IN$: DT$(N%) = DT$(N%) + " t" + IN$: IF IN$ = "-" THEN 700 ELSE GOSUB 920: IF A >= 0 THEN TAPE(N%) = A ELSE BEEP: PRINT "Try that again!": GOTO 700
  89. 740 PRINT "TAPE "; TAPE(N%)
  90. 750 IF IZ THEN INPUT "Inclinometer ->", IN$: IF IN$ = "-" THEN 700 ELSE DT$(N%) = DT$(N%) + " i" + IN$: GOSUB 870: IF A >= -90 AND A <= 90 THEN INCL(N%) = A ELSE BEEP: PRINT "Inclinometer out of range. Try again.": GOTO 750 ELSE INCL(N%) = 0
  91. 760 PRINT "Inclinometer is "; INCL(N%)
  92. 770 IF RZ THEN INPUT "Right offset -> ", IN$: IF IN$ = "-" THEN 750 ELSE DT$(N%) = DT$(N) + " r" + IN$
  93. 780 LINE INPUT "Remark ->", IN$: IF IN$ = "-" THEN 730 ELSE RM$(N%) = IN$
  94. 790 F$ = "½": RETURN'with complete data for this station
  95. 800 HD = COS((INCL(N%) - CC) / RD) * TAPE(N%)'calculate coordinates
  96. 810 NI(N%) = HD * COS((COMP(N%) - DC) / RD)
  97. 820 EI(N%) = HD * SIN((COMP(N%) - DC) / RD)
  98. 830 IN$ = FR$(N%): GOSUB 460: IF II% < 0 THEN PRINT "Calculation aborted": RETURN
  99. 840 NS(N%) = NS(II%) + NI(N%)
  100. 850 ES(N%) = ES(II%) + EI(N%)
  101. 860 RETURN
  102. 870 IF IN$ = "" THEN A = 0: RETURN ELSE A$ = IN$'incl handler
  103. 880 IF LEFT$(A$, 1) = " " THEN A$ = RIGHT$(A$, LEN(A$) - 1): GOTO 880 'incl handler
  104. 890 IF LEFT$(A$, 1) = "-" THEN B$ = RIGHT$(A$, LEN(A$) - 1) ELSE B$ = A$
  105. 900 A = 60: GOSUB 1060: IF LEFT$(A$, 1) = "-" THEN A = -A
  106. 910 IF IZ = 2 THEN A = A - 90: RETURN ELSE A = A * IZ: RETURN
  107. 920 IF IN$ = "" THEN A = 0: RETURN ELSE IF TZ = 1 THEN A = 12 ELSE IF TZ = POLE THEN A = 25 ELSE IF TZ = GUNTER THEN A = 100 ELSE A = 0'tape handler
  108. 930 B$ = IN$: GOSUB 1060: A = A * TZ: RETURN
  109. 940 IF IN$ = "" THEN A = -999: RETURN'compass handler; azimuth, quadrants, gradians
  110. 950 A$ = IN$: B$ = ""
  111. 960 FOR I% = 1 TO LEN(A$)'; finder
  112. 970 IN$ = MID$(A$, I%, 1)
  113. 980 IF IN$ = ";" THEN PRINT "Tell me why you want multiple compass readings and I'll let you do it.": B$ = LEFT$(A$, I% - 1): I% = LEN(A$)
  114. 990 NEXT
  115. 1000 IF B$ = "" THEN B$ = A$
  116. 1010 IF QZ = 0 THEN A = 60: GOSUB 1060: RETURN
  117. 1020 IF QZ = 1 THEN A = 60: GOSUB 1150: RETURN
  118. 1030 IF QZ = .9 THEN A = VAL(IN$) * QZ: RETURN
  119. 1040 BEEP: PRINT "Bad value for QZ = compass quadrant logic.": A = -9999: RETURN
  120. 1050 PRINT "Tell me why you want to enter multiple compass readings & I'll let you do it.": RETURN
  121. 1060 IF B$ = "" OR B$ = "/" THEN A = 0: RETURN'/minutes etc handler
  122. 1070 L% = 0: FOR J% = 1 TO LEN(B$): M% = ASC(MID$(B$, J%, 1)): IF NOT (M% = 32 OR M% > 42 AND M% < 58) THEN L% = -9: PRINT "Garbage character "; CHR$(K%)
  123. 1080 NEXT: IF L% = -9 THEN A = -999: RETURN
  124. 1090 J% = 1
  125. 1100 IF MID$(B$, J%, 1) = "/" THEN GOSUB 1120: RETURN 'minutes only
  126. 1110 IF J% = LEN(B$) THEN A = VAL(B$): RETURN ELSE J% = J% + 1: GOTO 1100 'no /
  127. 1120 IF J% = 1 THEN A = VAL(RIGHT$(B$, LEN(B$) - 1)) / A: RETURN'minutes only
  128. 1130 IF J% = LEN(B$) THEN A = VAL(LEFT$(B$, J% - 1)): RETURN  'degrees only
  129. 1140 A = VAL(LEFT$(B$, J% - 1)) + VAL(RIGHT$(B$, LEN(B$) - J%)) / A: RETURN    'degrees/minutes
  130. 1150 IF LEN(B$) = 1 THEN IN$ = B$: GOSUB 500: IF IN$ = "N" THEN A = 0: RETURN ELSE IF IN$ = "E" THEN A = 90: RETURN ELSE IF IN$ = "S" THEN A = 180: RETURN ELSE IF IN$ = "W" THEN A = 270: RETURN ELSE PRINT B$; " is not a choice!": A = -888: RETURN
  131. 1160 IN$ = LEFT$(B$, 1): GOSUB 500: C$ = IN$
  132. 1170 IN$ = RIGHT$(B$, 1): GOSUB 500: D$ = IN$
  133. 1180 B$ = MID$(B$, 2, LEN(B$) - 2): IF B$ = "" THEN A = 45:  ELSE GOSUB 1060
  134. 1190 IF C$ = "N" AND D$ = "E" THEN RETURN
  135. 1200 IF C$ = "S" AND D$ = "E" THEN A = 180 - A: RETURN
  136. 1210 IF C$ = "S" AND D$ = "W" THEN A = 180 + A: RETURN
  137. 1220 IF C$ = "N" AND D$ = "W" THEN A = 360 - A: RETURN
  138. 1230 BEEP: PRINT "Bad quadrant.": A = -999: RETURN
  139. 1240 REM DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
  140. 1250 PRINT "Suppress output? N"; : GOSUB 520: IF IN$ = "Y" THEN 1360'Display duh data
  141. 1260 J% = 0: PRINT "Suppress remarks? Y"; : GOSUB 520: IF IN$ = "N" THEN J% = -1
  142. 1270 PRINT "Display original input? N"; : GOSUB 520: IF IN$ <> "Y" THEN K% = 0 ELSE K% = -1
  143. 1280 PRINT "To printer? N"; : GOSUB 520: IF IN$ = "Y" THEN GOSUB 1630: RETURN
  144. 1290 PRINT "TO"; TAB(10); "FROM"; TAB(20); "COMPASS"; TAB(30); "TAPE"
  145. 1300 FOR I% = 0 TO NN% - 1
  146. 1310 PRINT : IF K% THEN PRINT DT$(I%)
  147. 1320 PRINT TT$(I%); TAB(10); FR$(I%); TAB(20); COMP(I%); TAB(30); TAPE(I%); : IF J% THEN PRINT TAB(40); RM$(I%);
  148. 1330 A$ = INKEY$: IF A$ = "" THEN 1330
  149. 1340 NEXT
  150. 1350 PRINT : INPUT "That's all.", IN$
  151. 1360 PRINT "Wanna change sump'un? N"; : GOSUB 520: IF IN$ <> "Y" THEN 1500
  152. 1370 PRINT "Delete station with OLD FROM=DELETE": PRINT "Insert before station with OLD FROM=INSERT.": PRINT "<RETURN> leaves old value."
  153. 1380 INPUT "TO->", IN$: IF IN$ = "" OR IN$ = "-" THEN 1360
  154. 1390 GOSUB 460: IF II% < 0 THEN 1360
  155. 1400 K% = II%: PRINT "OLD FROM= "; FR$(K%)
  156. 1410 INPUT "New FROM->", IN$: IF IN$ = "-" THEN 1380
  157. 1420 IF IN$ = "INSERT" OR IN$ = "insert" THEN GOSUB 440: GOSUB 1600: NN% = NN% + 1: GOTO 1360
  158. 1430 IF IN$ = "DELETE" OR IN$ = "delete" THEN GOSUB 440: GOSUB 1550: GOTO 1360
  159. 1440 IF IN$ <> "" THEN GOSUB 460: IF II% < 0 THEN 1360 ELSE FR$(K%) = IN$
  160. 1450 PRINT "Old COMP= "; COMP(K%): INPUT "NEW COMP->", IN$: IF IN$ <> "" THEN IF IN$ = "-" THEN 1400 ELSE DT$(K%) = DT$(K%) + " cc" + IN$: GOSUB 940: IF A >= 0 AND A <= 360 THEN COMP(K%) = A:  ELSE BEEP: PRINT "Try again!": GOTO 1450
  161. 1460 PRINT "Old TAPE = "; TAPE(K%): INPUT "New TAPE->", IN$: IF IN$ <> "" THEN IF IN$ = "-" THEN 1450 ELSE GOSUB 920: IF A >= 0 THEN TAPE(K%) = A: DT$(K%) = DT$(K%) + " tt" + IN$ ELSE BEEP: PRINT "Try again!": GOTO 1460
  162. 1470 IF IZ THEN PRINT "Old INCL ="; INCL(K%): INPUT "New INCL->"; IN$: IF IN$ <> "" THEN IF IN$ = "-" THEN 1460 ELSE GOSUB 870: IF A >= -90 AND A <= 90 THEN DT$(K%) = DT$(K%) + " ii" + IN$: INCL(K%) = A ELSE PRINT "Incl out of range.":  GOTO 1470
  163. 1480 PRINT "Old remark= "; RM$(K%): LINE INPUT "New remark->"; IN$: IF IN$ <> "" THEN IF IN$ = "-" THEN 1460 ELSE RM$(K%) = IN$
  164. 1490 GOTO 1360
  165. 1500 PRINT "Wanna recalculate? N"; : GOSUB 520: IF IN$ <> "Y" THEN RETURN
  166. 1510 PRINT "All of 'em? Y"; : GOSUB 520: I% = 0: J% = NN% - 1: IF IN$ <> "N" THEN 1540
  167. 1520 INPUT "Starting station->"; IN$: GOSUB 460: I% = II%: IF II% < 0 THEN 1500
  168. 1530 INPUT "Stopping station->"; IN$: GOSUB 460: J% = II%: IF II% < 0 THEN 1500
  169. 1540 GOSUB 440: FOR N% = I% TO J%: GOSUB 800: NEXT: RETURN
  170. 1550 FOR J% = K% TO NN% - 1'delete
  171. 1560 TT$(J%) = TT$(J% + 1): FR$(J%) = FR$(J% + 1): COMP(J%) = COMP(J% + 1): TAPE(J%) = TAPE(J% + 1): INCL(J%) = INCL(J% + 1)
  172. 1561 DT$(J%) = DT$(J% + 1): NI(J%) = NI(J% + 1): EI(J%) = EI(J% + 1): NS(J%) = NS(J% + 1): ES(J%) = ES(J% + 1): RM$(J%) = RM$(J% + 1)
  173. 1570 NEXT: NN% = NN% - 1
  174. 1580 IN$ = FR$(K): GOSUB 460: IF II% < 0 THEN PRINT IN$; " was referenced by "; TT$(K%)
  175. 1590 RETURN
  176. 1600 FOR J% = NN% - 1 TO K% STEP -1'insert
  177. 1610 TT$(J% + 1) = TT$(J%): FR$(J% + 1) = FR$(J%): COMP(J% + 1) = COMP(J%): TAPE(J% + 1) = TAPE(J%): INCL(J% + 1) = INCL(J%)
  178. 1611 DT$(J% + 1) = DT$(J%): NI(J% + 1) = NI(J%): EI(J% + 1) = EI(J%): NS(J% + 1) = NS(J%): ES(J% + 1) = ES(J%): RM$(J% + 1) = RM$(J%): NEXT
  179. 1620 N% = K%: GOSUB 630: PRINT "This may have made a hole in your data": GOSUB 800: RETURN
  180. 1630 LPRINT "TO"; TAB(10); "FROM"; TAB(20); "COMPASS"; TAB(30); "TAPE"'raw data to printer
  181. 1640 FOR I% = 0 TO NN% - 1: LPRINT : IF K% THEN LPRINT DT$(I%)
  182. 1650 LPRINT TT$(I%); TAB(10); FR$(I%); TAB(20); COMP(I%); TAB(30); TAPE(I%); : IF J% THEN LPRINT TAB(40); RM$(I%);
  183. 1660 NEXT: LPRINT : RETURN
  184. 1670 REM RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR
  185. 1680 PRINT "Default drive is "; DR$; "  Default extension is "; X10$
  186. 1690 INPUT "Read which file"; IN$: IF IN$ = "" THEN FILES DR$: GOSUB 480: RETURN
  187. 1700 IF MID$(IN$, 2, 1) = ":" THEN DR$ = LEFT$(IN$, 2): IN$ = RIGHT$(IN$, LEN(IN$) - 2)
  188. 1710 FOR I% = 0 TO 3: IF I% >= LEN(IN$) THEN 1730
  189. 1720 IF LEN(IN$) > 1 THEN IF MID$(IN$, LEN(IN$) - I%, 1) = "." THEN X10$ = RIGHT$(IN$, I% + 1): IN$ = LEFT$(IN$, LEN(IN$) - I% - 1): I% = 3
  190. 1730 NEXT
  191. 1740 ON ERROR GOTO 1960
  192. 1750 OPEN "I", #1, DR$ + IN$ + X10$
  193. 1760 ON ERROR GOTO 0
  194. 1770 INPUT #1, A$, PX$, DC, BZ, BC, A$, TZ, IZ, IC, RZ, I%, I%: LINE INPUT #1, A$
  195. 1780 WHILE NOT EOF(1)
  196. 1790 INPUT #1, TT$(NN%)
  197. 1800 INPUT #1, FR$(NN%)
  198. 1810 INPUT #1, COMP(NN%)
  199. 1820 INPUT #1, TAPE(NN%)
  200. 1830 INPUT #1, INCL(NN%)
  201. 1840 LINE INPUT #1, DT$(NN%)
  202. 1850 INPUT #1, NI(NN%)
  203. 1860 INPUT #1, EI(NN%)
  204. 1870 INPUT #1, NS(NN%)
  205. 1880 INPUT #1, ES(NN%)
  206. 1890 INPUT #1, I%'up increment
  207. 1900 INPUT #1, I%'up sum
  208. 1910 LINE INPUT #1, RM$(NN%)
  209. 1920 NN% = NN% + 1
  210. 1930 WEND
  211. 1940 CLOSE #1
  212. 1950 RETURN
  213. 1960 CLOSE #1: IF ERR = 52 OR ERR = 53 THEN PRINT "AIN'T NO "; DR$ + IN$ + X10$; " HERE!": FILES DR$ + "*" + X10$:  ELSE IF ERR = 71 THEN PRINT "Youse ain't got no "; DR$; " drive nowheres" ELSE PRINT "Now what?": ON ERROR GOTO 0
  214. 1970 GOSUB 480: RESUME 1680
  215. 1980 REM WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
  216. 1990 PRINT "Default drive is "; DR$; "  Default extension is "; X10$
  217. 2000 INPUT "Whacha name it"; IN$: IF IN$ = "" THEN RETURN
  218. 2010 IF MID$(IN$, 2, 1) = ":" THEN DR$ = LEFT$(IN$, 2): IN$ = RIGHT$(IN$, LEN(IN$) - 2)
  219. 2020 IF LEN(IN$) <= 1 THEN I% = 3: GOTO 2060
  220. 2030 FOR I% = 0 TO 3: IF I% >= LEN(IN$) THEN 2050
  221. 2040 IF MID$(IN$, LEN(IN$) - I%, 1) = "." THEN X10$ = RIGHT$(IN$, I% + 1): IN$ = LEFT$(IN$, LEN(IN$) - I% - 1): I% = 3
  222. 2050 NEXT
  223. 2060 ON ERROR GOTO 2270: OPEN "I", #1, DR$ + IN$ + X10$: CLOSE #1: ON ERROR GOTO 0: A$ = IN$: PRINT "Overwrite file? N"; : GOSUB 520: IF IN$ <> "Y" THEN RETURN ELSE IN$ = A$
  224. 2070 ON ERROR GOTO 2280: OPEN "O", #1, DR$ + IN$ + X10$
  225. 2080 PRINT #1, "Data for CAVEMAP": PRINT "A program in BASIC to calculate preliminary survey data.": PRINT #1, PX$
  226. 2090 PRINT #1, DC: PRINT #1, BZ: PRINT #1, BC: PRINT #1, "": PRINT #1, TZ: PRINT #1, IZ: PRINT #1, IC: PRINT #1, RZ: PRINT #1, 0: PRINT #1, 0: PRINT #1, "DP_BYTER\CAVE Inc\Ritner KY  42639\(606)376-3137"
  227. 2100 FOR I% = 0 TO NN% - 1
  228. 2110 PRINT #1, TT$(I%)
  229. 2120 PRINT #1, FR$(I%)
  230. 2130 PRINT #1, COMP(I%)
  231. 2140 PRINT #1, TAPE(I%)
  232. 2150 PRINT #1, INCL(I%)
  233. 2160 PRINT #1, DT$(I%)
  234. 2170 PRINT #1, NI(I%)
  235. 2180 PRINT #1, EI(I%)
  236. 2190 PRINT #1, NS(I%)
  237. 2200 PRINT #1, ES(I%)
  238. 2210 PRINT #1, 0
  239. 2220 PRINT #1, 0
  240. 2230 PRINT #1, RM$(I%)
  241. 2240 NEXT
  242. 2250 CLOSE #1
  243. 2260 RETURN
  244. 2270 IF ERR = 53 THEN RESUME 2070 ELSE IF ERR = 71 THEN PRINT "Waddya mean, drive "; DR$; "?": GOSUB 480: RESUME 2250 ELSE ON ERROR GOTO 0: RESUME 2250
  245. 2280 IF ERR = 70 THEN PRINT "If you really want it on this disk then you'll have to remove the write protect.": GOSUB 480: RESUME 2250
  246. 2290 REM LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
  247. 2300 PRINT "Suppress remarks? Y"; : GOSUB 520: IF IN$ = "N" THEN J% = -1 ELSE J% = 0'list coordinates
  248. 2310 PRINT "Sent to printer? N"; : GOSUB 520: IF IN$ = "Y" THEN GOSUB 2390: RETURN
  249. 2320 PRINT "TO"; TAB(20); "NORTH"; TAB(30); "EAST"
  250. 2330 FOR I% = 0 TO NN% - 1
  251. 2340 PRINT TT$(I%); TAB(20); INT(NS(I%) + .5); TAB(30); INT(ES(I%) + .5);
  252. 2350 IF J% THEN PRINT TAB(40); RM$(I%);
  253. 2360 PRINT
  254. 2370 A$ = INKEY$: IF A$ = "" THEN 2370
  255. 2375 NEXT
  256. 2380 INPUT "All done", IN$: RETURN
  257. 2390 LPRINT "TO"; TAB(20); "NORTH"; TAB(30); "EAST"
  258. 2400 FOR I% = 0 TO NN% - 1
  259. 2410 LPRINT TT$(I%); TAB(20); INT(NS(I%) + .5); TAB(30); INT(ES(I%) + .5);
  260. 2420 IF J% THEN LPRINT TAB(40); RM$(I%);
  261. 2430 PRINT : NEXT: RETURN
  262. 2440 REM KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
  263. 2450 CLS : PRINT "Let's see if I can plot a map on your screen and printer.": PRINT "I'll plot a square. You measure the horizontal and vertical size.": PRINT "Then I'll adjust the square to make it squarer."
  264. 2460 PRINT "You may report in either millimeters or inches and twentieths.": GOSUB 480
  265. 2470 PRINT "Send it to the printer? N"; : GOSUB 520: IF IN$ = "Y" THEN A = PRNX: I% = -1 ELSE A = SCRX
  266. 2480 KEY OFF: ON ERROR GOTO 2580: SCREEN 2
  267. 2490 IF A <= 1 THEN LINE (120, 0)-(518, 0): LINE -(518, 199 * A): LINE -(120, 199 * A): LINE -(120, 0): LINE (318, 0)-(318, 199 * A): LINE (120, 99 * A)-(518, 99 * A)
  268. 2500 IF A > 1 THEN A = 1 / A: LINE (120 * A, 0)-(518 * A, 0): LINE -(518 * A, 199): LINE -(120 * A, 199): LINE -(120 * A, 0): LINE (318 * A, 0)-(318 * A, 199): LINE (120 * A, 99)-(518 * A, 99)
  269. 2510 A$ = INKEY$: IF A$ = "" THEN 2510 ELSE IF I% = -1 THEN GOSUB 2770
  270. 2520 SCREEN 0
  271. 2530 INPUT "What was the horizontal distance?  If you don't know, then enter 0.0 ", B
  272. 2540 IF B = 0 THEN PRINT "So you like it the way it is? Y"; : GOSUB 520: IF IN$ = "N" THEN PRINT "OK Mush4brains, we'll do it again.": GOSUB 480: GOTO 2450 ELSE RETURN
  273. 2550 INPUT "What was the vertical distance"; C: B = B / C
  274. 2551 PRINT "I can change the screen by "; ABS(B - 1) / 1 * 100; "% if you wish.": PRINT "Your wish is my command. Y"; : GOSUB 520: IF IN$ <> "N" THEN IF K% THEN PRNX = PRNX * B ELSE SCRX = SCRX * B
  275. 2560 PRINT "You may permanently change the screen aspect by changing variable SCRX in the   source code. The printer aspect is in variable PRNX"
  276. 2570 GOSUB 480: RETURN
  277. 2580 PRINT "I can't plot on your computer. I only know CGA.": PRINT "Error "; ERR; " in line "; ERL: RESUME 2570
  278. 2590 REM MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
  279. 2600 IF NN% < 2 THEN PRINT "You ain't got no data to plot!": GOSUB 480: RETURN ELSE PRINT "set scale? N"; : GOSUB 520: IF IN$ = "Y" THEN PRINT "Topo scale? Y"; : GOSUB 520: IF IN$ = "N" THEN INPUT "N-S size->", A ELSE A = 11050 ELSE A = 0
  280. 2610 B = 0: C = 0: D = 0: E = 0: PRINT "Send it to the printer? N"; : GOSUB 520: IF IN$ = "Y" THEN K% = -1 ELSE K% = 0
  281. 2620 FOR I% = 0 TO NN% - 1
  282. 2630 IF B < NS(I%) THEN B = NS(I%)
  283. 2640 IF C > NS(I%) THEN C = NS(I%)
  284. 2650 IF D < ES(I%) THEN D = ES(I%)
  285. 2660 IF E > ES(I%) THEN E = ES(I%)
  286. 2670 NEXT
  287. 2680 IF 198 / (B - C) < 338 / (D - E) THEN C = 198 / (B - C) ELSE C = 338 / (D - E)
  288. 2690 IF A <> 0 THEN A = 200 / A: IF A > C THEN PRINT "N-S size too small. Must be > "; 200 / C: GOTO 2600 ELSE  ELSE A = C
  289. 2700 IF K% THEN C = PRNX ELSE C = SCRX
  290. 2710 KEY OFF: SCREEN 2: LINE (600, 0)-(639, 0): LINE (600, 199)-(639, 199): FOR I% = 0 TO NN% - 1: J% = I% + 1
  291. 2720 J% = J% - 1: IF FR$(I%) <> TT$(J%) THEN IF J% > 0 GOTO 2720 ELSE SCREEN 0: PRINT "Station "; FR$(I%); " missing. Plot aborted.": I% = NN%: GOTO 2740
  292. 2730 IF C <= 1 THEN LINE (2 * ((ES(J%) - E) * A) + 1, ((B - NS(J%)) * A * C) + 1)-(2 * ((ES(I%) - E) * A) + 1, ((B - NS(I%)) * A * C) + 1)
  293. 2731 IF C > 1 THEN LINE (2 * ((ES(J%) - E) * A / C) + 1, ((B - NS(J%)) * A) + 1)-(2 * ((ES(I%) - E) * A / C) + 1, ((B - NS(I%)) * A) + 1)
  294. 2740 NEXT
  295. 2750 A$ = INKEY$: IF A$ = "" THEN 2750 ELSE IF K% THEN B = 200 / A: C = B / 5.52: GOSUB 2770: SCREEN 0: LOCATE 25, 30: PRINT "N-S size is ", B; "Scale = "; C: RETURN
  296. 2760 SCREEN 0: RETURN
  297. 2770 ON ERROR GOTO 2872: OPEN "lpt1:" FOR RANDOM AS #1: 'Seikosha map print routine
  298. 2780 WIDTH #1, 255'suppress normal return at 80 columns
  299. 2790 PRINT #1, CHR$(27); "A"; CHR$(8); 'line feed to 8/72"
  300. 2795 ON ERROR GOTO 0
  301. 2800 FOR I% = 639 TO 0 STEP -8
  302. 2810 PRINT #1, CHR$(13); CHR$(10); CHR$(27); "*"; CHR$(5); CHR$(0); CHR$(2); 'Turn on 1:1 graphics
  303. 2820 FOR J% = 0 TO 199
  304. 2830 A = POINT(I%, J%) * 128 + POINT(I% - 1, J%) * 64 + POINT(I% - 2, J%) * 32 + POINT(I% - 3, J%) * 16 + POINT(I% - 4, J%) * 8 + POINT(I% - 5, J%) * 4 + POINT(I% - 6, J%) * 2 + POINT(I% - 7, J%)
  305. 2840 PRINT #1, CHR$(A); CHR$(A);
  306. 2850 NEXT
  307. 2860 FOR J% = 0 TO 111: PRINT #1, CHR$(0); : NEXT'pad out line
  308. 2865 NEXT
  309. 2870 CLOSE : RETURN
  310. 2872 IF ERR = 25 THEN RESUME 2870 ELSE ON ERROR GOTO 0: RESUME
  311. 2880 REM BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
  312. 2890 INPUT "Reassign station "; IN$: GOSUB 460: K% = II%: IF K% < 0 THEN GOSUB 480: RETURN
  313. 2900 INPUT " such that station "; IN$: GOSUB 460: J% = II%: IF J% < 0 THEN GOSUB 480: RETURN
  314. 2910 INPUT " equals station "; IN$: GOSUB 460: IF II% < 0 THEN GOSUB 480: RETURN
  315. 2920 NS(K%) = NS(K%) - NS(J%) + NS(II%)
  316. 2930 ES(K%) = ES(K%) - ES(J%) + ES(II%)
  317. 2940 GOSUB 1500: RETURN
  318. 2950 REM CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
  319. 2960 PRINT "Close a survey loop to check for blunder."
  320. 2970 INPUT "First closure station ->"; IN$: GOSUB 460: IF II% < 0 THEN RETURN ELSE J% = II%: A$ = IN$
  321. 2980 INPUT "Second name for the same closure station ->"; IN$: GOSUB 460: IF II% < 0 THEN RETURN ELSE K% = II%: B$ = IN$
  322. 2990 A = NS(K%) - NS(J%)
  323. 3000 B = ES(K%) - ES(J%)
  324. 3010 C = SQR(A * A + B * B)
  325. 3020 D = ATN(B / (A + 1E-08)) * RD: IF A < 0 THEN D = D + 180
  326. 3030 IF D < 0 THEN D = D + 360
  327. 3040 PRINT : PRINT "The closure error betwixt "; A$; " and "; B$; " is "; INT(C + .5);
  328. 3050 PRINT "In the direction "; INT(D + .5); " to "; B$; " from "; A$'for this sort of ½fast preliminary surveying, you don't need to keep tract of the change.
  329. 3060 PRINT "Do all the stations lay upon the loop? Y"; : GOSUB 520: IF IN$ = "N" THEN RETURN
  330. 3070  E = 0: FOR I% = 0 TO NN% - 1: E = E + TAPE(I%): NEXT: F = C / E * 100'run of loop
  331. 3080 PRINT "That's "; : PRINT USING "###.#"; F; : PRINT "% of a run of "; INT(E + .5)
  332. 3090 PRINT : PRINT "Should I close this loop assuming that all of the error is in the compass? Y"; : GOSUB 520: IF IN$ = "N" THEN RETURN
  333. 3100 IF F > 5 THEN PRINT "You don't really expect me to close a loop with "; CINT(F); "% closure error, do you? N"; : GOSUB 520: IF IN$ <> "Y" THEN RETURN
  334. 3110 C = 0: D = 0
  335. 3120 FOR I% = 0 TO NN% - 1'sum movements each axis each shot
  336. 3130 C = C + ABS(NI(I%))
  337. 3140 D = D + ABS(EI(I%))
  338. 3150 NEXT
  339. 3160 E = 0: F = 0
  340. 3170 FOR I% = 0 TO NN% - 1'adjust coordinates
  341. 3180 E = E + ABS(NI(I%)) / C * B
  342. 3190 F = F + ABS(EI(I%)) / D * A
  343. 3200 NS(I%) = NS(I%) - F'north error distributed with east movement. Compass Rule
  344. 3210 ES(I%) = ES(I%) - E
  345. 3220 NEXT
  346. 3230 PRINT "I can calculate the acreage in this loop. Your wish is my command. Y"; : GOSUB 520: IF IN$ = "N" THEN RETURN
  347. 3240 PRINT "Are you sure that this data forms a loop, that each station references the": PRINT "previous station, and that all the stations are on the loop? N"; : GOSUB 520
  348. 3250 A = 0
  349. 3260 FOR I% = 1 TO NN% - 1
  350. 3270 A = A + (NS(I%) + NS(I% - 1)) * (ES(I%) - ES(I% - 1))
  351. 3280 NEXT
  352. 3290 A = ABS(A / 87120!)
  353. 3300 PRINT "The area enclosed by this loop is "; : PRINT USING "####.##"; A; : PRINT " acres."
  354. 3310 IF IN$ <> "Y" THEN PRINT "But I'm not sure either."
  355. 3320 GOSUB 480: RETURN
  356. 3330 REM IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
  357. 3340 CLS : PRINT "Instrument parameters": PRINT : PRINT "A = Azimuth": PRINT " G = gradians": PRINT "; Q = Quadrants": PRINT "[May be degrees/minutes][Multiple readings separated by "; CHR$(34); ";"; CHR$(34); "]"
  358. 3350 IF QZ = 0 THEN A$ = "A" ELSE IF QZ = 1 THEN A$ = "Q" ELSE IF QZ = .9 THEN A$ = "G" ELSE A$ = "?"
  359. 3360 PRINT "How do you prefer your compass? "; A$; : GOSUB 520: IF ASC(IN$) = 13 THEN 3380 ELSE A$ = IN$
  360. 3370 IF A$ = "A" THEN QZ = 0 ELSE IF A$ = "Q" THEN QZ = 1 ELSE IF A$ = "G" THEN QZ = .9 ELSE PRINT A$; " is not a choice!": GOSUB 480: GOTO 3340
  361. 3380 PRINT "Compass declination of"; DC; "? Y"; : GOSUB 520: IF IN$ = "N" THEN INPUT "Compass declination ->", DC
  362. 3390 PRINT "Using backcompass? N"; : GOSUB 520
  363. 3400 IF IN$ = "Y" THEN PRINT "Backcompass not supported. But I'll write them down on the": PRINT "disk if you want.": BZ = 1: PRINT "Backcompass declination of "; DB; "? Y"; : GOSUB 520: IF IN$ = "N" THEN INPUT "Backcompass declination ->", DB
  364. 3410 PRINT "F = Feet [May be feet/inches]": PRINT "M = Meters": PRINT "P = Poles or rods [May be poles/links]": PRINT "C = Gunter Chains [May be chains/links]": PRINT "Q = Pace [User defined]"
  365. 3420 IF TZ = 1 THEN A$ = "F" ELSE IF TZ = MTR THEN A$ = "M" ELSE IF TZ = POLE THEN A$ = "P" ELSE IF TZ = GUNTER THEN A$ = "C" ELSE A$ = "Q"
  366. 3430 PRINT "And how do you measure your distance? "; A$; : GOSUB 520
  367. 3440 IF IN$ = "F" THEN TZ = 1 ELSE IF IN$ = "M" THEN TZ = MTR ELSE IF IN$ = "P" THEN TZ = POLE ELSE IF IN$ = "C" THEN TZ = GUNTER ELSE IF IN$ = "Q" THEN INPUT "Length, in feet -> "; TZ ELSE IF ASC(IN$) <> 13 THEN PRINT IN$; " no good": GOTO 3410
  368. 3450 IF IZ THEN A$ = "Y" ELSE A$ = "N"
  369. 3460 PRINT "Using clinometer? "; A$; : GOSUB 520
  370. 3470 IF ASC(IN$) = 13 THEN IN$ = A$
  371. 3480 IF IN$ = "Y" THEN IZ = 1: PRINT "D = degrees [May be degrees/minutes]": PRINT "G = gradians": PRINT "S = semicircular protractor": PRINT "D G S D"; : GOSUB 520 ELSE IZ = 0
  372. 3490 IF IZ THEN IF IN$ = "G" THEN IZ = .9 ELSE IF IN$ = "S" THEN IZ = 2 ELSE IF ASC(IN$) <> 13 THEN 3460
  373. 3500 IF IZ THEN PRINT "Clinometer correction of "; CC; "? Y"; : GOSUB 520: IF IN$ = "N" THEN INPUT "Clinometer correction -> ", CC
  374. 3510 PRINT "Using offsets? N"; : GOSUB 520: IF IN$ = "Y" THEN RZ = 1: PRINT "Offsets not supported in simple program." ELSE RZ = 0
  375. 3520 PRINT "Put the data on drive "; DR$; "? Y"; : GOSUB 520: IF IN$ <> "N" THEN 3540 ELSE PRINT "Data drive ->";
  376. 3530 IN$ = INKEY$: IF IN$ = "" THEN 3530 ELSE GOSUB 500: DR$ = IN$ + ":": PRINT DR$
  377. 3540 PRINT "With an extension of "; X10$; "? Y"; : GOSUB 520: IF IN$ = "N" THEN INPUT "Extension ->.", X10$: X10$ = "." + X10$: IF LEN(X10$) > 4 THEN PRINT "Extension too long!  "; X10$: BEEP: GOTO 3540
  378. 3550 PRINT "Ya like it? Y"; : GOSUB 520: IF IN$ = "N" THEN 3340 ELSE RETURN
  379. 3560 PRINT "This is a simple version of CAVEMAP with many complications removed.": PRINT "Instructions for using this program are in the file CAVEMAP1.TXT"
  380. 3570 PRINT "Instructions for surveying [quickly, easily & inexpensively getting the data": PRINT "which CAVEMAP manipulates] are in the files SIY*.TXT"
  381. 3580 PRINT "For help, contact": PRINT "Dave Beiter": PRINT "CAVE, Inc": PRINT "½ Fast Road": PRINT "Ritner, KY  42639": PRINT "(606)376-3137 [please don't expect me to think on the phone]"
  382. 3620 BZ = 0'backcompass logic
  383. 3630 DC = 0: DB = 0'declination compass & backcompass
  384. 3640 DR$ = "A:"'data drive
  385. 3650 IC = 0'inclinometer correction
  386. 3660 IZ = 0'inclinometer logic
  387. 3670 X10$ = ".CAV"
  388. 3680 PR$ = ""'previous station
  389. 3690 PX$ = "prefix"
  390. 3700 QZ = 0'compass units logic
  391. 3710 TZ = 1'tape units logic
  392. 3720 RZ = 0'offset logic
  393. 3730 HD = 0'horizontal distance
  394. 3740 RD = 57.29578'degrees per radian
  395. 3750 MTR = 3.28083'feet per meter
  396. 3760 POLE = 16.5'feet per USA pole
  397. 3770 GUNTER = 66'feet per Gunter's chain of 100 links
  398. 3780 SCRX = .9130932: PRNX = .989175'screen & printer map aspect for permanent adjustment
  399. 3785 GOSUB 14000
  400. 3790 RETURN
  401. 3800 END
  402. 3801 'CAVEMAP1.BAS^B4P, date 930714, (c) 1993 DP_BYTER, proliferate freely. CAVE Inc, ½ Fast Road, Ritner, KY  42639  606/376-3137
  403. 3802 'Silva Ranger Compass, $41. 200' fiberglass/PVC tapemeasure, $27. + $5 Shipping & handling. Instructions in CAVEMAP1.DOC
  404. 12600 IF NN% < 2 THEN PRINT "You ain't got no data to plot!": GOSUB 480: RETURN
  405. 12605 PRINT "The map will dump to your printer at the proper aspect in normal pica ": PRINT "(10/inch horizontal & 6/inch vertical). Use print screen key.": GOSUB 480
  406. 12610 A = 0: B = 0: C = 0: D = 0: E = 0
  407. 12620 FOR I% = 0 TO NN% - 1
  408. 12630 IF B < NS(I%) THEN B = NS(I%)
  409. 12640 IF C > NS(I%) THEN C = NS(I%)
  410. 12650 IF D < ES(I%) THEN D = ES(I%)
  411. 12660 IF E > ES(I%) THEN E = ES(I%)
  412. 12670 NEXT
  413. 12680 IF 4 / (B - C) < (79 / 10) / (D - E) THEN C = 4 / (B - C) ELSE C = (79 / 10) / (D - E)
  414. 12710 KEY OFF: SCREEN 0: CLS : FOR I% = 0 TO NN% - 1: J% = I% + 1
  415. 12720 J% = J% - 1: IF FR$(I%) <> TT$(J%) THEN IF J% > 0 GOTO 12720 ELSE SCREEN 0: PRINT "Station "; FR$(I%); " missing. Plot aborted.": I% = NN%: GOTO 12740
  416. 12726 C1 = ((ES(J%) - E) * C * 10) + 1: R1 = ((B - NS(J%)) * C * 6) + 1: C2 = ((ES(I%) - E) * C * 10) + 1: R2 = ((B - NS(I%)) * C * 6) + 1: GOSUB 13000
  417. 12740 NEXT
  418. 12750 A$ = INKEY$: IF A$ = "" THEN 12750
  419. 12760 SCREEN 0: LOCATE 25, 30: PRINT "N-S size ="; 4 / C; " Scale ="; 1 / C: LOCATE 24, 1: RETURN
  420. 13000 RR = R1: CC = C1: DR = R2 - R1: DC = C2 - C1
  421. 13010 ADV = ABS((DR + .01) / (DC + .01))
  422. 13020 DR = SGN(DR): DC = SGN(DC)
  423. 13030 IF ADV < 1 THEN GOSUB 13200 ELSE GOSUB 13300
  424. 13100 RETURN
  425. 13200 LOCATE CINT(RR), CINT(CC): PRINT "*";
  426. 13210 IF CINT(CC) = CINT(C2) THEN RETURN
  427. 13220 CC = CC + DC: RR = RR + ADV * DR
  428. 13230 GOTO 13200
  429. 13300 LOCATE INT(RR), INT(CC): PRINT "*";
  430. 13305 IF INT(RR) = INT(R2) THEN RETURN
  431. 13310 RR = RR + DR: CC = CC + DC / ADV
  432. 13320 GOTO 13300
  433. 14000 PRINT "Would you like to:"
  434. 14010 PRINT "B = Bypass Beginning Blather"
  435. 14020 PRINT "I = Initialize Instrument setting (or see the defaults)"
  436. 14030 PRINT "N = No, None of the above"
  437. 14040 PRINT "N"; : GOSUB 520
  438. 14050 IF IN$ = "B" THEN RETURN
  439. 14060 IF IN$ = "I" THEN GOSUB 3340
  440. 14070 GOSUB 14100
  441. 14080 PRINT "Would you like to Assign coordinates to a station? Y"; : GOSUB 520
  442. 14085 IF IN$ = "Y" OR ASC(IN$) = 13 THEN GOSUB 550
  443. 14090 PRINT "Would you like to Shoot a station? Y"; : GOSUB 520
  444. 14095 IF IN$ = "Y" OR ASC(IN$) = 13 THEN GOSUB 600
  445. 14097 RETURN
  446. 14100 PRINT "Would you like to prefix your stations with a prefix? Y"; : GOSUB 520
  447. 14110 IF IN$ = "Y" OR ASC(IN$) = 13 THEN : PRINT "The present prefix is "; CHR$(34); PX$; CHR$(34): PRINT "Wanna change it? N"; : GOSUB 520 ELSE RETURN
  448. 14120 IF IN$ = "Y" THEN INPUT "New prefix ->"; PX$
  449. 14130 RETURN
  450.  
  451.