home *** CD-ROM | disk | FTP | other *** search
Wrap
GW-BASIC | 1989-08-20 | 9.2 KB | 167 lines
1 ' REMAKE U.T.M. --- REMAK.BAS --- by Dr Russell Langley 2 GOTO 400 4 '<UNK! {000A}>--- Press Enter --- 5 IF PR THEN RETURN ELSE PRINT TAB(40);:PRINT "Press <Enter> to continue.";:IN$=INKEY$:WHILE INKEY$<>CHR$(13):WEND:LOCATE,40:PRINT SPACE$(26):RETURN 6 PRINT TAB(14);:PRINT "Press <Enter> to continue, or `/' to end viewing.";:IN$=INKEY$:WHILE IN$<>CHR$(13) AND IN$<>"/":IN$=INKEY$:WEND:LOCATE,14:PRINT SPACE$(50):IF IN$="/" THEN I=N:RETURN ELSE RETURN 7 '<UNK! {000A}>*** Redirect to Block *** 9 ON QB GOTO 405,177,425 :STOP '=start,printout,etc - CLOSE (exc 177)<UNK! {000A}><UNK! {000A}>--- Another go? --- 10 CLOSE:IF HD$="" THEN LPRINT STRING$(79,61)STRING$(4,10) 11 DO$="run this program again now":GOSUB 20:IF Z$="Y" THEN 2 ELSE 30 19 '<UNK! {000A}>--- Yes/No? --- 20 PRINT:PRINT"Do you want to "+DO$; 21 INPUT" (Y/N)";Z$:IF Z$="" THEN Z$="N":RETURN ELSE Z$=CHR$(ASC(Z$) AND 95):IF Z$="Y" OR Z$="N" THEN RETURN ELSE PRINT"WHAT? ";:GOTO 21 29 '<UNK! {000A}>--- Errors & End --- 30 IF ERR THEN BEEP ELSE RUN"MENU" 31 IF ERR=70 THEN LINE INPUT"Can't write to that disk. Remove its Write-Protect tab, then press <Enter>.";Z$:RESUME 32 IF ERR=71 THEN LINE INPUT"That drive is empty or its gate is open. Fix, then press <Enter>.";Z$:RESUME 33 IF ERR=210 THEN RESUME 9 'from #86 39 ON ERROR GOTO 0:END'<UNK! {000A}><UNK! {000A}>--- Messages --- 40 BEEP:PRINT "---> Sorry, that entry is illegal.":RETURN 41 BEEP:PRINT "---> Sorry, double quotes are not allowed here.":RETURN 42 BEEP:PRINT"* * * Can't Do That.":QB=4:GOTO 9 43 COLOR 23,0:PRINT:PRINT"Working";:COLOR 7,0:RETURN 44 LOCATE,1:PRINT"Ok, done.";:GOTO 5 49 '<UNK! {000A}>*** Vetted Decoding of FF X(I,J) from X$ ***<UNK! {000A}> Needs I, M, NU(0), & UT>0. 50 K=1:L=M:IF UT>0 THEN L=M-I+1 51 KX=0:FOR J=K TO L:Y$=SPACE$(10):KY=0 52 KX=KX+1:IF KX>LEN(X$) THEN IF J=L THEN 54 ELSE 57 53 Z$=MID$(X$,KX,1):IF INSTR("-.0123456789",Z$) THEN KY=KY+1:MID$(Y$,KY,1)=Z$:GOTO 52 ELSE IF Z$<>" " THEN 58 ELSE IF KY=0 THEN 52 54 IF NU(0) THEN NU(J)=VAL(Y$) ELSE X(I,J)=VAL(Y$) 55 NEXT J:IF KX>=LEN(X$) THEN 60 56 PLAY"L8O3CO2C":PRINT"Only the first"L"values have been read in that line. Re-do it";:GOSUB 21:IF Z$="Y" THEN 59 ELSE 60 57 PLAY"L32O4CEG>C":PRINT"Not enough values in the line above. Please re-do whole line.":GOTO 59 58 PLAY"L16O3CEL4>B":PRINT"That line contains a `non-numeric' entry. Please re-do whole line." 59 INPUT X$:IF RIGHT$(X$,1)<>"/" THEN 51 ELSE X$=LEFT$(X$,LEN(X$)-1):N=I+(X$=""):IF X$>"" THEN 51 60 RETURN 79 '<UNK! {000A}>*** Disk Input of X(I,J), N, M, etc ***<UNK! {000A}> Needs MNR, MNC, & ZZ$="UTOK" since UT is acceptable. 80 IO$="I":GOSUB 110:CLS:PRINT "Loading data from disk.":INPUT #1,FL$,VR$ 81 IF LEFT$(VR$,4)<>"(RL," THEN BEEP:PRINT "Unreadable file --- not made by a program of this package.":GOTO 86 82 INPUT #1,DT$,ID$,N,M,UT,VN$:PRINT "Filename: "FL$,"Made: "DT$,"Version: "VR$:PRINT"ID: "ID$:PRINT 83 IF UT>0 THEN IF ZZ$<>"UTOK" THEN PRINT "This file is an upper triangular matrix, which this program can't use!":GOTO 86 84 PRINT"File has"N"rows of data. ";:IF N<MNR THEN PRINT "--- Not enough!":GOTO 86 ELSE IF N>MXR THEN PRINT"--- Too many!":GOTO 86 85 PRINT:PRINT"File has"M"column variables. ";:IF M<MNC THEN PRINT "--- Not enough!" ELSE IF M>MXC THEN PRINT"Too many!" ELSE 88 86 CLOSE:BEEP:GOSUB 5:ERROR 210 87 ' Select variables 88 PRINT:PRINT"The matrix was computed from"UT"rows of measurements.":PRINT:IF VN$="N" THEN PRINT "The"M"variables are not named.":GOTO 90 89 PRINT "Variables in file are:":FOR J=1 TO M:INPUT #1,VN$(J):PRINT J;VN$(J),:NEXT J:PRINT 90 GOSUB 5 99 ' Now read numerical data from disk 100 COLOR 23,0:PRINT"Loading numbers";:COLOR 7,0 101 FOR I=1 TO N:FOR J=I TO M:INPUT #1,X(I,J):X(J,I)=X(I,J):NEXT J:NEXT I 'reads UTM & fills it out. 102 CLOSE:LOCATE,1:RETURN 109 '<UNK! {000A}>--- Get Filespec --- 110 IF IO$="O" AND FL$>"" THEN PRINT "Will you file this data under the name "FL$;:GOSUB 21:IF Z$="Y" THEN 115 111 LINE INPUT "Filename (I will add .DAT extension)? ";FL$:IF FL$="" THEN 111 ELSE IF MID$(FL$,2,1)=":" THEN DR$=LEFT$(FL$,1):FL$=MID$(FL$,3) 112 ER=0:FOR I=1 TO LEN(FL$):Z$=MID$(FL$,I,1):IF INSTR(" .,/\|?*:;[]+="+CHR$(34),Z$) THEN ER=1 113 NEXT I 114 IF ER=0 AND FL$>"" AND LEN(FL$)<9 THEN FL$=FL$+".DAT" ELSE BEEP:PRINT "Invalid filename. Will you try again";:GOSUB 21:IF Z$="Y" THEN 111 ELSE 30 115 INPUT "Which drive (A,B,C,D)";DR$:IF DR$="" THEN 115 116 DR$=CHR$(ASC(DR$) AND 95):IF INSTR("ABCD",DR$)=0 THEN 115 117 INPUT "Which directory (e.g. WORK, MYDATA, or Null Entry if root) ";DR2$:IF DR2$="" THEN DR$=DR$+":" ELSE DR$=DR$+":\"+DR2$+"\" 129 '<UNK! {000A}>--- Open File, IO$= "I" or "O" --- 130 IF IO$="I" THEN 134 ELSE ON ERROR GOTO 132:OPEN DR$+FL$ FOR INPUT AS #1 131 CLOSE:DO$="<OVERWRITE> existing "+FL$:GOSUB 20:IF Z$="N" THEN 110 ELSE 133 132 RESUME 133 'OK to start new file, since FL$ not present. 133 ON ERROR GOTO 30:OPEN DR$+FL$ FOR OUTPUT AS #1:RETURN 'print #1,Q$A$Q$Q$B$Q$:close 134 ON ERROR GOTO 136:OPEN DR$+FL$ FOR INPUT AS #1 'for input 135 ON ERROR GOTO 30:RETURN 'input #1,A$,B$:close 136 PRINT FL$" not found on Drive "DR$:RESUME 137 137 GOSUB 5:ON ERROR GOTO 30:CLS:ERASE X:SHELL "DIR "+DR$+"/W":GOSUB 5 138 DIM X(MXR,MXC):GOTO 110 139 '<UNK! {000A}>--- Save data U.T.M. using Z(I,J) --- 140 IF ID$="" THEN LINE INPUT"Problem ID? ";ID$:GOTO 142 141 LINE INPUT"Problem ID (null = unchanged)? ";Z$:IF Z$>"" THEN ID$=Z$ 142 Q$=CHR$(34):IO$="O":GOSUB 110 143 PRINT "Saving data on disk ..... ";:PRINT #1,Q$FL$Q$Q$VER$Q$:PRINT #1,Q$DAT$Q$Q$ID$Q$;N;M;UT;Q$VN$Q$ 144 IF VN$="Y" THEN FOR J=1 TO M:PRINT #1,Q$;VN$(NU(J));Q$;:NEXT J:PRINT #1,"" 145 FOR I=1 TO N 146 FOR J=I TO M:PRINT #1,Z(I,J);:NEXT J:NEXT I:CLOSE:PRINT "done." 147 DO$="backup this file under the name "+FL$:GOSUB 20:IF Z$="Y" THEN GOSUB 115:GOTO 143 ELSE RETURN 159 '<UNK! {000A}>--- Show/Print Answers --- 160 PR=0:CLOSE:OPEN "SCRN:" FOR OUTPUT AS #2:QB=-(QB<>2)*QB-(QB=2)*QBB:RETURN 161 DO$="print these results":GOSUB 20:IF Z$="N" THEN PR=0:RETURN 162 PR=1:IF ID$="" THEN LINE INPUT "Problem ID? ";ID$:GOTO 164 163 LINE INPUT"Problem ID (null = unchanged)? ";Z$:IF Z$>"" THEN ID$=Z$ 164 RETURN 165 QBB=QB:QB=2:CLS:LOCATE 8,1 166 PRINT TAB(12)"KEYTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENCLOSE" 167 PRINT TAB(12)"OPEN OPEN" 168 PRINT TAB(12)"OPEN TURN PRINTER ON. OPEN" 169 PRINT TAB(12)"OPEN OPEN" 170 PRINT TAB(12)"OPEN Then PRESS <ENTER> to start printing ..... or .. OPEN" 171 PRINT TAB(12)"OPEN OPEN" 172 PRINT TAB(12)"OPEN To send Printer Codes in Basic before printing, OPEN" 173 PRINT TAB(12)"OPEN press <Ctrl-Break>, & start printing by GOTO 9. OPEN" 174 PRINT TAB(12)"OPEN OPEN" 175 PRINT TAB(12)"SCREENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENLOAD":IN$=INKEY$ 176 IN$=INKEY$:IF IN$<>CHR$(13) THEN 176 177 CLS:PRINT"Printing .....":LOCATE 4,1:CLOSE:OPEN "LPT1:" FOR OUTPUT AS #2 178 IF HD$>"" THEN PRINT #2,STRING$(79,61):PRINT #2,DAT$;TAB(42-LEN(HD$)\2);HD$;TAB(73)VER$:PRINT #2,STRING$(79,61):HD$="" 179 PRINT #2,CHR$(10)"Problem: "ID$;CHR$(10) 180 RETURN 209 '<UNK! {000A}>--- Varnames --- 210 IF VN$="Y" THEN RETURN ELSE FOR L=1 TO M:IF L<10 THEN VN$(L)="Var #"+STR$(L) ELSE VN$(L)="Var #"+MID$(STR$(L),2) 211 NEXT L:RETURN 219 '<UNK! {000A}>--- Show full MxM Matrix Z(I,J) in format FMT$ --- 220 FMT$="######.#####":S12$=SPACE$(12):Z$=S12$ 221 FOR K=1 TO M STEP 5:IF M<K+5 THEN L=M ELSE L=K+4 222 PRINT #2,:PRINT #2,S12$;:FOR J=K TO L:RSET Z$=VN$(NU(J)):PRINT #2,Z$;:NEXT J:PRINT #2, 223 FOR I=1 TO M:LSET Z$=VN$(NU(I)):PRINT #2,Z$;:FOR J=K TO L:PRINT #2,USING FMT$;Z(I,J);:NEXT J:PRINT #2,:NEXT I:PRINT #2,:IF L MOD 5=0 THEN GOSUB 5 224 NEXT K:RETURN 339 '<UNK! {000A}>--- Date --- 340 DAT$=MID$(DATE$,4,2)+" "+MID$("JanFebMarAprMayJunJulAugSepOctNovDec",-2+3*VAL(LEFT$(DATE$,2)),3)+" "+RIGHT$(DATE$,4):RETURN 399 '<UNK! {000A}>--- Start --- 400 KEY OFF:CLEAR:SCREEN 0,0,0,0:CLS:ON ERROR GOTO 30 401 DEFINT I-N,Q:Q$=CHR$(34):MXR=20:MNR=2:MXC=20:MNC=2 402 DEF FNSTRIP$(Z$)=LEFT$(Z$+" ",INSTR(Z$+" "," ")-1) 403 DIM X(MXC,MXC),Z(MXC,MXC),NU(MXC),VN$(MXC) 404 HD$=" REMAKE UPPER TRIANGULAR MATRIX ":VER$="(RL,2)" 405 QB=1:CLOSE:CLS:GOSUB 340:PRINT DAT$;TAB(40-LEN(HD$)\2);:COLOR 0,7:PRINT HD$;:COLOR 7,0:PRINT TAB(73)VER$:LOCATE 4,1,0:K=12 406 PRINT TAB(K)"KEYTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENCLOSE" 407 PRINT TAB(K)"OPEN OPEN" 408 PRINT TAB(K)"OPEN This program reads any Upper Triangular Matrix OPEN" 409 PRINT TAB(K)"OPEN (e.g. RMAT) filed by a program of this package, OPEN" 410 PRINT TAB(K)"OPEN based on 2-20 variables, and then lets you --- OPEN" 411 PRINT TAB(K)"OPEN (1) Delete variables, &/or OPEN" 412 PRINT TAB(K)"OPEN (2) Change the sequence of variables. OPEN" 413 PRINT TAB(K)"OPEN You can then file the revised version under the OPEN" 414 PRINT TAB(K)"OPEN same or a different filename. OPEN" 415 PRINT TAB(K)"OPEN OPEN" 416 PRINT TAB(K)"OPEN If trouble, try <Ctrl-Break> & GOTO 9. OPEN" 417 PRINT TAB(K)"OPEN OPEN" 418 PRINT TAB(K)"SCREENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENLOAD":LOCATE ,,1 419 DO$="proceed":GOSUB 20:IF Z$="N" THEN 30 420 '<UNK! {000A}>--- Get & keep original full Data Matrix, X(I,J) --- 421 IO$="I":ZZ$="UTOK":GOSUB 80 422 '<UNK! {000A}>--- Prepare Varnames --- 423 IF VN$="N" THEN FOR J=1 TO M:VN$(J)="Var #"+STR$(J):NEXT J 424 FOR J=1 TO M:VN$(J)=FNSTRIP$(VN$(J)):NEXT J 425 QB=1:CLOSE:FOR J=1 TO M:NU(J)=J:NEXT J 426 '<UNK! {000A}>--- Copy, fill out, & show original data in Z(I,J) --- 427 FOR I=1 TO M:FOR J=I TO M:Z(I,J)=X(I,J):Z(J,I)=Z(I,J):NEXT J:NEXT I 428 CLS:PRINT"Here is the full data matrix that was read:":GOSUB 160:GOSUB 220:PRINT 429 '<UNK! {000A}>--- Get New Requirements, new M & NU(J) --- 430 QB=3:MM=M 'MM = original M. 431 PRINT "How many variables do you want in the new matrix (2-";MID$(STR$(MM),2);") ";:INPUT M:IF M<MNC OR M>MM THEN BEEP:GOSUB 431 432 PRINT"Now enter the required NEW SEQUENCE of"M"variable numbers, in Free Format:" 433 LINE INPUT X$:NU(0)=UT:UT=0:I=1:GOSUB 50:UT=NU(0) 'Returns new NU(J)'s. 434 '<UNK! {000A}>--- Test validity of sequence numbers --- 435 FOR J=1 TO M:IF NU(J)<1 OR NU(J)>MM THEN PRINT"Value #"J"is out-of-bounds. Please try again.":ER=1:J=M 436 IF J=M THEN 439 437 FOR K=J+1 TO M:IF NU(J)=NU(K) THEN PRINT"Value #"J" is duplicated. Please try again.":ER=1:J=M:K=M 438 NEXT K 439 NEXT J:IF ER=1 THEN ER=0:BEEP:GOTO 433 440 '<UNK! {000A}>--- Rearrange Original Matrix X(I,J) into New Matrix Z(I,J) --- 441 FOR I=1 TO M:FOR J=I TO M 442 Z(I,J)=X(NU(I),NU(J)):Z(J,I)=Z(I,J) 443 NEXT J:NEXT I 444 '<UNK! {000A}>--- Show Rearranged Matrix --- 445 PRINT:PRINT"New matrix is:":GOSUB 220 446 PRINT"Is that what you want";:GOSUB 21:IF Z$="N" THEN M=MM:GOTO 425 447 '<UNK! {000A}>--- Printout? --- 448 DO$="print this new matrix":GOSUB 20:IF Z$="N" THEN 451 449 GOSUB 162:GOSUB 165:GOSUB 220:GOSUB 160 450 '<UNK! {000A}>--- File it now --- 451 PRINT"I'm now ready to file your revised matrix as an Upper Triangular Matrix.":GOSUB 140:GOTO 10 452 'end