1 SUB PLOTER & ! 500.25 - STAT11 - PLOTER & ! & ! PLOT MODULE & ! & ! RELEASED FOR SUBMISSION TO THE DECUS LIBRARY BY THE DEC & ! ENGINEERING SYSTEMS GROUP AND THE EDUCATION PRODUCTS GROUP & ! SEPTEMBER, 1977 & ! & 2 ! COPYRIGHT (C) 1973, DIGITAL EQUIPMENT CORPORATION, & ! & ! MAYNARD, MASSACHUSETTS & 3 ! THIS SOFTWARE IS FURNISHED TO PURCHASER UNDER A LICENSE FOR USE & ! ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED (WITH INCLUSION OF & ! DEC'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH SYSTEM, EXCEPT AS & ! MAY OTHERWISE BE PROVIDED IN WRITING BY DEC. & 4 ! THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT & ! NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL & ! EQUIPMENT CORPORATION. & 5 ! DEC ASSUMES NO RESPONSIBILITY FOR USE OR RELIABILITY OF ITS & ! SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. & ! & ! & 6 ! THIS MODULE PRINTS A GRAPH OF UP TO 3 DEPENDENT VARIABLES VERSUS ONE & ! INDEPENDENT VARIABLE. & ! & ! 7 ! AUTHOR: MICHAEL D. KNAUER & ! & ! VERSION NUMBER: 001 & ! & ! DATE: OCTOBER, 1973 & ! & ! & 8 ! MODIFICATIONS: MAY, 1975 & ! & ! MODIFIED TO ACCEPT MISSING DATA & ! & ! BY ARDOTH HASSLER WILSON & ! CENTRAL STATE UNIVERSITY & ! EDMOND, OKLAHOMA & ! & 00009! MODIFICATIONS: JUNE, 1976 & ! & ! CTRL/C TRAP ADDED & 10 ! & ! CALLING ARGUMENTS & ! & ! 12 ! 1) VARIABLE NAME: F1$ & ! RANGE OF VALUES: S00000.PLT - S99999.PLT 13 ! USE: NAME OF FILE CONTAINING DATA POINTS & ! TO BE PLOTTED. COLUMN 0 CONTAINS & ! THE INDEPENDENT VARIABLE, COLUMNS & ! 1 - 3 CONTAIN THE DEPENDENT VARIABLE(S). & 14 ! 2) VARIABLE NAME: R% & ! RANGE OF VALUES: 1 - 250 & ! USE: CONTAINS NUMBER OF ROWS IN FILE F1$ & 15 ! 3) VARIABLE NAME: P% & ! RANGE OF VALUES: 1 - 3 & ! USE: CONTAINS THE NUMBER OF DEPENDENT & ! VARIABLES IN FILE F1$ & 16 ! 4) VARIABLE NAME: R1$ & ! RANGE OF VALUES: LINE0P,REGRES & ! USE: NAME OF MODULE TO WHICH CONTROL & ! IS RETURNED & 17 ! 5) VARIABLE NAME: R1% & ! RANGE OF VALUES: 1000,1990 & ! USE: LINE NUMBER TO WHICH CONTROL IS & ! RETURNED IN THE CALLING MODULE & 20 ! & ! & ! RETURNING ARGUMENTS & ! & ! NONE -- THIS MODULE DOES NOT CHANGE OR ADD TO ANY OF THE & ! FILES OR VARIABLES PASSED TO IT. & ! & ! & 30 ! DESCRIPTION OF FUNCTION & ! & ! THIS MODULE TAKES DATA POINTS PASSED TO IT AND PRINTS A & ! GRAPH FROM THEM. & 31 ! BEFORE PRINTING, IT SORTS THE INDEPENDENT VARIABLE DATA & ! POINTS, KEEPING CORRESPONDING DEPENDENT VARIABLE DATA POINTS & ! MATCHING. & 32! IT EITHER COMPUTES PLOT DIMENSIONS ITSELF USING THE DATA & ! POINTS OR LETS THE USER SPECIFY THE GRAPH SIZE AND DIMENSIONS. & 33 ! THEN IT PRINTS THE GRAPH, WITH THE INDEPENDENT VARIABLE & ! DOWN THE VERTICAL AXIS AND THE DEPENDENT VARIABLE(S) & ! ACROSS THE HORIZONTAL AXIS. & 34 ! FINALLY, PLOTER SURRENDERS CONTROL TO EITHER LINE0P OR & ! REGRES, WHICHEVER MODULE CALLED IT. & 40 ! & ! & ! & ! & ! & ! & ! & ! & 90 ! & ! Modifications: August,1981 & ! & ! COMMON (STAT) MODULE$ = 6%, LINE%, SAV.F$ = 127% & ! added to replace core common and also to let STTMGR know & ! who to chain to (MODULE$). Once in MODULE$, LINE% indicates & ! line to begin execution. & ! & \ COMMON (STAT) MODULE$ = 6%, LINE%, SAV.F$ = 127% & 99 ! & ! & ! HERE THE CALLING ARGUMENTS ARE RETRIEVED FROM COMMON AND THE VIRTUAL & ! MATRIX FILE CONTAINING THE DATA POINTS TO BE PLOTTED IS OPENED. & ! & ! & 100 DIM C$(3%),Q(3%),D$(60%) & \ ON ERROR GOTO 1500 & \ GOSUB 10000 110 !F$=SYS(CHR$(7)) & \ F$ =SAV.F$ 120 F1$=LEFT(F$,15%) 130 R1$=MID(F$,16%,15%) 140 R1% = CVT$%(MID(F$,31%,2%)) & \ R% = CVT$%(MID(F$,33%,2%)) & \ P% = CVT$%(MID(F$,35%,2%)) 170 C$(1%)=MID(F$,37%,1%) 180 C$(2%)=MID(F$,38%,1%) 190 C$(3%)=MID(F$,39%,1%) 195 H9=.9E-38 200 OPEN F1$ FOR INPUT AS FILE 1, VIRTUAL 210 DIM #1,A(250%,3%) 298 ! & ! & ! & ! THE INDEPENDENT VARIABLE DATA POINTS ARE SORTED IN ASCENDING ORDER, & ! AND THE CORRESPONDING DEPENDENT VARIABLE POINTS ARE KEPT MATCHING. & 299 ! I.E., IF A(2,0) AND A(3,0) ARE INTERCHANGED, THEN A(2,1), A(2,2), AND & ! A(2,3) ARE INTERCHANGED WITH A(3,1), A(3,2), AND A(3,3). & ! & ! & 300 Y1=A(1%,1%) 310 Y9=A(1%,1%) 315 N9%=R% 320 T9%=N9%-1% 330 FOR K%=1% TO N9% 340 S9%=0% 350 FOR J%=1% TO T9% 360 IF A(J%,0%)<=A(J%+1%,0%) GOTO 500 380 Q(I%)=A(J%,I%) FOR I%=0% TO P% 400 A(J%,I%)=A(J%+1%,I%) FOR I%=0% TO P% 420 A(J%+1%,I%)=Q(I%) FOR I%=0% TO P% 430 S9%=1% 500 NEXT J% 510 IF S9%=0% GOTO 540 520 T9%=T9%-1% 530 NEXT K% 539 ! & ! & ! & ! IN THIS SECTION, THE MAXIMUM AND MINIMUM VALUES FOR THE INDEPENDENT & ! VARIABLE ARE SET, AND THE DEPENDENT VARIABLE(S) ARE SCANNED FOR & ! A MAXIMUM AND MINIMUM VALUE. & ! & ! & 540 X1=A(1%,0%) & \ X9=A(N9%,0%) 550 FOR J%=1% TO N9% 560 FOR J1% = 1% TO P% 565 IF A(J%,J1%)=H9 GOTO 620 570 IF A(J%,J1%)<=Y9 GOTO 600 580 Y9=A(J%,J1%) 590 GOTO 620 600 IF A(J%,J1%)>=Y1 GOTO 620 610 Y1=A(J%,J1%) 620 NEXT J1% 630 NEXT J% 699 ! & ! & ! & ! HERE THE USER IS ASKED IF HE WANTS TO SPECIFY PLOT DIMENSIONS. IF & ! HE DOES, THEN THE ACTUAL DATA RANGES ARE PRINTED OUT FOR HIS PERUSAL. & ! & ! & 700 INPUT "DO YOU WISH TO SPECIFY PLOT DIMENSIONS ";W$ 705 PRINT 710 IF LEFT(W$,1%)="Y" GOTO 750 715 IF LEFT(W$,1%)="N" OR W$="" GOTO 900 720 PRINT "YOU MUST ANSWER EITHER YES OR NO" 725 GOTO 700 730 ! PRINT MAX MIN ASK FOR DIMENSIONS 750 PRINT "DATA RANGES :" 760 PRINT USING " VERT(X) (###.####^^^^ ,###.####^^^^)",X1,X9 770 PRINT USING " HORZ(Y) (###.####^^^^ ,###.####^^^^)",Y1,Y9 775 PRINT 777 ! & ! & ! & ! HERE THE USER IS ASKED TO ENTER THE DIMENSION INFORMATION FOR THE & ! PLOT. NOTE THAT IF HE SPECIFIES MORE THAN 100 LINES TO BE PRINTED, & ! HE IS ASKED IF HE REALLY MEANS IT. 778 ! NOTE ALSO THAT THE INFORMATION HE ENTERS HERE REPLACES THE MAXIMA & ! AND MINIMA COMPUTED IN LINES 540 - 630. & ! & ! & 780 ON ERROR GOTO 1500 785 PRINT "ENTER VERTICAL DIMENSIONS" 790 PRINT "(FORM MINIMUM,MAXIMUM,NUMBER OF VERTICAL LINES)" 791 INPUT X1,X9,L% 792 IF L%<=100% GOTO 798 793 PRINT "DO YOU REALLY WANT TO PLOT";L%;" VERTICAL LINES"; 794 INPUT W$ & \ IF LEFT(W$,1%)="Y" GOTO 798 795 IF LEFT(W$,1%)="N" OR W$="" GOTO 785 796 PRINT "PLEASE ANSWER YES OR NO" 797 GOTO 793 798 PRINT "THE NUMBER OF HORIZONTAL SPACES THAT YOU SPECIFY" 800 PRINT "MUST BE <= 60" 805 PRINT "ENTER HORIZONTAL DIMENSIONS" 806 PRINT "(FORM : MINIMUM,MAXIMUM,NUMBER OF HORIZONTAL SPACES)" 807 INPUT Y1,Y9,S% 808 IF S%<=60% AND S%>=1% GOTO 815 809 PRINT "YOU MUST SPECIFY FROM 1 TO 60 HORIZONTAL SPACES" 810 PRINT "PLEASE TRY AGAIN" 812 GOTO 805 815 L=L% & \ S=S% 820 PRINT 830 GOTO 1000 899 ! & ! & ! & ! THE DEFAULTS FOR THE NUMBER OF HORIZONTAL SPACES AND THE NUMBER OF & ! VERTICAL LINES ARE SET HERE WHEN THE USER LETS PLOTER COMPUTE THE & ! PLOT DIMENSIONS. & ! & ! 900 L%=39% & \ L=L% 910 S%=60% & \ S=S% 999 ! & ! & ! & ! HERE THE HORIZONTAL AND VERTICAL INTERVALS ARE COMPUTED. IF EITHER & ! OF THE RANGES IS A CONSTANT, THEN THE WHOLE PLOT ROUTINE IS ABORTED. & ! & ! & 1000 I9=(X9-X1)/L 1010 B9=(Y9-Y1)/S 1014 IF I9<>0 AND B9<>0 GOTO 1030 1018 IF I9=0 THEN PRINT "*** VERTICAL (X) VARIABLE IS A CONSTANT ***" 1022 IF B9=0 THEN PRINT "*** HORIZONTAL (Y) VARIABLE IS A CONSTANT ***" 1026 PRINT 1028 GOTO 1400 1029 ! & ! & ! & ! HERE THE USER IS INFORMED THAT THE PLOT IS ABOUT TO BEGIN. HE HAS & ! ABOUT 17 SECONDS TO ADJUST HIS PAPER FOR THE PLOT. & ! & ! & 1030 PRINT "IF DESIRED, ADJUST PAPER NOW" 1050 PRINT "CAUTION : DO NOT USE CARRIAGE RETURN" 1055 PRINT "TO ADJUST PAPER FOR PLOT" 1060 SLEEP(17) 1069 ! & ! & ! & ! THIS SECTION PRINTS THE GRAPH; FOR EVERY PRINTLINE CORRESPONDING TO A & ! DATA POINT FOR THE INDEPENDENT VARIABLE, THE POSITIONS FOR THE & ! DEPENDENT VARIABLE(S) ARE FILLED IN WITH THE PLOT CHARACTERS AND THE & ! LINE IS PRINTED. & ! & ! & 1070 PRINT "Y-AXIS----->" 1080 PRINT "+...."; FOR I% = 1% TO 12% 1090 PRINT 1095 N%=1% & \ Z=X1 1100 IF A(N%,0%)>=Z GOTO 1120 1110 N%=N%+1% & \ GOTO 1100 1120 FOR K% = 1% TO L% 1125 IF K%=L% THEN Z=X9 1130 Z=Z+I9 1140 IF K%-((K%/5%)*5%)=0% THEN PRINT "+"; ELSE PRINT "."; 1150 D$(I%)=" " FOR I% = 0% TO 60% 1160 IF N%>N9% GOTO 1260 1165 IF A(N%,0%)>Z GOTO 1260 1170 FOR J% = 1% TO P% 1175 IF A(N%,J%)=H9 GOTO 1230 1180 Z2=Y1 1190 IF A(N%,J%)Y9 THEN GOTO 1230 1210 X5%=(A(N%,J%)-Y1)/B9 1215 IF X5%<=60% THEN 1220 1216 PRINT X5%,'****' 1220 D$(X5%)=C$(J%) 1230 NEXT J% 1240 N%=N%+1% 1250 GOTO 1160 1260 PRINT D$(I%); FOR I% = 0% TO 60% 1270 PRINT 1275 IF N%>N9% GOTO 1300 1280 NEXT K% 1300 PRINT "+...."; FOR I% = 1% TO 12% 1310 PRINT & \ PRINT 1320 PRINT USING "VERT(#.####^^^^ ,#.####^^^^) -TOP TO BTM",X1,X9 1330 PRINT USING "HORZ(#.####^^^^ ,#.####^^^^) -LFT TO RT",Y1,Y9 1335 PRINT 1340 PRINT "INCREMENTS : " 1350 PRINT USING " VERT(PER LINE) = #.####^^^^",I9 1360 PRINT USING " HORZ(PER SPACE) = #.####^^^^",B9 1399 ! & ! & ! & ! HERE CONTROL IS RETURNED TO THE CALLING PROGRAM, EITHER LINE0P OR REGRES & ! & ! 1400 F$=MID(F$,40%,70%) 1402 CLOSE 1 1405 PRINT 1407 KILL EDIT$(F1$,-1%) + ";0" 1410 !R$=SYS(CHR$(8)+F$) & \ SAV.F$ = F$ 1420 !CHAIN R1$ LINE R1% & \ MODULE$= R1$ & \ LINE% = R1% & \ SUBEXIT & 1430 GOTO 32750 1499 ! & ! & ! & ! THIS IS AN ERROR ROUTINE FOR THE USER-INPUT DIMENSIONS ROUTINE. & ! & ! & 1500 IF ERR=28% THEN GOSUB 10000 & !\ RESUME 1400 & \ MODULE$ = "FINISH" & \ GOTO 32750 1501 PRINT "YOU TYPED NON-NUMERIC AND/OR" 1502 PRINT"INAPPROPRIATE VALUES FOR THE DIMENSIONS" 1510 PRINT "PLEASE TYPE ONLY NUMBERS WHEN NUMBERS ARE REQUESTED" 1515 RESUME 785 10000 V0%=CTRLC ! SYS(CHR$(6%)+CHR$(-7%)) & \ RETURN ! CTRL/C TRAP 32750 SUBEND