home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HAM Radio 1
/
HamRadio.cdr
/
tech
/
eepub07
/
plot.sub
< prev
next >
Wrap
Text File
|
1979-12-31
|
24KB
|
696 lines
1 SUB PLOT(NCURVES,NPOINTS,MATX(1),MATY(1)) STATIC
10 REM ALL CALLED VARIABLES ARE CALLED BY SINGLE PRECISION VALUE
20 IDIM=2010:DIM X(2010),Y(2010),NPP(50),LN(50),NS(50),LG$(50)
30 LG10 = LOG(10):KEY OFF:JF=0:LGQ$="N"
40 XDN=2:YDN=2:LX$="N":LY$="N":NHD=0:LGB=1
50 CLOSE #1: CLOSE #2: DIM HED$(2),YHED(2)
60 ISCRN = 2: REM --> 100 for AT&T, 2 for IBM PC
70 IHERC = 0: REM --> 0 for IBM graphics, 1 for Hercules graphics
80 PRINT:PRINT" CURVE PLOTTING SUBROUTINE":PRINT
90 CP$="N"
100 IF CP$ = "Y" OR CP$ = "y" GOTO 3610
110 CC$="N"
120 IF CC$ <> "Y" AND CC$ <> "y" GOTO 160
130 FILES:PRINT
140 INPUT"Command file name";CF$
150 OPEN "O",#2,CF$
160 REM ANNOTATION
170 GOSUB 2790
180 REM READ DATA FILES
190 GOSUB 3090
200 REM FIND XMAX,MIN, YMAX,MIN
210 GOSUB 3460
220 IF XMIN > 0 GOTO 240
230 GOTO 260
240 INPUT"Log scale on X axis (Y/N) ";LX$
250 IF LX$ <> "Y" AND LX$ <> "y" THEN LX$ = "N"
260 IF YMIN > 0 GOTO 280
270 GOTO 300
280 INPUT"Log scale on Y axis (Y/N) ";LY$
290 IF LY$ <> "Y" AND LY$ <> "y" THEN LY$ = "N"
300 IF CC$ = "Y" OR CC$ = "y" THEN PRINT #2, LX$
310 IF CC$ = "Y" OR CC$ = "y" THEN PRINT #2, LY$
320 IF LX$ <> "Y" AND LX$ <> "y" GOTO 400
330 IF XMAX <> XMIN THEN 350
340 XMAX=XMAX*2: XMIN=XMIN/2
350 MINN = XMIN: MAXX = XMAX: GOSUB 2710
360 XMIN = MINN: XMAX = MAXX:PRINT"XMIN, MAX =";XMIN;XMAX
370 LGX=LOG(XMAX/XMIN):DECX = DEC: PRINT"DECX = ";DECX
380 IF CC$="Y" OR CC$="Y" THEN PRINT #2,XMIN,XMAX,LGX,DECX
390 GOTO 510
400 INPUT"Want to specify XMIN, XMAX (Y/N) ";AN$
410 IF AN$ = "Y" OR AN$ = "y" THEN 460
420 IF XMAX <> XMIN THEN 500
430 IF XMAX <> 0 THEN 450
440 XMIN = -1: XMAX = 1: GOTO 500
450 XMIN=XMIN/2: XMAX=XMAX*2: GOTO 500
460 INPUT"XMIN, XMAX ";XMIN,XMAX
470 IF XMAX =< XMIN GOTO 460
480 INPUT"No. of tick marks on X axis ";XDN
490 IF XDN <= 0 THEN XDN = 1
500 IF CC$ = "Y" OR CC$ = "y" THEN PRINT #2, XMIN,XMAX,XDN
510 IF LY$ <> "Y" AND LY$ <> "y" GOTO 590
520 IF YMAX <> YMIN THEN 540
530 YMAX=YMAX*2: YMIN=YMIN/2
540 MINN = YMIN: MAXX = YMAX: GOSUB 2710
550 YMIN = MINN: YMAX = MAXX:PRINT"YMIN, MAX =";YMIN;YMAX
560 LGY=LOG(YMAX/YMIN):DECY = DEC: PRINT"DECY = ";DECY
570 IF CC$="Y" OR CC$="Y" THEN PRINT #2,YMIN,YMAX,LGY,DECY
580 GOTO 700
590 INPUT"Want to specify YMIN, YMAX (Y/N) ";AN$
600 IF AN$ = "Y" OR AN$ = "y" THEN 650
610 IF YMAX <> YMIN THEN 690
620 IF YMAX <> 0 THEN 640
630 YMIN = -1: YMAX = 1: GOTO 690
640 YMIN=YMIN/2: YMAX=YMAX*2: GOTO 690
650 INPUT"YMIN, YMAX ";YMIN,YMAX
660 IF YMAX =< YMIN GOTO 650
670 INPUT"No. of tick marks on Y axis ";YDN
680 IF YDN <= 0 THEN YDN = 1
690 IF CC$ = "Y" OR CC$ = "y" THEN PRINT #2, YMIN,YMAX,YDN
700 IF CC$ = "Y" OR CC$ = "y" THEN CLOSE #2
710 PRINT:BEEP
720 PRINT"Type 0 for screen plot"
730 PRINT" 1 for HP plotter"
740 INPUT IDEV
750 IF IDEV < 1 THEN IDEV = 0 ELSE IDEV = 1
760 XMXX=XMAX-XMIN: YMXX=YMAX-YMIN
770 CLS:PRINT"******** PLOT IS BEING GENERATED ***********"
780 ON (IDEV+1) GOTO 790,4290
790 REM Define sreen data
800 IF ISCRN <> 100 GOTO 840
810 XN=100:XX=600:YN=40:YX=350:XTIC=5:YTIC=5
820 XLB= 5: XLE=100: YLB=375: DXL=128
830 GOTO 900
840 IF IHERC = 1 GOTO 880
850 XN=100:XX=600:YN=20:YX=175:XTIC=3:YTIC=5
860 XLB= 5: XLE=100: YLB=188: DXL=128
870 GOTO 900
880 XN=115:XX=680:YN=35:YX=300:XTIC=5:YTIC=5
890 XLB= 5: XLE=110: YLB=330: DXL=143
900 REM - CONVERT TO SCREEN UNITS
910 XXXN=XX-XN: YNYX=YN-YX
920 II = 0
930 FOR J = 1 TO JF
940 IF LX$ = "Y" OR LX$ = "y" GOTO 1000
950 FOR I = 1 TO NPP(J)
960 II = II + 1
970 X(II) = XN + XXXN*(X(II)-XMIN)/XMXX
980 NEXT I
990 GOTO 1040
1000 FOR I = 1 TO NPP(J)
1010 II = II + 1
1020 X(II) = XN + XXXN*LOG(X(II)/XMIN)/LGX
1030 NEXT I
1040 NEXT J
1050 II = 0
1060 FOR J = 1 TO JF
1070 IF LY$ = "Y" OR LY$ = "y" GOTO 1130
1080 FOR I = 1 TO NPP(J)
1090 II = II + 1
1100 Y(II) = YX + YNYX*(Y(II)-YMIN)/YMXX
1110 NEXT I
1120 GOTO 1170
1130 FOR I = 1 TO NPP(J)
1140 II = II + 1
1150 Y(II) = YX + YNYX*LOG(Y(II)/YMIN)/LGY
1160 NEXT I
1170 NEXT J
1180 REM DRAW BOX
1190 SCREEN ISCRN: CLS
1200 IF LX$ = "Y" OR LX$ = "y" GOTO 1340
1210 REM LINEAR X AXIS
1220 DRAW"BM="+VARPTR$(XN)+",="+VARPTR$(YX):DX=(XX-XN)/XDN:XA=XN:YA=YX-XTIC
1230 FOR I=1 TO XDN: XA=XA+DX
1240 DRAW"M="+VARPTR$(XA)+",="+VARPTR$(YX):DRAW"M="+VARPTR$(XA)+",="+VARPTR$(YA):DRAW"M="+VARPTR$(XA)+",="+VARPTR$(YX)
1250 NEXT I
1260 DRAW"BM="+VARPTR$(XN)+",="+VARPTR$(YN):XA=XN:YA=YN+XTIC
1270 FOR I=1 TO XDN: XA=XA+DX
1280 DRAW"M="+VARPTR$(XA)+",="+VARPTR$(YN):DRAW"M="+VARPTR$(XA)+",="+VARPTR$(YA):DRAW"M="+VARPTR$(XA)+",="+VARPTR$(YN)
1290 NEXT I
1300 REM VERTICAL LINE AT X = 0
1310 IF XMIN > 0 OR XMAX < 0 GOTO 1450
1320 XB = XN + (XX-XN)*XMIN/(XMIN-XMAX)
1330 DRAW"BM="+VARPTR$(XB)+",="+VARPTR$(YN):DRAW"M="+VARPTR$(XB)+",="+VARPTR$(YX):GOTO 1450
1340 REM LOG X AXIS
1350 DRAW"BM="+VARPTR$(XN)+",="+VARPTR$(YX):DX=(XX-XN)/DECX:XA=XN:YA=YX-XTIC
1360 FOR I=1 TO DECX: FOR J = 2 TO 10
1370 XAA = XA + DX*LOG(J)/LG10
1380 DRAW"M="+VARPTR$(XAA)+",="+VARPTR$(YX):DRAW"M="+VARPTR$(XAA)+",="+VARPTR$(YA):DRAW"M="+VARPTR$(XAA)+",="+VARPTR$(YX)
1390 NEXT J: XA = XAA: NEXT I
1400 DRAW"BM="+VARPTR$(XN)+",="+VARPTR$(YN):XA=XN:YA=YN+XTIC
1410 FOR I=1 TO DECX: FOR J = 2 TO 10
1420 XAA = XA + DX*LOG(J)/LG10
1430 DRAW"M="+VARPTR$(XAA)+",="+VARPTR$(YN):DRAW"M="+VARPTR$(XAA)+",="+VARPTR$(YA):DRAW"M="+VARPTR$(XAA)+",="+VARPTR$(YN)
1440 NEXT J: XA = XAA: NEXT I
1450 IF LY$ = "Y" OR LY$ = "y" GOTO 1590
1460 REM LINEAR Y AXIS
1470 DRAW"BM="+VARPTR$(XN)+",="+VARPTR$(YN):DY=(YX-YN)/YDN:YA=YN:XA=XN+YTIC
1480 FOR I=1 TO YDN: YA = YA + DY
1490 DRAW"M="+VARPTR$(XN)+",="+VARPTR$(YA):DRAW"M="+VARPTR$(XA)+",="+VARPTR$(YA):DRAW"M="+VARPTR$(XN)+",="+VARPTR$(YA)
1500 NEXT I
1510 DRAW"BM="+VARPTR$(XX)+",="+VARPTR$(YN):YA=YN:XA=XX-YTIC
1520 FOR I=1 TO YDN: YA = YA + DY
1530 DRAW"M="+VARPTR$(XX)+",="+VARPTR$(YA):DRAW"M="+VARPTR$(XA)+",="+VARPTR$(YA):DRAW"M="+VARPTR$(XX)+",="+VARPTR$(YA)
1540 NEXT I
1550 REM HORIZONTAL LINE AT Y = 0
1560 IF YMIN > 0 OR YMAX < 0 GOTO 1650
1570 YB = YN + (YX-YN)*YMAX/(YMAX-YMIN)
1580 DRAW"BM="+VARPTR$(XN)+",="+VARPTR$(YB):DRAW"M="+VARPTR$(XX)+",="+VARPTR$(YB):GOTO 1700
1590 REM LOG Y AXIS
1600 DRAW"BM="+VARPTR$(XN)+",="+VARPTR$(YX):DY=(YX-YN)/DECY:YA=YX:XA=XN+YTIC
1610 FOR I=1 TO DECY: FOR J = 2 TO 10
1620 YAA = YA - DY*LOG(J)/LG10
1630 DRAW"M="+VARPTR$(XN)+",="+VARPTR$(YAA):DRAW"M="+VARPTR$(XA)+",="+VARPTR$(YAA):DRAW"M="+VARPTR$(XN)+",="+VARPTR$(YAA)
1640 NEXT J: YA = YAA: NEXT I
1650 DRAW"BM="+VARPTR$(XX)+",="+VARPTR$(YX):YA=YX:XA=XX-YTIC
1660 FOR I=1 TO DECY: FOR J = 2 TO 10
1670 YAA = YA - DY*LOG(J)/LG10
1680 DRAW"M="+VARPTR$(XX)+",="+VARPTR$(YAA):DRAW"M="+VARPTR$(XA)+",="+VARPTR$(YAA):DRAW"M="+VARPTR$(XX)+",="+VARPTR$(YAA)
1690 NEXT J: YA = YAA: NEXT I
1700 REM PLOT CURVES
1710 II = 0
1720 FOR J = 1 TO JF
1730 II = II + 1
1740 IF LN(J) = 2 THEN 1870
1750 DRAW"BM="+VARPTR$(X(II))+",="+VARPTR$(Y(II))
1760 IF LN(J) = 1 THEN 1780
1770 ON NS(J) GOSUB 4140,4170,4200,4230,4260
1780 FOR I = 2 TO NPP(J)
1790 II = II + 1
1800 IF LN(J) = 3 THEN 1830
1810 DRAW"M="+VARPTR$(X(II))+",="+VARPTR$(Y(II))
1820 GOTO 1850
1830 DRAW"BM="+VARPTR$(X(II))+",="+VARPTR$(Y(II))
1840 ON NS(J) GOSUB 4140,4170,4200,4230,4260
1850 NEXT I
1860 GOTO 2000
1870 REM LINE WITH SYMBOLS
1880 NPS=INT(NPP(J)/8):IF NPS=0 THEN NPS=1
1890 DRAW"BM="+VARPTR$(X(II))+",="+VARPTR$(Y(II))
1900 NPD = 0 : IF NPS > 1 THEN 1920
1910 ON NS(J) GOSUB 4140,4170,4200,4230,4260
1920 FOR I = 2 TO NPP(J)
1930 II = II + 1
1940 NPD = NPD + 1
1950 DRAW"M="+VARPTR$(X(II))+",="+VARPTR$(Y(II))
1960 IF NPD < NPS THEN 1990
1970 ON NS(J) GOSUB 4140,4170,4200,4230,4260
1980 NPD = 0
1990 NEXT I
2000 IF LGQ$<>"Y" AND LGQ$<>"y" THEN 2150
2010 REM WRITE LEGEND
2020 IF J > 5 THEN 2150
2030 LOCATE 25,LGB:PRINT LG$(J);:LGB=LGB+16
2040 ON LN(J) GOTO 2050,2050,2070
2050 DRAW"BM="+VARPTR$(XLB)+",="+VARPTR$(YLB):DRAW"M="+VARPTR$(XLE)+",="+VARPTR$(YLB)
2060 IF LN(J) = 1 THEN 2140
2070 DRAW"BM="+VARPTR$(XLB)+",="+VARPTR$(YLB)
2080 ON NS(J) GOSUB 4140,4170,4200,4230,4260
2090 XLM = (XLB + XLE)/2
2100 DRAW"BM="+VARPTR$(XLM)+",="+VARPTR$(YLB)
2110 ON NS(J) GOSUB 4140,4170,4200,4230,4260
2120 DRAW"BM="+VARPTR$(XLE)+",="+VARPTR$(YLB)
2130 ON NS(J) GOSUB 4140,4170,4200,4230,4260
2140 XLB=XLB+DXL: XLE=XLE+DXL
2150 NEXT J
2160 XB = 12: XE = 74: YB = 3: YE = 22
2170 IF LX$ = "Y" OR LX$ = "y" THEN 2290
2180 NPS=INT(XDN/4):IF NPS=0 THEN NPS=1
2190 SNUM=(XMAX-XMIN)/XDN: XWR=XMIN-SNUM:NPD=0
2200 FOR I = 1 TO XDN+1: NPD=NPD+1
2210 XWR=XWR+SNUM: IF I=XDN+1 THEN XWR=XMAX
2220 IF I = 1 THEN 2240
2230 IF NPD < NPS THEN 2270
2240 LOCATE YE+1,(XB+(XE-XB)*(I-1)/XDN)-3
2250 PRINT USING"##.##^^^^";XWR;
2260 NPD = 0
2270 NEXT I
2280 GOTO 2390
2290 XWR = XMIN/10: NPD=0
2300 NPS=INT(DECX/4):IF NPS=0 THEN NPS=1
2310 FOR I = 1 TO DECX+1:NPD=NPD+1
2320 XWR = XWR*10
2330 IF I = 1 THEN 2350
2340 IF NPD < NPS THEN 2380
2350 LOCATE YE+1,(XB+(XE-XB)*(I-1)/DECX)-3
2360 PRINT USING"##.##^^^^";XWR;
2370 NPD = 0
2380 NEXT I
2390 IF LY$ = "Y" OR LY$ = "y" THEN 2470
2400 SNUM=(YMAX-YMIN)/YDN: YWR = YMAX+SNUM
2410 FOR I = 1 TO YDN+1
2420 LOCATE (YB+(YE-YB)*(I-1)/YDN),4
2430 YWR=YWR-SNUM: IF I=YDN+1 THEN YWR=YMIN
2440 PRINT USING"##.##^^^^";YWR;
2450 NEXT I
2460 GOTO 2530
2470 YWR = YMAX*10
2480 FOR I = 1 TO DECY+1
2490 LOCATE (YB+(YE-YB)*(I-1)/DECY),4
2500 YWR = YWR/10
2510 PRINT USING"##.##^^^^";YWR;
2520 NEXT I
2530 IF AT$ <> "Y" AND AT$ <> "y" GOTO 2680
2540 IF NHD > 2 THEN NHD = NHD-2
2550 IF NHD = 0 THEN 2600
2560 FOR I = 1 TO NHD
2570 DIS = .5*(XE-XB-LEN(HED$(I)))
2580 LOCATE I,DIS+XB: PRINT HED$(I);
2590 NEXT I
2600 DIS = .5*(XE-XB-LEN(XT$))
2610 YXT=25:IF LGQ$="Y" OR LGQ$="y" THEN YXT=21
2620 LOCATE YXT,DIS+XB: PRINT XT$;
2630 LMAX = 24: LEY = LEN(YT$)
2640 IF LEY > LMAX THEN LEY = LMAX
2650 DIS=.5*(YE-YB-LEY)
2660 FOR I = 1 TO LEY: LOCATE YB+DIS+I-1,2
2670 X$=MID$(YT$,I,1): PRINT X$;: NEXT I
2680 AA$ = INKEY$: IF(AA$="") GOTO 2680
2690 CLS: SCREEN 0,0,0
2700 EXIT SUB
2710 REM MIN, MAX FOR LOG SCALE
2720 MINN = INT(LOG(MINN)/LG10)
2730 LGT = LOG(MAXX)/LG10
2740 IF LGT = INT(LGT) GOTO 2760
2750 LGT = INT(LGT) + 1
2760 DEC = LGT - MINN
2770 MAXX = 10^LGT: MINN = 10^MINN
2780 RETURN
2790 REM ANNOTATION AND OTHER QUESTIONS
2800 QB$="N"
2810 IF QB$ <> "Y" AND QB$ <> "y" THEN QB$ = "N"
2820 IF CC$ = "Y" OR CC$ = "y" THEN PRINT #2, QB$
2830 IF QB$ = "N" THEN 2870
2840 INPUT "Box left bottom corner location X,Y (inch) ";BX, BY
2850 INPUT "Box width, height (inches) ";BWID, BHGT
2860 IF CC$ = "Y" OR CC$ = "y" THEN PRINT #2, BX,BY,BWID,BHGT
2870 INPUT"Do you want annotation (Y/N) ";AT$
2880 IF AT$ <> "Y" AND AT$ <> "y" THEN AT$ = "N"
2890 IF CC$ = "Y" OR CC$ = "y" THEN PRINT #2, AT$
2900 IF AT$ <> "Y" AND AT$ <> "y" THEN RETURN
2910 INPUT "Number of heading lines (0,1 or 2) ";NHD
2920 IF NHD =< 0 THEN NHD = 0
2930 IF NHD > 4 THEN 2910
2940 IF CC$ = "Y" OR CC$ = "y" THEN PRINT #2, NHD
2950 NHD1 = NHD: IF NHD > 2 THEN NHD1 = NHD-2
2960 IF NHD = 0 THEN 3010
2970 FOR I = 1 TO NHD1
2980 PRINT "Heading, line #";I;:INPUT HED$(I)
2990 IF CC$ = "Y" OR CC$ = "y" THEN PRINT #2, HED$(I)
3000 NEXT I
3010 INPUT"X Title ";XT$
3020 IF CC$ = "Y" OR CC$ = "y" THEN PRINT #2, XT$
3030 INPUT"Y Title ";YT$
3040 IF CC$ = "Y" OR CC$ = "y" THEN PRINT #2, YT$
3050 INPUT"Do you want a legend for each curve";LGQ$
3060 IF LGQ$ <> "Y" AND LGQ$ <> "y" THEN LGQ$ = "N"
3070 IF CC$ = "Y" OR CC$ = "y" THEN PRINT #2, LGQ$
3080 RETURN
3090 I=1:REM READ ARRAY
3100 FOR LOOP=1 TO NCURVES
3110 II=1
3120 FOR LOOP2=1 TO NPOINTS
3130 X(I)=MATX(I):Y(I)=MATY(I)
3140 I=I+1:II=II+1
3150 NEXT LOOP2
3160 JF=JF+1
3170 NPP(JF)=II-1
3210 IF CC$ = "Y" OR CC$ = "y" THEN PRINT #2, NPP(JF)
3220 PRINT"Curve #";JF;"line type ? 1 for line only"
3230 PRINT" 2 for line with symbols"
3240 PRINT" 3 for symbols only (scatter plot)"
3250 INPUT LN(JF)
3260 IF LN(JF) =< 0 THEN LN(JF) = 1
3270 IF LN(JF) > 3 THEN 3220
3280 IF CC$ = "Y" OR CC$ = "y" THEN PRINT #2, LN(JF)
3290 IF LN(JF) = 1 THEN 3350
3300 PRINT"Which symbol ?"
3310 PRINT" 1 square; 2 plus(+); 3 cross(X); 4 triangle; 5 diamond"
3320 INPUT NS(JF)
3330 IF NS(JF) < 1 OR NS(JF) > 5 THEN 3300
3340 IF CC$ = "Y" OR CC$ = "y" THEN PRINT #2, NS(JF)
3350 PRINT
3360 IF LGQ$ <> "Y" AND LGQ$ <> "y" THEN 3380
3370 INPUT "Legend for this curve ";LG$(JF)
3380 CLS:NEXT LOOP
3450 RETURN
3460 REM FIND XMAX,MIN, YMAX,MIN
3470 PRINT"Finding maximum and minimum values"
3480 XMAX=-1E+20:YMAX=XMAX:XMIN=1E+20:YMIN=XMIN
3490 II = 0
3500 FOR J = 1 TO JF
3510 FOR I = 1 TO NPP(J)
3520 II = II + 1
3530 IF(X(II) > XMAX) THEN XMAX = X(II)
3540 IF(X(II) < XMIN) THEN XMIN = X(II)
3550 IF(Y(II) > YMAX) THEN YMAX = Y(II)
3560 IF(Y(II) < YMIN) THEN YMIN = Y(II)
3570 NEXT I : NEXT J
3580 PRINT"XMIN, XMAX ";XMIN;XMAX
3590 PRINT"YMIN, YMAX ";YMIN;YMAX
3600 RETURN
3610 REM READ COMMAND FILE
3620 FILES:PRINT:INPUT"COMMAND FILE NAME ";CF$
3630 OPEN "I", #2, CF$
3640 INPUT #2, QB$
3650 IF QB$ <> "Y" AND QB$ <> "y" THEN 3670
3660 INPUT #2, BX, BY, BWID, BHGT
3670 INPUT #2, AT$
3680 IF AT$ <> "Y" AND AT$ <> "y" GOTO 3770
3690 INPUT #2, NHD
3700 NHD1=NHD: IF NHD > 2 THEN NHD1=NHD-2
3710 IF NHD = 0 THEN 3740
3720 FOR I = 1 TO NHD1
3730 INPUT #2, HED$(I):PRINT HED$(I): NEXT I
3740 INPUT #2, XT$ :PRINT XT$
3750 INPUT #2, YT$:PRINT YT$
3760 INPUT #2, LGQ$
3770 II = 1
3780 JF = JF + 1
3790 INPUT #2, FIL$
3800 INPUT #2, NPP(JF)
3810 PRINT"Reading data file ";FIL$
3820 OPEN "I",#1,FIL$
3830 FOR I = 1 TO NPP(JF)
3840 INPUT # 1,X(II),Y(II)
3850 II = II + 1
3860 NEXT I
3870 PRINT NPP(JF);" .... lines read"
3880 INPUT #2, LN(JF)
3890 IF LN(JF) = 1 THEN 3910
3900 INPUT #2, NS(JF)
3910 CLOSE # 1
3920 IF LGQ$<>"Y" AND LGQ$<>"y" THEN 3940
3930 INPUT #2, LG$(JF): PRINT LG$(JF)
3940 INPUT #2, AN$
3950 IF AN$ = "Y" OR AN$ = "y" GOTO 3780
3960 INPUT #2, LX$
3970 INPUT #2, LY$
3980 IF LX$ <> "Y" AND LX$ <> "y" GOTO 4000
3990 INPUT #2, XMIN, XMAX, LGX, DECX: GOTO 4010
4000 INPUT #2, XMIN,XMAX,XDN
4010 IF LY$ <> "Y" AND LY$ <> "y" GOTO 4030
4020 INPUT #2, YMIN, YMAX, LGY, DECY: GOTO 710
4030 INPUT #2, YMIN,YMAX,YDN
4040 CLOSE #2: GOTO 710
4140 REM SQUARE SYSMBOL
4150 DRAW"BU3R3L6D6R6U6L3BD3"
4160 RETURN
4170 REM PLUS SYMBOL
4180 DRAW"U3D6U3R3L6R3"
4190 RETURN
4200 REM X SYMBOL
4210 DRAW"E3G6E3F3H6F3"
4220 RETURN
4230 REM TRIANGLE SYMBOL
4240 DRAW"BU3F6L12E6G6R12H6BD3"
4250 RETURN
4260 REM DIAMOND SYMBOL
4270 DRAW"BL4E4F4G4H4BR4"
4280 RETURN
4290 REM - HP PLOTTER
4300 REM CONVERT TO PLOTTER UNITS
4310 SZF = 1016
4320 IF QB$ = "Y" OR QB$ = "y" THEN 4380
4330 BWID = 7: BHGT = 5
4340 IXO=2000:IYO=1500:WID=BWID*SZF:HGT=BHGT*SZF
4350 IF NHD > 2 THEN IYO = 2200
4360 IF LGQ$="Y" OR LGQ$="y" THEN IXO = 1300
4370 GOTO 4390
4380 IXO=BX*SZF:IYO=BY*SZF:WID=BWID*SZF:HGT=BHGT*SZF
4390 IYM=IYO+HGT:IXM=IXO+WID
4400 IXOL=IXM+200: IYOL=IYO+500:DYOL=500:ELXL=IXOL+1500
4410 II = 0 : XTIC = 80: YTIC = 80
4420 FOR J = 1 TO JF
4430 IF LX$ = "Y" OR LX$ = "y" GOTO 4490
4440 FOR I = 1 TO NPP(J)
4450 II = II + 1
4460 X(II) = IXO + (X(II)-XMIN)*WID/XMXX
4470 NEXT I
4480 GOTO 4530
4490 FOR I = 1 TO NPP(J)
4500 II = II + 1
4510 X(II) = IXO + LOG(X(II)/XMIN)*WID/LGX
4520 NEXT I
4530 NEXT J
4540 II = 0
4550 FOR J = 1 TO JF
4560 IF LY$ = "Y" OR LY$ = "y" GOTO 4620
4570 FOR I = 1 TO NPP(J)
4580 II = II + 1
4590 Y(II) = IYO + (Y(II)-YMIN)*HGT/YMXX
4600 NEXT I
4610 GOTO 4660
4620 FOR I = 1 TO NPP(J)
4630 II = II + 1
4640 Y(II) = IYO + LOG(Y(II)/YMIN)*HGT/LGY
4650 NEXT I
4660 NEXT J
4670 REM INITIATE PLOTTER
4680 CLOSE #2
4690 OPEN "COM1:2400,N,8,1,RS,CS65535,DS65535,CD" AS #2
4700 CWS=.28:CHS=1.3*CWS: REM STDD. CHR. SIZE
4710 PRINT #2,CHR$(27);".(;DI;SL;SI";CWS,CHS";VS10;"
4720 BEEP: PRINT "Put in pen for grid: Press any key to continue"
4730 AA$ = INKEY$: IF AA$ = "" THEN 4730
4740 IF LX$ = "Y" OR LX$ = "y" GOTO 4920
4750 REM LINEAR X AXIS
4760 PRINT #2,"PU;PA";IXO,IYO";PD;PA"
4770 DX = WID/XDN
4780 XA = IXO: YA = IYO + XTIC
4790 FOR I = 1 TO XDN: XA = XA + DX
4800 PRINT #2,XA,IYO,XA,YA,XA,IYO
4810 NEXT I
4820 PRINT #2,";PU;PA";IXO,IYM";PD;PA"
4830 XA = IXO: YA = IYM-XTIC
4840 FOR I = 1 TO XDN: XA = XA + DX
4850 PRINT #2,XA,IYM,XA,YA,XA,IYM
4860 NEXT I: PRINT #2,";PU;"
4870 REM VERTICAL LINE AT X = 0
4880 IF XMIN >= 0 OR XMAX <= 0 GOTO 5050
4890 XB = IXO-WID*XMIN/XMXX
4900 PRINT #2,"PA";XB,IYO";PD;PA";XB,IYM";PU;"
4910 GOTO 5050
4920 REM LOG X AXIS
4930 PRINT #2,"PU;PA";IXO,IYO";PD;PA"
4940 DX = WID/DECX: XA=IXO: YA = IYO+XTIC
4950 FOR I = 1 TO DECX: FOR J = 2 TO 10
4960 XAA= XA+DX*LOG(J)/LG10
4970 PRINT #2,XAA,IYO,XAA,YA,XAA,IYO
4980 NEXT J: XA=XAA: NEXT I
4990 PRINT #2,";PU;PA";IXO,IYM";PD;PA"
5000 XA = IXO: YA = IYM-XTIC
5010 FOR I = 1 TO DECX: FOR J = 2 TO 10
5020 XAA=XA+DX*LOG(J)/LG10
5030 PRINT #2,XAA,IYM,XAA,YA,XAA,IYM
5040 NEXT J: XA = XAA: NEXT I
5050 IF LY$ = "Y" OR LY$ = "y" GOTO 5230
5060 REM LINEAR Y AXIS
5070 PRINT #2,";PU;PA";IXO,IYO";PD;PA"
5080 DY = HGT/YDN
5090 XA = IXO+YTIC: YA = IYO
5100 FOR I = 1 TO YDN: YA = YA + DY
5110 PRINT #2,IXO,YA,XA,YA,IXO,YA
5120 NEXT I
5130 PRINT #2,";PU;PA";IXM,IYO";PD;PA"
5140 XA = IXM-YTIC: YA = IYO
5150 FOR I = 1 TO YDN: YA = YA + DY
5160 PRINT #2,IXM,YA,XA,YA,IXM,YA
5170 NEXT I: PRINT #2,";PU;"
5180 REM HORIZONTAL LINE AT Y = 0
5190 IF YMIN >= 0 OR YMAX <= 0 GOTO 5360
5200 YB = IYO-HGT*YMIN/YMXX
5210 PRINT #2,"PA";IXO,YB";PD;PA";IXM,YB";PU;"
5220 GOTO 5360
5230 REM LOG Y AXIS
5240 PRINT #2,";PU;PA";IXO,IYO";PD;PA"
5250 DY = HGT/DECY: XA=IXO+YTIC: YA = IYO
5260 FOR I = 1 TO DECY: FOR J = 2 TO 10
5270 YAA= YA+DY*LOG(J)/LG10
5280 PRINT #2,IXO,YAA,XA,YAA,IXO,YAA
5290 NEXT J: YA=YAA: NEXT I
5300 PRINT #2,";PU;PA";IXM,IYO";PD;PA"
5310 XA = IXM-YTIC: YA = IYO
5320 FOR I = 1 TO DECY: FOR J = 2 TO 10
5330 YAA=YA+DY*LOG(J)/LG10
5340 PRINT #2,IXM,YAA,XA,YAA,IXM,YAA
5350 NEXT J: YA = YAA: NEXT I
5360 REM PLOT CURVES
5370 II = 0: PRINT #2,";PU;"
5380 FOR J = 1 TO JF
5390 BEEP:PRINT "Change pen for next curve: Press any key to continue"
5400 AA$ = INKEY$: IF AA$ = "" THEN 5400
5410 II = II + 1
5420 IF LN(J) = 3 THEN 5670
5430 REM LINE ONLY
5440 PRINT #2,";PU;PA";X(II),Y(II)
5450 PRINT #2,";PD;PA"
5460 FOR I = 2 TO NPP(J)
5470 II = II + 1
5480 PRINT #2, X(II),Y(II)
5490 NEXT I
5500 PRINT #2,";PU;"
5510 IF LN(J) = 1 THEN 5760
5520 REM LINE WITH SYMBOLS
5530 NPS=INT(NPP(J)/8): IF NPS=0 THEN NPS = 1
5540 II = II - NPP(J) + 1
5550 PRINT #2,";PU;PA";X(II),Y(II)
5560 NPD = 0 : IF NPS > 1 THEN 5580
5570 ON NS(J) GOSUB 6790,6820,6850,6880,6910
5580 FOR I = 2 TO NPP(J)
5590 II = II + 1: NPD = NPD + 1
5600 IF NPD < NPS THEN 5640
5610 PRINT #2, ";PA";X(II),Y(II)
5620 ON NS(J) GOSUB 6790,6820,6850,6880,6910
5630 NPD = 0
5640 NEXT I
5650 PRINT #2,";PU;"
5660 GOTO 5760
5670 REM SYMBOLS ONLY
5680 PRINT #2,";PU;PA";X(II),Y(II);";PA"
5690 ON NS(J) GOSUB 6790,6820,6850,6880,6910
5700 FOR I = 2 TO NPP(J)
5710 II = II + 1
5720 PRINT #2, ";PA";X(II),Y(II)
5730 ON NS(J) GOSUB 6790,6820,6850,6880,6910
5740 NEXT I
5750 PRINT #2,";PU;"
5760 REM WRITE LEGEND
5770 IF LGQ$<>"Y" AND LGQ$<>"y" THEN 5910
5780 CW=.2:CH=CW*1.3:PRINT #2,";SI";CW,CH";"
5790 ON LN(J) GOTO 5800,5800,5820
5800 PRINT #2,";PA";IXOL,IYOL";PD;PA";ELXL,IYOL";PU;"
5810 IF LN(J) = 1 THEN 5890
5820 PRINT #2,";PA";IXOL,IYOL";"
5830 ON NS(J) GOSUB 6790,6820,6850,6880,6910
5840 MXOL = (IXOL + ELXL)/2
5850 PRINT #2,";PA";MXOL,IYOL";"
5860 ON NS(J) GOSUB 6790,6820,6850,6880,6910
5870 PRINT #2,";PA";ELXL,IYOL";"
5880 ON NS(J) GOSUB 6790,6820,6850,6880,6910
5890 PRINT #2,";PU;PA";IXOL,IYOL+150";LB";LG$(J);CHR$(3)
5900 IYOL = IYOL + DYOL
5910 NEXT J
5920 REM ANNOTATION
5930 IF AT$ <> "Y" AND AT$ <> "y" GOTO 6770
5940 IF NHD > 2 THEN 5980
5950 YHED(1)=IYM+800: YHED(2)=IYM+400
5960 IF NHD = 2 THEN 5990
5970 YHED(1)=IYM+400: GOTO 5990
5980 YHED(1)=IYO-1500: YHED(2)=IYO-1900: NHD1=NHD-2
5990 BEEP:PRINT "Change pen for annotation: Press any key to continue"
6000 AA$ = INKEY$: IF AA$ = "" THEN 6000
6010 PRINT #2,";SI";CWS,CHS";"
6020 IF LGQ$<>"Y" AND LGQ$<>"y" THEN 6040
6030 PRINT #2,";PA";IXOL,IYOL";LBLEGEND";CHR$(3)
6040 WDL = 1.5*CWS/.0025: IF NHD1=0 THEN 6100
6050 FOR I = 1 TO NHD1
6060 DIS = .5*(WID-LEN(HED$(I))*WDL)
6070 XHED = DIS+IXO-WDD/2
6080 PRINT #2,";PU;PA";XHED,YHED(I)";LB"HED$(I);CHR$(3)
6090 NEXT I
6100 DIS=.5*(WID-LEN(XT$)*WDL):XXL=DIS+IXO-WDD/2: YXL=IYO-900
6110 PRINT #2,";PU;PA";XXL,YXL";LB"XT$;CHR$(3)
6120 CW2 = .24: CH2 = 1.3*CW2: WD2 = 1.5*CW2/.0025
6130 IF LX$="Y" OR LX$="y" GOTO 6360
6140 PRINT #2,";SI";CW2,CH2";"
6150 VMIN=XMIN: VMAX=XMAX: DN=XDN: GOSUB 6940
6160 DX=WID/XDN: XO=IXO-120-DX: YO=IYO-300
6170 XWR = VMIN-SNUM
6180 FOR I=1 TO XDN+1: XO=XO+DX: XWR=XWR+SNUM
6190 ST$ = STR$(XWR): AWR = ABS(XWR)
6200 IF LEN(ST$)>6 THEN ST$=LEFT$(ST$,6)
6210 IF AWR < 1 AND AWR > 0 THEN 6230
6220 GOTO 6260
6230 ST$ = MID$(ST$,2)
6240 IF XWR > 0 THEN ST$ = "0"+ST$
6250 IF XWR < 0 THEN ST$ = "-0"+ST$
6260 WRL=LEN(ST$) - 1
6270 DWR=.5*WRL*WD2:IF XWR<0 THEN DWR=DWR-WD2
6280 XOO=XO-DWR:IF I=1 THEN XOS=XOO
6290 PRINT #2,";PA";XOO,YO";LB"ST$;CHR$(3): NEXT I
6300 IF KK = 0 THEN 6440
6310 XO = IXO+.8*WID: YO = IYO - 550
6320 ST$=STR$(KK):IF KK>0 THEN ST$=MID$(ST$,2)
6330 ST$ = "X10**"+ST$
6340 PRINT #2,";SI";CWS,CHS";PA";XO,YO";LB"ST$;CHR$(3)
6350 GOTO 6440
6360 DX=WID/DECX:XO=IXO-200-DX:YO=IYO-350
6370 XOS = IXO - 250
6380 FOR I=1 TO DECX+1: XO=XO+DX
6390 PRINT #2,"PA";XO,YO";LB10";CHR$(3):NEXT I
6400 CW=.18:CH=CW*1.3:XO=IXO-DX+50:YO=IYO-150
6410 IEX=INT(LOG(XMIN)/LG10)-1:PRINT #2,";SI";CW,CH";"
6420 FOR I = 1 TO DECX+1: XO=XO+DX:IEX=IEX+1
6430 PRINT #2,";PA";XO,YO";LB";IEX;CHR$(3):NEXT I
6440 DIS=.5*(HGT-LEN(YT$)*WDL):YXL=DIS+IYO-WDD/2
6450 XXL=IXO-1000 :PRINT #2,";DI0,1;SI";CWS,CHS";"
6460 PRINT #2,";PU;PA";XXL,YXL";LB"YT$;CHR$(3)
6470 IF LY$="Y" OR LY$="y" GOTO 6700
6480 PRINT #2,";SI";CW2,CH2";"
6490 VMIN=YMIN: VMAX=YMAX: DN=YDN: GOSUB 6940
6500 DY=HGT/YDN: XO=XOS-100: YO=IYO-DY-150
6510 YWR = VMIN-SNUM
6520 FOR I=1 TO YDN+1: YO=YO+DY: YWR=YWR+SNUM
6530 ST$ = STR$(YWR): AWR = ABS(YWR)
6540 IF LEN(ST$)>6 THEN ST$=LEFT$(ST$,6)
6550 IF AWR < 1 AND AWR > 0 THEN 6570
6560 GOTO 6600
6570 ST$ = MID$(ST$,2)
6580 IF YWR > 0 THEN ST$ = "0"+ST$
6590 IF YWR < 0 THEN ST$ = "-0"+ST$
6600 WRL=LEN(ST$) - 1
6610 DWR=.5*WRL*WD2: IF YWR<O THEN DWR = DWR - WD2
6620 YOO = YO - DWR
6630 PRINT #2,";PA";XO,YOO";LB"ST$;CHR$(3):NEXT I
6640 IF KK = 0 THEN 6770
6650 XO = XOS-350: YO = IYO+.8*HGT
6660 ST$=STR$(KK):IF KK>0 THEN ST$=MID$(ST$,2)
6670 ST$ = "X10**"+ST$
6680 PRINT #2,";PA";XO,YO";LB"ST$;CHR$(3)
6690 GOTO 6770
6700 DY=HGT/DECY:XO=IXO-600:YO=IYO-50-DY
6710 PRINT #2,";DI;":FOR I=1 TO DECY+1: YO=YO+DY
6720 PRINT #2,"PA";XO,YO";LB10";CHR$(3):NEXT I
6730 CW=.18:CH=CW*1.3:XO=IXO-350:YO=IYO+150-DY
6740 IEX=INT(LOG(YMIN)/LG10)-1:PRINT #2,";SI";CW,CH";"
6750 FOR I = 1 TO DECY+1: YO=YO+DY:IEX=IEX+1
6760 PRINT #2,";PA";XO,YO";LB";IEX;CHR$(3):NEXT I
6770 PRINT #2,";PU;DI;SI;SP0;PA16000,11400;";CHR$(27);".)"
6780 CLOSE #2: GOTO 2700
6790 REM SQUARE SYSMBOL
6800 PRINT #2,";PU;PR50,50;PD;PR-100,0,0,-100,100,0,0,100;PU;PR-50,-50;"
6810 RETURN
6820 REM PLUS SYMBOL
6830 PRINT #2,";PU;PR50,0;PD;PR-100,0;PU;PR50,-50;PD;PR0,100;PU;PR0,-50;"
6840 RETURN
6850 REM X SYMBOL
6860 PRINT #2,";PU;PR50,50;PD;PR-100,-100;PU;PR0,100;PD;PR100,-100;PU;PR-50,50;"
6870 RETURN
6880 REM TRIANGLE SYMBOL
6890 PRINT #2,";PU;PR0,50;PD;PR-50,-100,100,0,-50,100;PU;PR0,-50;"
6900 RETURN
6910 REM DIAMOND SYMBOL
6920 PRINT #2,";PU;PR0,70;PD;PR-70,-70,70,-70,70,70,-70,70;PU;PR0,-70;"
6930 RETURN
6940 REM FIND SNUM - INCREMENT
6950 AMAX=ABS(VMAX): AMIN=ABS(VMIN)
6960 KK=0: AVAL=AMAX
6970 IF AMIN > AMAX THEN AVAL=AMIN
6980 IF AVAL >= .001 AND AVAL < 1000 THEN 7100
6990 IF AVAL < .001 THEN 7050
7000 KK = 2
7010 AVAL = AVAL/10
7020 KK = KK + 1
7030 IF AVAL > 1000 THEN 7010
7040 GOTO 7090
7050 KK = -3
7060 AVAL = AVAL*10
7070 KK = KK - 1
7080 IF AVAL < .001 THEN 7060
7090 SF=10^KK:VMIN=VMIN/SF:VMAX=VMAX/SF
7100 SNUM=(VMAX-VMIN)/DN
7110 RETURN
7120 END SUB