home *** CD-ROM | disk | FTP | other *** search
GW-BASIC | 1979-12-31 | 9.8 KB | 208 lines |
- 10 PRINT CHR$(26): PRINT "GENERALIZED PLOTTING PROGRAM V2.2.1M 2/11/86"
- 20 PRINT
- 30 PRINT " *********************************************
- 40 PRINT " * *
- 50 PRINT " * BY DR. ALLEN KATZ, CHAIRMAN *
- 60 PRINT " * DEPT ELECTRONICS ENGINEERING TECHNOLOGY *
- 70 PRINT " * TRENTON STATE COLLEGE, CN550 *
- 80 PRINT " * TRENTON, NEW JERSEY 8625 *
- 90 PRINT " * *
- 100 PRINT " * THE AUTHOR RESERVES RIGHTS TO THIS *
- 110 PRINT " * PROGRAM; HOWEVER, COPYING AND USE FOR *
- 120 PRINT " * EDUCATIONAL PURPOSES IS ENCOURAGED. *
- 130 PRINT " * *
- 140 PRINT " * PLEASE REPORTS ANY ERRORS OR PROBLEMS *
- 150 PRINT " * WITH THIS PROGRAM TO THE AUTHOR. *
- 160 PRINT " * TEL (609) 771 2487 *
- 170 PRINT " * *
- 180 PRINT " *********************************************
- 190 PRINT: INPUT "WANT EXPLANATION (Y/N)"; Q$: IF Q$<>"Y" THEN 380
- 200 PRINT CHR$(26): PRINT "UPLOT IS AN EASY TO USE PLOTTING PROGRAM DESIGNED TO WORK WITH MX80 LIKE
- 210 PRINT "PRINTERS. NO SPECIAL GRAPHICS ARE USED. GENERALLY IT IS DESIRABLE TO CUT
- 220 PRINT "OUT THE RESULTANT GRAPH AND ROTATE IT 90 DEGS FOR THE BEST PRESENTATION.
- 230 PRINT "THE INDEPENDANT VARIABLE IS PRINTED AT THE LEFT SIDE OF THE SHEET AND
- 240 PRINT "CAN BE OF ANY LENGTH. THE DEPENDANT VARIABLES ARE PLOTTED ACROSS THE
- 250 PRINT "SHEET AND CAN BE EITHER IN 'NARROW' MODE (80 CHARATERS) OR 'WIDE'
- 260 PRINT "MODE (124 CHARACTERS). THE NARROW MODE IS THE DEFAULT MODE. ALL SCALING
- 270 PRINT "IS HANDLED AUTOMATICALLY BY UPLOT. UPTO TWO VARIBLES MAY BE PLOTTED
- 280 PRINT "SIMULTANEOUSLY.": PRINT
- 290 PRINT "TO USE UPLOT ENTER NUMBER OF DEPENDANT VARIABLES, GRAPH TITLES, UNITS,
- 300 PRINT "MAXIMUM AND MINIMUM VALUES AND STEP SIZE OF THE INDEPENDANT VARIABLE.
- 310 PRINT "UPLOT WILL THEN PROVIDE PROMPTS FOR ENTERING THE DEPENDANT VARIABLE
- 320 PRINT "VALUES. WHEN TWO VALUES ARE REQUESED THEY SHOULD BE ENTERED ON THE
- 330 PRINT "SAME LINE SEPARATED BY A COMMA. ONCE ALL VALUES ARE ENTERED, UPLOT
- 340 PRINT "WILL ALLOW INCORRECT ENTERIES TO BE CHANGED. IT WILL THEN ASK FOR THE
- 350 PRINT "NUMBER OF SPACES TO BE PRINTED BETWEEN EACH VALUE OF THE DEPENDANT
- 360 PRINT "VARIABLE. TRY '0' TO START WITH. THE ENTERED DATA WILL THEN BE LISTED
- 361 PRINT "IN TABULAR FORM AND AN OPPORTUNITY TO CHANGE VALUES OF THE DEPENDANT
- 362 PRINT "VARIABLE WILL AGAIN BE PROVIDED BEFORE ACTUAL PLOTTING.": PRINT
- 363 PRINT "UPLOT ALSO ALLOWS GRAPHICAL DATA TO BE SAVED TO DISK FOR FUTURE USE
- 364 PRINT "AND MODIFICATION.
- 370 REM INITIALIZE PRINTER **********************************
- 380 LPRINT CHR$(27) CHR$(71): LL=80: PW=80: XX=LL: DIM X(15),Y1(15),Y2(15)
- 390 PRINT: INPUT "DO YOU WISH TO CHANGE PRINTER WIDTH OPTION (Y/N)"; Q$
- 400 IF Q$<>"Y" THEN 430 ELSE INPUT "PRINTER IS NARROW (80). DO YOU WANT IT WIDE (124) (Y/N)"; Q$
- 410 IF Q$="Y" THEN PW=120: LPRINT CHR$(15): WIDTH LPRINT 120
- 420 REM ************ FILE READ ****************************
- 430 PRINT: INPUT "WANT TO READ A FILE (Y/N/END)";Q$: DV=0
- 450 IF Q$="END" THEN END
- 460 IF Q$<>"Y" THEN 550
- 470 PRINT: INPUT "FILE NAME, FILES OR QUIT"; F$: N$=F$
- 480 IF F$="FILES"THEN FILES"*.PLT":GOTO 470 ELSE IF F$="QUIT"THEN 430
- 490 F$=F$+".PLT": OPEN "I",#1,F$
- 500 INPUT#1,NP,LP,SP,Q,G$,X$,Y$,Y1$,Y2$
- 510 ERASE X,Y1,Y2: DIM X(NP),Y1(NP),Y2(NP)
- 520 FOR I=0 TO NP: INPUT#1,X(I),Y1(I),Y2(I): NEXT
- 530 CLOSE#1: GOTO 830
- 540 REM ************ DATA INPUT **********************
- 550 PRINT: INPUT "ONE OR TWO VARIABLE PLOT (1/2)"; Q
- 560 IF Q>2 OR Q<1 THEN 550
- 570 PRINT: INPUT "GRAPH TITLE"; G$
- 580 INPUT "NAME INDEPENDENT VARIABLE"; X$
- 590 INPUT "UNITS OR TITLE OF DEPENDENT VARIABLE(S)"; Y$
- 600 IF Q=1 THEN Y1$=Y$: GOTO 630
- 610 INPUT "NAME OF 1ST DEPENDENT VARIABLE"; Y1$
- 620 INPUT "NAME OF 2ND DEPENDANT VARIABLE"; Y2$
- 630 PRINT: PRINT "MINIMUM VALUE OF "; X$;: INPUT LP
- 640 PRINT "MAXIMUM VALUE OF "; X$;: INPUT HP
- 650 PRINT X$; " STEP (MUST BE INTEGRAL FACTOR OF NP)";: INPUT SP: NP=(HP-LP)/SP
- 660 IF NP<>INT(NP) THEN PRINT: PRINT "INPUT ERROR": GOTO 630
- 670 ERASE X,Y1,Y2: DIM X(NP),Y1(NP),Y2(NP)
- 680 PRINT: FOR I=0 TO NP: X(I)=LP+I*SP
- 690 PRINT X$ " = " X(I) " ";:IF Q=2 THEN PRINT Y1$ ", " Y2$;:INPUT Y1(I),Y2(I): GOTO 705
- 700 PRINT Y1$;: INPUT Y1(I): Y2(I)=Y1(I)
- 705 NEXT
- 710 PRINT: INPUT "WANT TO CHANGE VALUE (Y/N)";Q$: IF Q$<>"Y" THEN 770
- 720 PRINT X$ " VALUE =";: INPUT XC: IC=(XC-LP)/SP
- 730 IF IC<>INT(IC) THEN PRINT "VALUE ERROR": GOTO 720
- 740 PRINT X$ " = " X(IC) " ";:IF Q=2 THEN PRINT Y1$ ", " Y2$ " ("Y1(IC) " , " Y2(IC)")";:INPUT Y1(IC),Y2(IC): GOTO 710
- 750 PRINT Y1$ " ("Y1(IC)")";: INPUT Y1(IC): Y2(IC)=Y1(IC): GOTO 710
- 760 REM *************** FILE SAVE *************************
- 770 PRINT: INPUT "WANT TO SAVE FILE (Y/N)"; Q$
- 780 IF Q$<>"Y" THEN 830
- 790 PRINT: INPUT "FILE NAME"; F$: N$=F$: F$=F$+".PLT"
- 800 OPEN "O",#1,F$
- 810 PRINT#1,NP;LP;SP;Q;G$;",";X$;",";Y$;",";Y1$;",";Y2$
- 820 FOR I=0 TO NP: PRINT#1,X(I);Y1(I);Y2(I): NEXT: CLOSE#1
- 825 REM ********************* TABULATE ***********************
- 830 IF DV=0 THEN PRINT:PRINT G$
- 832 IF DV=2 THEN LPRINT:LPRINT G$
- 840 IF DV=0 THEN PRINT: IF Q=1 THEN PRINT X$ TAB(16) Y1$ ELSE PRINT X$ TAB(16) Y1$ TAB(32) Y2$
- 842 IF DV=2 THEN LPRINT: IF Q=1 THEN LPRINT X$ TAB(16) Y1$ ELSE LPRINT X$ TAB(16) Y1$ TAB(32) Y2$
- 850 CN=0: FOR I=0 TO NP: IF DV=2 GOTO 862
- 860 IF Q=1 THEN PRINT X(I) TAB(16) Y1(I) ELSE PRINT X(I) TAB(16) Y1(I) TAB(32) Y2(I)
- 861 GOTO 870
- 862 IF Q=1 THEN LPRINT X(I) TAB(16) Y1(I) ELSE LPRINT X(I) TAB(16) Y1(I) TAB(32) Y2(I)
- 870 IF DV=0 AND CN<>0 AND CN/12=INT(CN/12) THEN INPUT"PRESS <CR> TO CONTINUE"; A$
- 880 CN=CN+1: NEXT
- 890 IF DV=2 THEN DV=0: GOTO 940
- 900 PRINT: INPUT "WANT TO CHANGE VALUE (Y/N)"; Q$: IF Q$="Y" THEN 720
- 910 PRINT: INPUT "WANT HARDCOPY (Y/N)"; H$
- 920 IF H$="END" THEN END
- 930 IF H$="Y" THEN DV=2: GOTO 830
- 940 PRINT: INPUT "WANT TO PLOT (Y/N/END)"; P$: IF P$="END" THEN END
- 950 IF P$<>"Y" THEN 430
- 960 REM **************** PLOT ROUTEENS *****************
- 970 PRINT: INPUT "# OF SPACES BETWEEN POINTS"; SS: SI=SS
- 980 PRINT: PRINT G$
- 990 IF Q=2 THEN PRINT "+ - " Y1$ " * - " Y2$
- 1000 PRINT: LF=LL-18: SN=0: SH=0: BN=0: BH=0: FOR I=0 TO NP
- 1010 IF Y1(I)>BH THEN BH=Y1(I)
- 1020 IF Y1(I)<BN THEN BN=Y1(I)
- 1030 IF Y2(I)>SH THEN SH=Y2(I)
- 1040 IF Y2(I)<SN THEN SN=Y2(I)
- 1042 NEXT
- 1050 IF BN<SN THEN SN=BN
- 1060 IF BH>SH THEN SH=BH
- 1070 SF=SH-SN: ZV=INT(-LF*SN/SF+11)
- 1080 PRINT X$ TAB(LF/2+7) Y$
- 1090 I1=INT(LF/2): I2=INT(LF*SH/(2*SF)): I3=INT(-LF*SN/(2*SF)): IQ=INT(LF/4): IH=INT(3*LF/4)
- 1100 IF SH=0 THEN PRINT TAB(11) SN TAB(IQ+11) 3*SN/4 TAB(I1+11) SN/2 TAB(IH+11) SN/4 TAB(LF+11) SH: GOTO 1150
- 1110 IF SN=0 THEN PRINT TAB(11) SN TAB(IQ+11) SH/4 TAB(I1+11) SH/2 TAB(IH+11) 3*SH/4 TAB(LF+11) SH: GOTO 1150
- 1120 IF ZV<(LF/4+11) THEN PRINT TAB(11) SN TAB(ZV) "0" TAB(ZV+I2) SH/2 TAB(LF+11) SH: GOTO 1150
- 1130 IF ZV>(3*LF/4+11) THEN PRINT TAB(11) SN TAB(I3+11) SN/2 TAB(ZV) "0" TAB(LF+11) SH: GOTO 1150
- 1140 PRINT TAB(11) SN TAB(I3+11) SN/2 TAB(ZV) "0" TAB(ZV+I2) SH/2 TAB(LF+11) SH: GOTO 1150
- 1150 PRINT STRING$(10,45) "+";
- 1160 IF SN=0 OR SH=0 THEN PRINT STRING$(IQ-1,45) "+" STRING$(I1-IQ-1,45) "+" STRING$(IH-I1-1,45) "+" STRING$(LF-IH-1,45) "+": GOTO 1200
- 1170 IF ZV<(LF/4+11) THEN PRINT STRING$(ZV-12,45) "+" STRING$(I2-1,45) "+" STRING$(LF-ZV-I2+10,45) "+": GOTO 1200
- 1180 IF ZV>(3*LF/4+11) THEN PRINT STRING$(I3-1,45) "+" STRING$(ZV-I3-12,45) "+" STRING$(LF-ZV+10,45) "+": GOTO 1200
- 1190 PRINT STRING$(I3-1,45) "+" STRING$(ZV-I3-12,45) "+" STRING$(I2-1,45) "+" STRING$(LF-ZV-I2+10,45) "+"
- 1200 CN=0: FOR I=0 TO NP:VN=INT(LF*(Y2(I)-SN)/SF+11)
- 1210 TN=INT(LF*(Y1(I)-SN)/SF+11): PRINT X(I);
- 1220 IF VN>11 AND TN>11 THEN PRINT TAB(11)"|";
- 1230 IF TN<VN THEN 1310
- 1240 IF TN=VN THEN 1370
- 1250 IF VN>ZV AND ZV>11 THEN PRINT TAB(ZV)"."TAB(VN)"*"TAB(TN)"+": GOTO 1410
- 1260 IF VN>ZV THEN PRINT TAB(VN)"*"TAB(TN)"+": GOTO 1410
- 1270 IF VN=ZV THEN PRINT TAB(VN)"*"TAB(TN)"+": GOTO 1410
- 1280 IF VN<ZV AND TN>ZV THEN PRINT TAB(VN)"*"TAB(ZV)"."TAB(TN)"+": GOTO 1410
- 1290 IF VN<ZV AND TN=ZV THEN PRINT TAB(VN)"*"TAB(TN)"+":GOTO 1410
- 1300 PRINT TAB(VN)"*"TAB(TN)"+"TAB(ZV)".": GOTO 1410
- 1310 IF TN>ZV AND ZV>11 THEN PRINT TAB(ZV)"."TAB(TN)"+"TAB(VN)"*": GOTO 1410
- 1320 IF TN>ZV THEN PRINT TAB(TN)"+"TAB(VN)"*": GOTO 1410
- 1330 IF TN=ZV THEN PRINT TAB(TN)"+"TAB(VN)"*": GOTO 1410
- 1340 IF TN<ZV AND VN>ZV THEN PRINT TAB(TN)"+"TAB(ZV)"."TAB(VN)"*": GOTO 1410
- 1350 IF TN<ZV AND VN=ZV THEN PRINT TAB(TN)"+"TAB(VN)"*":GOTO 1410
- 1360 PRINT TAB(TN)"+"TAB(VN)"*"TAB(ZV)".": GOTO 1410
- 1370 IF VN>ZV AND ZV>11 THEN PRINT TAB(ZV)"."TAB(VN)"*": GOTO 1410
- 1380 IF VN>ZV THEN PRINT TAB(VN)"*": GOTO 1410
- 1390 IF VN=ZV THEN PRINT TAB(VN)"*": GOTO 1410
- 1400 IF VN<ZV THEN PRINT TAB(VN)"*"TAB(ZV)"."
- 1410 IF DV=0 AND CN<>0 AND CN/12=INT(CN/12) THEN INPUT"PRESS <CR> TO CONTINUE"; A$
- 1420 CN=CN+1: IF SI=0 THEN SI=SS ELSE SI=SI-1: PRINT TAB(11)"|" TAB(ZV)".": GOTO 1410
- 1430 NEXT I: IF DV=0 THEN PRINT: INPUT "WANT HARD COPY (Y/N)"; Q$: IF Q$="Y" THEN DV=2: LL=PW: GOSUB 1600
- 1440 PRINT: INPUT "WANT ANOTHER PLOT (Y/N/END)"; P$
- 1450 IF P$="END" THEN END ELSE IF P$<>"Y" THEN PRECISION 3: GOTO 430
- 1460 DV=0: LL=XX
- 1470 PRINT: INPUT "DO YOU WISH TO CHANGE PRINTER WIDTH OPTION (Y/N)"; Q$
- 1480 IF Q$<>"Y" THEN 970 ELSE INPUT "NARROW (80) OR WIDE (124) (N/W)"; Q$
- 1490 IF Q$="N" THEN PW=80 ELSE IF Q$="W" THEN PW=120 ELSE PRINT: GOTO 1470
- 1500 LPRINT CHR$(15): WIDTH LPRINT PW: GOTO 970
- 1600 REM **************** HARD COPY PLOT ROUTEENS *************
- 1620 LPRINT: LPRINT G$
- 1630 IF Q=2 THEN LPRINT "+ - " Y1$ " * - " Y2$
- 1640 LPRINT: LF=LL-18: SN=0: SH=0: BN=0: BH=0: FOR I=0 TO NP
- 1650 IF Y1(I)>BH THEN BH=Y1(I)
- 1660 IF Y1(I)<BN THEN BN=Y1(I)
- 1670 IF Y2(I)>SH THEN SH=Y2(I)
- 1680 IF Y2(I)<SN THEN SN=Y2(I)
- 1682 NEXT
- 1690 IF BN<SN THEN SN=BN
- 1700 IF BH>SH THEN SH=BH
- 1710 SF=SH-SN: ZV=INT(-LF*SN/SF+11)
- 1720 LPRINT X$ TAB(LF/2+7) Y$
- 1730 I1=INT(LF/2): I2=INT(LF*SH/(2*SF)): I3=INT(-LF*SN/(2*SF)): IQ=INT(LF/4): IH=INT(3*LF/4)
- 1740 IF SH=0 THEN LPRINT TAB(11) SN TAB(IQ+11) 3*SN/4 TAB(I1+11) SN/2 TAB(IH+11) SN/4 TAB(LF+11) SH: GOTO 1790
- 1750 IF SN=0 THEN LPRINT TAB(11) SN TAB(IQ+11) SH/4 TAB(I1+11) SH/2 TAB(IH+11) 3*SH/4 TAB(LF+11) SH: GOTO 1790
- 1760 IF ZV<(LF/4+11) THEN LPRINT TAB(11) SN TAB(ZV) "0" TAB(ZV+I2) SH/2 TAB(LF+11) SH: GOTO 1790
- 1770 IF ZV>(3*LF/4+11) THEN LPRINT TAB(11) SN TAB(I3+11) SN/2 TAB(ZV) "0" TAB(LF+11) SH: GOTO 1790
- 1780 LPRINT TAB(11) SN TAB(I3+11) SN/2 TAB(ZV) "0" TAB(ZV+I2) SH/2 TAB(LF+11) SH: GOTO 1790
- 1790 LPRINT STRING$(10,45) "+";
- 1800 IF SN=0 OR SH=0 THEN LPRINT STRING$(IQ-1,45) "+" STRING$(I1-IQ-1,45) "+" STRING$(IH-I1-1,45) "+" STRING$(LF-IH-1,45) "+": GOTO 1840
- 1810 IF ZV<(LF/4+11) THEN LPRINT STRING$(ZV-12,45) "+" STRING$(I2-1,45) "+" STRING$(LF-ZV-I2+10,45) "+": GOTO 1840
- 1820 IF ZV>(3*LF/4+11) THEN LPRINT STRING$(I3-1,45) "+" STRING$(ZV-I3-12,45) "+" STRING$(LF-ZV+10,45) "+": GOTO 1840
- 1830 LPRINT STRING$(I3-1,45) "+" STRING$(ZV-I3-12,45) "+" STRING$(I2-1,45) "+" STRING$(LF-ZV-I2+10,45) "+"
- 1840 CN=0: FOR I=0 TO NP:VN=INT(LF*(Y2(I)-SN)/SF+11)
- 1850 TN=INT(LF*(Y1(I)-SN)/SF+11): LPRINT X(I);
- 1860 IF VN>11 AND TN>11 THEN LPRINT TAB(11)"|";
- 1870 IF TN<VN THEN 1950
- 1880 IF TN=VN THEN 2010
- 1890 IF VN>ZV AND ZV>11 THEN LPRINT TAB(ZV)"."TAB(VN)"*"TAB(TN)"+": GOTO 2050
- 1900 IF VN>ZV THEN LPRINT TAB(VN)"*"TAB(TN)"+": GOTO 2050
- 1910 IF VN=ZV THEN LPRINT TAB(VN)"*"TAB(TN)"+": GOTO 2050
- 1920 IF VN<ZV AND TN>ZV THEN LPRINT TAB(VN)"*"TAB(ZV)"."TAB(TN)"+": GOTO 2050
- 1930 IF VN<ZV AND TN=ZV THEN LPRINT TAB(VN)"*"TAB(TN)"+":GOTO 2050
- 1940 LPRINT TAB(VN)"*"TAB(TN)"+"TAB(ZV)".": GOTO 2050
- 1950 IF TN>ZV AND ZV>11 THEN LPRINT TAB(ZV)"."TAB(TN)"+"TAB(VN)"*": GOTO 2050
- 1960 IF TN>ZV THEN LPRINT TAB(TN)"+"TAB(VN)"*": GOTO 2050
- 1970 IF TN=ZV THEN LPRINT TAB(TN)"+"TAB(VN)"*": GOTO 2050
- 1980 IF TN<ZV AND VN>ZV THEN LPRINT TAB(TN)"+"TAB(ZV)"."TAB(VN)"*": GOTO 2050
- 1990 IF TN<ZV AND VN=ZV THEN LPRINT TAB(TN)"+"TAB(VN)"*":GOTO 2050
- 2000 LPRINT TAB(TN)"+"TAB(VN)"*"TAB(ZV)".": GOTO 2050
- 2010 IF VN>ZV AND ZV>11 THEN LPRINT TAB(ZV)"."TAB(VN)"*": GOTO 2050
- 2020 IF VN>ZV THEN LPRINT TAB(VN)"*": GOTO 2050
- 2030 IF VN=ZV THEN LPRINT TAB(VN)"*": GOTO 2050
- 2040 IF VN<ZV THEN LPRINT TAB(VN)"*"TAB(ZV)"."
- 2050 IF SI=0 THEN SI=SS ELSE SI=SI-1: LPRINT TAB(11)"|" TAB(ZV)".": GOTO 2050
- 2060 NEXT I: RETURN
-