1 SUB TRANSF & ! 500.15 - STAT11 - TRANSF & ! DATA TRANSFORMATION 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 CAN COMPUTE SEVERAL FUNCTIONS (TRANSFORMATIONS) OF ONE & ! OR TWO VARIABLES AND WILL STORE THE RESULTS IN COLUMNS IN THE DATA & ! 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: F3$ & ! RANGE OF VALUES: S00000.RWM - S99999.RWM & ! USE: NAME OF 250 ROW BY 15 COLUMN & ! DATA MATRIX & 13 ! 2) VARIABLE NAME: R% & ! RANGE OF VALUES: 1 - 250 & ! USE: NUMBER OF ROWS IN DATA MATRIX & ! & ! 3) VARIABLE NAME: C% & ! RANGE OF VALUES: 1 - 15 & ! USE: NUMBER OF COLUMNS IN DATA MATRIX & 20 ! & ! & ! RETURNING ARGUMENTS & ! & ! 1) VARIABLE NAME: F3$ & ! RANGE OF VALUES: S00000.RWM - S99999.RWM & ! USE: NAME OF 250 ROW BY 15 COLUMN & ! DATA MATRIX & 22 ! 2) VARIABLE NAME: C% & ! RANGE OF VALUES: 1 - 15 & ! USE: NUMBER OF COLUMNS IN DATA MATRIX & ! & 30 ! DESCRIPTION OF FUNCTION & ! & ! THIS MODULE CAN COMPUTE SEVERAL FUNCTIONS (TRANSFORMATIONS) & ! OF ONE OR TWO VARIABLES AND WILL STORE THE RESULTS IN & ! COLUMNS IN THE DATA MATRIX. & 31 ! IT ASKS THE USER TO TYPE TRANSFORMATION CODE NUMBER AND & ! TRANSFERS CONTROL TO THE CORRESPONDING ROUTINE. & ! & ! FOR MOST TRANSFORMATIONS, THE USER MUST ALSO SPECIFY INPUT & ! AND OUTPUT COLUMN NUMBER(S) AND SOMETIMES A CONSTANT. & 32 ! THE OUTPUT COLUMN NUMBER CAN BE THE SAME AS AN INPUT COLUMN & ! NUMBER; IN THAT CASE, THE RESULT OF THE FUNCTION WILL BE & ! WRITTEN OVER THE INPUT DATA COLUMN. & 33 ! IF AN ARGUMENT IS OUTSIDE THE DOMAIN OF DEFINITION FOR THE & ! FUNCTION OR IF A RESULT CAUSES FLOATING POINT OVERFLOW OR & ! UNDERFLOW, THEN APPROPRIATE ERROR ROUTINES ARE EXECUTED. & 34 ! NORMAL EXECUTION IS RESUMED WITH THE NEXT ELEMENTS DOWN THE & ! COLUMNS AS THE ARGUMENTS. & ! & ! AT THE END, CONTROL IS PASSED TO ESCRWM FOR RECALCULATION OF & ! THE ELEMENTARY STATISTICS FOR THE CURRENT MATRIX. & 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 ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! THIS CODE RETRIEVES THE CALLING ARGUMENTS FROM COMMON AND OPENS & ! THE DATA MATRIX FILE. & ! & ! & 100 ON ERROR GOTO 250 & \ GOSUB 10000 & \ !F$=SYS(CHR$(7%)) & \ F$ = SAV.F$ & \ R%=VAL(MID(F$,46%,5%)) & \ C%=VAL(MID(F$,51%,5%)) & \ F3$=MID(F$,31%,15%) & \ OPEN F3$ AS FILE 3, VIRTUAL 110 A9$=MID(F$,62%,9%) & \ A9$=LEFT(A9$,INSTR(5%,A9$,"]")) & \ H9=.9E-38 150 DIM #3,A(250%,15%) & \ X9%=0% & \ C5%=C% & \ S1%=0% 170 PRINT "THERE ARE ";R%;" ROWS AND ";C%;" COLUMNS IN YOUR DATA MATRIX" 180 PRINT & \ PRINT "TYPE HELP FOR A LIST OF THE TRANSFORMATION CODES" & \ PRINT & \ GOTO 205 199 ! & ! & ! & ! HERE THE USER TYPES IN A TRANSFORMATION CODE. IF HE TYPES HELP, & ! CONTROL GOES TO A ROUTINE THAT PRINTS A LIST OF THE TRANSFORMATION & ! OPTIONS. IF HE TYPES AN INVALID OPTION, ERROR ROUTINES HERE TELL & ! HIM SO. & ! & 200 PRINT & \ PRINT "TRANSFORMATION";T%;" HAS BEEN COMPLETED" & \ PRINT 205 ON ERROR GOTO 250 & \ INPUT "TYPE TRANSFORMATION CODE";C$ & \ PRINT 210 IF C$="HELP" GOTO 6000 230 T%=VAL(C$) 235 ON ERROR GOTO 3980 240 GOTO 280 250 IF ERR=28% THEN GOSUB 10000 & !\ RESUME 9000 & \ MODULE$ = "FINISH" & \ GOTO 32767 252 PRINT "INVALID TRANSFORMATION CODE, RETYPE IT CORRECTLY." 255 PRINT "(TYPE 0 TO END TRANSFORMATION)" & \ PRINT 260 INPUT C$ & \ PRINT 270 RESUME 210 280 IF T%>=0% AND T%<=19% GOTO 310 290 PRINT "THERE IS NO TRANSFORMATION CODE ";T% & \ PRINT "RETYPE CODE CORRECTLY (TYPE 0 TO END TRANSFORMATION)" & \ PRINT 300 GOTO 180 ! & ! & ! & ! HERE CONTROL IS TRANSFERRED TO THE APPROPRIATE TRANSFORMATION & ! ROUTINE. IF T%=0, THEN TRANSFORMATIONS ARE OVER AND CONTROL WILL & ! LEAVE THIS MODULE. & ! & ! & 310 IF T%=0% GOTO 9000 320 ON T% GOTO 1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,2000, & 2100,2200,2300,2400,2500,2600,2700,3000 399 ! & ! & ! & ! THIS SUBROUTINE IS REFERENCED BY ALMOST EVERY TRANSFORMATION ROUTINE & ! IN ORDER TO GET CONSTANTS AND COLUMN (VARIABLE) NUMBERS. & ! & ! & 400 PRINT "ENTER VARIABLE X AND THE VARIABLE NUMBER TO BE ASSIGNED" & \ PRINT "TO THE TRANSFORMED DATA" 420 INPUT "(FORM XX,XX)";X%,A% & \ PRINT & \ GOTO 530 450 PRINT "ENTER VARIABLES X AND Y, AND THE VARIABLE NUMBER TO BE ASSIGNED" & \ PRINT "TO THE TRANSFORMED DATA" 470 INPUT "(FORM XX,XX,XX)";X%,Y%,A% & \ PRINT & \ GOTO 540 500 PRINT "ENTER VARIABLE X, THE CONSTANT, AND THE VARIABLE NUMBER TO BE ASSIGNED" & \ PRINT "TO THE TRANSFORMED DATA" 520 INPUT "(FORM XX,XX.X,XX)";X%,C,A% & \ PRINT 530 Y%=1% 540 GOSUB 600 550 IF S9%=1% GOTO 4000 555 A(0%,A%)=0 560 K1%=0% & \ K2%=0% & \ K3%=0% & \ RETURN & ! & ! & ! THIS ROUTINE CHECKS TO MAKE SURE THE USER HAS TYPED IN VALID COLUMN & ! NUMBERS. & ! & ! & 600 IF Y%<1% OR Y%>C5% GOTO 660 610 IF X%<1% OR X%>C5% GOTO 660 620 IF A%<1% OR A%>C5%+1% OR A%>15% GOTO 660 630 IF A%>C5% THEN C5%=C5%+1% 640 S9%=0% & \ GOTO 670 660 S9%=1% 670 RETURN ! & ! & ! & ! THIS ROUTINE TAKES THE SQUARE ROOT OF EACH ELEMENT IN A COLUMN (A(J,X)) & ! AND STORES THE RESULT IN THE SPECIFIES OUTPUT COLUMN (A(J,A)). & ! & ! & 1000 GOSUB 400 1030 ON ERROR GOTO 32000 1032 FOR J%=1% TO R% & \ IF A(J%,X%)=H9 THEN A(J%,A%)=H9 & \ GOTO 1042 1035 A(J%,A%)=SQR(A(J%,X%)) & \ A(0%,A%)=A(0%,A%)+1 1042 NEXT J% 1050 GOTO 200 ! & ! & ! & ! THIS SECTION TAKES THE BASE-10 LOG OF EACH ELEMENT IN A COLUMN (A(J,X)) & ! AND STORES THE RESULT IN THE SPECIFIED OUTPUT COLUMN (A(J,A)). & ! & ! & 1100 GOSUB 400 1130 ON ERROR GOTO 32000 1135 FOR J%=1% TO R% & \ IF A(J%,X%)=H9 THEN A(J%,A%)=H9 & \ GOTO 1140 1137 A(J%,A%)=LOG10(A(J%,X%)) & \ A(0%,A%)=A(0%,A%)+1 1140 NEXT J% 1150 GOTO 200 ! & ! & ! & ! THIS SECTION COMPUTES NATURAL LOGS. & ! & ! & 1200 GOSUB 400 1230 ON ERROR GOTO 32000 1235 FOR J%=1% TO R% & \ IF A(J%,X%)=H9 THEN A(J%,A%)=H9 & \ GOTO 1240 1237 A(J%,A%)=LOG(A(J%,X%)) & \ A(0%,A%)=A(0%,A%)+1 1240 NEXT J% 1250 GOTO 200 ! & ! & ! & ! THIS SECTION COMPUTES EXPONENTIALS ( E TO THE A(J,X) POWER ). & ! & ! & 1300 GOSUB 400 1330 ON ERROR GOTO 32000 1335 FOR J%=1% TO R% & \ IF A(J%,X%)=H9 THEN A(J%,A%)=H9 & \ GOTO 1340 1337 A(J%,A%)=EXP(A(J%,X%)) & \ A(0%,A%)=A(0%,A%)+1 1340 NEXT J% 1350 GOTO 200 ! & ! & ! & ! THIS SECTION ADDS EACH TWO ELEMENTS FROM THE TWO INPUT COLUMNS & ! AND STORES THE RESULT IN THE SPECIFIED OUTPUT COLUMN. & ! & ! & 1400 GOSUB 450 1430 ON ERROR GOTO 32000 1435 FOR J%=1% TO R% & \ IF A(J%,X%)=H9 OR A(J%,Y%)=H9 THEN A(J%,A%)=H9 & \ GOTO 1440 1437 A(J%,A%)=A(J%,X%)+A(J%,Y%) & \ A(0%,A%)=A(0%,A%)+1 1440 NEXT J% 1445 IF A(0%,A%)=0 GOTO 8000 1450 GOTO 200 ! & ! & ! & ! THIS SECTION SUBTRACTS ONE COLUMN FROM ANOTHER, ELEMENT BY ELEMENT. & ! & ! & 1500 GOSUB 450 1520 ON ERROR GOTO 32000 1525 FOR J%=1% TO R% & \ IF A(J%,X%)=H9 OR A(J%,Y%)=H9 THEN A(J%,A%)=H9 & \ GOTO 1530 1527 A(J%,A%)=A(J%,X%)-A(J%,Y%) & \ A(0%,A%)=A(0%,A%)+1 1530 NEXT J% 1535 IF A(0%,A%)=0 GOTO 8000 1540 GOTO 200 ! & ! & ! & ! THIS SECTION FINDS THE PRODUCT OF EACH TWO ELEMENTS FROM THE INPUT & ! COLUMNS AND STORES THE RESULT IN THE OUTPUT COLUMN. & ! & ! & 1600 GOSUB 450 1620 ON ERROR GOTO 32000 1625 FOR J%=1% TO R% & \ IF A(J%,X%)=H9 OR A(J%,Y%)=H9 THEN A(J%,A%)=H9 & \ GOTO 1630 1627 A(J%,A%)=A(J%,X%)*A(J%,Y%) & \ A(0%,A%)=A(0%,A%)+1 1630 NEXT J% 1635 IF A(0%,A%)=0 GOTO 8000 1640 GOTO 200 ! & ! & ! & ! THIS SECTION FINDS THE QUOTIENT, ELEMENT BY ELEMENT, OF TWO COLUMNS. & ! & ! & 1700 GOSUB 450 & \ ON ERROR GOTO 32000 1730 FOR J%=1% TO R% & \ IF A(J%,X%)=H9 OR A(J%,Y%)=H9 OR A(J%,Y%)=0 & THEN A(J%,A%)=H9 & \ GOTO 1740 1735 A(J%,A%)=A(J%,X%)/A(J%,Y%) & \ A(0%,A%)=A(0%,A%)+1 1740 NEXT J% 1750 IF A(0%,A%)=0 GOTO 8000 1760 GOTO 200 1799 ! & ! & ! THIS SECTION ADDS A CONSTANT 8C) TO EACH A(J%,X%) AND STORES THE & ! RESULT IN THE CORRESPONDING A(J%,A%). & ! & 1800 GOSUB 500 & \ ON ERROR GOTO 32000 1830 FOR J%=1% TO R% & \ IF A(J%,X%)=H9 THEN A(J%,A%)=H9 & \ GOTO 1840 1835 A(J%,A%)=A(J%,X%)+C & \ A(0%,A%)=A(0%,A%)+1 1840 NEXT J% & \ GOTO 200 ! & ! & ! & ! THE NEXT SECTION MULTIPLIES EACH A(J%,X%) BY A CONSTANT (C) AND & ! STORES THE RESULT IN THE CORRESPONDING A(J%,A%). & ! & ! & 1900 GOSUB 500 & \ ON ERROR GOTO 32000 1930 FOR J%=1% TO R% & \ IF A(J%,X%)=H9 THEN A(J%,A%)=H9 & \ GOTO 1940 1935 A(J%,A%)=A(J%,X%)*C & \ A(0%,A%)=A(0%,A%)+1 1940 NEXT J% & \ GOTO 200 ! & ! & ! & ! THE NEXT SECTION TAKES THE INVERSE, ELEMENT BY ELEMENT, OF A COLUMN. & ! & ! & 2000 GOSUB 400 & \ ON ERROR GOTO 32000 2030 FOR J%=1% TO R% & \ IF A(J%,X%)=H9 OR A(J%,X%)=0 THEN A(J%,A%)=H9 & \ GOTO 2040 2035 A(J%,A%)=1/A(J%,X%) & \ A(0%,A%)=A(0%,A%)+1 2040 NEXT J% & \ GOTO 200 ! & ! & ! & ! THE FOLLOWING SECTION FINDS THE ARCSIN OF EACH A(J,X) AND STORES THE & ! RESULTS IN THE A(J,A)'S. & ! & ! & 2100 GOSUB 400 & \ ON ERROR GOTO 32000 2105 FOR J%=1% TO R% & \ IF A(J%,X%)=H9 THEN A(J%,A%)=H9 & \ GOTO 2150 2110 IF A(J%,X%)>1 OR A(J%,X%)<-1 THEN A(J%,A%)=0 & \ PRINT "ARGUMENT (ROW";J%;") OUTSIDE DOMAIN OF DEFINITION"; & ! " VALUE RETURNED IS 0" & \ GOTO 2150 2120 IF A(J%,X%)=1 THEN A(J%,A%)=1.570796 & \ GOTO 2150 2130 IF A(J%,X%)=-1 THEN A(J%,A%)=-1.570796 & \ GOTO 2150 2140 A(J%,A%)=ATN(A(J%,X%)/SQR(1-A(J%,X%)^2%)) 2150 NEXT J% & \ GOTO 200 ! & ! & ! & ! THE NEXT SECTION RAISES EACH A(J,X) TO THE C POWER, STORING THE RESULT & ! IN EACH A(J,A). & ! & ! & 2200 GOSUB 500 & \ ON ERROR GOTO 32000 2222 FOR J%=1% TO R% & \ IF A(J%,X%)=H9 THEN A(J%,A%)=H9 & \ GOTO 2240 2230 A(J%,A%)=A(J%,X%)^C 2240 NEXT J% & \ GOTO 200 ! & ! & ! & ! THE NEXT SECTION PERFORMS A DECISION FUNCTION; & ! IF A GIVEN A(J%,X%) IS >= THE USER-SPECIFIED CONSTANT C, THEN THE & ! CORRESPONDING A(J%,A%) WILL BE SET TO 1; OTHERWISE IT WILL BE SET TO 0. & ! & ! & 2300 GOSUB 500 2340 FOR J%=1% TO R% & \ IF A(J%,X%)=H9 THEN A(J%,A%)=H9 & \ GOTO 2350 2345 IF A(J%,X%)>=C THEN A(J%,A%)=1% ELSE A(J%,A%)=0% 2350 NEXT J% 2360 GOTO 200 ! & ! & ! & ! THE NEXT SECTION DELETES A COLUMN AND SHIFTS ALL THE HIGHER-NUMBERED & ! COLUMNS OVER ONE TO CLOSE THE GAP. & ! & ! & 2400 ON ERROR GOTO 2409 2403 S1%=0% 2405 IF C5%<>1% GOTO 2445 2407 GOTO 2420 2409 PRINT "YOU TYPED A NON-NUMERIC COLUMN NUMBER" 2411 PRINT "PLEASE TYPE ONLY NUMBERS" 2413 PRINT "YOU MUST SPECIFY A COLUMN NUMBER BETWEEN 1 AND ";C5% 2415 IF S1%=0% THEN RESUME 2400 2417 GOTO 2400 2420 PRINT "YOU CANNOT DELETE A COLUMN. . ." 2430 PRINT "YOU ONLY HAVE ONE COLUMN LEFT" 2440 GOTO 200 2445 INPUT "WHICH COLUMN DO WANT TO DELETE"; A% 2447 PRINT 2450 IF A%>=1% AND A%<=C5% GOTO 2460 2453 S1%=1% 2456 GOTO 2413 2460 FOR K%=0% TO R% 2470 A(K%,J%)=A(K%,J%+1%) FOR J%=A% TO C5%-1% 2480 NEXT K% 2490 C5%=C5%-1% 2495 GOTO 200 ! & ! & ! & ! THE NEXT SECTION COMPUTES THE SCALAR PRODUCT OF TWO VARIABLES; I.E. IT & ! SUMS UP THE ELEMENT BY ELEMENT PRODUCTS AND PRINTS THE RESULT; I.E. IT & ! COMPUTES THE SUM OF CROSS-PRODUCTS OF TWO COLUMNS. & ! & ! & 2500 INPUT "ENTER VARIABLES X AND Y ";X%,Y% & \ PRINT & \ A%=1% 2510 GOSUB 600 2520 IF S9%=1% GOTO 4000 2525 S8=0 2530 FOR J%=1% TO R% 2535 IF A(J%,X%)=H9 OR A(J%,Y%)=H9 GOTO 2550 2540 S8=S8+A(J%,X%)*A(J%,Y%) 2550 NEXT J% 2555 IF S8=0 THEN PRINT "SCALAR PRODUCT IS 0" & \ GOTO 2570 2560 PRINT USING "SCALAR PRODUCT = #.######^^^^ RECIPROCAL = #.######^^^^",S8,1/S8 2570 PRINT 2580 GOTO 200 ! & ! & ! & ! THE NEXT LINE SETS PARAMETERS TO DIRECT THE PRINTING OF THE & ! ENTIRE CURRENT MATRIX. & 2600 C1%=1% & \ C8%=1% & \ C2%=C5% & \ C9%=C5% & \ R1%=1% & \ R2%=R% & \ GOTO 2730 2699 ! & ! & ! & ! THIS SECTION GETS PARAMETERS FROM THE USER FOR PRINTING A SUBMATRIX. & ! & ! & 2700 INPUT "TYPE BEGINNING ROW, END ROW";R1%,R2% & \ IF R1%<=0% OR R2%<=0% OR R1%>R% OR R2%>R% & THEN PRINT "YOUR ROW NUMBERS MUST BE BETWEEN 1 AND";R% & \ GOTO 2700 2710 INPUT "TYPE BEGINNING COLUMN, END COLUMN";C1%,C2% & \ IF C1%<=0% OR C2%<=0% OR C1%>C5% OR C2%>C5% & THEN PRINT "YOUR COLUMN NUMBERS MUST BE BETWEEN 1 AND";C5% & \ GOTO 2710 2720 C8%=C1% & \ C9%=C2% & \ PRINT ! & ! & ! & ! THE NEXT SECTION IS USED BY BOTH OF THE ABOVE PRINT ROUTINES FOR & ! THE ACTUAL PRINTING OF MATRICES OR SUBMATRICES. & ! & ! & 2730 IF (C9%-C8%)>5% THEN C9%=C8%+5% 2740 PRINT & \ PRINT "ROW";TAB(35);"COLUMN" & \ PRINT 2750 I%=10% 2760 FOR K%=C8% TO C9% 2770 PRINT TAB(I%);K%; 2780 I%=I%+11% 2790 NEXT K% 2800 PRINT 2810 FOR I%=R1% TO R2% 2820 PRINT I%;TAB(5%); 2830 FOR J%=C8% TO C9% 2835 IF A(I%,J%)=H9 THEN PRINT " "; & \ GOTO 2850 2840 PRINT USING " #####.####",A(I%,J%); 2850 NEXT J% 2860 PRINT 2870 NEXT I% 2880 PRINT & \ PRINT 2890 IF C2%=C9% GOTO 200 2900 C8%=C9%+1% & \ C9%=C2% 2910 GOTO 2730 ! & ! & ! & ! THE NEXT SECTION GENERATES A COLUMN OF RANDOM NUMBERS WITHIN SPECIFIED & ! UPPER AND LOWER LIMITS. & ! & ! & 3000 PRINT "ENTER VARIABLE NUMBER TO BE ASSIGNED TO THE RANDOM NUMBERS" 3010 INPUT "(FORM XX) "A% & \ PRINT 3015 IF A%<1% OR A%>15% OR A%>C5%+1% GOTO 4000 3030 INPUT "ENTER LOWER LIMIT , UPPER LIMIT ";L,U & \ PRINT 3040 RANDOMIZE 3050 A(J%,A%)=(U-L)*RND+L FOR J%=1% TO R% 3052 A(0%,A%)=R% 3055 IF A%>C5% THEN C5%=C5%+1% 3060 GOTO 200 ! & ! & ! & ! THIS BIG ERROR ROUTINE IS DESIGNED TO HANDLE ALL THE TIMES AND & ! PLACES THE USER TYPES IN INAPPROPRIATE AND/OR NON-NUMERIC ANSWERS TO & ! KEYBOARD QUESTIONS. & ! & ! & 3980 IF ERR=28% THEN GOSUB 10000 & !\ RESUME 9000 & \ MODULE$ = "FINISH" & \ GOTO 32767 3982 PRINT "YOU TYPED NON-NUMERIC VARIABLE NUMBER(S) OR CONSTANTS" 3985 PRINT 3987 S1%=1% 3990 GOTO 4001 4000 PRINT "YOU HAVE GIVEN AN INVALID RESPONSE !" & \ PRINT 4001 PRINT "YOUR INPUT VARIABLE NUMBER(S)" 4002 PRINT "MUST BE BETWEEN 1 AND "; C5% 4003 IF C5%=15% GOTO 4008 4004 PRINT "YOUR OUTPUT VARIABLE NUMBER" 4005 PRINT "MUST BE BETWEEN 1 AND "; C5%+1% 4006 GOTO 4010 4008 PRINT "YOUR OUTPUT VARIABLE NUMBER " 4009 PRINT "MUST BE BETWEEN 1 AND "; C5% 4010 INPUT "DO YOU WISH TO CONTINUE TRANSFORMATION (TYPE YES OR NO)";W$ 4015 IF S1%=1% GOTO 4060 4020 IF W$="NO" OR LEFT(W$,1%)="N" OR W$="" GOTO 9000 4022 IF LEFT(W$,1%)<>"Y" GOTO 4040 4024 IF T%=16% GOTO 2500 4026 IF T%=17% OR T%=18% GOTO 2700 4030 IF T%=19% GOTO 3000 4035 ON T% GOTO 400,400,400,400,450,450,450,450,500,500,400,400,500,500 4040 INPUT "YOU MUST TYPE EITHER YES OR NO";W$ 4050 GOTO 4015 4060 IF W$<>"NO" AND LEFT(W$,1%)<>"N" AND W$<>"" GOTO 4075 4065 S1%=0% 4070 RESUME 9000 4075 IF W$<>"YES" AND LEFT(W$,1%)<>"Y" GOTO 4040 4080 S1%=0% 4085 IF T%=16% THEN RESUME 2500 4086 IF T%=17% OR T%=18% THEN RESUME 2700 4087 IF T%=19% THEN RESUME 3000 4088 ON T% GOTO 4090,4090,4090,4090,4092,4092,4092,4092,4094,4094, & 4090,4090,4094,4094 4090 RESUME 400 4092 RESUME 450 4094 RESUME 500 ! & ! & ! & ! THIS SECTION IS EXECUTED WHEN THE USER TYPES HELP INSTEAD OF A & ! TRANSFORMATION CODE NUMBER. IT PRINTS A LIST OF THE TRANSFORMATION & ! OPTIONS. & ! & 6000 PRINT & \ PRINT "FOLLOWING IS AN EXPLANATION OF THE TRANSFORMATION CODES" & \ PRINT "(X AND Y ARE VARIABLES, C IS A CONSTANT)" & \ PRINT " 1 SQUARE ROOT OF X" & \ PRINT " 2 COMMON LOG OF X" 6100 PRINT " 3 NATURAL LOG OF X" & \ PRINT " 4 EXPONENTIAL OF X" & \ PRINT " 5 X + Y" & \ PRINT " 6 X - Y" & \ PRINT " 7 X * Y" & \ PRINT " 8 X / Y" 6200 PRINT " 9 X + C" & \ PRINT "10 X * C" & \ PRINT "11 1 / X" & \ PRINT "12 ARCSIN OF X" & \ PRINT "13 X ^ C" & \ PRINT "14 IF X>=C, THEN X=1; OTHERWISE, X=0" 6300 PRINT "15 DELETE A COLUMN" & \ PRINT "16 SCALAR PRODUCT" & \ PRINT "17 PRINT ENTIRE MATRIX" & \ PRINT "18 PRINT A SUBMATRIX" & \ PRINT "19 GENERATE RANDOM NUMBERS" & \ PRINT " 0 NO MORE TRANSFORMATION" & \ PRINT & \ GOTO 205 8000 ! & ! & ! THIS SECTION IS USED WHEN A TRANSFORMATION USING TWO VARIABLES & ! FAILS--I.E. NO DATA EXISTS FOR ANY PAIR & ! & 8005 PRINT "NOT ENOUGH PAIRS OF DATA EXISTED TO PERFORM THIS"; & ! " TRANSFORMATION" & \ PRINT "DATA CANNOT BE SAVE IN COLUMN";A% & \ PRINT "IF YOU WERE REPLACING COLUMN";A%;", THE ORIGINAL DATA"; & ! " IS LOST. SORRY." 8010 IF A%>=C5% THEN C5%=C5%-1% & \ GOTO 8060 8020 FOR K%=0% TO R% 8030 A(K%,J%)=A(K%,J%+1%) FOR J%=A% TO C5%-1% 8040 NEXT K% 8050 C5%=C5%-1% 8060 GOTO 205 8999 ! & ! & ! & ! THIS SECTION IS BRANCHED TO WHEN THE USER TYPES 0 FOR THE TRANSFORMATION & ! CODE. THE RETURNING ARGUMENTS ARE LOADED INTO COMMON AND CONTROL IS & ! PASSED TO ESCRWM FOR RECALCULATION OF THE ELEMENTARY STATISTICS. & ! & ! & 9000 PRINT "YOU NOW HAVE "; C5%; " VARIABLES IN YOUR DATA MATRIX" 9030 C%=C5% 9040 CLOSE 3 9100 F$=LEFT(F$,50%) & \ G$=RIGHT(F$,56%) 9110 C$="00000"+RIGHT(NUM$(C%),2%) 9120 F$=F$+MID(C$,LEN(C$)-5%,5%)+G$ 9122 F$=LEFT(F$,55%) 9124 F$=F$+"STATCM"+A9$+" " 9130 !R$=SYS(CHR$(8)+F$) & \ SAV.F$ = F$ 9140 !CHAIN "ESCRWM"+A9$ & \ MODULE$= "ESCRWM" & \ LINE% = 0% & \ SUBEXIT & 9145 ! & ! & ! THIS BIG ERROR ROUTINE IS DESIGNED TO HANDLE ERRORS PRIMARILY & ! ARISING FROM ARGUEMENTS OUTSIDE THE DOMAINS OF DEFINITION FOR & ! THE VARIOUS FUNCTIONS. 10000 V0%=CTRLC ! SYS(CHR$(6%)+CHR$(-7%)) & \ RETURN ! CTRL/C TRAP 32000 IF ERR=28% THEN GOSUB 10000 & !\ RESUME 9000 & \ MODULE$ = "FINISH" & \ GOTO 32767 32005 IF ERR=54 THEN A(J%,A%)=SQR(ABS(A(J%,X%))) & ! & \ PRINT "ROW";J%;"CONTAINS THE MAGNITUDE OF A COMPLEX NUMBER" 32010 IF ERR=53 THEN A(J%,A%)=A(J%,X%) & \ PRINT "LOG WORKS ONLY FOR POSITIVE NUMBERS" & \ PRINT "ORIGINAL ARGUMENT RETURNED IN ROW";J% 32020 IF ERR=61 THEN A(J%,A%)=0 & \ PRINT "0 RETURNED FOR DIVISION BY 0 IN ROW";J% 32030 IF ERR=48 OR ERR=49 THEN A(J%,A%)=0 & \ PRINT "VALUE RETURNED IN ROW";J%;" TOO LARGE OR" & \ PRINT "TOO SMALL FOR THIS MACHINE - 0 SUBSTITUTED" & \ IF T%=4% THEN RESUME 1340 ELSE IF T%=5% THEN RESUME 1440 32032 IF T%=1% THEN RESUME 1042 ELSE IF T%=2% THEN RESUME 1140 32034 IF T%=3% THEN RESUME 1240 32040 IF T%=6% THEN RESUME 1530 ELSE IF T%=7% THEN RESUME 1630 32050 IF T%=8% THEN RESUME 1740 ELSE IF T%=9% THEN RESUME 1840 32060 IF T%=10% THEN RESUME 1940 ELSE IF T%=11% THEN RESUME 2040 32070 IF T%=12% THEN RESUME 2150 ELSE IF T%=13% THEN RESUME 2240 32080 RESUME 205 32767 SUBEND