1 ! PROGRAM TRAN, VERSION 1A (31-AUG-73) ! 2 ! PROGRAM TRAN PERFORMS TRANSFORMATIONS ON VARIABLES. ! IT IS ONE OF THE SEVERAL PROGRAMS AND FILES WHICH COMPOSE COSAP, ! LAWRENCE UNIVERSITY'S CONVERSATIONALLY ORIENTED STATISTICAL 3 ! ANALYSIS PACKAGE. COSAP IS DISTRIBUTED FOR EDUCATIONAL USE, ON ! THE CONDITION THAT IT NOT BE SOLD, RENTED OR LEASED FOR PROFIT. ! 4 ! IF YOU DESIRE FURTHER INFORMATION ON COSAP, PLEASE CONTACT THE ! LAWRENCE UNIVERSITY COMPUTER CENTER, APPLETON, WISCONSIN, 54911 ! 5 DIM N%(30%) ! FUNCTION TO CREATE FILE EXT. BASED ON JOB # 6 DEF FNZ$ : IF N%(0%)=30% THEN 7 ELSE CHANGE SYS(CHR$(6%)+CHR$(9%)+ CHR$(0%)) TO N% : Z8$=".J"+RIGHT(NUM$(N%(1%)/2%),2%) 7 FNZ$=Z8$ ! EXTENSION IS ".J" + JOB # 8 FNEND 9 DIM #5, X(200,50),H$(30)=2%,C(50,50),M4(0),M5(0),M9(0),N(0),J9(0), I4(0),I7(0),N6(0),X2(50),L1$(8)=32% 10 DIM #2%, N$(50%)=8%,M1$(50%)=64%,O%(50%),P%(50%),D$(50%)=8%, T(50%),D(10000%) 40 ON ERROR GOTO 30000 : OPEN "DAT1"+FNZ$ AS FILE 5% : PRINT 70 PRINT "NAME OF OLD DATABANK"; : INPUT LINE F$ : I%=INSTR(1%,F$, CHR$(13%)+CHR$(10%)) : GOTO 70 UNLESS I% : F$=LEFT(F$,I%-1%) : GOTO 70 IF F$="" : L1$(1%)=F$+SPACE$(32%-LEN(F$)) 100 OPEN F$ FOR INPUT AS FILE 2% : S$=F$ : PRINT MID(M1$(0%),2%,64%) 4000 ! TRANSFORMATIONS 4005 R%=-1% 4010 INPUT "OPERATION ( IF NO MORE)";A$ : GOTO 32000 IF A$="" : R%=-1% : R%=1% IF A$="+" : R%=2% IF A$="+C" : R%=3% IF A$="-" : R%=4% IF A$="-C" 4015 R%=5% IF A$="*" : R%=6% IF A$="*C" : R%=7% IF A$="/" : R%=8% IF A$="/C" : R%=9% IF A$="^" : R%=10% IF A$="^C" 4020 R%=11% IF A$="INV" : R%=12% IF A$="SQR" : R%=13% IF A$="EXP" : R%=14% IF A$="LOG" : R%=15% IF A$="LOG10" 4025 IF A$="SOS" THEN 5000 4030 R%=16% IF A$="FIX" : R%=17% IF A$="SIN" : R%=18% IF A$="COS" 4040 IF R%<=0% THEN GOSUB 9300 : GOTO 4000 4050 F$="FIRST" : GOSUB 20100 : GOTO 4000 IF V$="" : K%=FNF%(V$) : IF K%=0% THEN GOSUB 9200 : GOTO 4050 4060 IF R%>10% THEN 4100 ELSE IF R%=INT(R%/2%)*2% THEN 4070 ELSE F$="SECOND" : GOSUB 20100 : IF V$="" THEN 4000 ELSE J%=FNF%(V$) : IF J%=0% THEN GOSUB 9200 : GOTO 4060 4065 IF O%(K%)=O%(J%) THEN 4100 ELSE GOSUB 9700 : GOTO 4000 4070 ON ERROR GOTO 4075 : INPUT "CONSTANT";V : ON ERROR GOTO 0 : GOTO 4100 4075 IF ERR<>52% THEN ON ERROR GOTO 0 ELSE GOSUB 9600 : RESUME 4070 4100 F$="DESTINATION" : GOSUB 20100 : GOTO 4000 IF V$="" : L%=FNF%(V$) : IF L% THEN IF O%(L%)<>O%(K%) THEN GOSUB 9700 : GOTO 4000 4101 IF L%=0% THEN PRINT "VARIABLE LABEL"; : INPUT LINE L$ : Z%=INSTR(1%,L$,CHR$(13%)+CHR$(10%)) : GOTO 4101 UNLESS Z% : L$=LEFT(L$,Z%-1%) 4102 IF L%=0% THEN IF O%(0%)<50% THEN L%=O%(0%)+1% ELSE GOSUB 9850 : GOTO 4000 4103 IF L%<>O%(0%)+1% THEN L$=RIGHT(M1$(L%),2%) 4105 I%=1% : ON ERROR GOTO 4420 : P%=P%(K%) : IF L%<>K% THEN P%(L%),P%=P%(0%) : O%(L%)=O%(K%) 4200 X=D(P%(K%)+I%-1%) : IF R%>10% THEN 4300 ELSE Y=V : IF R%<>INT(R%/2%)*2% THEN Y=D(P%(J%)+I%-1%) 4210 ON INT((R%-1%)/2%)+1% GOTO 4220,4230,4240,4250,4260 4220 Z=X+Y : GOTO 4400 4230 Z=X-Y : GOTO 4400 4240 Z=X*Y : GOTO 4400 4250 Z=X/Y : GOTO 4400 4260 Z=X^Y : GOTO 4400 4300 ON R%-10% GOTO 4310,4320,4330,4340,4350,4360,4370,4380 4310 Z=1.0/X : GOTO 4400 4320 Z=SQR(X) : GOTO 4400 4330 Z=EXP(X) : GOTO 4400 4340 Z=LOG(X) : GOTO 4400 4350 Z=LOG10(X) : GOTO 4400 4360 Z=FIX(X) : GOTO 4400 4370 Z=SIN(X) : GOTO 4400 4380 Z=COS(X) 4400 D(P%)=Z : P%=P%+1% : I%=I%+1% : GOTO 4200 IF I%<=O%(L%) : IF L%>O%(0%) THEN O%(0%)=L% : N$(L%)=V$ : O%(L%)=O%(K%) : P%(0%)=P% 4405 M1$(L%)=CHR$(95%)+LEFT(L$,32%) 4410 GOSUB 20200 : D$(L%)=D$ : T(L%)=T : PRINT : GOTO 4000 4420 IF ERR<48% OR ERR>54% THEN IF ERR<>61% THEN ON ERROR GOTO 0 4430 PRINT RIGHT(SYS(CHR$(6%)+CHR $(9%)+CHR$(ERR)),3%); " FOR OBSERVATION";I% 4440 PRINT : RESUME 4445 4445 ON ERROR GOTO 0 : GOTO 4000 5000 ! HELP MESSAGES 5010 ON ERROR GOTO 5030 : OPEN "TRAN.DOC" FOR INPUT AS FILE 12% 5020 INPUT LINE #12%, Q$ : PRINT Q$; : GOTO 5020 5030 IF ERR=5% OR ERR=11% THEN RESUME 4010 ELSE ON ERROR GOTO 0 9000 ! ERROR PROCESSING 9100 E$="VARIABLE ALREADY EXISTS" : GOTO 9900 9200 E$= "NO SUCH VARIABLE" : GOTO 9900 9300 E$="ILLEGAL OPERATION" : GOTO 9900 9400 E$="NO SUCH OBSERVATION" : GOTO 9900 9500 E$="NAME TOO LONG" : GOTO 9900 9600 E$="ILLEGAL NUMBER" : GOTO 9900 9700 E$="DIFFERENT LENGTH VARIABLES" : GOTO 9900 9800 E$="DATABANK IS EMPTY" : GOTO 9900 9850 E$="TOO MANY VARIABLES" : GOTO 9900 9900 PRINT "*";E$"*" : RETURN 20000 ! GET DATE AND TIME FROM FILE 20010 D$=LEFT(D$(I%),2%)+"-"+RIGHT(D$(I%),3%) : T$=TIME$(T(I%)) : RETURN 20100 PRINT F$;" "; UNLESS F$="" : INPUT "VARIABLE NAME";V$ : RETURN IF LEN(V$)<=8% : GOSUB 9500 : GOTO 20100 20200 D$=DATE$(0%) : D$=LEFT(D$,2%)+RIGHT(D$,4%) : T=1440-INT(TIME(0)/60) : RETURN 20300 DEF FNF%(X$) : GOTO 20305 IF X$=N$(I%) FOR I%=1% TO O%(0%) : I%=0% 20305 FNF%=I% : FNEND 30000 ! ERROR PROCESSING 30010 IF ERR<>5% THEN 30015 ELSE IF INSTR(1%,F$,"[") THEN 30012 30011 PRINT : PRINT "CAN'T FIND DATABANK ";F$ : RESUME 70 30012 PRINT "CAN'T FIND DATABANK";F$ : RESUME 70 30015 IF ERR<>10% THEN 30017 ELSE PRINT "PROTECTION VIOLATION" : GOTO 30018 30017 IF ERR<>2% AND ERR<>6% THEN ON ERROR GOTO 0 ELSE PRINT "ILLEGAL FILE NAME" 30018 RESUME 70 30020 IF ERR=11% THEN RESUME 30030 ELSE IF ERR<>52% AND ERR<>48% THEN ON ERROR GOTO 0 ELSE GOSUB 9600 : RESUME 32000 CLOSE 2%,3%,5% : K$=SYS(CHR$(7%)) : N$=LEFT(K$,8%) : S0=VAL(RIGHT(K$,9%)) : CHAIN N$ S0 ! CLOSE UP, GET THE CORE COMMON LINK AND CHAIN 32767 END