1 ! 500.12 - STAT11 - DATAIN DATA ENTRY 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 READS IN THE USER'S DATA FROM EITHER A VIRTUAL MATRIX FILE OR THE KEYBOARD AND THEN STORES THE DATA IN A WORKING STORAGE VIRTUAL MATRIX. 7 ! AUTHOR: MICHAEL D. KNAUER VERSION NUMBER: 001 DATE: OCTOBER, 1973 8 ! MODIFICATIONS: MAY, 1975 MODIFIED TO ACCEPT MISSING DATA POINTS BY ARDOTH HASSLER WILSON CENTRAL STATE UNIVERSITY EDMOND, OKLAHOMA 00009! MODIFICATIONS: JUNE, 1976 CTRL/C TRAP ADDED 10 ! CALLING ARGUMENTS 1) VARIABLE NAME: F1$ RANGE OF VALUES: ANY VALID BASIC-PLUS FILE NAME USE: NAME OF USER'S INPUT DATA FILE 11 ! 2) VARIABLE NAME: F2$ RANGE OF VALUES: ANY VALID BASIC-PLUS FILE NAME USE: NAME FOR OUTPUT FILE TO SAVE DATA 12 ! 3) VARIABLE NAME: F3$ RANGE OF VALUES: S00000.RWM - S99999.RWM USE: NAME OF FILE WHERE 250 ROW BY 15 COLUMN DATA MATRIX WILL BE STORED 13 ! 4) VARIABLE NAME: R% RANGE OF VALUES: 1 - 250 USE: NUMBER OF ROWS IN DATA MATRIX 14 ! 5) VARIABLE NAME: C% RANGE OF VALUES: 1 - 15 USE: NUMBER OF COLUMNS IN DATA MATRIX 15 ! RETURNING ARGUMENTS THE RETURNING ARGUMENTS ARE THE SAME AS THE CALLING ARGUMENTS -- ALL ARE PASSED VIA COMMON STORAGE TO THE NEXT MODULE. 20 ! DESCRIPTION OF FUNCTION THIS MODULE READS IN THE USER'S DATA FROM EITHER A VIRTUAL MATRIX FILE OR THE KEYBOARD AND THEN STORES THE DATA IN A WORKING STORAGE VIRTUAL MATRIX FILE. 21 ! AFTER OBTAINING INPUT AND OUTPUT FILE NAMES FROM THE USER, THIS MODULE GETS THE ROW AND COLUMN NUMBER INFORMATION EITHER DIRECTLY FROM THE INPUT FILE MATRIX (IN THE CASE OF STAT11- CREATED FILES), OR FROM USER. 22 ! DATAIN THEN READS THE DATA, EITHER FROM A VIRTUAL MATRIX FILE OR FROM THE KEYBOARD AND STORES IT IN THE WORKING STORAGE FILE, F3$. 23 ! THE USER IS GIVEN THE OPTION OF HAVING ALL, PART, OR NONE OF THE DATA PRINTED. 24 ! AFTER THE PRINT ROUTINE, CONTROL IS PASSED TO ESCRWM FOR COMPUTATION OF THE ELEMENTARY STATISTICS FOR THE NEWLY READ DATA. 26 ! THESE STATEMENTS ASK THE USER TO ENTER HIS FILE NAMES AND IF HE ENTERS AN ASTERISK, IT IS CHANGED TO "KB:" TO INDICATE A KEYBOARD--INPUT OR OUTPUT FILE. 27 ! THESE STATEMENTS ALSO RETRIEVE THE TEMPORARY WORK FILE NAME FROM COMMON, PAD THE USER'S SPECIFIED FILE NAMES WITH SPACES, AND OPEN AND CLOSE NON-KEYBOARD INPUT FILES TO BE SURE THAT THEY EXIST. 28 ON ERROR GOTO 9000: GOSUB 10000: DIM C(15%): F$=SYS(CHR$(7%)) : PRINT "PLEASE ENTER NAMES OF INPUT AND OUTPUT FILES";: PRINT " (FORM: IN,OUT)" 29 GOSUB 4500: INPUT "(* FOR TERMINAL) "; F1$,F2$: PRINT: IF F1$="*" THEN F1$="KB:" 30 IF F2$="*" THEN F2$="KB:" 31 F3$=MID(F$,31%,15%): F2$=LEFT(F2$+SPACE$(15%),15%): F1$=LEFT(F1$+SPACE$(15%),15%): A$=MID(F$,56%,20%) 32 IF F2$<>"KB:" THEN OPEN F2$ AS FILE 3: CLOSE 3 33 GOTO 60 35 ON ERROR GOTO 9000: GOSUB 10000: F$=SYS(CHR$(7%)) ! THIS IS WHERE CONTROL IS RECEIVED FROM THE STAT11 MODULE SINCE IT ALREADY HAS ASKED FOR THE INPUT AND OUTPUT FILES. 40 F1$=LEFT(F$,15%) 45 F2$=MID(F$,16%,15%) 50 F3$=MID(F$,31%,15%) 55 A$=MID(F$,56%,20%) 57 GOSUB 4500 59 ! THIS SECTION OPENS THE USER'S SPECIFIED INPUT FILE (F1$) AND THE VIRTUAL MATRIX STORAGE FILE (F3$) PRIOR TO TRANSFERRING DATA FROM F1$ TO F3$. 60 ! 70 OPEN F1$ FOR INPUT AS FILE 1 75 ! 80 OPEN F3$ AS FILE 2 81 DIM #2,B(250%,15%): S1%=0% 85 ! IF THE KEYBOARD IS TO BE THE INPUT FILE, CONTROL IS DIRECTED TO THE KEYBOARD INPUT ROUTINE. 86 ! FOR VIRTUAL MATRIX FILE INPUT, THE FILE IS CHECKED TO SEE IF ROW AND COLUMN INFORMATION IS STORED IN THE 0TH AND 1ST ROWS OF THE UNUSED 15TH COLUMN (ONLY COLUMNS 0 - 14 ARE USED TO STORE DATA. 87 ! THE ROW/COLUMN INFORMATION IS STORED THERE BY EDIT MODULE OPTION #7. HENCE ONLY STAT11 - CREATED FILES WILL HAVE THIS INFORMATION. 88 ! IF THE INFORMATION IS WITHIN EXPECTED BOUNDARIES (1 - 250 FOR ROWS, 1 - 15 FOR COLUMNS), IT IS ASSUMED TO BE CORRECT AND IS USED AS THE NUMBERS OF ROWS AND COLUMNS. 89 ! IF IT IS NOT WITHIN CORRECT LIMITS, THEN THE USER IS ASKED TO ENTER THE NUMBERS OF ROWS AND COLUMNS. 92 ! 93 IF F1$="KB: " GOTO 100 94 DIM #1,A(250%,15%) 95 ! 96 R=A(0%,0%): R%=R: C=A(1%,0%): C%=C 97 ! 98 IF R-R%<>0 OR C-C%<>0 OR R<1 OR R>250 OR C<1 OR C>15 GOTO 100 99 GOTO 200 ! THIS IS THE ROW AND COLUMN NUMBER INPUT ROUTINE, USED FOR BOTH KEYBOARD AND VIRTUAL MATRIX INPUT FILES. 100 PRINT "TYPE NUMBER OF ROWS AND COLUMNS OF DATA." 110 INPUT "(FORM: ROWS,COLUMNS)"; R%,C% 115 IF R%>0% AND R%<=250% AND C%>0% AND C%<=15% GOTO 125 117 PRINT "NUMBER OF ROWS MUST BE BETWEEN 1 AND 250" 119 PRINT "NUMBER OF COLUMNS MUST BE BETWEEN 1 AND 15" 121 PRINT "PLEASE TRY TYPING THEM AGAIN" 123 GOTO 110 125 PRINT 130 IF F1$<>"KB: " GOTO 200 139 ! THIS IS THE KEYBOARD INPUT ROUTINE, WHICH USES THE GOSUB 2000 FOR EACH ROW OF INPUT. 140 PRINT "IF YOU HAVE DATA MISSING, TYPE AN 'X' WHERE THE VALUE": PRINT "WOULD NORMALLY OCCUR": PRINT: PRINT "ENTER";R%," ROWS, ONE AT A TIME." 145 B(0%,K%)=0 FOR K%=1% TO C% 150 FOR J%=1% TO R% 155 PRINT "ROW";J%; 160 GOSUB 2000 180 NEXT J% 182 B(0%,0%)=R%: B(1%,0%)=C% 185 PRINT 190 GOTO 3000 199 ! HERE THE VIRTUAL MATRIX INPUT FILE IS READ INTO THE F3$ FILE. 200 H9=.9E-38 210 B(0%,K%)=0 FOR K%=1% TO C% 250 FOR J%=1% TO R% 260 FOR K%=1% TO C% 270 IF A(J%,K%)<>H9 THEN B(0%,K%)=B(0%,K%)+1 300 B(J%,K%)=A(J%,K%) 310 NEXT K% 320 NEXT J% 325 B(0%,0%)=R: B(1%,0%)=C 330 PRINT 340 PRINT F1$;" CONTAINS";R%;" ROWS AND";C%;" COLUMNS OF DATA" 345 PRINT 350 GOTO 3000 498 ! THIS SECTION MIGHT BE RE-ACTIVATED FOR VERSION #2. IT IS FOR SEQUENTIAL RECORD INPUT FILES. 499 ! NOTE 500-1010 ARE INACTIVE SINCE ONLY VIRTUAL ARRAYS ALLOWED: 500 FIELD #1,512% AS B$ 550 P%=1% : U%=0% 560 FOR J%=1% TO R% 570 FOR K%=1% TO C% 580 N$="" 590 IF P%<>1% GOTO 600 595 GET #1 600 IF ASCII(B$)=26 GOTO 1000 610 IF ASCII(B$)=32 GOTO 702 620 IF ASCII(B$)=13 GOTO 702 630 IF ASCII(B$)=10 GOTO 702 635 IF ASCII(B$)=44 GOTO 702 640 N$=N$+LEFT(B$,1%) 650 U%=1% 655 B$=RIGHT(B$,2%) 660 P%=P%+1% 670 IF P%<=512% GOTO 600 690 P%=1% 700 GOTO 590 702 IF U%=1% GOTO 710 704 B$=RIGHT(B$,2%) 706 P%=P%+1% 707 IF P%<=512% GOTO 600 708 P%=1% 709 GOTO 590 710 U%=0% 720 B(J%,K%)=VAL(N$) 725 B$=RIGHT(B$,2%) 730 P%=P%+1% 740 IF P%<=512% GOTO 760 750 P%=1% 760 NEXT K% 770 NEXT J% 775 PRINT 780 PRINT "LAST DATA ITEM READ FROM INPUT FILE ";F1$ 785 PRINT 790 GOTO 3000 1000 PRINT "END OF FILE ENCOUNTERED BEFORE ALL THE DATA WAS READ." 1010 GOTO 3100 1999 ! HERE IS WHERE THE USER'S KEYBOARD-ENTERED DATA IS ACCEPTED AND STORED, ROW BY ROW, IN THE F3$ FILE. 2000 Z%=1%: H9=.9E-38 2003 ON ERROR GOTO 2140 2005 INPUT LINE L$ 2020 L$=LEFT(L$,LEN(L$)-2)+"," 2030 FOR K%=1% TO C% 2040 Z%=INSTR(1%,L$,",") 2050 IF Z% = 0% GOTO 2090 2060 IF Z%=1% OR LEFT(L$,Z%-1%)="X" THEN B(J%,K%)=H9 ELSE B(J%,K%)=VAL(LEFT(L$,Z%-1%)): B(0%,K%)=B(0%,K%)+1 2070 L$=RIGHT(L$,Z%+1%) 2080 GOTO 2120 2090 INPUT LINE L$ 2100 L$=LEFT(L$,LEN(L$)-2)+"," 2110 GOTO 2040 2120 NEXT K% 2130 GOTO 2300 2140 IF ERR=28% THEN GOSUB 10000: R%,C%=0%: RESUME 3002 2142 IF LEFT(L$,Z%-1%)="" THEN B(J%,K%)=H9: RESUME 2070 2145 PRINT "YOU TYPED IN NON-NUMERICS FOR YOUR DATA" 2150 PRINT"PLEASE TYPE ONLY NUMBERS, SEPARATED BY COMMAS" 2160 PRINT "YOU MUST RE-TYPE THE ENTIRE ROW,"; C%; " VALUES" 2230 RESUME 2005 2300 ON ERROR GOTO 9000: RETURN 2990 ! HERE RETURNING ARGUMENTS ARE LOADED INTO COMMON AND CONTROL IS PASSED ONTO ESCRWM SO THAT THE ELEMENTARY STATISTICS FOR THE DATA MATRIX CAN BE COMPUTED. 2991 ! CONTROL IS NEVER PASSED TO STATCM (LINE 3100) SINCE THE ONLY REFERENCE TO THAT STATEMENT IS FROM THE ROUTINE FOR SEQUENTIAL FILE INPUT (LINES 500-1010) , WHICH IS NOT USED IN THIS VERSION OF STAT11. 3000 GOSUB 4000 3002 CLOSE 1,2 3005 F$="" 3010 R$="00000"+RIGHT(NUM$(R%),2%) 3020 C$="00000"+RIGHT(NUM$(C%),2%) 3030 F$=F$+MID(R$,LEN(R$)-5%,5%) 3040 F$=F$+MID(C$,LEN(C$)-5%,5%) 3050 F$=F1$+F2$+F3$+F$ 3060 F$=F$+A$ 3070 R$=SYS(CHR$(8)+F$) 3090 CHAIN "ESCRWM"+A9$ IF R%<>0% AND C%<>0% 3100 CHAIN "STATCM"+A9$ 3999 ! THIS ROUTINE PROVIDES PRINTING OF ALL OR PART OF THE USER'S DATA MATRIX. IT IS COMPLICATED BY THE FACT THAT THE TABLE MUST BE PRINTED IN TWO OR THREE PARTS IF THE MATRIX CONTAINS MORE THAN 6 COLUMNS OF DATA. 4000 ! 4010 INPUT "ENTER PRINT OPTION (0=NO PRINT,1=ENTIRE MATRIX,2=SUBMATRIX)";O% 4020 ON O%+1% GOTO 4400,4050,4080 4030 PRINT "PLEASE TRY AGAIN; TYPE ONLY 0,1, OR 2" 4040 GOTO 4000 4050 C1%=1% : C8%=1% : C2%=C% : C9%=C% 4060 R1%=1% : R2%=R% 4070 GOTO 4130 4080 ! 4085 S1%=1% 4090 INPUT "TYPE BEGINNING ROW, END ROW"; R1%,R2% 4093 IF R1%>=1% AND R2%>=1% AND R1%<=R% AND R2%<=R% GOTO 4110 4096 PRINT "YOUR ROW NUMBERS MUST BE BETWEEN 1 AND"; R% 4099 PRINT "PLEASE TRY AGAIN" 4101 GOTO 4090 4110 S1%=2% 4111 INPUT "TYPE BEGINNING COLUMN, END COLUMN";C1%,C2% 4112 IF C1%>=1% AND C2%>=1% AND C1%<=C% AND C2%<=C% AND C2%>=C1% GOTO 4120 4114 PRINT "YOUR COLUMN NUMBERS MUST BE BETWEEN 1 AND"; C% 4116 PRINT "PLEASE TRY AGAIN" 4118 GOTO 4110 4120 C8%=C1% : C9%=C2% : PRINT 4125 S1%=0% 4130 IF (C9%-C8%)>5% THEN C9%=C8%+5% 4140 PRINT : PRINT "ROW";TAB(35);"COLUMN" : PRINT 4150 I%=10% 4160 FOR K%=C8% TO C9% 4170 PRINT TAB(I%);K%; 4180 I%=I%+11% 4190 NEXT K% 4200 PRINT: H9=.9E-38 4210 FOR I%=R1% TO R2% 4220 PRINT I%;TAB(5%); 4230 FOR J%=C8% TO C9% 4235 IF B(I%,J%)=H9 THEN PRINT SPACE$(11%);: GOTO 4250 4240 PRINT USING " #####.####",B(I%,J%); 4250 NEXT J% 4260 PRINT 4270 NEXT I% 4280 PRINT : PRINT 4290 IF C2%=C9% GOTO 4400 4300 C8%=C9%+1% : C9%=C2% 4310 GOTO 4130 4400 RETURN 4500 A9$=MID(F$,62%,9%): A9$=LEFT(A9$,INSTR(5%,A9$,"]")): RETURN 08999 ! ERROR ROUTINES 09000 IF ERR=28% THEN GOSUB 10000: R%,C%=0%: RESUME 3002 09010 IF ERL<85% THEN PRINT "STAT11 IS UNABLE TO USE THE DESIGNATED FILE. YOU SHOULD CHECK" : PRINT "THE FILE NAME AND PROTECTION CODE FOR STARTERS" : RESUME 28 09020 IF ERL<98 THEN R%,C%=0%: RESUME 100 09030 IF ERL>4000 AND ERL<4040 THEN PRINT "PLEASE ENTER 0, 1 OR 2": RESUME 4010 09040 PRINT "YOU TYPED NON-NUMERIC ROW AND/OR COLUMN NUMBERS": PRINT "PLEASE TYPE ONLY NUMBERS AND SEPARATE THEM WITH A COMMA" 09050 IF S1%=1% THEN RESUME 4090 ELSE IF S1%=2% THEN RESUME 4110 09060 RESUME 100 10000 V0$=SYS(CHR$(6%)+CHR$(-7%)): RETURN ! CTRL/C TRAP 32750 END