home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 1 / HamRadio.cdr / tech / ee3 / pltpts.bas (.txt) < prev    next >
Encoding:
GW-BASIC  |  1989-01-22  |  9.0 KB  |  259 lines

  1. 10  '================================================
  2. 32  KEY OFF:CLS:DIM X(200),Y(200):DEFINT Z
  3. 40  PRINT "PLTPTS - SCIENTIFIC PLOTTING PROGRAM"
  4. 42  PRINT "BY EARL MASON, MODIFIED BY A. KATZ (9/10/87)"
  5. 100  'GRAPH XY PROGRAM===============================
  6. 200  PRINT "Program reads a sequence of points (X1,Y1)"
  7. 202  PRINT "etc from the keyboard or from a sequential "
  8. 204  PRINT "text file (up to 200 points) and plots the "
  9. 206  PRINT "points."
  10. 208  PRINT "After data entry max and min X and Y and number "
  11. 210  PRINT "of data pairs will be output.  The user will"
  12. 212  PRINT "then be required to choose the range of x and y "
  13. 214  PRINT "values for the graph.  Other sets of x and y "
  14. 216  PRINT "values may then be graphed on the same screen."
  15. 218  PRINT "REMINDER - RUN GRAPHICS.COM form DOS if you want to use PrtSc. "
  16. 219  PRINT "REMINDER - ALL ENTRYS MUST BE IN UPPER CASE.
  17. 220  PRINT "REMINDER - COMPUTER MUST BE IN COLOR GRAPHICS MODE
  18. 290  M=0
  19. 292  ZS=1
  20. 300  LOCATE 22,1 : PRINT "KEYBOARD ENTRY (K) OR SEQUENTIAL FILE (F)";
  21. 310  A$=INKEY$:IF A$="" THEN 310
  22. 320  IF A$="F" THEN 1000
  23. 330  IF A$<>"K" THEN 300
  24. 331  'KEYBOARD ENTRY------------------------------------------
  25. 332  LOCATE 22,1:PRINT "                                             "
  26. 336  LOCATE 22,1 : INPUT "ENTER NUMBER OF DATA PAIRS";NPAIRS
  27. 340  FOR Z=1 TO NPAIRS
  28. 345  LOCATE 23,1:PRINT "                                             "
  29. 350  LOCATE 23,1 : PRINT "ENTER DATA PAIR NUMBER ";Z;"X,Y";
  30. 360  INPUT X(Z),Y(Z)
  31. 370  IF Z=1 THEN XMA=X(1):XMI=X(1):YMA=Y(1):YMI=Y(1)
  32. 380  IF X(Z)>XMA THEN XMA=X(Z)
  33. 390  IF X(Z)<XMI THEN XMI=X(Z)
  34. 400  IF Y(Z)>YMA THEN YMA=Y(Z)
  35. 410  IF Y(Z)<YMI THEN YMI=Y(Z)
  36. 415  NEXT Z: IF M=1 THEN 5000
  37. 416  PRINT: INPUT "WANT TO CHECK VALUES (Y/N)"; B$
  38. 417  IF B$<>"Y" THEN 429
  39. 418  CLS: PRINT "POINT NUMBER", "X VALUE", "Y VALUE"
  40. 419  FOR Z=1 TO NPAIRS: PRINT Z, X(Z), Y(Z): NEXT
  41. 420  PRINT : INPUT "WANT TO CHANGE VALUE (Y/N)"; Q$
  42. 421  IF Q$<>"Y" THEN IF M=1 THEN 5000 ELSE 429
  43. 422  PRINT: INPUT "ENTER POINT NUMBER AND NEW X, Y"; Z, X(Z), Y(Z)
  44. 424  IF X(Z)>XMA THEN XMA=X(Z)
  45. 425  IF X(Z)<XMI THEN XMI=X(Z)
  46. 426  IF Y(Z)>YMA THEN YMA=Y(Z)
  47. 427  IF Y(Z)<YMI THEN YMI=Y(Z)
  48. 428  GOTO 420
  49. 429  PRINT "DATA VALUES:"
  50. 430  PRINT NPAIRS;" DATA VALUES"
  51. 440  PRINT "MAX X= ";XMA;" MIN X= ";XMI
  52. 450  PRINT "MAX Y= ";YMA;" MIN Y= ";YMI
  53. 460  GOTO 1500
  54. 999  'SEQUENTIAL FILE ENTRY------------------------------------
  55. 1000  LOCATE 23,2:INPUT "ENTER SEQUENTIAL FILE NAME";A$
  56. 1100  OPEN A$ FOR INPUT AS #1
  57. 1102  NPAIRS=0
  58. 1104  FOR Z=1 TO 200
  59. 1106  IF EOF(1) THEN 1165
  60. 1108  INPUT #1, X(Z),Y(Z)
  61. 1110  IF Z=1 THEN XMA=X(1):XMI=X(1):YMA=Y(1):YMI=Y(1)
  62. 1120  IF X(Z)>XMA THEN XMA=X(Z)
  63. 1130  IF X(Z)<XMI THEN XMI=X(Z)
  64. 1140  IF Y(Z)>YMA THEN YMA=Y(Z)
  65. 1150  IF Y(Z)<YMI THEN YMI=Y(Z)
  66. 1155  NPAIRS=NPAIRS+1
  67. 1160  NEXT Z
  68. 1165  CLOSE #1:IF M=1 THEN 5000
  69. 1170  PRINT "DATA VALUES:"
  70. 1180  PRINT NPAIRS;" DATA VALUES"
  71. 1190  PRINT "MAX X= ";XMA;" MIN X= ";XMI
  72. 1200  PRINT "MAX Y= ";YMA;" MIN Y= ";YMI
  73. 1210  GOTO 1500
  74. 1500  'SET GRAPH MAX AND MIN VALUES----------------------------
  75. 1510  INPUT "ENTER DESIRED MIN AND MAX X VALUES (XMIN, XMAX)";XMIN,XMAX
  76. 1515  IF XMIN>XMAX THEN 1510
  77. 1520  INPUT "ENTER DESIRED MIN AND MAX Y VALUES (YMIN, YMAX)";YMIN,YMAX
  78. 1525  IF YMIN>YMAX THEN 1520
  79. 1530  PV=(YMAX-YMIN)/40
  80. 1532  PH=(XMAX-XMIN)/64
  81. 2000  'CREATE WINDOW--------------------------------------------
  82. 2010  CLS:SCREEN 2,0
  83. 3000  WINDOW (XMIN,YMIN)-(XMAX,YMAX)
  84. 4000  VIEW (126,1)-(638,160),,1
  85. 4999  'PLOT LINES---------------------------------------------------
  86. 5000  LOCATE 22,1:PRINT "                                            "
  87. 5001  PRINT "                                                        "
  88. 5002  LOCATE 22,1:PRINT "PLOT DATA POINTS (Y/N) ON SCREEN? ";
  89. 5003  A$=INKEY$:IF A$="" THEN 5003
  90. 5004  IF A$="N" THEN 6000
  91. 5005  IF A$<>"Y" THEN 5000
  92. 5006  LOCATE 22,1:PRINT "                                            "
  93. 5007  PRINT "                                                        "
  94. 5008  FOR Z=1 TO NPAIRS
  95. 5010  ON ZS GOSUB 18000,18010,18020,18030,18000,18010,18020,18030
  96. 5020  NEXT Z
  97. 5025  ZS=ZS+1
  98. 6000  LOCATE 22,1:PRINT "                                            "
  99. 6001  PRINT "                                                        "
  100. 6002  LOCATE 22,1:PRINT "PLOT LINES (Y/N) ON SCREEN? ";
  101. 6003  A$=INKEY$:IF A$="" THEN 6003
  102. 6004  IF A$="N" THEN 7000
  103. 6005  IF A$<>"Y" THEN 6000
  104. 6006  LOCATE 22,1:PRINT "                                            "
  105. 6007  PRINT "                                                        "
  106. 6010  FOR Z=2 TO NPAIRS
  107. 6015  LINE (X(Z-1),Y(Z-1))-(X(Z),Y(Z)),1
  108. 6020  NEXT Z
  109. 7000  'DATA VALUES TO FILE ==========================================
  110. 7010  LOCATE 22,1:PRINT "                                            "
  111. 7020  PRINT "                                                        "
  112. 7030  LOCATE 22,1:PRINT "SAVE DATA TO DISK FILE (Y/N)? ";
  113. 7040  A$=INKEY$:IF A$="" THEN 7040
  114. 7050  IF A$="N" THEN GOSUB 19000 : GOTO 8000
  115. 7060  IF A$<>"Y" THEN 7040
  116. 7070  GOSUB 19000
  117. 7100  LOCATE 22,1:INPUT "ENTER NAME FOR SEQUENTIAL FILE ";A$
  118. 7110  GOSUB 19000
  119. 7120  'CHECK FOR EXISTENCE OF FILE
  120. 7130  ON ERROR GOTO 7220
  121. 7140  OPEN A$ FOR INPUT AS #1
  122. 7150  LOCATE 22,1: PRINT A$;" ALREADY EXISTS IN DIRECTORY "
  123. 7160  PRINT "CONTINUE(C) OR NEW FILENAME (F)? ";
  124. 7170  B$=INKEY$:IF B$="" THEN 7170
  125. 7180  GOSUB 19000
  126. 7190  IF B$="F" THEN CLOSE #1:GOTO 7030
  127. 7200  IF B$<>"C" THEN 7150
  128. 7210  GOTO 7230
  129. 7220  IF ERR=53 THEN RESUME 7230
  130. 7230  CLOSE #1
  131. 7240  OPEN A$ FOR OUTPUT AS #1
  132. 7250  FOR Z=1 TO NPAIRS
  133. 7260  WRITE #1,X(Z),Y(Z)
  134. 7270  NEXT Z
  135. 7280  CLOSE #1
  136. 7950  'SET AXES------------------------------------------------------
  137. 8000  IF SGN(XMIN)=SGN(XMAX) THEN 8050
  138. 8020  LINE (0,YMIN)-(0,YMAX),1
  139. 8050  IF SGN(YMIN)=SGN(YMAX) THEN 9000
  140. 8070  LINE (XMIN,0)-(XMAX,0),1
  141. 8950  'LABEL AXES----------------------------------------------------
  142. 9000  IF SGN(YMIN)=SGN(YMAX) THEN 9050
  143. 9010  YX=(160-(ABS(YMIN)/(YMAX-YMIN))*160)/160*20
  144. 9020  LOCATE YX,79:PRINT " X"
  145. 9030  GOTO 9060
  146. 9050  LOCATE 20,79:PRINT " X"
  147. 9060  IF SGN(XMIN)=SGN(XMAX) THEN 10000
  148. 9070  XY=17+(ABS(XMIN)/(XMAX-XMIN))*63
  149. 9080  LOCATE 1,XY:PRINT "Y"
  150. 9090  GOTO 10010
  151. 10000  LOCATE 1,17:PRINT "Y"
  152. 10005  LOCATE 23,1
  153. 10010  LOCATE 1,13:PRINT YMAX
  154. 10120  LOCATE 20,13:PRINT YMIN
  155. 10125  LOCATE 21,14:PRINT XMIN
  156. 10130  LOCATE 21,75:PRINT XMAX
  157. 10140  M=1
  158. 11000  ' ZERO ARRAYS--------------------------------------------------
  159. 11010  FOR Z=1 TO 200
  160. 11020  X(Z)=0:Y(Z)=0
  161. 11030  NEXT Z
  162. 16000  ' ANOTHER GRAPH-------------------------------------------------
  163. 16005  LOCATE 22,1:PRINT "                                            "
  164. 16006  PRINT "                                                        "
  165. 16010  LOCATE 22,1:PRINT "ANOTHER POINT SET (Y/N) ON SCREEN? ";
  166. 16020  A$=INKEY$:IF A$="" THEN 16020
  167. 16030  IF A$="N" THEN 16800
  168. 16040  IF A$<>"Y" THEN 16010
  169. 16042  LOCATE 22,1:PRINT "                                            "
  170. 16044  PRINT "                                                        "
  171. 16050  GOTO 300
  172. 16800  LOCATE 22,1:PRINT "                                            "
  173. 16810  PRINT "                                                        "
  174. 16820  'GRID LINES? ====================================================
  175. 16830  LOCATE 22,1:PRINT "DO YOU WISH GRID LINES? (Y/N) "
  176. 16840  A$=INKEY$:IF A$="" THEN 16840
  177. 16850  IF A$="N" THEN 17130
  178. 16860  IF A$<>"Y" THEN 16840
  179. 16870  LOCATE 22,1:PRINT "                                            "
  180. 16880  PRINT "                                                        "
  181. 16890  LOCATE 22,1:PRINT "X=CONSTANT GRID LINE? ";
  182. 16900  A$=INKEY$:IF A$="" THEN 16900
  183. 16910  IF A$="N" THEN 17000
  184. 16920  IF A$<>"Y" THEN 16900
  185. 16930  LOCATE 22,1:PRINT "                                            "
  186. 16940  PRINT "                                                        "
  187. 16950  LOCATE 22,1:INPUT "X VALUE OF GRID LOCATION = ";G
  188. 16960  IF G=XMAX OR G=XMIN OR G=0 THEN 16870
  189. 16970  LINE (G,YMIN)-(G,YMAX),1,,&HCCCC
  190. 16980  LOCATE 21,16+((G-XMIN)/(XMAX-XMIN))*64:PRINT G
  191. 16990  GOTO 16870
  192. 17000  LOCATE 22,1:PRINT "                                            "
  193. 17010  PRINT "                                                        "
  194. 17020  LOCATE 22,1:PRINT "Y=CONSTANT GRID LINE? ";
  195. 17030  A$=INKEY$:IF A$="" THEN 17030
  196. 17040  IF A$="N" THEN 17130
  197. 17050  IF A$<>"Y" THEN 17030
  198. 17060  LOCATE 22,1:PRINT "                                            "
  199. 17070  PRINT "                                                        "
  200. 17080  LOCATE 22,1 : INPUT "Y VALUE OF GRID LOCATION = ";G
  201. 17090  IF G>=YMAX OR G<=YMIN OR G=0 THEN 17060
  202. 17100  LINE (XMIN,G)-(XMAX,G),1,,&HCCCC
  203. 17110  LOCATE ((YMAX-G)/(YMAX-YMIN))*20,14:PRINT G
  204. 17120  GOTO 17000
  205. 17130  LOCATE 22,1:PRINT "                                            "
  206. 17140  PRINT "                                                        "
  207. 17150  LOCATE 22,1:INPUT "ENTER Y AXIS LABEL (10 Characters Max) ";TI$
  208. 17160  L=LEN(TI$)
  209. 17165  LOCATE 10,10-L:PRINT TI$
  210. 17170  LOCATE 22,1:PRINT "                                                                              "
  211. 17180  PRINT "                                                        ";
  212. 17190  LOCATE 22,1:INPUT "ENTER NAME (10 Characters Max) ";TI$
  213. 17200  LOCATE 3,1:PRINT TI$
  214. 17210  LOCATE 22,1:PRINT "                                                                                "
  215. 17220  LOCATE 23,1:PRINT "                                                        ";
  216. 17222  LOCATE 22,1:INPUT "ENTER DATE (10 Characters Max) ";TI$
  217. 17224  LOCATE 5,1:PRINT TI$
  218. 17226  LOCATE 22,1:PRINT "                                                                                "
  219. 17228  LOCATE 23,1:PRINT "                                                        ";
  220. 17230  LOCATE 22,1:INPUT "ENTER X AXIS LABEL (60 Characters Max) ";TI$
  221. 17240  L=LEN(TI$)
  222. 17250  LOCATE 22,1:PRINT "                                                                                "
  223. 17260  LOCATE 23,1:PRINT "                                                        ";
  224. 17270  LOCATE 22,44-(L/2):PRINT TI$
  225. 17280  LOCATE 22,1:PRINT "ENTER GRAPH TITLE"
  226. 17282  INPUT;"(60 Char Max)";TI$
  227. 17285  L=LEN(TI$)
  228. 17290  LOCATE 22,1:PRINT "                  "
  229. 17300  LOCATE 23,1:PRINT "                                                        ";
  230. 17310  LOCATE 23,44-L/2:PRINT TI$;
  231. 17320  LOCATE 21,1 :GOTO 17320: END
  232. 18000  'Square plot point
  233. 18001  XS=X(Z)-(PH/2) : YS=Y(Z)+(PV/2)
  234. 18002  LINE (XS,YS)-(XS+PH,YS),1
  235. 18003  LINE (XS+PH,YS)-(XS+PH,YS-PV),1
  236. 18004  LINE (XS+PH,YS-PV)-(XS,YS-PV),1
  237. 18005  LINE (XS,YS-PV)-(XS,YS),1
  238. 18008  RETURN
  239. 18010  'Triangle plot point
  240. 18012  XS=X(Z):YS=Y(Z)+(PV/2)
  241. 18014  LINE (XS,YS)-(XS+(PH/2),YS-PV),1
  242. 18016  LINE (XS+(PH/2),YS-PV)-(XS-(PH/2),YS-PV),1
  243. 18018  LINE (XS-(PH/2),YS-PV)-(XS,YS),1
  244. 18019  RETURN
  245. 18020  'Cross plot point
  246. 18022  XS=X(Z):YS=Y(Z)+(PV/2)
  247. 18024  LINE (XS,YS)-(XS,YS-PV),1
  248. 18026  LINE (XS-(PH/2),YS-(PV/2))-(XS+(PH/2),YS-(PV/2)),1
  249. 18028  RETURN
  250. 18030  'X plot point
  251. 18032  XS=X(Z)-(PH/2):YS=Y(Z)+(PV/2)
  252. 18034  LINE (XS,YS)-(XS+PH,YS-PV),1
  253. 18036  LINE (XS,YS-PV)-(XS+PH,YS),1
  254. 18038  RETURN
  255. 19000  'BLANK BOTTOM LINES
  256. 19010  LOCATE 22,1:PRINT "                                            "
  257. 19020  PRINT "                                                        "
  258. 19030  RETURN
  259.