home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 1 / HamRadio.cdr / tech / design4 / plot.sub < prev    next >
Text File  |  1979-12-31  |  24KB  |  696 lines

  1. 1 SUB PLOT(NCURVES,NPOINTS,MATX(1),MATY(1)) STATIC
  2. 10 REM ALL CALLED VARIABLES ARE CALLED BY SINGLE PRECISION VALUE
  3. 20 IDIM=2010:DIM X(2010),Y(2010),NPP(50),LN(50),NS(50),LG$(50)
  4. 30 LG10 = LOG(10):KEY OFF:JF=0:LGQ$="N"
  5. 40 XDN=2:YDN=2:LX$="N":LY$="N":NHD=0:LGB=1
  6. 50 CLOSE #1: CLOSE #2: DIM HED$(2),YHED(2)
  7. 60 ISCRN =   2: REM --> 100 for AT&T, 2 for IBM PC
  8. 70 IHERC =   0: REM --> 0 for IBM graphics, 1 for Hercules graphics
  9. 80 PRINT:PRINT"        CURVE PLOTTING SUBROUTINE":PRINT
  10. 90 CP$="N"
  11. 100 IF CP$ = "Y" OR CP$ = "y" GOTO 3610
  12. 110 CC$="N"
  13. 120 IF CC$ <> "Y" AND CC$ <> "y" GOTO 160
  14. 130 FILES:PRINT
  15. 140 INPUT"Command file name";CF$
  16. 150 OPEN "O",#2,CF$
  17. 160 REM ANNOTATION
  18. 170 GOSUB 2790
  19. 180 REM READ DATA FILES
  20. 190 GOSUB 3090
  21. 200 REM FIND XMAX,MIN, YMAX,MIN
  22. 210 GOSUB 3460
  23. 220 IF XMIN > 0 GOTO 240
  24. 230 GOTO 260
  25. 240 INPUT"Log scale on X axis (Y/N) ";LX$
  26. 250 IF LX$ <> "Y" AND LX$ <> "y" THEN LX$ = "N"
  27. 260 IF YMIN > 0 GOTO 280
  28. 270 GOTO 300
  29. 280 INPUT"Log scale on Y axis (Y/N) ";LY$
  30. 290 IF LY$ <> "Y" AND LY$ <> "y" THEN LY$ = "N"
  31. 300 IF CC$ = "Y" OR CC$ = "y" THEN PRINT #2, LX$
  32. 310 IF CC$ = "Y" OR CC$ = "y" THEN PRINT #2, LY$
  33. 320 IF LX$ <> "Y" AND LX$ <> "y" GOTO 400
  34. 330 IF XMAX <> XMIN THEN 350
  35. 340 XMAX=XMAX*2: XMIN=XMIN/2
  36. 350 MINN = XMIN: MAXX = XMAX: GOSUB 2710
  37. 360 XMIN = MINN: XMAX = MAXX:PRINT"XMIN, MAX =";XMIN;XMAX
  38. 370 LGX=LOG(XMAX/XMIN):DECX = DEC: PRINT"DECX = ";DECX
  39. 380 IF CC$="Y" OR CC$="Y" THEN PRINT #2,XMIN,XMAX,LGX,DECX
  40. 390 GOTO 510
  41. 400 INPUT"Want to specify XMIN, XMAX (Y/N) ";AN$
  42. 410 IF AN$ = "Y" OR AN$ = "y" THEN 460
  43. 420 IF XMAX <> XMIN THEN 500
  44. 430 IF XMAX <> 0 THEN 450
  45. 440 XMIN = -1: XMAX = 1: GOTO 500
  46. 450 XMIN=XMIN/2: XMAX=XMAX*2: GOTO 500
  47. 460 INPUT"XMIN, XMAX ";XMIN,XMAX
  48. 470 IF XMAX =< XMIN GOTO 460
  49. 480 INPUT"No. of tick marks on X axis ";XDN
  50. 490 IF XDN <= 0 THEN XDN = 1
  51. 500 IF CC$ = "Y" OR CC$ = "y" THEN PRINT #2, XMIN,XMAX,XDN
  52. 510 IF LY$ <> "Y" AND LY$ <> "y" GOTO 590
  53. 520 IF YMAX <> YMIN THEN 540
  54. 530 YMAX=YMAX*2: YMIN=YMIN/2
  55. 540 MINN = YMIN: MAXX = YMAX: GOSUB 2710
  56. 550 YMIN = MINN: YMAX = MAXX:PRINT"YMIN, MAX =";YMIN;YMAX
  57. 560 LGY=LOG(YMAX/YMIN):DECY = DEC: PRINT"DECY = ";DECY
  58. 570 IF CC$="Y" OR CC$="Y" THEN PRINT #2,YMIN,YMAX,LGY,DECY
  59. 580 GOTO 700
  60. 590 INPUT"Want to specify YMIN, YMAX (Y/N) ";AN$
  61. 600 IF AN$ = "Y" OR AN$ = "y" THEN 650
  62. 610 IF YMAX <> YMIN THEN 690
  63. 620 IF YMAX <> 0 THEN 640
  64. 630 YMIN = -1: YMAX = 1: GOTO 690
  65. 640 YMIN=YMIN/2: YMAX=YMAX*2: GOTO 690
  66. 650 INPUT"YMIN, YMAX ";YMIN,YMAX
  67. 660 IF YMAX =< YMIN GOTO 650
  68. 670 INPUT"No. of tick marks on Y axis ";YDN
  69. 680 IF YDN <= 0 THEN YDN = 1
  70. 690 IF CC$ = "Y" OR CC$ = "y" THEN PRINT #2, YMIN,YMAX,YDN
  71. 700 IF CC$ = "Y" OR CC$ = "y" THEN CLOSE #2
  72. 710 PRINT:BEEP
  73. 720 PRINT"Type       0    for screen plot"
  74. 730 PRINT"           1    for HP plotter"
  75. 740 INPUT IDEV
  76. 750 IF IDEV < 1 THEN IDEV = 0 ELSE IDEV = 1
  77. 760 XMXX=XMAX-XMIN: YMXX=YMAX-YMIN
  78. 770 CLS:PRINT"******** PLOT IS BEING GENERATED ***********"
  79. 780 ON (IDEV+1) GOTO 790,4290
  80. 790 REM Define sreen data
  81. 800 IF ISCRN <> 100 GOTO 840
  82. 810 XN=100:XX=600:YN=40:YX=350:XTIC=5:YTIC=5
  83. 820 XLB= 5: XLE=100: YLB=375: DXL=128
  84. 830 GOTO 900
  85. 840 IF IHERC = 1 GOTO 880
  86. 850 XN=100:XX=600:YN=20:YX=175:XTIC=3:YTIC=5
  87. 860 XLB= 5: XLE=100: YLB=188: DXL=128
  88. 870 GOTO 900
  89. 880 XN=115:XX=680:YN=35:YX=300:XTIC=5:YTIC=5
  90. 890 XLB= 5: XLE=110: YLB=330: DXL=143
  91. 900 REM - CONVERT TO SCREEN UNITS
  92. 910 XXXN=XX-XN: YNYX=YN-YX
  93. 920 II = 0
  94. 930 FOR J = 1 TO JF
  95. 940 IF LX$ = "Y" OR LX$ = "y" GOTO 1000
  96. 950 FOR I = 1 TO NPP(J)
  97. 960 II = II + 1
  98. 970 X(II) = XN + XXXN*(X(II)-XMIN)/XMXX
  99. 980 NEXT I
  100. 990 GOTO 1040
  101. 1000 FOR I = 1 TO NPP(J)
  102. 1010 II = II + 1
  103. 1020 X(II) = XN + XXXN*LOG(X(II)/XMIN)/LGX
  104. 1030 NEXT I
  105. 1040 NEXT J
  106. 1050 II = 0
  107. 1060 FOR J = 1 TO JF
  108. 1070 IF LY$ = "Y" OR LY$ = "y" GOTO 1130
  109. 1080 FOR I = 1 TO NPP(J)
  110. 1090 II = II + 1
  111. 1100 Y(II) = YX + YNYX*(Y(II)-YMIN)/YMXX
  112. 1110 NEXT I
  113. 1120 GOTO 1170
  114. 1130 FOR I = 1 TO NPP(J)
  115. 1140 II = II + 1
  116. 1150 Y(II) = YX + YNYX*LOG(Y(II)/YMIN)/LGY
  117. 1160 NEXT I
  118. 1170 NEXT J
  119. 1180 REM DRAW BOX
  120. 1190 SCREEN ISCRN: CLS
  121. 1200 IF LX$ = "Y" OR LX$ = "y" GOTO 1340
  122. 1210 REM LINEAR X AXIS
  123. 1220 DRAW"BM="+VARPTR$(XN)+",="+VARPTR$(YX):DX=(XX-XN)/XDN:XA=XN:YA=YX-XTIC
  124. 1230 FOR I=1 TO XDN: XA=XA+DX
  125. 1240 DRAW"M="+VARPTR$(XA)+",="+VARPTR$(YX):DRAW"M="+VARPTR$(XA)+",="+VARPTR$(YA):DRAW"M="+VARPTR$(XA)+",="+VARPTR$(YX)
  126. 1250 NEXT I
  127. 1260 DRAW"BM="+VARPTR$(XN)+",="+VARPTR$(YN):XA=XN:YA=YN+XTIC
  128. 1270 FOR I=1 TO XDN: XA=XA+DX
  129. 1280 DRAW"M="+VARPTR$(XA)+",="+VARPTR$(YN):DRAW"M="+VARPTR$(XA)+",="+VARPTR$(YA):DRAW"M="+VARPTR$(XA)+",="+VARPTR$(YN)
  130. 1290 NEXT I
  131. 1300 REM VERTICAL LINE AT X = 0
  132. 1310 IF XMIN > 0 OR XMAX < 0 GOTO 1450
  133. 1320 XB = XN + (XX-XN)*XMIN/(XMIN-XMAX)
  134. 1330 DRAW"BM="+VARPTR$(XB)+",="+VARPTR$(YN):DRAW"M="+VARPTR$(XB)+",="+VARPTR$(YX):GOTO 1450
  135. 1340 REM LOG X AXIS
  136. 1350 DRAW"BM="+VARPTR$(XN)+",="+VARPTR$(YX):DX=(XX-XN)/DECX:XA=XN:YA=YX-XTIC
  137. 1360 FOR I=1 TO DECX: FOR J = 2 TO 10
  138. 1370 XAA = XA + DX*LOG(J)/LG10
  139. 1380 DRAW"M="+VARPTR$(XAA)+",="+VARPTR$(YX):DRAW"M="+VARPTR$(XAA)+",="+VARPTR$(YA):DRAW"M="+VARPTR$(XAA)+",="+VARPTR$(YX)
  140. 1390 NEXT J: XA = XAA: NEXT I
  141. 1400 DRAW"BM="+VARPTR$(XN)+",="+VARPTR$(YN):XA=XN:YA=YN+XTIC
  142. 1410 FOR I=1 TO DECX: FOR J = 2 TO 10
  143. 1420 XAA = XA + DX*LOG(J)/LG10
  144. 1430 DRAW"M="+VARPTR$(XAA)+",="+VARPTR$(YN):DRAW"M="+VARPTR$(XAA)+",="+VARPTR$(YA):DRAW"M="+VARPTR$(XAA)+",="+VARPTR$(YN)
  145. 1440 NEXT J: XA = XAA: NEXT I
  146. 1450 IF LY$ = "Y" OR LY$ = "y" GOTO 1590
  147. 1460 REM LINEAR Y AXIS
  148. 1470 DRAW"BM="+VARPTR$(XN)+",="+VARPTR$(YN):DY=(YX-YN)/YDN:YA=YN:XA=XN+YTIC
  149. 1480 FOR I=1 TO YDN: YA = YA + DY
  150. 1490 DRAW"M="+VARPTR$(XN)+",="+VARPTR$(YA):DRAW"M="+VARPTR$(XA)+",="+VARPTR$(YA):DRAW"M="+VARPTR$(XN)+",="+VARPTR$(YA)
  151. 1500 NEXT I
  152. 1510 DRAW"BM="+VARPTR$(XX)+",="+VARPTR$(YN):YA=YN:XA=XX-YTIC
  153. 1520 FOR I=1 TO YDN: YA = YA + DY
  154. 1530 DRAW"M="+VARPTR$(XX)+",="+VARPTR$(YA):DRAW"M="+VARPTR$(XA)+",="+VARPTR$(YA):DRAW"M="+VARPTR$(XX)+",="+VARPTR$(YA)
  155. 1540 NEXT I
  156. 1550 REM HORIZONTAL LINE AT Y = 0
  157. 1560 IF YMIN > 0 OR YMAX < 0 GOTO 1650
  158. 1570 YB = YN + (YX-YN)*YMAX/(YMAX-YMIN)
  159. 1580 DRAW"BM="+VARPTR$(XN)+",="+VARPTR$(YB):DRAW"M="+VARPTR$(XX)+",="+VARPTR$(YB):GOTO 1700
  160. 1590 REM LOG Y AXIS
  161. 1600 DRAW"BM="+VARPTR$(XN)+",="+VARPTR$(YX):DY=(YX-YN)/DECY:YA=YX:XA=XN+YTIC
  162. 1610 FOR I=1 TO DECY: FOR J = 2 TO 10
  163. 1620 YAA = YA - DY*LOG(J)/LG10
  164. 1630 DRAW"M="+VARPTR$(XN)+",="+VARPTR$(YAA):DRAW"M="+VARPTR$(XA)+",="+VARPTR$(YAA):DRAW"M="+VARPTR$(XN)+",="+VARPTR$(YAA)
  165. 1640 NEXT J: YA = YAA: NEXT I
  166. 1650 DRAW"BM="+VARPTR$(XX)+",="+VARPTR$(YX):YA=YX:XA=XX-YTIC
  167. 1660 FOR I=1 TO DECY: FOR J = 2 TO 10
  168. 1670 YAA = YA - DY*LOG(J)/LG10
  169. 1680 DRAW"M="+VARPTR$(XX)+",="+VARPTR$(YAA):DRAW"M="+VARPTR$(XA)+",="+VARPTR$(YAA):DRAW"M="+VARPTR$(XX)+",="+VARPTR$(YAA)
  170. 1690 NEXT J: YA = YAA: NEXT I
  171. 1700 REM PLOT CURVES
  172. 1710 II = 0
  173. 1720 FOR J = 1 TO JF
  174. 1730 II = II + 1
  175. 1740 IF LN(J) = 2 THEN 1870
  176. 1750 DRAW"BM="+VARPTR$(X(II))+",="+VARPTR$(Y(II))
  177. 1760 IF LN(J) = 1 THEN 1780
  178. 1770 ON NS(J) GOSUB 4140,4170,4200,4230,4260
  179. 1780 FOR I = 2 TO NPP(J)
  180. 1790 II = II + 1
  181. 1800 IF LN(J) = 3 THEN 1830
  182. 1810 DRAW"M="+VARPTR$(X(II))+",="+VARPTR$(Y(II))
  183. 1820 GOTO 1850
  184. 1830 DRAW"BM="+VARPTR$(X(II))+",="+VARPTR$(Y(II))
  185. 1840 ON NS(J) GOSUB 4140,4170,4200,4230,4260
  186. 1850 NEXT I
  187. 1860 GOTO 2000
  188. 1870 REM LINE WITH SYMBOLS
  189. 1880 NPS=INT(NPP(J)/8):IF NPS=0 THEN NPS=1
  190. 1890 DRAW"BM="+VARPTR$(X(II))+",="+VARPTR$(Y(II))
  191. 1900 NPD = 0 : IF NPS > 1 THEN 1920
  192. 1910 ON NS(J) GOSUB 4140,4170,4200,4230,4260
  193. 1920 FOR I = 2 TO NPP(J)
  194. 1930 II = II + 1
  195. 1940 NPD = NPD + 1
  196. 1950 DRAW"M="+VARPTR$(X(II))+",="+VARPTR$(Y(II))
  197. 1960 IF NPD < NPS THEN 1990
  198. 1970 ON NS(J) GOSUB 4140,4170,4200,4230,4260
  199. 1980 NPD = 0
  200. 1990 NEXT I
  201. 2000 IF LGQ$<>"Y" AND LGQ$<>"y" THEN 2150
  202. 2010 REM WRITE LEGEND
  203. 2020 IF J > 5 THEN 2150
  204. 2030 LOCATE 25,LGB:PRINT LG$(J);:LGB=LGB+16
  205. 2040 ON LN(J) GOTO 2050,2050,2070
  206. 2050 DRAW"BM="+VARPTR$(XLB)+",="+VARPTR$(YLB):DRAW"M="+VARPTR$(XLE)+",="+VARPTR$(YLB)
  207. 2060 IF LN(J) = 1 THEN 2140
  208. 2070 DRAW"BM="+VARPTR$(XLB)+",="+VARPTR$(YLB)
  209. 2080 ON NS(J) GOSUB 4140,4170,4200,4230,4260
  210. 2090 XLM = (XLB + XLE)/2
  211. 2100 DRAW"BM="+VARPTR$(XLM)+",="+VARPTR$(YLB)
  212. 2110 ON NS(J) GOSUB 4140,4170,4200,4230,4260
  213. 2120 DRAW"BM="+VARPTR$(XLE)+",="+VARPTR$(YLB)
  214. 2130 ON NS(J) GOSUB 4140,4170,4200,4230,4260
  215. 2140 XLB=XLB+DXL: XLE=XLE+DXL
  216. 2150 NEXT J
  217. 2160 XB = 12: XE = 74: YB = 3: YE = 22
  218. 2170 IF LX$ = "Y" OR LX$ = "y" THEN 2290
  219. 2180 NPS=INT(XDN/4):IF NPS=0 THEN NPS=1
  220. 2190 SNUM=(XMAX-XMIN)/XDN: XWR=XMIN-SNUM:NPD=0
  221. 2200 FOR I = 1 TO XDN+1: NPD=NPD+1
  222. 2210 XWR=XWR+SNUM: IF I=XDN+1 THEN XWR=XMAX
  223. 2220 IF I = 1 THEN 2240
  224. 2230 IF NPD < NPS THEN 2270
  225. 2240 LOCATE YE+1,(XB+(XE-XB)*(I-1)/XDN)-3
  226. 2250 PRINT USING"##.##^^^^";XWR;
  227. 2260 NPD = 0
  228. 2270 NEXT I
  229. 2280 GOTO 2390
  230. 2290 XWR = XMIN/10: NPD=0
  231. 2300 NPS=INT(DECX/4):IF NPS=0 THEN NPS=1
  232. 2310 FOR I = 1 TO DECX+1:NPD=NPD+1
  233. 2320 XWR = XWR*10
  234. 2330 IF I = 1 THEN 2350
  235. 2340 IF NPD < NPS THEN 2380
  236. 2350 LOCATE YE+1,(XB+(XE-XB)*(I-1)/DECX)-3
  237. 2360 PRINT USING"##.##^^^^";XWR;
  238. 2370 NPD = 0
  239. 2380 NEXT I
  240. 2390 IF LY$ = "Y" OR LY$ = "y" THEN 2470
  241. 2400 SNUM=(YMAX-YMIN)/YDN: YWR = YMAX+SNUM
  242. 2410 FOR I = 1 TO YDN+1
  243. 2420 LOCATE (YB+(YE-YB)*(I-1)/YDN),4
  244. 2430 YWR=YWR-SNUM: IF I=YDN+1 THEN YWR=YMIN
  245. 2440 PRINT USING"##.##^^^^";YWR;
  246. 2450 NEXT I
  247. 2460 GOTO 2530
  248. 2470 YWR = YMAX*10
  249. 2480 FOR I = 1 TO DECY+1
  250. 2490 LOCATE (YB+(YE-YB)*(I-1)/DECY),4
  251. 2500 YWR = YWR/10
  252. 2510 PRINT USING"##.##^^^^";YWR;
  253. 2520 NEXT I
  254. 2530 IF AT$ <> "Y" AND AT$ <> "y" GOTO 2680
  255. 2540 IF NHD > 2 THEN NHD = NHD-2
  256. 2550 IF NHD = 0 THEN 2600
  257. 2560 FOR I = 1 TO NHD
  258. 2570 DIS = .5*(XE-XB-LEN(HED$(I)))
  259. 2580 LOCATE I,DIS+XB: PRINT HED$(I);
  260. 2590 NEXT I
  261. 2600 DIS = .5*(XE-XB-LEN(XT$))
  262. 2610 YXT=25:IF LGQ$="Y" OR LGQ$="y" THEN YXT=21
  263. 2620 LOCATE YXT,DIS+XB: PRINT XT$;
  264. 2630 LMAX = 24: LEY = LEN(YT$)
  265. 2640 IF LEY > LMAX THEN LEY = LMAX
  266. 2650 DIS=.5*(YE-YB-LEY)
  267. 2660 FOR I = 1 TO LEY: LOCATE YB+DIS+I-1,2
  268. 2670 X$=MID$(YT$,I,1): PRINT X$;: NEXT I
  269. 2680 AA$ = INKEY$: IF(AA$="") GOTO 2680
  270. 2690 CLS: SCREEN 0,0,0
  271. 2700 EXIT SUB
  272. 2710 REM MIN, MAX FOR LOG SCALE
  273. 2720 MINN = INT(LOG(MINN)/LG10)
  274. 2730 LGT = LOG(MAXX)/LG10
  275. 2740 IF LGT = INT(LGT) GOTO 2760
  276. 2750 LGT = INT(LGT) + 1
  277. 2760 DEC = LGT - MINN
  278. 2770 MAXX = 10^LGT: MINN = 10^MINN
  279. 2780 RETURN
  280. 2790 REM ANNOTATION AND OTHER QUESTIONS
  281. 2800 QB$="N"
  282. 2810 IF QB$ <> "Y" AND QB$ <> "y" THEN QB$ = "N"
  283. 2820 IF CC$ = "Y" OR CC$ = "y" THEN PRINT #2, QB$
  284. 2830 IF QB$ = "N" THEN 2870
  285. 2840 INPUT "Box left bottom corner location X,Y (inch) ";BX, BY
  286. 2850 INPUT "Box width, height (inches)                 ";BWID, BHGT
  287. 2860 IF CC$ = "Y" OR CC$ = "y" THEN PRINT #2, BX,BY,BWID,BHGT
  288. 2870 INPUT"Do you want annotation (Y/N) ";AT$
  289. 2880 IF AT$ <> "Y" AND AT$ <> "y" THEN AT$ = "N"
  290. 2890 IF CC$ = "Y" OR CC$ = "y" THEN PRINT #2, AT$
  291. 2900 IF AT$ <> "Y" AND AT$ <> "y" THEN RETURN
  292. 2910 INPUT "Number of heading lines (0,1 or 2) ";NHD
  293. 2920 IF NHD =< 0 THEN NHD = 0
  294. 2930 IF NHD > 4 THEN 2910
  295. 2940 IF CC$ = "Y" OR CC$ = "y" THEN PRINT #2, NHD
  296. 2950 NHD1 = NHD: IF NHD > 2 THEN NHD1 = NHD-2
  297. 2960 IF NHD = 0 THEN 3010
  298. 2970 FOR I = 1 TO NHD1
  299. 2980 PRINT "Heading, line #";I;:INPUT HED$(I)
  300. 2990 IF CC$ = "Y" OR CC$ = "y" THEN PRINT #2, HED$(I)
  301. 3000 NEXT I
  302. 3010 INPUT"X Title ";XT$
  303. 3020 IF CC$ = "Y" OR CC$ = "y" THEN PRINT #2, XT$
  304. 3030 INPUT"Y Title ";YT$
  305. 3040 IF CC$ = "Y" OR CC$ = "y" THEN PRINT #2, YT$
  306. 3050 INPUT"Do you want a legend for each curve";LGQ$
  307. 3060 IF LGQ$ <> "Y" AND LGQ$ <> "y" THEN LGQ$ = "N"
  308. 3070 IF CC$ = "Y" OR CC$ = "y" THEN PRINT #2, LGQ$
  309. 3080 RETURN
  310. 3090 I=1:REM READ ARRAY
  311. 3100 FOR LOOP=1 TO NCURVES
  312. 3110 II=1
  313. 3120 FOR LOOP2=1 TO NPOINTS
  314. 3130 X(I)=MATX(I):Y(I)=MATY(I)
  315. 3140 I=I+1:II=II+1
  316. 3150 NEXT LOOP2
  317. 3160 JF=JF+1
  318. 3170 NPP(JF)=II-1
  319. 3210 IF CC$ = "Y" OR CC$ = "y" THEN PRINT #2, NPP(JF)
  320. 3220 PRINT"Curve  #";JF;"line type ?        1  for line only"
  321. 3230 PRINT"                              2  for line with symbols"
  322. 3240 PRINT"                              3  for symbols only (scatter plot)"
  323. 3250 INPUT LN(JF)
  324. 3260 IF LN(JF) =< 0 THEN LN(JF) = 1
  325. 3270 IF LN(JF) > 3 THEN 3220
  326. 3280 IF CC$ = "Y" OR CC$ = "y" THEN PRINT #2, LN(JF)
  327. 3290 IF LN(JF) = 1 THEN 3350
  328. 3300 PRINT"Which symbol ?"
  329. 3310 PRINT" 1  square; 2  plus(+); 3  cross(X); 4  triangle; 5  diamond"
  330. 3320 INPUT NS(JF)
  331. 3330 IF NS(JF) < 1 OR NS(JF) > 5 THEN 3300
  332. 3340 IF CC$ = "Y" OR CC$ = "y" THEN PRINT #2, NS(JF)
  333. 3350 PRINT
  334. 3360 IF LGQ$ <> "Y" AND LGQ$ <> "y" THEN 3380
  335. 3370 INPUT "Legend for this curve ";LG$(JF)
  336. 3380 CLS:NEXT LOOP
  337. 3450 RETURN
  338. 3460 REM FIND XMAX,MIN, YMAX,MIN
  339. 3470 PRINT"Finding maximum and minimum values"
  340. 3480 XMAX=-1E+20:YMAX=XMAX:XMIN=1E+20:YMIN=XMIN
  341. 3490 II = 0
  342. 3500 FOR J = 1 TO JF
  343. 3510 FOR I = 1 TO NPP(J)
  344. 3520 II = II + 1
  345. 3530 IF(X(II) > XMAX) THEN XMAX = X(II)
  346. 3540 IF(X(II) < XMIN) THEN XMIN = X(II)
  347. 3550 IF(Y(II) > YMAX) THEN YMAX = Y(II)
  348. 3560 IF(Y(II) < YMIN) THEN YMIN = Y(II)
  349. 3570 NEXT I : NEXT J
  350. 3580 PRINT"XMIN, XMAX ";XMIN;XMAX
  351. 3590 PRINT"YMIN, YMAX ";YMIN;YMAX
  352. 3600 RETURN
  353. 3610 REM READ COMMAND FILE
  354. 3620 FILES:PRINT:INPUT"COMMAND FILE NAME ";CF$
  355. 3630 OPEN "I", #2, CF$
  356. 3640 INPUT #2, QB$
  357. 3650 IF QB$ <> "Y" AND QB$ <> "y" THEN 3670
  358. 3660 INPUT #2, BX, BY, BWID, BHGT
  359. 3670 INPUT #2, AT$
  360. 3680 IF AT$ <> "Y" AND AT$ <> "y" GOTO 3770
  361. 3690 INPUT #2, NHD
  362. 3700 NHD1=NHD: IF NHD > 2 THEN NHD1=NHD-2
  363. 3710 IF NHD = 0 THEN 3740
  364. 3720 FOR I = 1 TO NHD1
  365. 3730 INPUT #2, HED$(I):PRINT HED$(I): NEXT I
  366. 3740 INPUT #2, XT$ :PRINT XT$
  367. 3750 INPUT #2, YT$:PRINT YT$
  368. 3760 INPUT #2, LGQ$
  369. 3770 II = 1
  370. 3780 JF = JF + 1
  371. 3790 INPUT #2, FIL$
  372. 3800 INPUT #2, NPP(JF)
  373. 3810 PRINT"Reading data file ";FIL$
  374. 3820 OPEN "I",#1,FIL$
  375. 3830 FOR I = 1 TO NPP(JF)
  376. 3840 INPUT # 1,X(II),Y(II)
  377. 3850 II = II + 1
  378. 3860 NEXT I
  379. 3870 PRINT NPP(JF);" .... lines read"
  380. 3880 INPUT #2, LN(JF)
  381. 3890 IF LN(JF) = 1 THEN 3910
  382. 3900 INPUT #2, NS(JF)
  383. 3910 CLOSE # 1
  384. 3920 IF LGQ$<>"Y" AND LGQ$<>"y" THEN 3940
  385. 3930 INPUT #2, LG$(JF): PRINT LG$(JF)
  386. 3940 INPUT #2, AN$
  387. 3950 IF AN$ = "Y" OR AN$ = "y" GOTO 3780
  388. 3960 INPUT #2, LX$
  389. 3970 INPUT #2, LY$
  390. 3980 IF LX$ <> "Y" AND LX$ <> "y" GOTO 4000
  391. 3990 INPUT #2, XMIN, XMAX, LGX, DECX: GOTO 4010
  392. 4000 INPUT #2, XMIN,XMAX,XDN
  393. 4010 IF LY$ <> "Y" AND LY$ <> "y" GOTO 4030
  394. 4020 INPUT #2, YMIN, YMAX, LGY, DECY: GOTO 710
  395. 4030 INPUT #2, YMIN,YMAX,YDN
  396. 4040 CLOSE #2: GOTO 710
  397. 4140 REM SQUARE SYSMBOL
  398. 4150 DRAW"BU3R3L6D6R6U6L3BD3"
  399. 4160 RETURN
  400. 4170 REM PLUS SYMBOL
  401. 4180 DRAW"U3D6U3R3L6R3"
  402. 4190 RETURN
  403. 4200 REM X SYMBOL
  404. 4210 DRAW"E3G6E3F3H6F3"
  405. 4220 RETURN
  406. 4230 REM TRIANGLE SYMBOL
  407. 4240 DRAW"BU3F6L12E6G6R12H6BD3"
  408. 4250 RETURN
  409. 4260 REM DIAMOND SYMBOL
  410. 4270 DRAW"BL4E4F4G4H4BR4"
  411. 4280 RETURN
  412. 4290 REM - HP PLOTTER
  413. 4300 REM CONVERT TO PLOTTER UNITS
  414. 4310 SZF = 1016
  415. 4320 IF QB$ = "Y" OR QB$ = "y" THEN 4380
  416. 4330 BWID = 7: BHGT = 5
  417. 4340 IXO=2000:IYO=1500:WID=BWID*SZF:HGT=BHGT*SZF
  418. 4350 IF NHD > 2 THEN IYO = 2200
  419. 4360 IF LGQ$="Y" OR LGQ$="y" THEN IXO = 1300
  420. 4370 GOTO 4390
  421. 4380 IXO=BX*SZF:IYO=BY*SZF:WID=BWID*SZF:HGT=BHGT*SZF
  422. 4390 IYM=IYO+HGT:IXM=IXO+WID
  423. 4400 IXOL=IXM+200: IYOL=IYO+500:DYOL=500:ELXL=IXOL+1500
  424. 4410 II = 0 : XTIC = 80: YTIC = 80
  425. 4420 FOR J = 1 TO JF
  426. 4430 IF LX$ = "Y" OR LX$ = "y" GOTO 4490
  427. 4440 FOR I = 1 TO NPP(J)
  428. 4450 II = II + 1
  429. 4460 X(II) = IXO + (X(II)-XMIN)*WID/XMXX
  430. 4470 NEXT I
  431. 4480 GOTO 4530
  432. 4490 FOR I = 1 TO NPP(J)
  433. 4500 II = II + 1
  434. 4510 X(II) = IXO + LOG(X(II)/XMIN)*WID/LGX
  435. 4520 NEXT I
  436. 4530 NEXT J
  437. 4540 II = 0
  438. 4550 FOR J = 1 TO JF
  439. 4560 IF LY$ = "Y" OR LY$ = "y" GOTO 4620
  440. 4570 FOR I = 1 TO NPP(J)
  441. 4580 II = II + 1
  442. 4590 Y(II) = IYO + (Y(II)-YMIN)*HGT/YMXX
  443. 4600 NEXT I
  444. 4610 GOTO 4660
  445. 4620 FOR I = 1 TO NPP(J)
  446. 4630 II = II + 1
  447. 4640 Y(II) = IYO + LOG(Y(II)/YMIN)*HGT/LGY
  448. 4650 NEXT I
  449. 4660 NEXT J
  450. 4670 REM INITIATE PLOTTER
  451. 4680 CLOSE #2
  452. 4690 OPEN "COM1:2400,N,8,1,RS,CS65535,DS65535,CD" AS #2
  453. 4700 CWS=.28:CHS=1.3*CWS: REM STDD. CHR. SIZE
  454. 4710 PRINT #2,CHR$(27);".(;DI;SL;SI";CWS,CHS";VS10;"
  455. 4720 BEEP: PRINT "Put in pen for grid: Press any key to continue"
  456. 4730 AA$ = INKEY$: IF AA$ = "" THEN 4730
  457. 4740 IF LX$ = "Y" OR LX$ = "y" GOTO 4920
  458. 4750 REM LINEAR X AXIS
  459. 4760 PRINT #2,"PU;PA";IXO,IYO";PD;PA"
  460. 4770 DX = WID/XDN
  461. 4780 XA = IXO: YA = IYO + XTIC
  462. 4790 FOR I = 1 TO XDN: XA = XA + DX
  463. 4800 PRINT #2,XA,IYO,XA,YA,XA,IYO
  464. 4810 NEXT I
  465. 4820 PRINT #2,";PU;PA";IXO,IYM";PD;PA"
  466. 4830 XA = IXO: YA = IYM-XTIC
  467. 4840 FOR I = 1 TO XDN: XA = XA + DX
  468. 4850 PRINT #2,XA,IYM,XA,YA,XA,IYM
  469. 4860 NEXT I: PRINT #2,";PU;"
  470. 4870 REM VERTICAL LINE AT X = 0
  471. 4880 IF XMIN >= 0 OR XMAX <= 0 GOTO 5050
  472. 4890 XB = IXO-WID*XMIN/XMXX
  473. 4900 PRINT #2,"PA";XB,IYO";PD;PA";XB,IYM";PU;"
  474. 4910 GOTO 5050
  475. 4920 REM LOG X AXIS
  476. 4930 PRINT #2,"PU;PA";IXO,IYO";PD;PA"
  477. 4940 DX = WID/DECX: XA=IXO: YA = IYO+XTIC
  478. 4950 FOR I = 1 TO DECX: FOR J = 2 TO 10
  479. 4960 XAA= XA+DX*LOG(J)/LG10
  480. 4970 PRINT #2,XAA,IYO,XAA,YA,XAA,IYO
  481. 4980 NEXT J: XA=XAA: NEXT I
  482. 4990 PRINT #2,";PU;PA";IXO,IYM";PD;PA"
  483. 5000 XA = IXO: YA = IYM-XTIC
  484. 5010 FOR I = 1 TO DECX: FOR J = 2 TO 10
  485. 5020 XAA=XA+DX*LOG(J)/LG10
  486. 5030 PRINT #2,XAA,IYM,XAA,YA,XAA,IYM
  487. 5040 NEXT J: XA = XAA: NEXT I
  488. 5050 IF LY$ = "Y" OR LY$ = "y" GOTO 5230
  489. 5060 REM LINEAR Y AXIS
  490. 5070 PRINT #2,";PU;PA";IXO,IYO";PD;PA"
  491. 5080 DY = HGT/YDN
  492. 5090 XA = IXO+YTIC: YA = IYO
  493. 5100 FOR I = 1 TO YDN: YA = YA + DY
  494. 5110 PRINT #2,IXO,YA,XA,YA,IXO,YA
  495. 5120 NEXT I
  496. 5130 PRINT #2,";PU;PA";IXM,IYO";PD;PA"
  497. 5140 XA = IXM-YTIC: YA = IYO
  498. 5150 FOR I = 1 TO YDN: YA = YA + DY
  499. 5160 PRINT #2,IXM,YA,XA,YA,IXM,YA
  500. 5170 NEXT I: PRINT #2,";PU;"
  501. 5180 REM HORIZONTAL LINE AT Y = 0
  502. 5190 IF YMIN >= 0 OR YMAX <= 0 GOTO 5360
  503. 5200 YB = IYO-HGT*YMIN/YMXX
  504. 5210 PRINT #2,"PA";IXO,YB";PD;PA";IXM,YB";PU;"
  505. 5220 GOTO 5360
  506. 5230 REM LOG Y AXIS
  507. 5240 PRINT #2,";PU;PA";IXO,IYO";PD;PA"
  508. 5250 DY = HGT/DECY: XA=IXO+YTIC: YA = IYO
  509. 5260 FOR I = 1 TO DECY: FOR J = 2 TO 10
  510. 5270 YAA= YA+DY*LOG(J)/LG10
  511. 5280 PRINT #2,IXO,YAA,XA,YAA,IXO,YAA
  512. 5290 NEXT J: YA=YAA: NEXT I
  513. 5300 PRINT #2,";PU;PA";IXM,IYO";PD;PA"
  514. 5310 XA = IXM-YTIC: YA = IYO
  515. 5320 FOR I = 1 TO DECY: FOR J = 2 TO 10
  516. 5330 YAA=YA+DY*LOG(J)/LG10
  517. 5340 PRINT #2,IXM,YAA,XA,YAA,IXM,YAA
  518. 5350 NEXT J: YA = YAA: NEXT I
  519. 5360 REM PLOT CURVES
  520. 5370 II = 0: PRINT #2,";PU;"
  521. 5380 FOR J = 1 TO JF
  522. 5390 BEEP:PRINT "Change pen for next curve: Press any key to continue"
  523. 5400 AA$ = INKEY$: IF AA$ = "" THEN 5400
  524. 5410 II = II + 1
  525. 5420 IF LN(J) = 3 THEN 5670
  526. 5430 REM LINE ONLY
  527. 5440 PRINT #2,";PU;PA";X(II),Y(II)
  528. 5450 PRINT #2,";PD;PA"
  529. 5460 FOR I = 2 TO NPP(J)
  530. 5470 II = II + 1
  531. 5480 PRINT #2, X(II),Y(II)
  532. 5490 NEXT I
  533. 5500 PRINT #2,";PU;"
  534. 5510 IF LN(J) = 1 THEN 5760
  535. 5520 REM LINE WITH SYMBOLS
  536. 5530 NPS=INT(NPP(J)/8): IF NPS=0 THEN NPS = 1
  537. 5540 II = II - NPP(J) + 1
  538. 5550 PRINT #2,";PU;PA";X(II),Y(II)
  539. 5560 NPD = 0 : IF NPS > 1 THEN 5580
  540. 5570 ON NS(J) GOSUB 6790,6820,6850,6880,6910
  541. 5580 FOR I = 2 TO NPP(J)
  542. 5590 II = II + 1: NPD = NPD + 1
  543. 5600 IF NPD < NPS THEN 5640
  544. 5610 PRINT #2, ";PA";X(II),Y(II)
  545. 5620 ON NS(J) GOSUB 6790,6820,6850,6880,6910
  546. 5630 NPD = 0
  547. 5640 NEXT I
  548. 5650 PRINT #2,";PU;"
  549. 5660 GOTO 5760
  550. 5670 REM SYMBOLS ONLY
  551. 5680 PRINT #2,";PU;PA";X(II),Y(II);";PA"
  552. 5690 ON NS(J) GOSUB 6790,6820,6850,6880,6910
  553. 5700 FOR I = 2 TO NPP(J)
  554. 5710 II = II + 1
  555. 5720 PRINT #2, ";PA";X(II),Y(II)
  556. 5730 ON NS(J) GOSUB 6790,6820,6850,6880,6910
  557. 5740 NEXT I
  558. 5750 PRINT #2,";PU;"
  559. 5760 REM WRITE LEGEND
  560. 5770 IF LGQ$<>"Y" AND LGQ$<>"y" THEN 5910
  561. 5780 CW=.2:CH=CW*1.3:PRINT #2,";SI";CW,CH";"
  562. 5790 ON LN(J) GOTO 5800,5800,5820
  563. 5800 PRINT #2,";PA";IXOL,IYOL";PD;PA";ELXL,IYOL";PU;"
  564. 5810 IF LN(J) = 1 THEN 5890
  565. 5820 PRINT #2,";PA";IXOL,IYOL";"
  566. 5830 ON NS(J) GOSUB 6790,6820,6850,6880,6910
  567. 5840 MXOL = (IXOL + ELXL)/2
  568. 5850 PRINT #2,";PA";MXOL,IYOL";"
  569. 5860 ON NS(J) GOSUB 6790,6820,6850,6880,6910
  570. 5870 PRINT #2,";PA";ELXL,IYOL";"
  571. 5880 ON NS(J) GOSUB 6790,6820,6850,6880,6910
  572. 5890 PRINT #2,";PU;PA";IXOL,IYOL+150";LB";LG$(J);CHR$(3)
  573. 5900 IYOL = IYOL + DYOL
  574. 5910 NEXT J
  575. 5920 REM ANNOTATION
  576. 5930 IF AT$ <> "Y" AND AT$ <> "y" GOTO 6770
  577. 5940 IF NHD > 2 THEN 5980
  578. 5950 YHED(1)=IYM+800: YHED(2)=IYM+400
  579. 5960 IF NHD = 2 THEN 5990
  580. 5970 YHED(1)=IYM+400: GOTO 5990
  581. 5980 YHED(1)=IYO-1500: YHED(2)=IYO-1900: NHD1=NHD-2
  582. 5990 BEEP:PRINT "Change pen for annotation: Press any key to continue"
  583. 6000 AA$ = INKEY$: IF AA$ = "" THEN 6000
  584. 6010 PRINT #2,";SI";CWS,CHS";"
  585. 6020 IF LGQ$<>"Y" AND LGQ$<>"y" THEN 6040
  586. 6030 PRINT #2,";PA";IXOL,IYOL";LBLEGEND";CHR$(3)
  587. 6040 WDL = 1.5*CWS/.0025: IF NHD1=0 THEN 6100
  588. 6050 FOR I = 1 TO NHD1
  589. 6060 DIS = .5*(WID-LEN(HED$(I))*WDL)
  590. 6070 XHED = DIS+IXO-WDD/2
  591. 6080 PRINT #2,";PU;PA";XHED,YHED(I)";LB"HED$(I);CHR$(3)
  592. 6090 NEXT I
  593. 6100 DIS=.5*(WID-LEN(XT$)*WDL):XXL=DIS+IXO-WDD/2: YXL=IYO-900
  594. 6110 PRINT #2,";PU;PA";XXL,YXL";LB"XT$;CHR$(3)
  595. 6120 CW2 = .24: CH2 = 1.3*CW2: WD2 = 1.5*CW2/.0025
  596. 6130 IF LX$="Y" OR LX$="y" GOTO 6360
  597. 6140 PRINT #2,";SI";CW2,CH2";"
  598. 6150 VMIN=XMIN: VMAX=XMAX: DN=XDN: GOSUB 6940
  599. 6160 DX=WID/XDN: XO=IXO-120-DX: YO=IYO-300
  600. 6170 XWR = VMIN-SNUM
  601. 6180 FOR I=1 TO XDN+1: XO=XO+DX: XWR=XWR+SNUM
  602. 6190 ST$ = STR$(XWR): AWR = ABS(XWR)
  603. 6200 IF LEN(ST$)>6 THEN ST$=LEFT$(ST$,6)
  604. 6210 IF AWR < 1 AND AWR > 0 THEN 6230
  605. 6220 GOTO 6260
  606. 6230 ST$ = MID$(ST$,2)
  607. 6240 IF XWR > 0 THEN ST$ = "0"+ST$
  608. 6250 IF XWR < 0 THEN ST$ = "-0"+ST$
  609. 6260 WRL=LEN(ST$) - 1
  610. 6270 DWR=.5*WRL*WD2:IF XWR<0 THEN DWR=DWR-WD2
  611. 6280 XOO=XO-DWR:IF I=1 THEN XOS=XOO
  612. 6290 PRINT #2,";PA";XOO,YO";LB"ST$;CHR$(3): NEXT I
  613. 6300 IF KK = 0 THEN 6440
  614. 6310 XO = IXO+.8*WID: YO = IYO - 550
  615. 6320 ST$=STR$(KK):IF KK>0 THEN ST$=MID$(ST$,2)
  616. 6330 ST$ = "X10**"+ST$
  617. 6340 PRINT #2,";SI";CWS,CHS";PA";XO,YO";LB"ST$;CHR$(3)
  618. 6350 GOTO 6440
  619. 6360 DX=WID/DECX:XO=IXO-200-DX:YO=IYO-350
  620. 6370 XOS = IXO - 250
  621. 6380 FOR I=1 TO DECX+1: XO=XO+DX
  622. 6390 PRINT #2,"PA";XO,YO";LB10";CHR$(3):NEXT I
  623. 6400 CW=.18:CH=CW*1.3:XO=IXO-DX+50:YO=IYO-150
  624. 6410 IEX=INT(LOG(XMIN)/LG10)-1:PRINT #2,";SI";CW,CH";"
  625. 6420 FOR I = 1 TO DECX+1: XO=XO+DX:IEX=IEX+1
  626. 6430 PRINT #2,";PA";XO,YO";LB";IEX;CHR$(3):NEXT I
  627. 6440 DIS=.5*(HGT-LEN(YT$)*WDL):YXL=DIS+IYO-WDD/2
  628. 6450 XXL=IXO-1000 :PRINT #2,";DI0,1;SI";CWS,CHS";"
  629. 6460 PRINT #2,";PU;PA";XXL,YXL";LB"YT$;CHR$(3)
  630. 6470 IF LY$="Y" OR LY$="y" GOTO 6700
  631. 6480 PRINT #2,";SI";CW2,CH2";"
  632. 6490 VMIN=YMIN: VMAX=YMAX: DN=YDN: GOSUB 6940
  633. 6500 DY=HGT/YDN: XO=XOS-100: YO=IYO-DY-150
  634. 6510 YWR = VMIN-SNUM
  635. 6520 FOR I=1 TO YDN+1: YO=YO+DY: YWR=YWR+SNUM
  636. 6530 ST$ = STR$(YWR): AWR = ABS(YWR)
  637. 6540 IF LEN(ST$)>6 THEN ST$=LEFT$(ST$,6)
  638. 6550 IF AWR < 1 AND AWR > 0 THEN 6570
  639. 6560 GOTO 6600
  640. 6570 ST$ = MID$(ST$,2)
  641. 6580 IF YWR > 0 THEN ST$ = "0"+ST$
  642. 6590 IF YWR < 0 THEN ST$ = "-0"+ST$
  643. 6600 WRL=LEN(ST$) - 1
  644. 6610 DWR=.5*WRL*WD2: IF YWR<O THEN DWR = DWR - WD2
  645. 6620 YOO = YO - DWR
  646. 6630 PRINT #2,";PA";XO,YOO";LB"ST$;CHR$(3):NEXT I
  647. 6640 IF KK = 0 THEN 6770
  648. 6650 XO = XOS-350: YO = IYO+.8*HGT
  649. 6660 ST$=STR$(KK):IF KK>0 THEN ST$=MID$(ST$,2)
  650. 6670 ST$ = "X10**"+ST$
  651. 6680 PRINT #2,";PA";XO,YO";LB"ST$;CHR$(3)
  652. 6690 GOTO 6770
  653. 6700 DY=HGT/DECY:XO=IXO-600:YO=IYO-50-DY
  654. 6710 PRINT #2,";DI;":FOR I=1 TO DECY+1: YO=YO+DY
  655. 6720 PRINT #2,"PA";XO,YO";LB10";CHR$(3):NEXT I
  656. 6730 CW=.18:CH=CW*1.3:XO=IXO-350:YO=IYO+150-DY
  657. 6740 IEX=INT(LOG(YMIN)/LG10)-1:PRINT #2,";SI";CW,CH";"
  658. 6750 FOR I = 1 TO DECY+1: YO=YO+DY:IEX=IEX+1
  659. 6760 PRINT #2,";PA";XO,YO";LB";IEX;CHR$(3):NEXT I
  660. 6770 PRINT #2,";PU;DI;SI;SP0;PA16000,11400;";CHR$(27);".)"
  661. 6780 CLOSE #2: GOTO 2700
  662. 6790 REM SQUARE SYSMBOL
  663. 6800 PRINT #2,";PU;PR50,50;PD;PR-100,0,0,-100,100,0,0,100;PU;PR-50,-50;"
  664. 6810 RETURN
  665. 6820 REM PLUS SYMBOL
  666. 6830 PRINT #2,";PU;PR50,0;PD;PR-100,0;PU;PR50,-50;PD;PR0,100;PU;PR0,-50;"
  667. 6840 RETURN
  668. 6850 REM X SYMBOL
  669. 6860 PRINT #2,";PU;PR50,50;PD;PR-100,-100;PU;PR0,100;PD;PR100,-100;PU;PR-50,50;"
  670. 6870 RETURN
  671. 6880 REM TRIANGLE SYMBOL
  672. 6890 PRINT #2,";PU;PR0,50;PD;PR-50,-100,100,0,-50,100;PU;PR0,-50;"
  673. 6900 RETURN
  674. 6910 REM DIAMOND SYMBOL
  675. 6920 PRINT #2,";PU;PR0,70;PD;PR-70,-70,70,-70,70,70,-70,70;PU;PR0,-70;"
  676. 6930 RETURN
  677. 6940 REM FIND SNUM - INCREMENT
  678. 6950 AMAX=ABS(VMAX): AMIN=ABS(VMIN)
  679. 6960 KK=0: AVAL=AMAX
  680. 6970 IF AMIN > AMAX THEN AVAL=AMIN
  681. 6980 IF AVAL >= .001 AND AVAL < 1000 THEN 7100
  682. 6990 IF AVAL < .001 THEN 7050
  683. 7000 KK = 2
  684. 7010 AVAL = AVAL/10
  685. 7020 KK = KK + 1
  686. 7030 IF AVAL > 1000 THEN 7010
  687. 7040 GOTO 7090
  688. 7050 KK = -3
  689. 7060 AVAL = AVAL*10
  690. 7070 KK = KK - 1
  691. 7080 IF AVAL < .001 THEN 7060
  692. 7090 SF=10^KK:VMIN=VMIN/SF:VMAX=VMAX/SF
  693. 7100 SNUM=(VMAX-VMIN)/DN
  694. 7110 RETURN
  695. 7120 END SUB
  696.