mirror of
https://github.com/retro-software/B5500-software.git
synced 2026-03-02 17:44:40 +00:00
1. Commit library tape images, directories, and extracted text files. 2. Commit additional utilities under Unisys-Emode-Tools.
2319 lines
183 KiB
Plaintext
2319 lines
183 KiB
Plaintext
BEGIN 00000100
|
|
COMMENT LOUIS A. WITKIN, FLEXIBLE TELETYPE PROGRAM FOR MATRIX 00000200
|
|
OPERATIONS. UNIVERSITY OF DENVER, 2/23/68; 00000300
|
|
ALPHA FILE IN TTIN 14 (1,8); 00000400
|
|
ALPHA FILE OUT TTOUT 14 (1,8); 00000500
|
|
INTEGER STA,GP,DUMB,NEXTSTOP,CPACE,SKIPOVER,I,OLDDUMB; 00000600
|
|
INTEGER J,K; 00000700
|
|
ARRAY MATRIX[0:9,0:10,0:10],VECTOR[0:9,0:10],CONST[0:9],MESSAGE00000800
|
|
[0:33],OPCODE[0:11],TYPE[0:3],NUM[0:3],POLY[0:9,0:20];00000900
|
|
ALPHA ARRAY RD[0:7]; 00001000
|
|
ALPHA QUEST,LA,VERB,BLNK,EQ,LP,RP,COMA,PL,MI,TI,OPER,DI; 00001100
|
|
FORMAT FO1(X8,"{!MATROP/TTY, VERSION 3.{!IF YOU NEED HELP, TY~",00001200
|
|
/X8,"PE ",""","TEACH",""",".{!!~"), 00001300
|
|
FO2(X8,"{!!PLEASE READ THE INSTRUCTION MANUAL.{!!~"), 00001400
|
|
FO3(X8,"{!GOODBYE.{!!~"), 00001500
|
|
MNULL(X8,"{!M",A1," (",I*,",",I*,") IS NULL.{!~"), 00001600
|
|
VNULL(X8,"{!V",A1," (",I*,") IS NULL.{!~"), 00001700
|
|
PNULL(X8,"{!P",A1," (",I*,") IS NULL.{!~"), 00001800
|
|
MSIZE(X8,"{!M",A1," IS (",I*,",",I*,").{!!~"), 00001900
|
|
VSIZE(X8,"{!V",A1," IS (",I*,").{!!~"), 00002000
|
|
PSIZE(X8,"{!P",A1," IS (",I*,").{!!~"), 00002100
|
|
TEACH (X8,"{!THE FOLLOWING COMPUTATIONAL AREAS ARE AVAILABLE:~", 00002200
|
|
/X8,"{! 1. 10 MATRICES, 10 BY 10 ELEMENTS IN EACH.~", 00002300
|
|
/X8,"{! 2. 10 VECTORS, 10 ELEMENTS IN EACH.~", 00002400
|
|
/X8,"{! 3. 10 CONSTANTS.~", 00002500
|
|
/X8,"{! 4. 10 POLYNOMIALS, 19TH DEGREE IN EACH.~", 00002600
|
|
/X8,"{!THESE AREAS MAY BE REFERENCED AS M*, V*, C*, OR P*,~", 00002700
|
|
/X8,"{! WHERE * IS A NUMBER FROM 0 TO 9.~", 00002800
|
|
/X8,"{!FOR A LIST OF COMMANDS, TYPE ",""","COMMANDS",""",".~",00002900
|
|
/X8,"{!FOR A LIST OF OPERATIONS, TYPE ",""","OPERATIONS",""", 00003000
|
|
".~", 00003100
|
|
/X8,"{!FOR A LIST OF ERROR MESSAGES, TYPE ",""","ERRORS",""", 00003200
|
|
".~", 00003300
|
|
/X8"{!!IF ANY COMMAND IS INCORRECT, THE COMPUTER WILL TYPE ~",00003400
|
|
/X8,"AN ERROR MESSAGE.{!!~"), 00003500
|
|
COMMANDS (X8,"{!THE FOLLOWING ACTION VERBS ARE AVAILABLE:~", 00003600
|
|
/X8,"{! 1. ",""","STOP","""," OR ",""","QUIT",""","--EN",00003700
|
|
"D COMPUTATION.~", 00003800
|
|
/X8,"{! 2. ",""","INPUT","""," OR ",""","READ",""","--E",00003900
|
|
"NTER DATA WHEN THE~", 00004000
|
|
/X8,"{! COMPUTER TYPES A QUESTION MARK. EXAMPLES:~", 00004100
|
|
/X8,"{!INPUT M3 (4,8)~", 00004200
|
|
/X8,"{!--4 REPRESENTS THE NUMBER OF ROWS,~", 00004300
|
|
/X8,"{! 8 THE NUMBER OF COLUMNS--~", 00004400
|
|
/X8,"{!INPUT V7 (5)~", 00004500
|
|
/X8,"{!--5 REPRESENTS THE NUMBER OF ELEMENTS--~", 00004600
|
|
/X8,"{!INPUT C4~", 00004700
|
|
/X8,"{!INPUT P2 (7)~", 00004800
|
|
/X8,"{!--7 REPRESENTS THE DEGREE OF THE POLYNOMIAL--~", 00004900
|
|
/X8,"{!ENTER THE COEFFICIENT OF THE LOWEST POWER FIRST.~", 00005000
|
|
/X8,"{! 3. ",""","WRITE","""," OR ",""","PRINT",""","-~",00005100
|
|
/X8,"-TYPE STORED DATA. EXAMPLES:~", 00005200
|
|
/X8,"{!WRITE M1~", 00005300
|
|
/X8,"{!WRITE V5~", 00005400
|
|
/X8,"{!WRITE C2~", 00005500
|
|
/X8,"{!WRITE P3~", 00005600
|
|
/X8,"{! 4. ",""","SET","""," OR ",""","LET",""","--EXE~",00005700
|
|
/X8,"CUTE ARITHMETIC OPERATIONS.~", 00005800
|
|
/X8,"{! 5. ",""","SIZE",""","--TYPES THE SIZE OF A MAT~",00005900
|
|
/X8,"RIX OR VECTOR~", 00006000
|
|
/X8,"{! OR THE DEGREE OF A POLYNOMIAL. EXAMPLES:~",00006100
|
|
/X8,"{!SIZE M3~", 00006200
|
|
/X8,"{!SIZE V5~", 00006300
|
|
/X8,"{!SIZE P2~", 00006400
|
|
/X8,"{! 6. ",""","SOLVE",""","--SOLVES SIMULTANEOUS EQ~",00006500
|
|
/X8,"UATIONS. EXAMPLE:~", 00006600
|
|
/X8,"{!SOLVE M1*V3=V8~", 00006700
|
|
/X8,"{!--M1 IS THE COEFFICIENT MATRIX--~", 00006800
|
|
/X8,"{!--V3 IS THE SOLUTION VECTOR--~", 00006900
|
|
/X8,"{!--V8 IS THE RIGHT-HAND-SIDE VECTOR--~", 00007000
|
|
/X8,"{! 7. ",""","ROOTS",""","--FINDS THE ROOTS OF A PO",00007100
|
|
"LYNOMIAL AND~", 00007200
|
|
/X8,"{! TYPES THE SOLUTION. EXAMPLE:~", 00007300
|
|
/X8,"{!ROOTS P3~", 00007400
|
|
/X8,"{!WHEN ",""","SET",""",", ",""","SOLVE","""," AND ",""", 00007500
|
|
"ROOTS","""," ARE EXECUTED,{!~", 00007600
|
|
/X8," THE COMPUTER WILL TYPE ",""","DONE.",""",".{!!~"),00007700
|
|
OPERATIONS (X8,"{!THERE ARE ELEVEN POSSIBLE OPERATIONS. EXAMPLES:~", 00007800
|
|
/X8,"{! 1. ADDITION:~", 00007900
|
|
/X8,"{! SET M1=M5+M6~", 00008000
|
|
/X8,"{! SET V3=V1+V7~", 00008100
|
|
/X8,"{! SET C1=C3+C4~", 00008200
|
|
/X8,"{! SET P5=P3+P4~", 00008300
|
|
/X8,"{! 2. SUBTRACTION:~", 00008400
|
|
/X8,"{! SET M3=M1-M7~", 00008500
|
|
/X8,"{! SET V1=V3-V4~", 00008600
|
|
/X8,"{! SET C1=C5-C6~", 00008700
|
|
/X8,"{! SET P7=P2-P1~", 00008800
|
|
/X8,"{! 3. MULTIPLICATION:~", 00008900
|
|
/X8,"{! SET M1=M2*M3~", 00009000
|
|
/X8,"{! SET C1=V1*V2 --DOT PRODUCT--~", 00009100
|
|
/X8,"{! SET P6=P4*P2~", 00009200
|
|
/X8,"{! SET V5=M3*V3~", 00009300
|
|
/X8,"{! SET C9=C0*C1~", 00009400
|
|
/X8,"{! SET M1=C2*M2 --EVERY ELEMENT*CONSTANT--~", 00009500
|
|
/X8,"{! SET V1=C3*V3 --EVERY ELEMENT*CONSTANT--~", 00009600
|
|
/X8,"{! SET P5=C4*P2 --EVERY ELEMENT*CONSTANT--~", 00009700
|
|
/X8,"{! 4. DIVISION:~", 00009800
|
|
/X8,"{! SET C7=C5/C2~", 00009900
|
|
/X8,"{! 5. DETERMINANT:~", 00010000
|
|
/X8,"{! SET C1=DET(M1)~", 00010100
|
|
/X8,"{! 6. TRANSPOSE:~", 00010200
|
|
/X8,"{! SET M2=TRN(M1)~", 00010300
|
|
/X8,"{! 7. EQUATE:~", 00010400
|
|
/X8,"{! SET M1=M5~", 00010500
|
|
/X8,"{! SET V3=V7~", 00010600
|
|
/X8,"{! SET C2=C3~", 00010700
|
|
/X8,"{! SET P5=P3~", 00010800
|
|
/X8,"{! SET M3 (4,8)= 3.14159 --A PARTICULAR ELEMENT--~", 00010900
|
|
/X8,"{! SET V7 (5)= 2.71828 --A PARTICULAR ELEMENT--~", 00011000
|
|
/X8,"{! SET P2 (7)= 5 --A PARTICULAR ELEMENT--~", 00011100
|
|
/X8,"{! SET C4= 1000000000001.0~", 00011200
|
|
/X8,"{! 8. IDENTITY:~", 00011300
|
|
/X8,"{! SET M3 (4,4)=IDN~", 00011400
|
|
/X8,"{! 9. INVERSE:~", 00011500
|
|
/X8,"{! SET M1=INV(M0)~", 00011600
|
|
/X8,"{!10. NULLIFY:~", 00011700
|
|
/X8,"{! SET M3 (4,8)=NULL~", 00011800
|
|
/X8,"{! SET V5 (5)=NULL~", 00011900
|
|
/X8,"{! SET C9=NULL~", 00012000
|
|
/X8,"{! SET P3 (15)=NULL~", 00012100
|
|
/X8,"{!11. EIGEN VECTORS:~", 00012200
|
|
/X8,"{! SET M3=EVEC(M2){!!~"), 00012300
|
|
ERRORS (X8,"{!THE ERROR MESSAGES ARE AS FOLLOWS:~", 00012400
|
|
/X8,"{! 1. ",""","INVALID VERB",""","--THE USER HAS TYPED A",00012500
|
|
" VERB THAT~", 00012600
|
|
/X8,"{! THE PROGRAM DOES NOT RECOGNIZE.~", 00012700
|
|
/X8,"{! 2. ",""","INVALID IDENTIFIER",""","--THE USER HAS T",00012800
|
|
"YPED AN IDE~", 00012900
|
|
/X8,"NTIFIER{! THAT THE PROGRAM DOES NOT RECOGNIZE.~",00013000
|
|
/X8,"{! 3. ",""","MISSING -(-",""","--THE USER HAS NOT TYPE",00013100
|
|
"D A LEFT-~", 00013200
|
|
/X8,"PARENTHESIS.~", 00013300
|
|
/X8,"{! 4. ",""","MISSING -,-",""","--THE USER HAS NOT TYPE",00013400
|
|
"D A COMMA.~", 00013500
|
|
/X8,"{! 5. ",""","MISSING -)-",""","--THE USER HAS NOT TYPE",00013600
|
|
"D A RIGHT-~", 00013700
|
|
/X8,"PARENTHESIS.~", 00013800
|
|
/X8,"{! 6. ",""","INVALID OPERATION",""","--THE USER HAS TY",00013900
|
|
"PED AN~", 00014000
|
|
/X8,"{! OPERATION THAT THE PROGRAM DOES NOT RECOGNI",00014100
|
|
"ZE.~", 00014200
|
|
/X8,"{! 7. ",""","MISSING -=-",""","--THE USER HAS NOT TYPE",00014300
|
|
"D AN EQUAL~", 00014400
|
|
/X8," SIGN.~", 00014500
|
|
/X8,"{! 8. ",""","INVALID INDEX",""","--THE USER HAS TYPED ",00014600
|
|
"AN AREA SIZE~", 00014700
|
|
/X8,"{! THAT THE PROGRAM CAN NOT HANDLE.~", 00014800
|
|
/X8,"{! 9. ",""","INVALID SIZE",""","--THE USER ATTEMPTED A",00014900
|
|
"N OPERATION~", 00015000
|
|
/X8,"{! WITH IDENTIFIERS OF THE WRONG SIZES.~", 00015100
|
|
/X8,"{!10. ",""","INDEX OVERFLOW OF",""","--THE USER HAS TY",00015200
|
|
"PED TOO MANY~", 00015300
|
|
/X8," VALUES.~", 00015400
|
|
/X8,"{!11. ",""","IDENT. INVALID FOR OPER.",""","--THE USER",00015500
|
|
" HAS ATTEMPT~", 00015600
|
|
/X8,"ED{! AN OPERATION THAT THE PROGRAM CAN NOT DO U",00015700
|
|
"SING~", 00015800
|
|
/X8," THE IDENTIFIERS{! THAT HE TYPED.~", 00015900
|
|
/X8,"{!12. ",""","MISSING -*-",""","--THE USER HAS NOT TYPE",00016000
|
|
"D A MULTIPLI~", 00016100
|
|
/X8,"CATION SIGN.~", 00016200
|
|
/X8,"{!13. ",""","DIVISION BY ZERO",""","--THE USER HAS ATT",00016300
|
|
"EMPTED AN IN~", 00016400
|
|
/X8,"VALID DIVISION.~", 00016500
|
|
/X8,"{!!DATA FOLLOWING MESSAGES:~", 00016600
|
|
/X8,"{!FOR 1,2,6,8 THE PROGRAM TYPES THE INVALID CONSTRUCT.~",00016700
|
|
/X8,"{!FOR 3,4,5,7,12 THE PROGRAM TYPES THE CHARACTERS{! ~",00016800
|
|
/X8," WHERE SCANNING STOPPED.~", 00016900
|
|
/X8,"{!FOR 9,11,13 THE PROGRAM TYPES THE IDENTIFIERS{! ~",00017000
|
|
/X8,"WHICH CAUSED THE ERROR.~", 00017100
|
|
/X8,"{!FOR 10 THE PROGRAM TYPES THE NUMBER OF EXCESSIVE VAL~",00017200
|
|
/X8,"UES.{!!~"), 00017300
|
|
DONE(X8,"{!DONE.{!~"), 00017400
|
|
WC(X8,"{!C",I1,"=",V10.3,"{!!~"), 00017500
|
|
RC (X8,"{!C",I1,"=",A1,"{!~"), 00017600
|
|
ERR(X8,"{!",X*, "+---{!~"/X8,"ERR # ",A3," - ",*A*, 00017700
|
|
" ..",*V*,"..{!~"); 00017800
|
|
LABEL REED,STOP,PRINTER,INPUT,LET,RERR,BRK,TESTOPER,DUMREED, 00017900
|
|
SOLVER,ROOTS; 00018000
|
|
COMMENT REMOTE UNIT INPUT PROCEDURE PACKAGE 00018100
|
|
-----------------------------------------------------------------------;00018200
|
|
PROCEDURE STATION(STA); 00018300
|
|
INTEGER STA; 00018400
|
|
BEGIN 00018500
|
|
ARRAY RD1[0:7]; 00018600
|
|
STA:=STATUS(RD1[*]); 00018700
|
|
STA.[9:9]:=RD1[0].[9:9]; 00018800
|
|
END OF PROCEDURE STATION; 00018900
|
|
INTEGER STREAM PROCEDURE FINDCH(B,CH); 00019000
|
|
VALUE CH; 00019100
|
|
BEGIN 00019200
|
|
DI:=LOC CH; DI:=DI+7; SI:=B; 00019300
|
|
63(IF SC=DC THEN JUMP OUT; DI:=DI-1; TALLY:=TALLY+1); 00019400
|
|
FINDCH:=TALLY; 00019500
|
|
END OF PROCEDURE FINDCH; 00019600
|
|
BOOLEAN STREAM PROCEDURE ANYFUNNYCHRS(B,NCH); 00019700
|
|
VALUE NCH; 00019800
|
|
BEGIN 00019900
|
|
LABEL OK; 00020000
|
|
SI:=B; TALLY:=0; NCH(IF SC=ALPHA THEN BEGIN IF SC}"0" 00020100
|
|
THEN GO TO OK; END; IF SC="." THEN GO TO OK; IF SC=","00020200
|
|
THEN GO TO OK; IF SC="+" THEN GO TO OK; IF SC="-" THEN00020300
|
|
GO TO OK; IF SC="@" THEN GO TO OK; TALLY:=1; JUMP OUT;00020400
|
|
OK: SI:=SI+1); 00020500
|
|
ANYFUNNYCHRS:=TALLY 00020600
|
|
END OF PROCEDURE ANYFUNNYCHRS; 00020700
|
|
BOOLEAN STREAM PROCEDURE LASTCOMMA(B,NCH); 00020800
|
|
VALUE NCH; 00020900
|
|
BEGIN 00021000
|
|
SI:=B; SI:=SI+NCH; IF SC="," THEN TALLY:=1; 00021100
|
|
LASTCOMMA:=TALLY 00021200
|
|
END OF PROCEDURE LASTCOMMA; 00021300
|
|
STREAM PROCEDURE PUTCHRIN(B,NCH,CH); 00021400
|
|
VALUE NCH,CH; 00021500
|
|
BEGIN 00021600
|
|
DI:=B; SI:=LOC CH; SI:=SI+7; DI:=DI+NCH; DS:=1 CHR 00021700
|
|
END OF PROCEDURE PUTCHRIN; 00021800
|
|
INTEGER STREAM PROCEDURE COUNTCOMMAS(B,NCH); 00021900
|
|
VALUE NCH; 00022000
|
|
BEGIN 00022100
|
|
SI:=B; NCH(IF SC="," THEN TALLY:=TALLY+1; SI:=SI+1); 00022200
|
|
COUNTCOMMAS:=TALLY 00022300
|
|
END OF PROCEDURE COUNTCOMMAS; 00022400
|
|
STREAM PROCEDURE MOVER(B,T,N); 00022500
|
|
VALUE N; 00022600
|
|
BEGIN 00022700
|
|
SI:=B; DI:=T; DS:=N CHR; DS:=6 LIT " " 00022800
|
|
END OF PROCEDURE MOVER; 00022900
|
|
STREAM PROCEDURE SHIFT(A,S,N); 00023000
|
|
VALUE S,N; 00023100
|
|
BEGIN 00023200
|
|
SI:=LOC S; SI:=SI+7; IF SC!"0" THEN 00023300
|
|
BEGIN 00023400
|
|
SI:=A; SI:=SI+S; DI:=A; DS:=N CHR 00023500
|
|
END 00023600
|
|
END OF PROCEDURE SHIFT; 00023700
|
|
BOOLEAN STREAM PROCEDURE DECIMAL(B,NCH); 00023800
|
|
VALUE NCH; 00023900
|
|
BEGIN 00024000
|
|
SI:=B; TALLY:=0; NCH(IF SC="." THEN BEGIN TALLY:=1; JUMP00024100
|
|
OUT; END; SI:=SI+1); DECIMAL:=TALLY 00024200
|
|
END OF PROCEDURE DECIMAL; 00024300
|
|
STREAM PROCEDURE MOVE(B,T,N); 00024400
|
|
VALUE N; 00024500
|
|
BEGIN 00024600
|
|
SI:=B; DI:=T; DS:=N CHR; DS:=20 LIT "0" 00024700
|
|
END OF PROCEDURE MOVE; 00024800
|
|
PROCEDURE READVAL(V,STA); 00024900
|
|
VALUE STA; INTEGER STA; REAL V; 00025000
|
|
BEGIN 00025100
|
|
INTEGER GP; 00025200
|
|
FORMAT FSO(X8,"{!TYPE VALUE AGAIN.{!~"); 00025300
|
|
LABEL RER,XIT,TRYAGIN; 00025400
|
|
ARRAY RD1[0:7]; 00025500
|
|
ALPHA LA,COMA; 00025600
|
|
LA:=31; COMA:=58; 00025700
|
|
TRYAGIN:READ(TTIN(STA),8,RD1[*]); 00025800
|
|
GP:=FINDCH(RD1[1],LA); 00025900
|
|
IF ANYFUNNYCHRS(RD1[1],GP) THEN GO TO RER; 00026000
|
|
PUTCHRIN(RD1[1],GP,COMA); GP:=GP+1; 00026100
|
|
MOVER(RD1[1],RD1[0],GP); 00026200
|
|
READ(RD1[*],/,V)[:RER]; GO TO XIT; 00026300
|
|
RER: WRITE(TTOUT(STA),FSO); GO TO TRYAGIN; 00026400
|
|
XIT:END OF PROCEDURE READVAL; 00026500
|
|
PROCEDURE READROW(N,A,STA); 00026600
|
|
VALUE N,STA; INTEGER N,STA; ARRAY A[0]; 00026700
|
|
BEGIN 00026800
|
|
INTEGER GP,I,J,CCM; 00026900
|
|
ALPHA LA,COMA; 00027000
|
|
LABEL MORE,XIT,R; 00027100
|
|
FORMAT F1(X8,"{!TYPING ERROR. VALID CHARACTERS ARE 0",00027200
|
|
"123456789+-,.@. ~"/X8," TYPE LINE AGAIN.{!~"), 00027300
|
|
F2(X8,"{!~"); 00027400
|
|
ARRAY RD1[0:7]; 00027500
|
|
J:=1; LA:=31; COMA:=58; 00027600
|
|
MORE: READ(TTIN(STA),8,RD1[*]); 00027700
|
|
GP:=FINDCH(RD1[1],LA); 00027800
|
|
IF ANYFUNNYCHRS(RD1[1],GP) THEN GO TO R; 00027900
|
|
IF NOT LASTCOMMA(RD1[1],GP-1) THEN 00028000
|
|
BEGIN 00028100
|
|
PUTCHRIN(RD1[1],GP,COMA); GP:=GP+1 00028200
|
|
END; 00028300
|
|
CCM:=COUNTCOMMAS(RD1[1],GP)-1; 00028400
|
|
IF J+CCM>N THEN 00028500
|
|
BEGIN 00028600
|
|
I:=0; 00028700
|
|
I.[36:6]:=1; 00028800
|
|
WRITE (TTOUT(STA),ERR,0,I,3,6,MESSAGE[22],MESSAGE[23], 00028900
|
|
MESSAGE[24],1,"I",2,J+CCM-N)[:XIT]; 00029000
|
|
GO TO MORE; 00029100
|
|
END; 00029200
|
|
MOVER(RD1[1],RD1[0],GP); 00029300
|
|
READ(RD1[*],/,FOR I:=J STEP 1 UNTIL J+CCM DO A[I])[:R]00029400
|
|
; J:=J+CCM+1; 00029500
|
|
WRITE(TTOUT(STA),F2); 00029600
|
|
IF J{N THEN GO TO MORE ELSE GO TO XIT; 00029700
|
|
R: WRITE(TTOUT(STA),F1); GO TO MORE; 00029800
|
|
XIT:END OF PROCEDURE READROW; 00029900
|
|
PROCEDURE PRINT(RD1); 00030000
|
|
ARRAY RD1[0]; 00030100
|
|
BEGIN 00030200
|
|
ALPHA ARRAY RD2[0:8]; 00030300
|
|
ALPHA LA; 00030400
|
|
INTEGER I,J; 00030500
|
|
LABEL MORE; 00030600
|
|
LA:=31; 00030700
|
|
MORE: IF FINDCH(RD1[1],LA)+1>56 THEN 00030800
|
|
BEGIN 00030900
|
|
MOVER(RD1[0],RD2[0],63); 00031000
|
|
PUTCHRIN(RD2[7],7,LA); 00031100
|
|
FOR I:=1 STEP 7 WHILE J:=FINDCH(RD1[I+7],LA)+1>56 DO 00031200
|
|
SHIFT(RD1[I],55,56); 00031300
|
|
SHIFT(RD1[I],55,J+1); 00031400
|
|
WRITE (TTOUT(STA),8,RD2[*]); 00031500
|
|
GO TO MORE; 00031600
|
|
END; 00031700
|
|
WRITE (TTOUT(STA),8,RD1[*]); 00031800
|
|
END OF PROCEDURE PRINT; 00031900
|
|
COMMENT----------------------------------------------------------------;00032000
|
|
PROCEDURE SKIPBLANKS; 00032100
|
|
BEGIN 00032200
|
|
LABEL MORESPACE; 00032300
|
|
MORESPACE: IF FINDCH(RD[0],BLNK)=0 THEN 00032400
|
|
BEGIN 00032500
|
|
SHIFT(RD[0],1,GP:=GP-1); 00032600
|
|
SKIPOVER:=SKIPOVER+1; 00032700
|
|
GO TO MORESPACE; 00032800
|
|
END; 00032900
|
|
END OF PROCEDURE SKIPBLANKS; 00033000
|
|
BOOLEAN PROCEDURE DUMPTHISONE; 00033100
|
|
BEGIN 00033200
|
|
DUMPTHISONE:=FALSE; 00033300
|
|
IF DUMB=5 THEN 00033400
|
|
BEGIN 00033500
|
|
WRITE (TTOUT(STA),FO2); 00033600
|
|
DUMB:=6; 00033700
|
|
END 00033800
|
|
ELSE IF DUMB}7 THEN 00033900
|
|
DUMPTHISONE:=TRUE; 00034000
|
|
END OF PROCEDURE DUMPTHISONE; 00034100
|
|
COMMENT PROCEDURES ARE INSERTED IN THIS SPACE 00034200
|
|
***********************************************************************;00034300
|
|
PROCEDURE MREAD(N); 00034400
|
|
ARRAY N[0]; 00034500
|
|
BEGIN 00034600
|
|
INTEGER K; 00034700
|
|
FOR K:=1 STEP 1 UNTIL N[2] DO 00034800
|
|
READROW(N[3],MATRIX[N[1],K,*],STA); 00034900
|
|
END OF PROCEDURE MREAD; 00035000
|
|
PROCEDURE VREAD(N); 00035100
|
|
ARRAY N[0]; 00035200
|
|
READROW(N[2],VECTOR[N[1],*],STA); 00035300
|
|
PROCEDURE PREAD(N); 00035400
|
|
ARRAY N[0]; 00035500
|
|
READROW(N[2],POLY[N[1],*],STA); 00035600
|
|
PROCEDURE READARRAY(V); 00035700
|
|
REAL V; 00035800
|
|
BEGIN 00035900
|
|
INTEGER GP; 00036000
|
|
FORMAT FI(R20.10); 00036100
|
|
ALPHA QUEST,DCIM; ARRAY RD1[0:7]; 00036200
|
|
QUEST:=12; DCIM:=26; 00036300
|
|
GP:=FINDCH(RD[0],QUEST); 00036400
|
|
IF NOT DECIMAL(RD[0],GP) THEN 00036500
|
|
BEGIN 00036600
|
|
PUTCHRIN(RD[0],GP,DCIM); GP:=GP+1; 00036700
|
|
END; MOVE(RD[0],RD1[0],GP); 00036800
|
|
READ(RD1[*],FI,V); 00036900
|
|
END OF PROCEDURE READARRAY; 00037000
|
|
PROCEDURE MWRITE(NUM); 00037100
|
|
ARRAY NUM[0]; 00037200
|
|
BEGIN 00037300
|
|
FORMAT FM(X8,"{!M",A1," (",I*,",",I*,")={!~"), 00037400
|
|
F1(X8,"{!",*(V10.3,X2),"~"), 00037500
|
|
F2(X8,"{!ROW ",I2,": ",5(V10.3,X2),"{!",X12, 00037600
|
|
*(V10.3,X2),"{!~"); 00037700
|
|
ALPHA ARRAY RD1[0:19]; 00037800
|
|
INTEGER I,J; 00037900
|
|
ALPHA LA; 00038000
|
|
LABEL MORE; 00038100
|
|
LA:=31; 00038200
|
|
WRITE (TTOUT(STA),FM,NUM[1],IF NUM[2]<10 THEN 1 ELSE 2, 00038300
|
|
NUM[2],IF NUM[3]<10 THEN 1 ELSE 2,NUM[3]); 00038400
|
|
FOR I~1 STEP 1 UNTIL NUM[2] DO 00038500
|
|
BEGIN 00038600
|
|
IF NUM[3]{6 THEN 00038700
|
|
WRITE (RD1[*],F1,NUM[3],FOR J~1 STEP 1 UNTIL NUM[3] DO 00038800
|
|
[IF MATRIX[NUM[1],I,J]<@-1 OR MATRIX[NUM[1],I,J]> 00038900
|
|
@5 THEN "E" ELSE "F",MATRIX[NUM[1],I,J]]) ELSE 00039000
|
|
WRITE (RD1[*],F2,I,FOR J~1,2,3,4,5 DO [IF MATRIX[NUM[1], 00039100
|
|
I,J]<@-1 OR MATRIX[NUM[1],I,J]>@5 THEN "E" ELSE 00039200
|
|
"F",MATRIX[NUM[1],I,J]],NUM[3]-5,FOR J~6 STEP 1 00039300
|
|
UNTIL NUM[3] DO [IF MATRIX[NUM[1],I,J]<@-1 OR 00039400
|
|
MATRIX[NUM[1],I,J]>@5 THEN "E" ELSE "F",MATRIX 00039500
|
|
[NUM[1],I,J]]); 00039600
|
|
PRINT(RD1); 00039700
|
|
END; 00039800
|
|
WRITE (TTOUT(STA),<X8,"{!~">); 00039900
|
|
END OF PROCEDURE MWRITE; 00040000
|
|
PROCEDURE VWRITE(NUM); 00040100
|
|
ARRAY NUM[0]; 00040200
|
|
BEGIN 00040300
|
|
FORMAT FV(X8,"{!V",A1," (",I*,")={!~"), 00040400
|
|
F1(X8,"{!",*(V10.3,X2),"{!",*(V10.3,X2),"~"); 00040500
|
|
ALPHA ARRAY RD1[0:16]; 00040600
|
|
INTEGER I; 00040700
|
|
ALPHA LA; 00040800
|
|
LABEL MORE; 00040900
|
|
LA:=31; 00041000
|
|
WRITE (TTOUT(STA),FV,NUM[1],IF NUM[2]<10 THEN 1 ELSE 2, 00041100
|
|
NUM[2]); 00041200
|
|
IF NUM[2]{6 THEN 00041300
|
|
WRITE (RD1[*],F1,NUM[2],FOR I~1 STEP 1 UNTIL NUM[2] DO 00041400
|
|
[IF VECTOR[NUM[1],I]<@-1 OR VECTOR[NUM[1],I]>@5 THEN00041500
|
|
"E" ELSE "F",VECTOR[NUM[1],I]],-1) ELSE 00041600
|
|
WRITE (RD1[*],F1,6,FOR I~1,2,3,4,5,6 DO [IF VECTOR 00041700
|
|
[NUM[1],I]<@-1 OR VECTOR[NUM[1],I]>@5 THEN "E" ELSE "F",00041800
|
|
VECTOR[NUM[1],I]],NUM[2]-6,FOR I~7 STEP 1 UNTIL 00041900
|
|
NUM[2] DO [IF VECTOR[NUM[1],I]<@-1 OR VECTOR[NUM[1],00042000
|
|
I]>@5 THEN "E" ELSE "F",VECTOR[NUM[1],I]]); 00042100
|
|
PRINT(RD1); 00042200
|
|
WRITE (TTOUT(STA),<X8,"{!~">); 00042300
|
|
END OF PROCEDURE VWRITE; 00042400
|
|
PROCEDURE PWRITE(NUM); 00042500
|
|
ARRAY NUM[0]; 00042600
|
|
BEGIN 00042700
|
|
FORMAT FP(X8,"{!P",A1," (",I*,")={!~"), 00042800
|
|
F1(X8,"{!",*(V10.3,X2),"{!",*(V10.3,X2),"{!",*(V10.3,X2),00042900
|
|
"{!",*(V10.3,X2),"~"); 00043000
|
|
ALPHA ARRAY RD1[0:32]; 00043100
|
|
INTEGER I; 00043200
|
|
ALPHA LA; 00043300
|
|
LABEL MORE; 00043400
|
|
LA:=31; 00043500
|
|
WRITE (TTOUT(STA),FP,NUM[1],IF NUM[2]-1<10 AND NUM[2]-1> 00043600
|
|
-1 THEN 1 ELSE 2,NUM[2]-1); 00043700
|
|
IF NUM[2]{6 THEN 00043800
|
|
WRITE (RD1[*],F1,NUM[2],FOR I~1 STEP 1 UNTIL NUM[2] DO 00043900
|
|
[IF POLY[NUM[1],I]<@-1 OR POLY[NUM[1],I]>@5 THEN 00044000
|
|
"E" ELSE "F",POLY[NUM[1],I]],-1,-1,-1) ELSE 00044100
|
|
IF NUM[2]{12 THEN 00044200
|
|
WRITE (RD1[*],F1,6,FOR I~1,2,3,4,5,6 DO [IF POLY[NUM[1], 00044300
|
|
I]<@-1 OR POLY[NUM[1],I]>@5 THEN "E" ELSE "F",POLY 00044400
|
|
[NUM[1],I]],NUM[2]-6,FOR I~7 STEP 1 UNTIL NUM[2] DO 00044500
|
|
[IF POLY[NUM[1],I]<@-1 OR POLY[NUM[1],I]>@5 THEN "E"00044600
|
|
ELSE "F",POLY[NUM[1],I]],-1,-1) ELSE 00044700
|
|
IF NUM[2]{18 THEN 00044800
|
|
WRITE (RD1[*],F1,6,FOR I~1,2,3,4,5,6 DO [IF POLY[NUM[1], 00044900
|
|
I]<@-1 OR POLY[NUM[1],I]>@5 THEN "E" ELSE "F",POLY 00045000
|
|
[NUM[1],I]],6,FOR I~7,8,9,10,11,12 DO [IF POLY 00045100
|
|
[NUM[1],I]<@-1 OR POLY[NUM[1],I]>@5 THEN "E" ELSE 00045200
|
|
"F",POLY[NUM[1],I]],NUM[2]-12,FOR I~13 STEP 1 UNTIL 00045300
|
|
NUM[2] DO [IF POLY[NUM[1],I]<@-1 OR POLY[NUM[1],I]> 00045400
|
|
@5 THEN "E" ELSE "F",POLY[NUM[1],I]],-1) ELSE 00045500
|
|
WRITE (RD1[*],F1,6,FOR I~1,2,3,4,5,6 DO [IF POLY[NUM[1], 00045600
|
|
I]<@-1 OR POLY[NUM[1],I]>@5 THEN "E" ELSE "F",POLY 00045700
|
|
[NUM[1],I]],6,FOR I~7,8,9,10,11,12 DO [IF POLY 00045800
|
|
[NUM[1],I]<@-1 OR POLY[NUM[1],I]>@5 THEN "E" ELSE 00045900
|
|
"F",POLY[NUM[1],I]],6,FOR I~13,14,15,16,17,18 DO [IF00046000
|
|
POLY[NUM[1],I]<@-1 OR POLY[NUM[1],I]>@5 THEN "E" 00046100
|
|
ELSE "F",POLY[NUM[1],I]],NUM[2]-18,FOR I~19 STEP 1 00046200
|
|
UNTIL NUM[2] DO [IF POLY[NUM[1],I]<@-1 OR POLY 00046300
|
|
[NUM[1],I]>@5 THEN "E" ELSE "F",POLY[NUM[1],I]]); 00046400
|
|
PRINT(RD1); 00046500
|
|
WRITE (TTOUT(STA),<X8,"{!~">); 00046600
|
|
END OF PROCEDURE PWRITE; 00046700
|
|
PROCEDURE MADD(A,B,C); 00046800
|
|
ARRAY A,B,C[0,0]; 00046900
|
|
COMMENT C=A+B (11/67); 00047000
|
|
BEGIN 00047100
|
|
INTEGER I,J; 00047200
|
|
C[1,0]:= A[1,0]; C[0,1]:= A[0,1]; 00047300
|
|
FOR I:=1 STEP 1 UNTIL A[1,0] DO 00047400
|
|
FOR J:=1 STEP 1 UNTIL A[0,1] DO 00047500
|
|
C[I,J] := A[I,J] + B[I,J]; 00047600
|
|
END OF PROCEDURE MADD; 00047700
|
|
PROCEDURE VADD(A,B,C); 00047800
|
|
ARRAY A,B,C[0]; 00047900
|
|
COMMENT C=A+B (11/67); 00048000
|
|
BEGIN 00048100
|
|
INTEGER I; 00048200
|
|
C[0]:=A[0]; 00048300
|
|
FOR I:=1 STEP 1 UNTIL A[0] DO 00048400
|
|
C[I]:=A[I]+B[I]; 00048500
|
|
END OF PROCEDURE VADD; 00048600
|
|
PROCEDURE QADD(P,Q,PADDQ); 00048700
|
|
ARRAY P,Q,PADDQ[0]; 00048800
|
|
BEGIN 00048900
|
|
INTEGER SMALL,I; 00049000
|
|
IF P[0]>Q[0] THEN 00049100
|
|
BEGIN SMALL:=Q[0]; PADDQ[0]:=P[0]; 00049200
|
|
FOR I:=SMALL+1 STEP 1 UNTIL P[0] DO 00049300
|
|
PADDQ[I]:=P[I] 00049400
|
|
END 00049500
|
|
ELSE 00049600
|
|
BEGIN SMALL:=P[0]; PADDQ[0]:=Q[0]; 00049700
|
|
FOR I:=SMALL+1 STEP 1 UNTIL Q[0] DO 00049800
|
|
PADDQ[I]:=Q[I] 00049900
|
|
END; 00050000
|
|
FOR I:=1 STEP 1 UNTIL SMALL DO PADDQ[I]:=P[I]+Q[I]; 00050100
|
|
END 0F PROCEDURE QADD; 00050200
|
|
PROCEDURE MMULT(A,B,C); 00050300
|
|
ARRAY A,B,C[0,0]; 00050400
|
|
COMMENT C=AB (11/67); 00050500
|
|
BEGIN 00050600
|
|
INTEGER I,J,K; 00050700
|
|
C[1,0]:=A[1,0]; C[0,1]:=B[0,1]; 00050800
|
|
FOR I:=1 STEP 1 UNTIL C[1,0] DO 00050900
|
|
FOR J:=1 STEP 1 UNTIL C[0,1] DO 00051000
|
|
BEGIN 00051100
|
|
C[I,J]:=0; 00051200
|
|
FOR K:=1 STEP 1 UNTIL A[0,1] DO 00051300
|
|
C[I,J]:=C[I,J]+ A[I,K]|B[K,J] 00051400
|
|
END; 00051500
|
|
END OF PROCEDURE MMULT; 00051600
|
|
PROCEDURE VDOT(A,B,C); 00051700
|
|
ARRAY A,B[0]; 00051800
|
|
REAL C; 00051900
|
|
BEGIN 00052000
|
|
INTEGER I; 00052100
|
|
FOR I:=1 STEP 1 UNTIL A[0] DO 00052200
|
|
C:=A[I]|B[I]+C; 00052300
|
|
END OF PROCEDURE VDOT; 00052400
|
|
PROCEDURE QMULT(A,B,PROD); 00052500
|
|
ARRAY A,B,PROD[0]; 00052600
|
|
BEGIN 00052700
|
|
INTEGER I,J; 00052800
|
|
FOR I:=0 STEP 1 UNTIL A[0]+B[0] DO PROD[I]:=0; 00052900
|
|
FOR I:=1 STEP 1 UNTIL A[0] DO 00053000
|
|
FOR J:=1 STEP 1 UNTIL B[0] DO 00053100
|
|
PROD[I+J-1]:=PROD[I+J-1]+A[I]|B[J]; 00053200
|
|
PROD[0]:=A[0]+B[0]-1; 00053300
|
|
END OF PROCEDURE QMULT; 00053400
|
|
PROCEDURE MTV(A,V,R); 00053500
|
|
ARRAY A[0,0],V,R[0]; 00053600
|
|
COMMENT R=AV (MATRIX A POSTMULTIPLIED BY VECT0R) 168;00053700
|
|
BEGIN 00053800
|
|
INTEGER I,J; 00053900
|
|
FOR I:=1 STEP 1 UNTIL A[1,0] DO 00054000
|
|
BEGIN R[I]:=0; 00054100
|
|
FOR J:=1 STEP 1 UNTIL V[0] DO 00054200
|
|
R[I]:=R[I]+A[I,J]|V[J]; 00054300
|
|
END; 00054400
|
|
R[0]:=A[1,0]; 00054500
|
|
END OF PROCEDURE MTV; 00054600
|
|
PROCEDURE CTM(A,B,C); 00054700
|
|
VALUE C; 00054800
|
|
ARRAY A,B[0,0]; 00054900
|
|
REAL C; 00055000
|
|
BEGIN 00055100
|
|
INTEGER I,J; 00055200
|
|
B[1,0]:=A[1,0]; B[0,1]:=A[0,1]; 00055300
|
|
FOR I:=1 STEP 1 UNTIL A[1,0] DO 00055400
|
|
FOR J:=1 STEP 1 UNTIL A[0,1] DO 00055500
|
|
B[I,J]:=A[I,J]|C; 00055600
|
|
END OF PROCEDURE CTM; 00055700
|
|
PROCEDURE CTV(A,B,C); 00055800
|
|
VALUE C; 00055900
|
|
ARRAY A,B[0]; 00056000
|
|
REAL C; 00056100
|
|
BEGIN 00056200
|
|
INTEGER I; 00056300
|
|
B[0]:=A[0]; 00056400
|
|
FOR I:=1 STEP 1 UNTIL A[0] DO 00056500
|
|
B[I]:=A[I]|C; 00056600
|
|
END OF PROCEDURE CTV; 00056700
|
|
PROCEDURE MTRAN(A,B); 00056800
|
|
ARRAY A,B[0,0]; 00056900
|
|
COMMENT B=A TRANSP0SE (12/67); 00057000
|
|
BEGIN 00057100
|
|
INTEGER I,J; 00057200
|
|
FOR I:=1 STEP 1 UNTIL A[1,0] DO 00057300
|
|
FOR J:=1 STEP 1 UNTIL A[0,1] DO 00057400
|
|
B[J,I]:=A[I,J]; 00057500
|
|
B[0,1]:=A[1,0]; B[1,0]:=A[0,1]; 00057600
|
|
END OF PROCEDURE MTRAN; 00057700
|
|
PROCEDURE MID(I,N); 00057800
|
|
VALUE N; INTEGER N; ARRAY I[0,0]; 00057900
|
|
COMMENT GENERATE AN N BY N IDENTITY MATRIX (12/67); 00058000
|
|
BEGIN 00058100
|
|
INTEGER J,K; 00058200
|
|
FOR J:= 0 STEP 1 UNTIL N DO 00058300
|
|
FOR K:= 0 STEP 1 UNTIL N DO I[J,K]:=0; 00058400
|
|
FOR J:= 1 STEP 1 UNTIL N DO I[J,J]:=1; 00058500
|
|
I[0,1]:=I[1,0]:= N; 00058600
|
|
END OF PROCEDURE MID; 00058700
|
|
PROCEDURE MSUB(A,B,C); 00058800
|
|
ARRAY A,B,C[0,0]; 00058900
|
|
COMMENT C=A-B (12/67); 00059000
|
|
BEGIN 00059100
|
|
INTEGER I,J; 00059200
|
|
C[1,0]:=A[1,0]; C[0,1]:=A[0,1]; 00059300
|
|
FOR I:=1 STEP 1 UNTIL A[1,0] DO 00059400
|
|
FOR J:=1 STEP 1 UNTIL A[0,1] DO 00059500
|
|
C[I,J]:=A[I,J] - B[I,J]; 00059600
|
|
END OF PROCEDURE MSUB; 00059700
|
|
PROCEDURE VSUB(A,B,C); 00059800
|
|
ARRAY A,B,C[0]; 00059900
|
|
COMMENT C=A-B (11/67); 00060000
|
|
BEGIN 00060100
|
|
INTEGER I; 00060200
|
|
C[0]:=A[0]; 00060300
|
|
FOR I:=1 STEP 1 UNTIL A[0] DO 00060400
|
|
C[I]:=A[I]-B[I]; 00060500
|
|
END OF PROCEDURE VSUB; 00060600
|
|
PROCEDURE QSUB(P,Q,QSUBQ); 00060700
|
|
ARRAY P,Q,QSUBQ[0]; 00060800
|
|
BEGIN 00060900
|
|
INTEGER SMALL,I; 00061000
|
|
IF P[0]>Q[0] THEN 00061100
|
|
BEGIN SMALL:=Q[0]; QSUBQ[0]:=P[0]; 00061200
|
|
FOR I:=SMALL+1 STEP 1 UNTIL P[0] DO 00061300
|
|
QSUBQ[I]:=P[I] 00061400
|
|
END 00061500
|
|
ELSE 00061600
|
|
BEGIN SMALL:=P[0]; QSUBQ[0]:=Q[0]; 00061700
|
|
FOR I:=SMALL+1 STEP 1 UNTIL Q[0] DO 00061800
|
|
QSUBQ[I]:=-Q[I] 00061900
|
|
END; 00062000
|
|
FOR I:=1 STEP 1 UNTIL SMALL DO QSUBQ[I]:=P[I]-Q[I]; 00062100
|
|
END OF PROCEDURE QSUB; 00062200
|
|
REAL PROCEDURE MDET(B); 00062300
|
|
ARRAY B[0,0]; 00062400
|
|
COMMENT B0003 MODIFIED 11/67; 00062500
|
|
BEGIN 00062600
|
|
INTEGER I,J,K,K2,L,N; REAL BIG,DIAG,TEMP,Q,EPS,D; 00062700
|
|
LABEL D1,D2,D3,EXIT; 00062800
|
|
ARRAY A[0:10,0:10]; 00062900
|
|
FOR I:=0 STEP 1 UNTIL 10 DO 00063000
|
|
FOR J:=0 STEP 1 UNTIL 10 DO 00063100
|
|
A[I,J]:=B[I,J]; 00063200
|
|
N:=A[0,1]; EPS:=@-6; 00063300
|
|
COMMENT THE INPUT MATRIX IS DECOMPOSED INTO TWO TRIANGULAR 00063400
|
|
MATRICES USING ROW PIVOTS. ; 00063500
|
|
00063600
|
|
D ~ 1.0 ; 00063700
|
|
D1: FOR I ~ 1 STEP 1 UNTIL N DO 00063800
|
|
BEGIN 00063900
|
|
L ~ I-1 ; 00064000
|
|
FOR J ~ I STEP 1 UNTIL N DO 00064100
|
|
BEGIN 00064200
|
|
Q~0 ; 00064300
|
|
FOR K ~ 1 STEP 1 UNTIL L DO Q ~ A[J,K] | A[K,I] + Q ; 00064400
|
|
A[J,I] ~ A[J,I] - Q 00064500
|
|
END ; 00064600
|
|
BIG ~ 0 ; K2 ~ I ; 00064700
|
|
D2: FOR K ~ I STEP 1 UNTIL N DO 00064800
|
|
BEGIN 00064900
|
|
IF ABS(A[K,I]) > BIG THEN 00065000
|
|
BEGIN 00065100
|
|
BIG ~ ABS(A[K,I]) ; K2 ~ K 00065200
|
|
END 00065300
|
|
END ; 00065400
|
|
IF BIG < EPS THEN 00065500
|
|
BEGIN 00065600
|
|
D ~ 0 ; GO TO EXIT 00065700
|
|
END ; 00065800
|
|
00065900
|
|
COMMENT "BIG" IS THE LARGEST ELEMENT IN THE COLUMN JUST COMPUTED. 00066000
|
|
IF NECESSARY, A ROW EXCHANGE IS MADE SO THAT "BIG" IS 00066100
|
|
ON THE MAIN DIAGONAL ; 00066200
|
|
00066300
|
|
IF K2 ! I THEN 00066400
|
|
BEGIN 00066500
|
|
D ~ -D ; 00066600
|
|
FOR K ~ 1 STEP 1 UNTIL N DO 00066700
|
|
BEGIN 00066800
|
|
TEMP ~ A[I,K] ; A[I,K] ~ A[K2,K] ; A[K2,K] ~ TEMP 00066900
|
|
END 00067000
|
|
END ; 00067100
|
|
00067200
|
|
COMMENT THE VALUE OF THE DETERMINANT, "D", IS THE PRODUCT OF THE 00067300
|
|
DIAGONAL ELEMENTS OF THE DECOMPOSED MATRIX. ; 00067400
|
|
00067500
|
|
D3: DIAG ~ A[I,I] ; D ~ D | DIAG ; 00067600
|
|
00067700
|
|
COMMENT A ROW OF THE DECOMPOSED MATRIX IS NOW CALCULATED. ; 00067800
|
|
00067900
|
|
FOR J ~ I+1 STEP 1 UNTIL N DO 00068000
|
|
BEGIN 00068100
|
|
Q~0 ; 00068200
|
|
FOR K ~ 1 STEP 1 UNTIL L DO Q ~ A[I,K] | A[K,J] + Q ; 00068300
|
|
A[I,J] ~ (A[I,J]-Q)/DIAG 00068400
|
|
END 00068500
|
|
END ; 00068600
|
|
EXIT: MDET:=D; 00068700
|
|
END OF PROCEDURE MDET; 00068800
|
|
PROCEDURE MINV(B,A); 00068900
|
|
ARRAY A,B[0,0]; 00069000
|
|
COMMENT B0004 MODIFIED 11/67 ; 00069100
|
|
BEGIN 00069200
|
|
INTEGER I,J,K,II,N1,K2,L,N; REAL BIG,TEMP,DIAG,Q,EPS; 00069300
|
|
INTEGER ARRAY F[0:B[0,1]]; LABEL I2,I3,I4,I5,I6,SK3; 00069400
|
|
LABEL SINGULAR; 00069500
|
|
FORMAT F1(X8,"{!MATRIX IS SINGULAR.~"); 00069600
|
|
FOR I:=0 STEP 1 UNTIL 10 DO 00069700
|
|
FOR J:=0 STEP 1 UNTIL 10 DO 00069800
|
|
A[I,J]:=B[I,J]; 00069900
|
|
N:=A[0,1]; EPS:=@-6; 00070000
|
|
COMMENT THIS PROCEDURE COMPUTES THE INVERSE OF A MATRIX. IF THE 00070100
|
|
MATRIX TO BE INVERTED IS SINGULAR, AN EXIT IS MADE TO THE 00070200
|
|
NON-LOCAL LABEL "SINGULAR". THE INVERSE MATRIX REPLACES 00070300
|
|
THE ORIGINAL MATRIX IN MEMORY. 00070400
|
|
00070500
|
|
R.D. RODMAN, 00070600
|
|
(PROFESSIONAL SERVICES DIVISIONAL GROUP), 00070700
|
|
00070800
|
|
CARD SEQUENCE BEGINS WITH INVS0010. 00070900
|
|
FIRST RELEASE 12/01/62. ; 00071000
|
|
00071100
|
|
COMMENT THE MATRIX IS TRIANGULARIZED USING ROW PIVOTS. IF THE 00071200
|
|
LARGEST ELEMENT IN A NEWLY CALCULATED COLUMN IS, IN 00071300
|
|
ABSOLUTE VALUE, LESS THAN EPS, AN EXIT IS MADE TO THE 00071400
|
|
00071500
|
|
NON-LOCAL LABEL "SINGULAR". ; 00071600
|
|
I2: FOR I ~ 1 STEP 1 UNTIL N DO 00071700
|
|
BEGIN 00071800
|
|
II ~ I-1 ; 00071900
|
|
FOR J ~ I STEP 1 UNTIL N DO 00072000
|
|
BEGIN 00072100
|
|
Q ~ 0 ; 00072200
|
|
FOR K ~ 1 STEP 1 UNTIL II DO Q ~ A[J,K] | A[K,I] + Q ; 00072300
|
|
A[J,I] ~ A[J,I] - Q 00072400
|
|
END ; 00072500
|
|
BIG ~ 0 ; K2 ~ I ; 00072600
|
|
I3: FOR K ~ I STEP 1 UNTIL N DO 00072700
|
|
BEGIN 00072800
|
|
IF ABS(A[K,I]) > BIG THEN 00072900
|
|
BEGIN 00073000
|
|
BIG ~ ABS(A[K,I]) ; K2 ~ K 00073100
|
|
END 00073200
|
|
END ; 00073300
|
|
IF BIG { EPS THEN 00073400
|
|
BEGIN 00073500
|
|
WRITE (TTOUT(STA),F1); 00073600
|
|
GO TO SINGULAR; 00073700
|
|
END; 00073800
|
|
F[I] ~ K2 ; 00073900
|
|
IF K2 ! I THEN 00074000
|
|
I4: FOR K ~ 1 STEP 1 UNTIL N DO 00074100
|
|
BEGIN 00074200
|
|
TEMP ~ A[I,K] ; A[I,K] ~ A[K2,K] ; A[K2,K] ~ TEMP 00074300
|
|
END ; 00074400
|
|
DIAG ~ A[I,I] ; 00074500
|
|
00074600
|
|
COMMENT A PIVOT WAS MADE. A ROW IS NOW CALCULATED. ; 00074700
|
|
00074800
|
|
FOR J ~ I+1 STEP 1 UNTIL N DO 00074900
|
|
BEGIN 00075000
|
|
Q ~ 0 ; 00075100
|
|
FOR K ~ 1 STEP 1 UNTIL II DO Q ~ A[I,K] | A[K,J] + Q ; 00075200
|
|
A[I,J] ~ (A[I,J] - Q) / DIAG 00075300
|
|
END 00075400
|
|
END ; 00075500
|
|
00075600
|
|
COMMENT THE LOWER TRIANGULAR MATRIX IS INVERTED. ; 00075700
|
|
00075800
|
|
I5: FOR I ~ 1 STEP 1 UNTIL N DO 00075900
|
|
BEGIN 00076000
|
|
II ~ I-1 ; DIAG ~ A[I,I] ; 00076100
|
|
FOR J ~ 1 STEP 1 UNTIL I DO 00076200
|
|
BEGIN 00076300
|
|
IF I=J THEN A[I,J] ~ 1/DIAG ELSE 00076400
|
|
BEGIN 00076500
|
|
Q ~ 0 ; 00076600
|
|
FOR K ~ J STEP 1 UNTIL II DO Q ~ A[I,K] | A[K,J] + Q ; 00076700
|
|
A[I,J] ~ -Q/DIAG 00076800
|
|
END 00076900
|
|
END 00077000
|
|
END ; 00077100
|
|
N1 ~ N-1 ; 00077200
|
|
00077300
|
|
COMMENT THE UPPER TRIANGULAR MATRIX IS INVERTED. ; 00077400
|
|
00077500
|
|
FOR I ~ N1 STEP -1 UNTIL 1 DO 00077600
|
|
BEGIN 00077700
|
|
II ~ I+1 ; 00077800
|
|
FOR J ~ N STEP -1 UNTIL II DO 00077900
|
|
BEGIN 00078000
|
|
Q~0 ; L ~ J-1 ; 00078100
|
|
FOR K ~ II STEP 1 UNTIL L DO Q ~ A[I,K] | A[K,J] + Q ; 00078200
|
|
A[I,J] ~ -A[I,J] - Q 00078300
|
|
END 00078400
|
|
END ; 00078500
|
|
00078600
|
|
COMMENT THE INVERTED TRIANGULAR MATRICES ARE MULTIPLIED TOGETHER.00078700
|
|
THEIR PRODUCT IS THE DESIRED INVERSE. ; 00078800
|
|
00078900
|
|
FOR I ~ 1 STEP 1 UNTIL N1 DO 00079000
|
|
FOR J ~ 1 STEP 1 UNTIL N DO 00079100
|
|
BEGIN 00079200
|
|
Q ~ 0 ; 00079300
|
|
IF I}J THEN 00079400
|
|
BEGIN 00079500
|
|
FOR K ~ I+1 STEP 1 UNTIL N DO Q ~ A[I,K] | A[K,J] + Q ; 00079600
|
|
A[I,J] ~ A[I,J] + Q 00079700
|
|
END 00079800
|
|
ELSE 00079900
|
|
BEGIN 00080000
|
|
FOR K ~ J STEP 1 UNTIL N DO Q ~ A[I,K] | A[K,J] + Q ; 00080100
|
|
A[I,J] ~ Q 00080200
|
|
END 00080300
|
|
END ; 00080400
|
|
00080500
|
|
COMMENT THE COLUMNS OF THE PRODUCT ARE NOW PERMUTED IN SUCH A WAY 00080600
|
|
AS TO COMPENSATE FOR THE ROW PIVOTS MADE IN THE COURSE OF 00080700
|
|
TRIANGULARIZATION. ; 00080800
|
|
00080900
|
|
I6: FOR J ~ N STEP -1 UNTIL 1 DO 00081000
|
|
BEGIN 00081100
|
|
K2 ~ F[J] ; 00081200
|
|
IF F[J] = J THEN GO TO SK3 ; 00081300
|
|
FOR K ~ 1 STEP 1 UNTIL N DO 00081400
|
|
BEGIN 00081500
|
|
TEMP ~ A[K,K2] ; A[K,K2] ~ A[K,J] ; A[K,J] ~ TEMP 00081600
|
|
END ; 00081700
|
|
SK3: END; 00081800
|
|
SINGULAR: END OF PROCEDURE MINV; 00081900
|
|
PROCEDURE SOLVE(M,X,V); 00082000
|
|
REAL ARRAY M[0,0],V,X[0]; 00082100
|
|
BEGIN 00082200
|
|
FORMAT F1(X8,"{!THE COEFFICIENT MATRIX IS SINGULAR.~"); 00082300
|
|
INTEGER I,J,K,K2,L,N; 00082400
|
|
REAL BIG,TEMP,DIAG,Q; 00082500
|
|
OWN INTEGER ARRAY F[0:M[1,0]]; 00082600
|
|
REAL ARRAY D,RC,CC[0:M[1,0]],A[0:10,0:10],C[0:10]; 00082700
|
|
OWN REAL ARRAY B[0:M[1,0],0:M[1,0]]; 00082800
|
|
LABEL EXIT; 00082900
|
|
FOR I~0 STEP 1 UNTIL 10 DO 00083000
|
|
FOR J~0 STEP 1 UNTIL 10 DO 00083100
|
|
A[I,J]:=M[I,J]; 00083200
|
|
FOR I~0 STEP 1 UNTIL 10 DO 00083300
|
|
C[I]:=V[I]; 00083400
|
|
X[0]:=C[0]; 00083500
|
|
N:=M[1,0]; 00083600
|
|
COMMENT THE COEFFICIENT MATRIX IS TRIANGULARIZED; 00083700
|
|
FOR I:= 1 STEP 1 UNTIL N DO 00083800
|
|
FOR J:= 1 STEP 1 UNTIL N DO 00083900
|
|
B[I,J]:= A[I,J]; 00084000
|
|
FOR I:=1 STEP 1 UNTIL N DO 00084100
|
|
BEGIN 00084200
|
|
L:= I - 1; 00084300
|
|
FOR J ~ I STEP 1 UNTIL N DO 00084400
|
|
BEGIN 00084500
|
|
Q:= 0; 00084600
|
|
FOR K:= 1 STEP 1 UNTIL L DO Q:= B[J,K] | B[K,I] + Q; 00084700
|
|
B[J,I] :=B[J,I] - Q 00084800
|
|
END; 00084900
|
|
BIG:= 0; K2:= I; 00085000
|
|
FOR K:=I STEP 1 UNTIL N DO 00085100
|
|
BEGIN 00085200
|
|
IF ABS(B[K,I]) GTR BIG THEN 00085300
|
|
BEGIN 00085400
|
|
BIG:= ABS(B[K,I]); K2:= K 00085500
|
|
END 00085600
|
|
END; 00085700
|
|
IF BIG LEQ 0.5|N|@-10 THEN 00085800
|
|
BEGIN 00085900
|
|
WRITE (TTOUT(STA),F1); 00086000
|
|
GO TO EXIT; 00086100
|
|
END; 00086200
|
|
F[I]:=K2; 00086300
|
|
IF K2 NEQ I THEN 00086400
|
|
FOR K:=1 STEP 1 UNTIL N DO 00086500
|
|
BEGIN 00086600
|
|
TEMP:= A[K2,K]; A[K2,K]:= A[I,K]; A[I,K]:= TEMP; 00086700
|
|
TEMP:= B[K2,K]; B[K2,K]:= B[I,K]; B[I,K]:= TEMP; 00086800
|
|
END; 00086900
|
|
DIAG:= B[I,I]; 00087000
|
|
FOR J:=I+1 STEP 1 UNTIL N DO 00087100
|
|
BEGIN 00087200
|
|
Q:= 0; 00087300
|
|
FOR K:= 1 STEP 1 UNTIL L DO Q:= B[I,K] | B[K,J] + Q; 00087400
|
|
B[I,J]:= (B[I,J] - Q)/DIAG 00087500
|
|
END 00087600
|
|
END; 00087700
|
|
COMMENT THE REDUCED "C" VECTOR IS COMPUTED. ; 00087800
|
|
FOR I:=1 STEP 1 UNTIL N DO 00087900
|
|
BEGIN 00088000
|
|
TEMP:= C[F[I]]; C[F[I]]:= C[I]; D[I]:= C[I]:= TEMP 00088100
|
|
END; 00088200
|
|
COMMENT THE BACKWARD PASS,GIVING THE DESIRED SOLUTION, 00088300
|
|
IS EXECUTED. ; 00088400
|
|
FOR I:= 1 STEP 1 UNTIL N DO 00088500
|
|
BEGIN 00088600
|
|
L:= I - 1; Q:= 0; 00088700
|
|
FOR K:=1 STEP 1 UNTIL L DO Q:= B[I,K] | D[K] + Q; 00088800
|
|
D[I]:= (D[I] - Q)/B[I,I] 00088900
|
|
END; 00089000
|
|
FOR I:=N STEP -1 UNTIL 1 DO 00089100
|
|
BEGIN 00089200
|
|
Q:= 0; 00089300
|
|
FOR K:= I+1 STEP 1 UNTIL N DO Q:= B[I,K] | X[K] + Q; 00089400
|
|
X[I]:= D[I] - Q 00089500
|
|
END; 00089600
|
|
EXIT: END; 00089700
|
|
PROCEDURE MEVE(B,A); 00089800
|
|
ARRAY A,B[0,0]; 00089900
|
|
COMMENT ALGORITHM 270 NOV 1965 A. NEWHOUSE; 00090000
|
|
BEGIN 00090100
|
|
INTEGER ARRAY R,C[0:B[0,1]]; INTEGER I,J,K,M,JJ,KK,T,N;00090200
|
|
REAL MAX,TEMP,EPS; LABEL L,SORT,REPEAT; 00090300
|
|
INTEGER EC; 00090400
|
|
EPS:=10@-6; N~B[0,1]; 00090500
|
|
FOR I~0 STEP 1 UNTIL 10 DO 00090600
|
|
FOR J~0 STEP 1 UNTIL 10 DO 00090700
|
|
A[I,J]:=B[I,J]; 00090800
|
|
FOR I:=1 STEP 1 UNTIL N DO R[I]:=C[I]:=0; 00090900
|
|
FOR M:=1 STEP 1 UNTIL N DO 00091000
|
|
BEGIN MAX:=0; 00091100
|
|
FOR K:=1 STEP 1 UNTIL N DO 00091200
|
|
BEGIN IF R[K]!0 THEN GO TO L ELSE 00091300
|
|
FOR J:=1 STEP 1 UNTIL N DO 00091400
|
|
IF C[J] =0 AND ABS(A[K,J]) > MAX THEN 00091500
|
|
BEGIN KK:=K; JJ:=J; MAX:=ABS(A[K,J]) 00091600
|
|
END J LOOP; 00091700
|
|
L: END K LOOP; 00091800
|
|
IF MAX < EPS THEN GO TO SORT; 00091900
|
|
C[JJ]:=KK; R[KK]:=JJ; TEMP:=1/A[KK,JJ]; A[KK,JJ]:=1;00092000
|
|
FOR J:=1 STEP 1 UNTIL N DO A[KK,J]:=A[KK,J]|TEMP; 00092100
|
|
FOR K:=1 STEP 1 UNTIL KK-1,KK+1 STEP 1 UNTIL N DO 00092200
|
|
BEGIN TEMP:=A[K,JJ]; A[K,JJ]:=0; 00092300
|
|
FOR J:=1 STEP 1 UNTIL N DO 00092400
|
|
BEGIN A[K,J]:= A[K,J]-TEMP | A[KK,J]; 00092500
|
|
IF ABS(A[K,J]) < EPS THEN A[K,J]:=0 00092600
|
|
END; 00092700
|
|
END K LOOP; 00092800
|
|
END M LOOP; 00092900
|
|
SORT: FOR J:=1 STEP 1 UNTIL N DO 00093000
|
|
BEGIN 00093100
|
|
REPEAT: IF C[J] !0 AND J!C[J] THEN 00093200
|
|
BEGIN 00093300
|
|
FOR K:=1 STEP 1 UNTIL N DO 00093400
|
|
IF R[K] =0 THEN 00093500
|
|
BEGIN TEMP:=A[K,J]; 00093600
|
|
A[K,J]:=A[K,C[J]]; A[K,C[J]]:=TEMP 00093700
|
|
END K LOOP; 00093800
|
|
T:=C[J]; C[J]:=C[T]; C[T]:= T; GO TO REPEAT 00093900
|
|
END; 00094000
|
|
END OF CONDITIONAL AND J LOOP; 00094100
|
|
EC:=0; 00094200
|
|
FOR K:= 1 STEP 1 UNTIL N DO 00094300
|
|
IF R[K]=0 THEN 00094400
|
|
BEGIN EC:=EC+1; A[K,K]:=1; 00094500
|
|
IF EC!K THEN 00094600
|
|
BEGIN 00094700
|
|
FOR J:=1 STEP 1 UNTIL N DO A[EC,J]:=A[K,J] 00094800
|
|
END; 00094900
|
|
END OF CONDITI0NAL AND K LOOP; 00095000
|
|
A[1,0]:=EC; 00095100
|
|
END OF PROCEDURE MEV; 00095200
|
|
REAL PROCEDURE MAX(A,N); 00095300
|
|
VALUE N; INTEGER N; ARRAY A[0]; 00095400
|
|
BEGIN 00095500
|
|
INTEGER I; 00095600
|
|
REAL M; M:=A[1]; 00095700
|
|
FOR I:=2 STEP 1 UNTIL N DO 00095800
|
|
IF A[I]>M THEN M:=A[I]; 00095900
|
|
MAX:=M 00096000
|
|
END OF PROCEDURE MAX; 00096100
|
|
REAL PROCEDURE MIN(A,N); 00096200
|
|
VALUE N; INTEGER N; ARRAY A[0]; 00096300
|
|
BEGIN 00096400
|
|
INTEGER I; 00096500
|
|
REAL M; M:=A[1]; 00096600
|
|
FOR I:=2 STEP 1 UNTIL N DO 00096700
|
|
IF A[I]<M THEN M:=A[I]; 00096800
|
|
MIN:=M 00096900
|
|
END OF PROCEDURE MIN; 00097000
|
|
REAL PROCEDURE CABS(X,Y); 00097100
|
|
VALUE X,Y; REAL X,Y; 00097200
|
|
BEGIN 00097300
|
|
COMMENT ALGORITHM 312 OCT. 1967 <PAUL FRIEDLAND>; 00097400
|
|
X:=ABS(X); Y:=ABS(Y); 00097500
|
|
CABS:=IF X=0 THEN Y ELSE IF Y=0 THEN X ELSE 00097600
|
|
IF X>Y THEN X|SQRT(1+(Y/X)*2) 00097700
|
|
ELSE Y|SQRT(1+(X/Y)*2) 00097800
|
|
END OF PROCEDURE CABS; 00097900
|
|
PROCEDURE CMULT(XR,XI,YR,YI,AR,AI); 00098000
|
|
VALUE XR,XI,YR,YI; REAL XR,XI,YR,YI,AR,AI; 00098100
|
|
BEGIN 00098200
|
|
AR:=XR|YR-XI|YI; AI:=XR|YI+XI|YR 00098300
|
|
END; 00098400
|
|
PROCEDURE CADD(XR,XI,YR,YI,AR,AI); 00098500
|
|
VALUE XR,XI,YR,YI; REAL XR,XI,YR,YI,AR,AI; 00098600
|
|
BEGIN 00098700
|
|
AR:=XR+YR; AI:=XI+YI 00098800
|
|
END; 00098900
|
|
REAL PROCEDURE ABSCPOLY(N,CO,ZR,ZI); 00099000
|
|
VALUE N; INTEGER N; ARRAY CO[0]; REAL ZR,ZI; 00099100
|
|
BEGIN 00099200
|
|
INTEGER I; 00099300
|
|
REAL YR,YI; 00099400
|
|
YR:=CO[N]; 00099500
|
|
FOR I:=N STEP -1 UNTIL 1 DO 00099600
|
|
BEGIN 00099700
|
|
CMULT(YR,YI,ZR,ZI,YR,YI); 00099800
|
|
CADD(YR,YI,CO[I-1],0,YR,YI) 00099900
|
|
END; 00100000
|
|
ABSCPOLY:=CABS(YR,YI) 00100100
|
|
END OF PROCEDURE ABSCPOLY; 00100200
|
|
PROCEDURE FINDROOT(A,N,ROOTR,ROOTI); 00100300
|
|
VALUE N; INTEGER N; ARRAY A[0]; REAL ROOTR,ROOTI; 00100400
|
|
BEGIN 00100500
|
|
REAL GUESR,INCR,COMP,GUESI,PGUS; 00100600
|
|
INTEGER I,FLG1,FLG2; 00100700
|
|
ARRAY NBR,NBI,PNB[0:4]; 00100800
|
|
LABEL L1,L2,L3,L4,L5,L6,L7,XIT; 00100900
|
|
IF N=1 THEN 00101000
|
|
BEGIN 00101100
|
|
ROOTR:=-A[0]/A[1]; ROOTI:=0; GO TO XIT 00101200
|
|
END; 00101300
|
|
GUESR:=GUESI:=FLG1:=FLG2:=0; INCR:=0.5; COMP:=@-20; 00101400
|
|
L1: IF FLG1<5 OR FLG2>0 THEN 00101500
|
|
BEGIN 00101600
|
|
FLG1:=FLG1+1; GO TO L3 00101700
|
|
END; 00101800
|
|
L2: FLG1:=0; INCR:=8.0|INCR; 00101900
|
|
L3: NBR[1]:=GUESR +INCR; NBI[1]:=GUESI; 00102000
|
|
NBR[2]:=GUESR-INCR; NBI[2]:=GUESI; 00102100
|
|
NBR[3]:=GUESR; NBI[3]:=GUESI+INCR; 00102200
|
|
NBR[4]:=GUESR; NBI[4]:=GUESI-INCR; 00102300
|
|
PGUS:=ABSCPOLY(N,A,GUESR,GUESI); 00102400
|
|
FOR I:= 1,2,3,4 DO 00102500
|
|
PNB[I]:=ABSCPOLY(N,A,NBR[I],NBI[I]); 00102600
|
|
IF FLG2>27 THEN GO TO L4; 00102700
|
|
IF PNB[1]<@-30 AND PNB[2]<@-30 AND PNB[3]<@-30 00102800
|
|
AND PNB[4]<@-30 THEN GO TO L4; 00102900
|
|
IF MAX(PNB,4)-MIN(PNB,4)<@-20 THEN GO TO L2; 00103000
|
|
L4: IF PGUS!0 THEN GO TO L6; 00103100
|
|
L5: ROOTR:=GUESR; ROOTI:=GUESI; 00103200
|
|
GO TO XIT; 00103300
|
|
L6: FOR I:=1,2,3,4 DO IF PNB[I]=0 THEN 00103400
|
|
BEGIN 00103500
|
|
ROOTR:=NBR[I]; ROOTI:=NBI[I]; 00103600
|
|
GO TO XIT 00103700
|
|
END; 00103800
|
|
FOR I:=1,2,3,4 DO IF PGUS>PNB[I] THEN GO TO L7; 00103900
|
|
INCR:= INCR/2; 00104000
|
|
IF INCR<COMP OR FLG2>50 THEN GO TO L5; 00104100
|
|
FLG2:=FLG2+1; GO TO L3; 00104200
|
|
L7: FOR I:=1,2,3,4 DO IF PNB[I]=MIN(PNB,4) THEN 00104300
|
|
BEGIN 00104400
|
|
GUESR:=NBR[I]; GUESI:=NBI[I]; GO TO L1 00104500
|
|
END; 00104600
|
|
XIT:END OF PROCEDURE FINDROOT; 00104700
|
|
PROCEDURE DOUBLESYNTHEDIV(A,N,REALROOT,IMAGROOT); 00104800
|
|
VALUE N,REALROOT,IMAGROOT; INTEGER N; REAL REALROOT, 00104900
|
|
IMAGROOT; ARRAY A[0]; 00105000
|
|
BEGIN 00105100
|
|
INTEGER I; 00105200
|
|
A[N-1]:=A[N-1]+2|REALROOT|A[N]; 00105300
|
|
FOR I:=2 STEP 1 UNTIL N DO 00105400
|
|
A[N-I]:=A[N-I]-(REALROOT*2+IMAGROOT*2)|A[N-I+2] 00105500
|
|
+2|REALROOT|A[N-I+1]; 00105600
|
|
FOR I:=0 STEP 1 UNTIL N-2 DO A[I]:=A[I+2] 00105700
|
|
END OF PROCEDURE DOUBLESYNTHEDIV; 00105800
|
|
PROCEDURE SYNTHETICDIV(A,N,ROOT); 00105900
|
|
VALUE N,ROOT; INTEGER N; REAL ROOT; ARRAY A[0]; 00106000
|
|
BEGIN 00106100
|
|
INTEGER I; 00106200
|
|
FOR I:=1 STEP 1 UNTIL N DO 00106300
|
|
A[N-I]:=A[N-I]+ROOT|A[N-I+1]; 00106400
|
|
FOR I:=0 STEP 1 UNTIL N-1 DO A[I]:=A[I+1] 00106500
|
|
END OF PROCEDURE SYNTHETICDIV; 00106600
|
|
PROCEDURE PROOTS(B); 00106700
|
|
ARRAY B[0]; 00106800
|
|
BEGIN 00106900
|
|
REAL ARRAY A[0:B[0]]; 00107000
|
|
INTEGER NNOW,N,I; REAL RP,IP; 00107100
|
|
FORMAT FT(X8,"{!ROOT REAL PART IMAG PART{!~"), 00107200
|
|
ANS(X8,"{!",X1,I2,X3,*(E18.11,X4),"~"); 00107300
|
|
NNOW:=N:=B[0]-1; FOR I:=0 STEP 1 UNTIL N DO A[I]:=B[I+1]; 00107400
|
|
WRITE (TTOUT(STA),FT); 00107500
|
|
FOR I:=1 STEP 1 UNTIL N DO 00107600
|
|
BEGIN 00107700
|
|
FINDROOT(A,NNOW,RP,IP); 00107800
|
|
IF IP!0 THEN 00107900
|
|
BEGIN 00108000
|
|
WRITE (TTOUT(STA),ANS,I,2,RP,IP); 00108100
|
|
I:=I+1; 00108200
|
|
WRITE (TTOUT(STA),ANS,I,2,RP,-IP); 00108300
|
|
DOUBLESYNTHEDIV(A,NNOW,RP,IP); 00108400
|
|
NNOW:=NNOW-2; 00108500
|
|
END ELSE 00108600
|
|
BEGIN 00108700
|
|
WRITE (TTOUT(STA),ANS,I,1,RP); 00108800
|
|
SYNTHETICDIV(A,NNOW,RP); 00108900
|
|
NNOW:=NNOW-1; 00109000
|
|
END; 00109100
|
|
END; 00109200
|
|
END OF PROCEDURE PROOTS; 00109300
|
|
COMMENT****************************************************************;00109400
|
|
%FILE DISC DISK SERIAL "PROGRAM""USERS" (2,5,30,SAVE 9); %SPY00109500
|
|
ARRAY WATCHER [0:4]; %SPY00109600
|
|
FORMAT FN(X8,"{!TYPE IN YOUR LAST NAME.{!~"); %SPY00109700
|
|
INTEGER PNTR; WATCHER[3]:=TIME(1); %SPY00109800
|
|
STATION(STA); 00109900
|
|
QUEST:=12; LA:=31; BLNK:=48; EQ:=61; LP:=29; RP:=45; 00110000
|
|
COMA:=58; PL:=16; MI:=44; TI:=43; DI:=49; 00110100
|
|
FILL MESSAGE[*] WITH " ", 00110200
|
|
"INVALI","D VERB", % 01 00110300
|
|
"INVALI","D IDEN","TIFIER", % 02 00110400
|
|
"MISSIN","G -,- ", % 04 00110500
|
|
"MISSIN","G -(- ", % 03 00110600
|
|
"MISSIN","G -)- ", % 05 00110700
|
|
"INVALI","D OPER","ATION ", % 06 00110800
|
|
"MISSIN","G -=- ", % 07 00110900
|
|
" INVA","LID IN","DEX ", % 08 00111000
|
|
"INVALI","D SIZE", % 09 00111100
|
|
"INDEX ","OVERFL","OW OF ", % 10 00111200
|
|
"IDENT."," INVAL","ID FOR"," OPER.", % 11 00111300
|
|
"MISSIN","G -*- ", % 12 00111400
|
|
" DIVIS","ION BY"," ZERO "; % 13 00111500
|
|
FILL OPCODE[*] WITH " ","+","-","*","DET","TRN"," ","IDN", 00111600
|
|
"INV","NUL","/","EVE"; 00111700
|
|
WRITE (TTOUT(STA),FN); %SPY00111800
|
|
READ (TTIN(STA),8,RD[*]); %SPY00111900
|
|
MOVER (RD[1],RD[0],56); %SPY00112000
|
|
PUTCHRIN (RD[0],FINDCH(RD[0],LA),BLNK); %SPY00112100
|
|
SKIPBLANKS; MOVER(RD[0],WATCHER[1],8); %SPY00112200
|
|
WATCHER[0]:=0; SHIFT(WATCHER[0],7,8); %SPY00112300
|
|
PUTCHRIN(WATCHER[2],0,"0"); %SPY00112400
|
|
WATCHER[2]:=WATCHER[3]; %SPY00112500
|
|
WRITE (TTOUT(STA),FO1)[:BRK]; 00112600
|
|
REED: DUMB:=0; 00112700
|
|
DUMREED: OLDDUMB:=DUMB; 00112800
|
|
SKIPOVER:=0; 00112900
|
|
FOR I~1,2,3 DO TYPE[I]~" "; 00113000
|
|
FOR I~1,2,3 DO NUM[I]~0; 00113100
|
|
READ (TTIN(STA),8,RD[*]); 00113200
|
|
GP:=FINDCH(RD[1],LA)+1; 00113300
|
|
MOVER(RD[1],RD[0],GP); 00113400
|
|
PUTCHRIN(RD[0],GP-1,QUEST); 00113500
|
|
SKIPBLANKS; 00113600
|
|
READ(RD[*],<A3>,VERB); 00113700
|
|
IF VERB="TEA" THEN 00113800
|
|
BEGIN 00113900
|
|
WRITE (TTOUT(STA),TEACH)[:REED]; 00114000
|
|
GO TO REED; 00114100
|
|
END ELSE 00114200
|
|
IF VERB="COM" THEN 00114300
|
|
BEGIN 00114400
|
|
WRITE (TTOUT(STA),COMMANDS)[:REED]; 00114500
|
|
GO TO REED; 00114600
|
|
END ELSE 00114700
|
|
IF VERB="OPE" THEN 00114800
|
|
BEGIN 00114900
|
|
WRITE (TTOUT(STA),OPERATIONS)[:REED]; 00115000
|
|
GO TO REED; 00115100
|
|
END ELSE 00115200
|
|
IF VERB="ERR" THEN 00115300
|
|
BEGIN 00115400
|
|
WRITE (TTOUT(STA),ERRORS)[:REED]; 00115500
|
|
GO TO REED; 00115600
|
|
END ELSE 00115700
|
|
IF VERB="STO" OR VERB="QUI" THEN GO TO STOP ELSE 00115800
|
|
IF VERB="SIZ" THEN NEXTSTOP:=0 ELSE 00115900
|
|
IF VERB="INP" OR VERB="REA" THEN NEXTSTOP:=1 ELSE 00116000
|
|
IF VERB="PRI" OR VERB="WRI" THEN NEXTSTOP:=2 ELSE 00116100
|
|
IF VERB="LET" OR VERB="SET" THEN NEXTSTOP:=3 ELSE 00116200
|
|
IF VERB="SOL" THEN NEXTSTOP:=4 ELSE 00116300
|
|
IF VERB="ROO" THEN NEXTSTOP:=5 ELSE 00116400
|
|
BEGIN 00116500
|
|
READ (RD[*],<A*>,IF CPACE:=FINDCH(RD[0],BLNK){6 THEN 00116600
|
|
CPACE ELSE CPACE:=6,VERB); 00116700
|
|
SKIPOVER:=CPACE; 00116800
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,1,2,6,MESSAGE[1],MESSAGE 00116900
|
|
[2],1,"A",CPACE,VERB)[:BRK]; 00117000
|
|
DUMB:=DUMB+1; 00117100
|
|
IF DUMPTHISONE THEN GO TO STOP ELSE GO TO DUMREED; 00117200
|
|
END; 00117300
|
|
IF FINDCH(RD[0],BLNK)}GP THEN 00117400
|
|
BEGIN 00117500
|
|
READ (RD[*],<A6>,VERB); 00117600
|
|
WRITE (TTOUT(STA),ERR,6,1,2,6,MESSAGE[1],MESSAGE[2],1,"A"00117700
|
|
,6,VERB)[:BRK]; 00117800
|
|
DUMB:=DUMB+1; 00117900
|
|
IF DUMPTHISONE THEN GO TO STOP ELSE GO TO DUMREED; 00118000
|
|
END; 00118100
|
|
SHIFT(RD[0],CPACE:=FINDCH(RD[0],BLNK)+1,GP:=GP-CPACE); 00118200
|
|
SKIPBLANKS; 00118300
|
|
SKIPOVER:=SKIPOVER+CPACE+2; 00118400
|
|
READ (RD[*],<A1,I1>,TYPE[1],NUM[1])[:RERR]; 00118500
|
|
IF (TYPE[1]!"M" AND TYPE[1]!"V" AND TYPE[1]!"C" AND 00118600
|
|
TYPE[1]!"P") OR NUM[1]>9 THEN 00118700
|
|
BEGIN 00118800
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,2,3,6,MESSAGE[3],MESSAGE 00118900
|
|
[4],MESSAGE[5],2,"A",1,TYPE[1],NUM[1])[:BRK]; 00119000
|
|
DUMB:=DUMB+1; 00119100
|
|
IF DUMPTHISONE THEN GO TO STOP ELSE GO TO DUMREED; 00119200
|
|
END; 00119300
|
|
IF NEXTSTOP=0 THEN 00119400
|
|
00119500
|
|
BEGIN 00119600
|
|
IF TYPE[1]="M" THEN 00119700
|
|
WRITE (TTOUT(STA),MSIZE,NUM[1],IF NUM[2]:=MATRIX[NUM[1],100119800
|
|
,0]<10 THEN 1 ELSE 2,NUM[2],IF NUM[3]:=MATRIX[NUM[1]00119900
|
|
,0,1]<10 THEN 1 ELSE 2,NUM[3])[:BRK] 00120000
|
|
ELSE IF TYPE[1]="V" THEN 00120100
|
|
WRITE (TTOUT(STA),VSIZE,NUM[1],IF NUM[2]:=VECTOR[NUM[1],000120200
|
|
]<10 THEN 1 ELSE 2,NUM[2])[:BRK] 00120300
|
|
ELSE IF TYPE[1]="P" THEN 00120400
|
|
WRITE (TTOUT(STA),PSIZE,NUM[1],IF NUM[2]:=POLY[NUM[1],0] 00120500
|
|
-1<10 AND NUM[2]>-1 THEN 1 ELSE 2,NUM[2])[:BRK] ELSE00120600
|
|
BEGIN 00120700
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,2,3,6,MESSAGE[3],MESSAGE 00120800
|
|
[4],MESSAGE[5],2,"A",1,TYPE[1],NUM[1])[:BRK]; 00120900
|
|
DUMB:=DUMB+1; 00121000
|
|
IF DUMPTHISONE THEN GO TO STOP ELSE GO TO DUMREED; 00121100
|
|
END; 00121200
|
|
GO TO REED; 00121300
|
|
END ELSE 00121400
|
|
IF NEXTSTOP=1 THEN GO TO INPUT ELSE 00121500
|
|
IF NEXTSTOP=3 THEN GO TO LET ELSE 00121600
|
|
IF NEXTSTOP=4 THEN GO TO SOLVER ELSE 00121700
|
|
IF NEXTSTOP=5 THEN GO TO ROOTS; 00121800
|
|
PRINTER: BEGIN 00121900
|
|
LABEL ENDPRINT; 00122000
|
|
IF TYPE[1]="M" THEN 00122100
|
|
BEGIN 00122200
|
|
NUM[2]:=MATRIX[NUM[1],1,0]; 00122300
|
|
NUM[3]:=MATRIX[NUM[1],0,1]; 00122400
|
|
K:=0; 00122500
|
|
FOR I~1 STEP 1 UNTIL NUM[2] DO 00122600
|
|
FOR J~1 STEP 1 UNTIL NUM[3] DO 00122700
|
|
IF MATRIX[NUM[1],I,J]!0 THEN K:=K+1; 00122800
|
|
IF K=0 THEN 00122900
|
|
BEGIN 00123000
|
|
WRITE (TTOUT(STA),MNULL,NUM[1],IF NUM[2]<10 THEN 1 ELSE 200123100
|
|
,NUM[2],IF NUM[3]<10 THEN 1 ELSE 2,NUM[3])[:BRK]; 00123200
|
|
GO TO ENDPRINT; 00123300
|
|
END; 00123400
|
|
MWRITE(NUM); 00123500
|
|
END ELSE 00123600
|
|
IF TYPE[1]="V" THEN 00123700
|
|
BEGIN 00123800
|
|
NUM[2]:=VECTOR[NUM[1],0]; 00123900
|
|
K:=0; 00124000
|
|
FOR I~1 STEP 1 UNTIL NUM[2] DO 00124100
|
|
IF VECTOR[NUM[1],I]!0 THEN K:=K+1; 00124200
|
|
IF K=0 THEN 00124300
|
|
BEGIN 00124400
|
|
WRITE (TTOUT(STA),VNULL,NUM[1],IF NUM[2]<10 THEN 1 ELSE 200124500
|
|
,NUM[2])[:BRK]; 00124600
|
|
GO TO ENDPRINT; 00124700
|
|
END; 00124800
|
|
VWRITE(NUM); 00124900
|
|
END ELSE 00125000
|
|
IF TYPE[1]="P" THEN 00125100
|
|
BEGIN 00125200
|
|
NUM[2]:=POLY[NUM[1],0]; 00125300
|
|
K:=0; 00125400
|
|
FOR I~1 STEP 1 UNTIL NUM[2] DO 00125500
|
|
IF POLY[NUM[1],I]!0 THEN K:=K+1; 00125600
|
|
IF K=0 THEN 00125700
|
|
BEGIN 00125800
|
|
WRITE (TTOUT(STA),PNULL,NUM[1],IF NUM[2]-1<10 AND NUM[2] 00125900
|
|
-1>-1 THEN 1 ELSE 2,NUM[2]-1)[:BRK]; 00126000
|
|
GO TO ENDPRINT; 00126100
|
|
END; 00126200
|
|
PWRITE(NUM); 00126300
|
|
END ELSE 00126400
|
|
WRITE (TTOUT(STA),WC,NUM[1],IF CONST[NUM[1]]<@-1 OR 00126500
|
|
CONST[NUM[1]]>@5 THEN "E" ELSE "F",CONST[NUM[1]]); 00126600
|
|
ENDPRINT: END; 00126700
|
|
IF DUMPTHISONE THEN GO TO STOP; 00126800
|
|
WRITE (TTOUT(STA),<X8,"{!~">); 00126900
|
|
IF DUMB!OLDDUMB THEN GO TO DUMREED; 00127000
|
|
GO TO REED; 00127100
|
|
INPUT: BEGIN 00127200
|
|
LABEL ENDINPUT; 00127300
|
|
FORMAT FMQUEST(X8,"{!",2A1,"=",A1,"{!~"); 00127400
|
|
IF TYPE[1]="M" THEN 00127500
|
|
BEGIN 00127600
|
|
IF FINDCH(RD[0],LP)<GP THEN 00127700
|
|
BEGIN 00127800
|
|
IF FINDCH(RD[0],COMA)>GP THEN 00127900
|
|
BEGIN 00128000
|
|
SKIPOVER:=SKIPOVER+FINDCH(RD[0],LP)+1; 00128100
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,4,2,6,MESSAGE[6],MESSAGE 00128200
|
|
[7],1,"A",1,LP)[:BRK]; 00128300
|
|
DUMB:=DUMB+1; 00128400
|
|
GO TO ENDINPUT; 00128500
|
|
END; 00128600
|
|
IF FINDCH(RD[0],RP)>GP THEN 00128700
|
|
BEGIN 00128800
|
|
SKIPOVER:=SKIPOVER+FINDCH(RD[0],COMA)+1; 00128900
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,5,2,6,MESSAGE[10],MESSAGE 00129000
|
|
[11],1,"A",1,COMA)[:BRK]; 00129100
|
|
DUMB:=DUMB+1; 00129200
|
|
GO TO ENDINPUT; 00129300
|
|
END; 00129400
|
|
SHIFT(RD[0],CPACE:=FINDCH(RD[0],LP)+1,GP:=GP-CPACE); 00129500
|
|
PUTCHRIN(RD[0],FINDCH(RD[0],RP),COMA); 00129600
|
|
READ (RD[*],/,NUM[2],NUM[3]); 00129700
|
|
IF NUM[2]>10 OR NUM[2]<1 THEN 00129800
|
|
BEGIN 00129900
|
|
SKIPOVER:=SKIPOVER+FINDCH(RD[0],COMA)+2; 00130000
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,8,3,6,MESSAGE[17],MESSAGE 00130100
|
|
[18],MESSAGE[19],1,"I",2,NUM[2])[:BRK]; 00130200
|
|
DUMB:=DUMB+1; 00130300
|
|
GO TO ENDINPUT; 00130400
|
|
END; 00130500
|
|
IF NUM[3]>10 OR NUM[3]<1 THEN 00130600
|
|
BEGIN 00130700
|
|
SHIFT(RD[0],CPACE:=FINDCH(RD[0],COMA)+1,GP:=GP-CPACE); 00130800
|
|
SKIPOVER:=SKIPOVER+CPACE+2; 00130900
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,8,3,6,MESSAGE[17],MESSAGE 00131000
|
|
[18],MESSAGE[19],1,"I",2,NUM[3])[:BRK]; 00131100
|
|
DUMB:=DUMB+1; 00131200
|
|
GO TO ENDINPUT; 00131300
|
|
END; 00131400
|
|
END ELSE 00131500
|
|
BEGIN 00131600
|
|
SKIPOVER:=SKIPOVER+2; 00131700
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,3,2,6,MESSAGE[8],MESSAGE 00131800
|
|
[9],2,"A",1,TYPE[1],NUM[1])[:BRK]; 00131900
|
|
DUMB:=DUMB+1; 00132000
|
|
GO TO ENDINPUT; 00132100
|
|
END; 00132200
|
|
WRITE (TTOUT(STA),FMQUEST,TYPE[1],NUM[1],QUEST); 00132300
|
|
FOR I~0 STEP 1 UNTIL 10 DO 00132400
|
|
FOR J~0 STEP 1 UNTIL 10 DO 00132500
|
|
MATRIX[NUM[1],I,J]~0; 00132600
|
|
MATRIX[NUM[1],1,0]:=NUM[2]; 00132700
|
|
MATRIX[NUM[1],0,1]:=NUM[3]; 00132800
|
|
MREAD(NUM); 00132900
|
|
END ELSE 00133000
|
|
IF TYPE[1]="V" THEN 00133100
|
|
BEGIN 00133200
|
|
IF FINDCH(RD[0],LP)<GP THEN 00133300
|
|
BEGIN 00133400
|
|
IF FINDCH(RD[0],RP)>GP THEN 00133500
|
|
BEGIN 00133600
|
|
SKIPOVER:=SKIPOVER+FINDCH(RD[0],LP)+1; 00133700
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,5,2,6,MESSAGE[10],MESSAGE 00133800
|
|
[11],1,"A",1,LP)[:BRK]; 00133900
|
|
DUMB:=DUMB+1; 00134000
|
|
GO TO ENDINPUT; 00134100
|
|
END; 00134200
|
|
SHIFT(RD[0],CPACE:=FINDCH(RD[0],LP)+1,GP:=GP-CPACE); 00134300
|
|
PUTCHRIN(RD[0],FINDCH(RD[0],RP),COMA); 00134400
|
|
READ (RD[*],/,NUM[2]); 00134500
|
|
IF NUM[2]>10 OR NUM[2]<1 THEN 00134600
|
|
BEGIN 00134700
|
|
SKIPOVER:=SKIPOVER+FINDCH(RD[0],COMA)+2; 00134800
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,8,3,6,MESSAGE[17],MESSAGE 00134900
|
|
[18],MESSAGE[19],1,"I",2,NUM[2])[:BRK]; 00135000
|
|
DUMB:=DUMB+1; 00135100
|
|
GO TO ENDINPUT; 00135200
|
|
END; 00135300
|
|
END ELSE 00135400
|
|
BEGIN 00135500
|
|
SKIPOVER:=SKIPOVER+2; 00135600
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,3,2,6,MESSAGE[8],MESSAGE 00135700
|
|
[9],2,"A",1,TYPE[1],NUM[1])[:BRK]; 00135800
|
|
DUMB:=DUMB+1; 00135900
|
|
GO TO ENDINPUT; 00136000
|
|
END; 00136100
|
|
WRITE (TTOUT(STA),FMQUEST,TYPE[1],NUM[1],QUEST); 00136200
|
|
FOR I~0 STEP 1 UNTIL 10 DO 00136300
|
|
VECTOR[NUM[1],I]~0; 00136400
|
|
VECTOR[NUM[1],0]:=NUM[2]; 00136500
|
|
VREAD(NUM); 00136600
|
|
END ELSE 00136700
|
|
IF TYPE[1]="P" THEN 00136800
|
|
BEGIN 00136900
|
|
IF FINDCH(RD[0],LP)<GP THEN 00137000
|
|
BEGIN 00137100
|
|
IF FINDCH(RD[0],RP)>GP THEN 00137200
|
|
BEGIN 00137300
|
|
SKIPOVER:=SKIPOVER+FINDCH(RD[0],LP)+1; 00137400
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,5,2,6,MESSAGE[10],MESSAGE 00137500
|
|
[11],1,"A",1,LP)[:BRK]; 00137600
|
|
DUMB:=DUMB+1; 00137700
|
|
GO TO ENDINPUT; 00137800
|
|
END; 00137900
|
|
SHIFT(RD[0],CPACE:=FINDCH(RD[0],LP)+1,GP:=GP-CPACE); 00138000
|
|
PUTCHRIN(RD[0],FINDCH(RD[0],RP),COMA); 00138100
|
|
READ (RD[*],/,NUM[2]); NUM[2]:=NUM[2]+1; 00138200
|
|
IF NUM[2]>20 OR NUM[2]<1 THEN 00138300
|
|
BEGIN 00138400
|
|
SKIPOVER:=SKIPOVER+FINDCH(RD[0],COMA)+2; 00138500
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,8,3,6,MESSAGE[17],MESSAGE 00138600
|
|
[18],MESSAGE[19],1,"I",2,NUM[2]-1)[:BRK]; 00138700
|
|
DUMB:=DUMB+1; 00138800
|
|
GO TO ENDINPUT; 00138900
|
|
END; 00139000
|
|
END ELSE 00139100
|
|
BEGIN 00139200
|
|
SKIPOVER:=SKIPOVER+2; 00139300
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,3,2,6,MESSAGE[8],MESSAGE 00139400
|
|
[9],2,"A",1,TYPE[1],NUM[1])[:BRK]; 00139500
|
|
DUMB:=DUMB+1; 00139600
|
|
GO TO ENDINPUT; 00139700
|
|
END; 00139800
|
|
WRITE (TTOUT(STA),FMQUEST,TYPE[1],NUM[1],QUEST); 00139900
|
|
FOR I~0 STEP 1 UNTIL 20 DO 00140000
|
|
POLY[NUM[1],I]:=0; 00140100
|
|
POLY[NUM[1],0]:=NUM[2]; 00140200
|
|
PREAD(NUM); 00140300
|
|
END ELSE 00140400
|
|
BEGIN 00140500
|
|
WRITE (TTOUT(STA),RC,NUM[1],QUEST); 00140600
|
|
READVAL(CONST[NUM[1]],STA); 00140700
|
|
END; 00140800
|
|
ENDINPUT: END; 00140900
|
|
IF DUMPTHISONE THEN GO TO STOP; 00141000
|
|
WRITE (TTOUT(STA),<X8,"{!~">); 00141100
|
|
IF DUMB!OLDDUMB THEN GO TO DUMREED; 00141200
|
|
GO TO REED; 00141300
|
|
00141400
|
|
LET: BEGIN 00141500
|
|
LABEL ENDLET; 00141600
|
|
IF FINDCH(RD[0],EQ)>GP THEN 00141700
|
|
BEGIN 00141800
|
|
SKIPOVER:=SKIPOVER+1; 00141900
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,7,2,6,MESSAGE[15],MESSAGE 00142000
|
|
[16],2,"A",1,TYPE[1],NUM[1])[:BRK]; 00142100
|
|
DUMB:=DUMB+1; 00142200
|
|
GO TO ENDLET; 00142300
|
|
END; 00142400
|
|
IF FINDCH(RD[0],LP)<FINDCH(RD[0],EQ) THEN 00142500
|
|
BEGIN 00142600
|
|
IF TYPE[1]="M" THEN 00142700
|
|
BEGIN 00142800
|
|
IF FINDCH(RD[0],COMA)>FINDCH(RD[0],EQ) THEN 00142900
|
|
BEGIN 00143000
|
|
SKIPOVER:=SKIPOVER+FINDCH(RD[0],LP)+1; 00143100
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,4,2,6,MESSAGE[6],MESSAGE 00143200
|
|
[7],1,"A",1,LP)[:BRK]; 00143300
|
|
DUMB:=DUMB+1; 00143400
|
|
GO TO ENDLET; 00143500
|
|
END; 00143600
|
|
IF FINDCH(RD[0],RP)>FINDCH(RD[0],EQ) THEN 00143700
|
|
BEGIN 00143800
|
|
SKIPOVER:=SKIPOVER+FINDCH(RD[0],COMA)+1; 00143900
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,5,2,6,MESSAGE[10],MESSAGE 00144000
|
|
[11],1,"A",1,COMA)[:BRK]; 00144100
|
|
DUMB:=DUMB+1; 00144200
|
|
GO TO ENDLET; 00144300
|
|
END; 00144400
|
|
SHIFT(RD[0],CPACE:=FINDCH(RD[0],LP)+1,GP:=GP-CPACE); 00144500
|
|
PUTCHRIN(RD[0],FINDCH(RD[0],RP),COMA); 00144600
|
|
READ (RD[*],/,NUM[2],NUM[3]); 00144700
|
|
IF NUM[2]>10 OR NUM[2]<1 THEN 00144800
|
|
BEGIN 00144900
|
|
SKIPOVER:=SKIPOVER+FINDCH(RD[0],COMA)+2; 00145000
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,8,3,6,MESSAGE[17],MESSAGE 00145100
|
|
[18],MESSAGE[19],1,"I",2,NUM[2])[:BRK]; 00145200
|
|
DUMB:=DUMB+1; 00145300
|
|
GO TO ENDLET; 00145400
|
|
END; 00145500
|
|
IF NUM[3]>10 OR NUM[3]<1 THEN 00145600
|
|
BEGIN 00145700
|
|
SHIFT(RD[0],CPACE:=FINDCH(RD[0],COMA)+1,GP:=GP-CPACE); 00145800
|
|
SKIPOVER:=SKIPOVER+CPACE+2; 00145900
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,8,3,6,MESSAGE[17],MESSAGE 00146000
|
|
[18],MESSAGE[19],1,"I",2,NUM[3])[:BRK]; 00146100
|
|
DUMB:=DUMB+1; 00146200
|
|
GO TO ENDLET; 00146300
|
|
END; 00146400
|
|
END ELSE 00146500
|
|
IF TYPE[1]="V" THEN 00146600
|
|
BEGIN 00146700
|
|
IF FINDCH(RD[0],RP)>FINDCH(RD[0],EQ) THEN 00146800
|
|
BEGIN 00146900
|
|
SKIPOVER:=SKIPOVER+FINDCH(RD[0],LP); 00147000
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,5,2,6,MESSAGE[10],MESSAGE 00147100
|
|
[11],1,"A",1,LP)[:BRK]; 00147200
|
|
DUMB:=DUMB+1; 00147300
|
|
GO TO ENDLET; 00147400
|
|
END; 00147500
|
|
SHIFT(RD[0],CPACE:=FINDCH(RD[0],LP)+1,GP:=GP-CPACE); 00147600
|
|
PUTCHRIN(RD[0],FINDCH(RD[0],RP),COMA); 00147700
|
|
READ (RD[*],/,NUM[2]); 00147800
|
|
IF NUM[2]>10 OR NUM[2]<1 THEN 00147900
|
|
BEGIN 00148000
|
|
SKIPOVER:=SKIPOVER+FINDCH(RD[0],COMA)+2; 00148100
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,8,3,6,MESSAGE[17],MESSAGE 00148200
|
|
[18],MESSAGE[19],1,"I",2,NUM[2])[:BRK]; 00148300
|
|
DUMB:=DUMB+1; 00148400
|
|
GO TO ENDLET; 00148500
|
|
END; 00148600
|
|
END ELSE 00148700
|
|
BEGIN 00148800
|
|
SKIPOVER:=SKIPOVER+0; 00148900
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,2,3,6,MESSAGE[3],MESSAGE 00149000
|
|
[4],MESSAGE[5],2,"A",1,TYPE[1],NUM[1])[:BRK]; 00149100
|
|
DUMB:=DUMB+1; 00149200
|
|
GO TO ENDLET; 00149300
|
|
END; 00149400
|
|
END ELSE 00149500
|
|
IF TYPE[1]="P" THEN 00149600
|
|
BEGIN 00149700
|
|
IF FINDCH(RD[0],RP)>FINDCH(RD[0],EQ) THEN 00149800
|
|
BEGIN 00149900
|
|
SKIPOVER:=SKIPOVER+FINDCH(RD[0],LP); 00150000
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,5,2,6,MESSAGE[10],MESSAGE 00150100
|
|
[11],1,"A",1,LP)[:BRK]; 00150200
|
|
DUMB:=DUMB+1; 00150300
|
|
GO TO ENDLET; 00150400
|
|
END; 00150500
|
|
SHIFT(RD[0],CPACE:=FINDCH(RD[0],LP)+1,GP:=GP-CPACE); 00150600
|
|
PUTCHRIN(RD[0],FINDCH(RD[0],RP),COMA); 00150700
|
|
READ (RD[*],/,NUM[2]); NUM[2]:=NUM[2]+1; 00150800
|
|
IF NUM[2]>20 OR NUM[2]<1 THEN 00150900
|
|
BEGIN 00151000
|
|
SKIPOVER:=SKIPOVER+FINDCH(RD[0],COMA)+2; 00151100
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,8,3,6,MESSAGE[17],MESSAGE 00151200
|
|
[18],MESSAGE[19],1,"I",2,NUM[2]-1)[:BRK]; 00151300
|
|
DUMB:=DUMB+1; 00151400
|
|
GO TO ENDLET; 00151500
|
|
END; 00151600
|
|
END ELSE 00151700
|
|
IF FINDCH(RD[0],RP)<FINDCH(RD[0],EQ) THEN 00151800
|
|
BEGIN 00151900
|
|
SKIPOVER:=SKIPOVER+1; 00152000
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,3,2,6,MESSAGE[8],MESSAGE 00152100
|
|
[9],2,"A",1,TYPE[1],NUM[1])[:BRK]; 00152200
|
|
DUMB:=DUMB+1; 00152300
|
|
GO TO ENDLET; 00152400
|
|
END; 00152500
|
|
SHIFT(RD[0],CPACE:=FINDCH(RD[0],EQ)+1,GP:=GP-CPACE); 00152600
|
|
SKIPBLANKS; 00152700
|
|
SKIPOVER:=SKIPOVER+CPACE; 00152800
|
|
READ (RD[*],<A3>,OPER); 00152900
|
|
IF OPER.[30:6]="D" OR OPER.[30:6]="T" OR OPER.[30:6]="I" OR OPER.[30:6]=00153000
|
|
"N" OR OPER.[30:6]="E" THEN 00153100
|
|
BEGIN 00153200
|
|
SKIPOVER:=SKIPOVER+1; 00153300
|
|
CPACE:=3; 00153400
|
|
GO TO ENDLET; 00153500
|
|
END; 00153600
|
|
IF (OPER.[30:6]!"M" AND OPER.[30:6]!"V" AND OPER.[30:6]!"C" AND 00153700
|
|
OPER.[30:6]!"P") OR OPER.[36:6]>9 THEN 00153800
|
|
IF ANYFUNNYCHRS(RD[0],GP-1) THEN 00153900
|
|
BEGIN 00154000
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,2,3,6,MESSAGE[3],MESSAGE 00154100
|
|
[4],MESSAGE[5],2,"A",1,TYPE[2],NUM[2])[:BRK]; 00154200
|
|
DUMB:=DUMB+1; 00154300
|
|
GO TO ENDLET; 00154400
|
|
END ELSE 00154500
|
|
BEGIN 00154600
|
|
IF TYPE[1]="M" THEN 00154700
|
|
READARRAY(MATRIX[NUM[1],NUM[2],NUM[3]]) ELSE 00154800
|
|
IF TYPE[1]="V" THEN 00154900
|
|
READARRAY(VECTOR[NUM[1],NUM[2]]) ELSE 00155000
|
|
IF TYPE[1]="C" THEN 00155100
|
|
READARRAY(CONST[NUM[1]]) ELSE 00155200
|
|
IF TYPE[1]="P" THEN 00155300
|
|
READARRAY(POLY[NUM[1],NUM[2]]); 00155400
|
|
DUMB:=0; 00155500
|
|
OLDDUMB:=1; 00155600
|
|
WRITE (TTOUT(STA),DONE)[:BRK]; 00155700
|
|
GO TO ENDLET; 00155800
|
|
END; 00155900
|
|
READ (RD[*],<A1,I1>,TYPE[2],NUM[2]); 00156000
|
|
SHIFT(RD[0],2,GP:=GP-2); 00156100
|
|
SKIPBLANKS; 00156200
|
|
READ (RD[*],<A1>,OPER); 00156300
|
|
IF OPER="*" OR OPER="+" OR OPER="-" OR OPER="/" THEN 00156400
|
|
OPER:=OPER ELSE IF OPER=QUEST THEN OPER:=" " ELSE 00156500
|
|
BEGIN 00156600
|
|
READ (RD[*],<3A1>,TYPE[1],TYPE[2],TYPE[3]); 00156700
|
|
CPACE:=3; 00156800
|
|
IF TYPE[3]{9 OR TYPE[3]="M" OR TYPE[3]="V" OR TYPE[3]="C"00156900
|
|
OR TYPE[3]="P" OR TYPE[3]=" " THEN 00157000
|
|
CPACE:=2; 00157100
|
|
IF TYPE[2]{9 OR TYPE[2]="M" OR TYPE[2]="V" OR TYPE[2]="C"00157200
|
|
OR TYPE[2]="P" OR TYPE[2]=" " THEN 00157300
|
|
CPACE:=1; 00157400
|
|
IF CPACE=3 THEN 00157500
|
|
BEGIN 00157600
|
|
OPER:=TYPE[3];OPER.[36:6]:=TYPE[2];OPER.[30:6]:=TYPE[1]; 00157700
|
|
END; 00157800
|
|
IF CPACE=2 THEN 00157900
|
|
BEGIN 00158000
|
|
OPER:=TYPE[2];OPER.[36:6]:=TYPE[1]; 00158100
|
|
END; 00158200
|
|
IF CPACE=1 THEN OPER:=TYPE[1]; 00158300
|
|
SKIPOVER:=SKIPOVER+CPACE; 00158400
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,6,3,6,MESSAGE[12],MESSAGE 00158500
|
|
[13],MESSAGE[14],1,"A",CPACE,OPER)[:BRK]; 00158600
|
|
DUMB:=DUMB+1; 00158700
|
|
END; 00158800
|
|
GO TO ENDLET; 00158900
|
|
CPACE:=1; 00159000
|
|
ENDLET: END; 00159100
|
|
IF DUMPTHISONE THEN GO TO STOP; 00159200
|
|
IF DUMB!OLDDUMB THEN GO TO DUMREED; 00159300
|
|
TESTOPER: BEGIN 00159400
|
|
LABEL CHECK; 00159500
|
|
LABEL ADD,SUB,MULT,DET,TRN,EQU,IDN,INV,NULL,DVD,EVEC; 00159600
|
|
SWITCH OP:=ADD,SUB,MULT,DET,TRN,EQU,IDN,INV,NULL,DVD,EVEC; 00159700
|
|
FOR I~1 STEP 1 UNTIL 11 DO 00159800
|
|
IF OPCODE[I]=OPER THEN GO TO OP[I]; 00159900
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,6,3,6,MESSAGE[12],MESSAGE 00160000
|
|
[13],MESSAGE[14],1,"A",CPACE,OPER)[:BRK]; 00160100
|
|
DUMB:=DUMB+1; 00160200
|
|
GO TO CHECK; 00160300
|
|
ADD: BEGIN 00160400
|
|
LABEL ENDADD; 00160500
|
|
SHIFT(RD[0],CPACE:=FINDCH(RD[0],PL)+1,GP:=GP-CPACE); 00160600
|
|
SKIPBLANKS; 00160700
|
|
SKIPOVER:=SKIPOVER+CPACE; 00160800
|
|
READ (RD[*],<A1,I1>,TYPE[3],NUM[3]); 00160900
|
|
SKIPOVER:=SKIPOVER+2; 00161000
|
|
IF (TYPE[3]!"M" AND TYPE[3]!"V" AND TYPE[3]!"C" AND 00161100
|
|
TYPE[3]!"P") OR NUM[3]>9 THEN 00161200
|
|
BEGIN 00161300
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,2,3,6,MESSAGE[3],MESSAGE 00161400
|
|
[4],MESSAGE[5],2,"A",1,TYPE[3],NUM[3])[:BRK]; 00161500
|
|
DUMB:=DUMB+1; 00161600
|
|
GO TO ENDADD; 00161700
|
|
END; 00161800
|
|
IF TYPE[1]="M" AND TYPE[2]="M" AND TYPE[3]="M" THEN 00161900
|
|
BEGIN 00162000
|
|
IF MATRIX[NUM[2],1,0]!MATRIX[NUM[3],1,0] OR MATRIX 00162100
|
|
[NUM[2],0,1]!MATRIX[NUM[3],0,1] THEN 00162200
|
|
BEGIN 00162300
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,9,2,6,MESSAGE[20],MESSAGE 00162400
|
|
[21],2,"A",1,TYPE[3],NUM[3])[:BRK]; 00162500
|
|
DUMB:=DUMB+1; 00162600
|
|
GO TO ENDADD; 00162700
|
|
END; 00162800
|
|
MADD(MATRIX[NUM[2],*,*],MATRIX[NUM[3],*,*],MATRIX[NUM[1],00162900
|
|
*,*]); 00163000
|
|
GO TO ENDADD; 00163100
|
|
END ELSE 00163200
|
|
IF TYPE[1]="V" AND TYPE[2]="V" AND TYPE[3]="V" THEN 00163300
|
|
BEGIN 00163400
|
|
IF VECTOR[NUM[2],0]!VECTOR[NUM[3],0] THEN 00163500
|
|
BEGIN 00163600
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,9,2,6,MESSAGE[20],MESSAGE 00163700
|
|
[21],2,"A",1,TYPE[3],NUM[3])[:BRK]; 00163800
|
|
DUMB:=DUMB+1; 00163900
|
|
GO TO ENDADD; 00164000
|
|
END; 00164100
|
|
VADD(VECTOR[NUM[2],*],VECTOR[NUM[3],*],VECTOR[NUM[1],*]);00164200
|
|
GO TO ENDADD; 00164300
|
|
END ELSE 00164400
|
|
IF TYPE[1]="P" AND TYPE[2]="P" AND TYPE[3]="P" THEN 00164500
|
|
BEGIN 00164600
|
|
QADD(POLY[NUM[2],*],POLY[NUM[3],*],POLY[NUM[1],*]); 00164700
|
|
GO TO ENDADD; 00164800
|
|
END ELSE 00164900
|
|
IF TYPE[1]="C" AND TYPE[2]="C" AND TYPE[3]="C" THEN 00165000
|
|
BEGIN 00165100
|
|
CONST[NUM[1]]:=CONST[NUM[2]]+CONST[NUM[3]]; 00165200
|
|
GO TO ENDADD; 00165300
|
|
END ELSE 00165400
|
|
BEGIN 00165500
|
|
I:=1; 00165600
|
|
I.[36:6]:=1; 00165700
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,I,4,6,MESSAGE[25],MESSAGE 00165800
|
|
[26],MESSAGE[27],MESSAGE[28],5,"A",1,TYPE[1],MI, 00165900
|
|
TYPE[2],MI,TYPE[3])[:BRK]; 00166000
|
|
DUMB:=DUMB+1; 00166100
|
|
GO TO ENDADD; 00166200
|
|
END; 00166300
|
|
ENDADD: END; 00166400
|
|
GO TO CHECK; 00166500
|
|
SUB: BEGIN 00166600
|
|
LABEL ENDSUB; 00166700
|
|
SHIFT(RD[0],CPACE:=FINDCH(RD[0],MI)+1,GP:=GP-CPACE); 00166800
|
|
SKIPBLANKS; 00166900
|
|
SKIPOVER:=SKIPOVER+CPACE; 00167000
|
|
READ (RD[*],<A1,I1>,TYPE[3],NUM[3]); 00167100
|
|
SKIPOVER:=SKIPOVER+2; 00167200
|
|
IF (TYPE[3]!"M" AND TYPE[3]!"V" AND TYPE[3]!"C" AND 00167300
|
|
TYPE[3]!"P") OR NUM[3]>9 THEN 00167400
|
|
BEGIN 00167500
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,2,3,6,MESSAGE[3],MESSAGE 00167600
|
|
[4],MESSAGE[5],2,"A",1,TYPE[3],NUM[3])[:BRK]; 00167700
|
|
DUMB:=DUMB+1; 00167800
|
|
GO TO ENDSUB; 00167900
|
|
END; 00168000
|
|
IF TYPE[1]="M" AND TYPE[2]="M" AND TYPE[3]="M" THEN 00168100
|
|
BEGIN 00168200
|
|
IF MATRIX[NUM[2],1,0]!MATRIX[NUM[3],1,0] OR MATRIX 00168300
|
|
[NUM[2],0,1]!MATRIX[NUM[3],0,1] THEN 00168400
|
|
BEGIN 00168500
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,9,2,6,MESSAGE[20],MESSAGE 00168600
|
|
[21],2,"A",1,TYPE[3],NUM[3])[:BRK]; 00168700
|
|
DUMB:=DUMB+1; 00168800
|
|
GO TO ENDSUB; 00168900
|
|
END; 00169000
|
|
MSUB(MATRIX[NUM[2],*,*],MATRIX[NUM[3],*,*],MATRIX[NUM[1],00169100
|
|
*,*]); 00169200
|
|
GO TO ENDSUB; 00169300
|
|
END ELSE 00169400
|
|
IF TYPE[1]="V" AND TYPE[2]="V" AND TYPE[3]="V" THEN 00169500
|
|
BEGIN 00169600
|
|
IF VECTOR[NUM[2],0]!VECTOR[NUM[3],0] THEN 00169700
|
|
BEGIN 00169800
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,9,2,6,MESSAGE[20],MESSAGE 00169900
|
|
[21],2,"A",1,TYPE[3],NUM[3])[:BRK]; 00170000
|
|
DUMB:=DUMB+1; 00170100
|
|
GO TO ENDSUB; 00170200
|
|
END; 00170300
|
|
VSUB(VECTOR[NUM[2],*],VECTOR[NUM[3],*],VECTOR[NUM[1],*]);00170400
|
|
GO TO ENDSUB; 00170500
|
|
END ELSE 00170600
|
|
IF TYPE[1]="P" AND TYPE[2]="P" AND TYPE[3]="P" THEN 00170700
|
|
BEGIN 00170800
|
|
QSUB(POLY[NUM[2],*],POLY[NUM[3],*],POLY[NUM[1],*]); 00170900
|
|
GO TO ENDSUB; 00171000
|
|
END ELSE 00171100
|
|
IF TYPE[1]="C" AND TYPE[2]="C" AND TYPE[3]="C" THEN 00171200
|
|
BEGIN 00171300
|
|
CONST[NUM[1]]:=CONST[NUM[2]]-CONST[NUM[3]]; 00171400
|
|
GO TO ENDSUB; 00171500
|
|
END ELSE 00171600
|
|
BEGIN 00171700
|
|
I:=1; 00171800
|
|
I.[36:6]:=1; 00171900
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,I,4,6,MESSAGE[25],MESSAGE 00172000
|
|
[26],MESSAGE[27],MESSAGE[28],5,"A",1,TYPE[1],MI, 00172100
|
|
TYPE[2],MI,TYPE[3])[:BRK]; 00172200
|
|
DUMB:=DUMB+1; 00172300
|
|
GO TO ENDSUB; 00172400
|
|
END; 00172500
|
|
ENDSUB: END; 00172600
|
|
GO TO CHECK; 00172700
|
|
MULT: BEGIN 00172800
|
|
LABEL ENDMULT; 00172900
|
|
SHIFT (RD[0],CPACE:=FINDCH(RD[0],TI)+1,GP:=GP-CPACE); 00173000
|
|
SKIPBLANKS; 00173100
|
|
SKIPOVER:=SKIPOVER+CPACE; 00173200
|
|
READ (RD[*],<A1,I1>,TYPE[3],NUM[3]); 00173300
|
|
SKIPOVER:=SKIPOVER+2; 00173400
|
|
IF (TYPE[3]!"M" AND TYPE[3]!"V" AND TYPE[3]!"C" AND 00173500
|
|
TYPE[3]!"P") OR NUM[3]>9 THEN 00173600
|
|
BEGIN 00173700
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,2,3,6,MESSAGE[3],MESSAGE 00173800
|
|
[4],MESSAGE[5],2,"A",1,TYPE[3],NUM[3])[:BRK]; 00173900
|
|
DUMB:=DUMB+1; 00174000
|
|
GO TO ENDMULT; 00174100
|
|
END; 00174200
|
|
IF TYPE[1]="M" AND TYPE[2]="M" AND TYPE[3]="M" THEN 00174300
|
|
BEGIN 00174400
|
|
IF MATRIX[NUM[2],0,1]!MATRIX[NUM[3],1,0] THEN 00174500
|
|
BEGIN 00174600
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,9,2,6,MESSAGE[20],MESSAGE 00174700
|
|
[21],2,"A",1,TYPE[3],NUM[3])[:BRK]; 00174800
|
|
DUMB:=DUMB+1; 00174900
|
|
GO TO ENDMULT; 00175000
|
|
END; 00175100
|
|
MMULT(MATRIX[NUM[2],*,*],MATRIX[NUM[3],*,*],MATRIX[NUM[1],00175200
|
|
*,*]); 00175300
|
|
GO TO ENDMULT; 00175400
|
|
END ELSE 00175500
|
|
IF TYPE[1]="C" AND TYPE[2]="V" AND TYPE[3]="V" THEN 00175600
|
|
BEGIN 00175700
|
|
IF VECTOR[NUM[2],0]!VECTOR[NUM[3],0] THEN 00175800
|
|
BEGIN 00175900
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,9,2,6,MESSAGE[20],MESSAGE 00176000
|
|
[21],2,"A",1,TYPE[3],NUM[3])[:BRK]; 00176100
|
|
DUMB:=DUMB+1; 00176200
|
|
GO TO ENDMULT; 00176300
|
|
END; 00176400
|
|
VDOT(VECTOR[NUM[2],*],VECTOR[NUM[3],*],CONST[NUM[1]]); 00176500
|
|
GO TO ENDMULT; 00176600
|
|
END ELSE 00176700
|
|
IF TYPE[1]="P" AND TYPE[2]="P" AND TYPE[3]="P" THEN 00176800
|
|
BEGIN 00176900
|
|
IF POLY[NUM[2],0]+POLY[NUM[3],0]>20 THEN 00177000
|
|
BEGIN 00177100
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,9,2,6,MESSAGE[20],MESSAGE 00177200
|
|
[21],2,"A",1,TYPE[3],NUM[3])[:BRK]; 00177300
|
|
DUMB:=DUMB+1; 00177400
|
|
GO TO ENDMULT; 00177500
|
|
END; 00177600
|
|
QMULT(POLY[NUM[2],*],POLY[NUM[3],*],POLY[NUM[1],*]); 00177700
|
|
GO TO ENDMULT; 00177800
|
|
END ELSE 00177900
|
|
IF TYPE[1]="V" AND TYPE[2]="M" AND TYPE[3]="V" THEN 00178000
|
|
BEGIN 00178100
|
|
IF MATRIX[NUM[2],0,1]!VECTOR[NUM[3],0] THEN 00178200
|
|
BEGIN 00178300
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,9,2,6,MESSAGE[20],MESSAGE 00178400
|
|
[21],2,"A",1,TYPE[3],NUM[3])[:BRK]; 00178500
|
|
DUMB:=DUMB+1; 00178600
|
|
GO TO ENDMULT; 00178700
|
|
END; 00178800
|
|
MTV(MATRIX[NUM[2],*,*],VECTOR[NUM[3],*],VECTOR[NUM[1],*]);00178900
|
|
GO TO ENDMULT; 00179000
|
|
END ELSE 00179100
|
|
IF TYPE[1]="C" AND TYPE[2]="C" AND TYPE[3]="C" THEN 00179200
|
|
BEGIN 00179300
|
|
CONST[NUM[1]]:=CONST[NUM[2]]|CONST[NUM[3]]; 00179400
|
|
GO TO ENDMULT; 00179500
|
|
END ELSE 00179600
|
|
IF TYPE[1]="M" AND TYPE[2]="C" AND TYPE[3]="M" THEN 00179700
|
|
BEGIN 00179800
|
|
CTM(MATRIX[NUM[3],*,*],MATRIX[NUM[1],*,*],CONST[NUM[2]]);00179900
|
|
GO TO ENDMULT; 00180000
|
|
END ELSE 00180100
|
|
IF TYPE[1]="M" AND TYPE[2]="M" AND TYPE[3]="C" THEN 00180200
|
|
BEGIN 00180300
|
|
CTM(MATRIX[NUM[2],*,*],MATRIX[NUM[1],*,*],CONST[NUM[3]]);00180400
|
|
GO TO ENDMULT; 00180500
|
|
END ELSE 00180600
|
|
IF TYPE[1]="V" AND TYPE[2]="C" AND TYPE[3]="V" THEN 00180700
|
|
BEGIN 00180800
|
|
CTV(VECTOR[NUM[3],*],VECTOR[NUM[1],*],CONST[NUM[2]]); 00180900
|
|
GO TO ENDMULT; 00181000
|
|
END ELSE 00181100
|
|
IF TYPE[1]="V" AND TYPE[2]="V" AND TYPE[3]="C" THEN 00181200
|
|
BEGIN 00181300
|
|
CTV(VECTOR[NUM[2],*],VECTOR[NUM[1],*],CONST[NUM[3]]); 00181400
|
|
GO TO ENDMULT; 00181500
|
|
END ELSE 00181600
|
|
IF TYPE[1]="P" AND TYPE[2]="C" AND TYPE[3]="P" THEN 00181700
|
|
BEGIN 00181800
|
|
CTV(POLY[NUM[3],*],POLY[NUM[1],*],CONST[NUM[2]]); 00181900
|
|
GO TO ENDMULT; 00182000
|
|
END ELSE 00182100
|
|
IF TYPE[1]="P" AND TYPE[2]="P" AND TYPE[3]="C" THEN 00182200
|
|
BEGIN 00182300
|
|
CTV(POLY[NUM[2],*],POLY[NUM[1],*],CONST[NUM[3]]); 00182400
|
|
GO TO ENDMULT; 00182500
|
|
END ELSE 00182600
|
|
BEGIN 00182700
|
|
I:=1; 00182800
|
|
I.[36:6]:=1; 00182900
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,I,4,6,MESSAGE[25],MESSAGE 00183000
|
|
[26],MESSAGE[27],MESSAGE[28],5,"A",1,TYPE[1],MI, 00183100
|
|
TYPE[2],MI,TYPE[3])[:BRK]; 00183200
|
|
DUMB:=DUMB+1; 00183300
|
|
GO TO ENDMULT; 00183400
|
|
END; 00183500
|
|
ENDMULT: END; 00183600
|
|
GO TO CHECK; 00183700
|
|
DVD: BEGIN 00183800
|
|
LABEL ENDDVD; 00183900
|
|
SHIFT(RD[0],CPACE:=FINDCH(RD[0],DI)+1,GP:=GP-CPACE); 00184000
|
|
SKIPBLANKS; 00184100
|
|
SKIPOVER:=SKIPOVER+CPACE; 00184200
|
|
READ (RD[*],<A1,I1>,TYPE[3],NUM[3]); 00184300
|
|
SKIPOVER:=SKIPOVER+2; 00184400
|
|
IF (TYPE[3]!"M" AND TYPE[3]!"V" AND TYPE[3]!"C" AND 00184500
|
|
TYPE[3]!"P") OR NUM[3]>9 THEN 00184600
|
|
BEGIN 00184700
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,2,3,6,MESSAGE[3],MESSAGE 00184800
|
|
[4],MESSAGE[5],2,"A",1,TYPE[3],NUM[3])[:BRK]; 00184900
|
|
DUMB:=DUMB+1; 00185000
|
|
GO TO ENDDVD; 00185100
|
|
END; 00185200
|
|
IF TYPE[1]="C" AND TYPE[2]="C" AND TYPE[3]="C" THEN 00185300
|
|
BEGIN 00185400
|
|
IF CONST[NUM[3]]=0 THEN 00185500
|
|
BEGIN 00185600
|
|
I:=3; 00185700
|
|
I.[36:6]:=1; 00185800
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,I,3,6,MESSAGE[31],MESSAGE 00185900
|
|
[32],MESSAGE[33],2,"A",1,TYPE[3],NUM[3])[:BRK]; 00186000
|
|
DUMB:=DUMB+1; 00186100
|
|
GO TO ENDDVD; 00186200
|
|
END; 00186300
|
|
CONST[NUM[1]]:=CONST[NUM[2]]/CONST[NUM[3]]; 00186400
|
|
GO TO ENDDVD; 00186500
|
|
END ELSE 00186600
|
|
BEGIN 00186700
|
|
I:=1; 00186800
|
|
I.[36:6]:=1; 00186900
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,I,4,6,MESSAGE[25],MESSAGE 00187000
|
|
[26],MESSAGE[27],MESSAGE[28],5,"A",1,TYPE[1],MI, 00187100
|
|
TYPE[2],MI,TYPE[3])[:BRK]; 00187200
|
|
DUMB:=DUMB+1; 00187300
|
|
GO TO ENDDVD; 00187400
|
|
END; 00187500
|
|
ENDDVD: END; 00187600
|
|
GO TO CHECK; 00187700
|
|
DET: BEGIN 00187800
|
|
LABEL ENDDET; 00187900
|
|
IF FINDCH(RD[0],LP)>GP THEN 00188000
|
|
BEGIN 00188100
|
|
SKIPOVER:=SKIPOVER+1; 00188200
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,3,2,6,MESSAGE[8],MESSAGE 00188300
|
|
[9],1,"A",3,OPER)[:BRK]; 00188400
|
|
DUMB:=DUMB+1; 00188500
|
|
GO TO ENDDET; 00188600
|
|
END; 00188700
|
|
IF FINDCH(RD[0],RP)>GP THEN 00188800
|
|
BEGIN 00188900
|
|
SKIPOVER:=SKIPOVER+3; 00189000
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,5,2,6,MESSAGE[10],MESSAGE 00189100
|
|
[11],1,"A",1,LP)[:BRK]; 00189200
|
|
DUMB:=DUMB+1; 00189300
|
|
GO TO ENDDET; 00189400
|
|
END; 00189500
|
|
SHIFT(RD[0],CPACE:=FINDCH(RD[0],LP)+1,GP:=GP-CPACE); 00189600
|
|
SKIPBLANKS; 00189700
|
|
SKIPOVER:=SKIPOVER+CPACE; 00189800
|
|
READ (RD[*],<A1,I1>,TYPE[2],NUM[2]); 00189900
|
|
SKIPOVER:=SKIPOVER+2; 00190000
|
|
IF (TYPE[2]!"M" AND TYPE[2]!"V" AND TYPE[2]!"C" AND 00190100
|
|
TYPE[2]!"P") OR NUM[2]>9 THEN 00190200
|
|
BEGIN 00190300
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,2,3,6,MESSAGE[3],MESSAGE 00190400
|
|
[4],MESSAGE[5],2,"A",1,TYPE[2],NUM[2])[:BRK]; 00190500
|
|
DUMB:=DUMB+1; 00190600
|
|
GO TO ENDDET; 00190700
|
|
END; 00190800
|
|
IF TYPE[1]="C" AND TYPE[2]="M" THEN 00190900
|
|
BEGIN 00191000
|
|
IF MATRIX[NUM[2],1,0]!MATRIX[NUM[2],0,1] THEN 00191100
|
|
BEGIN 00191200
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,9,2,6,MESSAGE[20],MESSAGE 00191300
|
|
[21],2,"A",1,TYPE[2],NUM[2])[:BRK]; 00191400
|
|
DUMB:=DUMB+1; 00191500
|
|
GO TO ENDDET; 00191600
|
|
END; 00191700
|
|
CONST[NUM[1]]:=MDET(MATRIX[NUM[2],*,*]); 00191800
|
|
GO TO ENDDET; 00191900
|
|
END ELSE 00192000
|
|
BEGIN 00192100
|
|
I:=1; 00192200
|
|
I.[36:6]:=1; 00192300
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,I,4,6,MESSAGE[25],MESSAGE 00192400
|
|
[26],MESSAGE[27],MESSAGE[28],3,"A",1,TYPE[1],MI, 00192500
|
|
TYPE[2])[:BRK]; 00192600
|
|
DUMB:=DUMB+1; 00192700
|
|
GO TO ENDDET; 00192800
|
|
END; 00192900
|
|
ENDDET: END; 00193000
|
|
GO TO CHECK; 00193100
|
|
TRN: BEGIN 00193200
|
|
LABEL ENDTRN; 00193300
|
|
IF FINDCH(RD[0],LP)>GP THEN 00193400
|
|
BEGIN 00193500
|
|
SKIPOVER:=SKIPOVER+1; 00193600
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,3,2,6,MESSAGE[8],MESSAGE 00193700
|
|
[9],1,"A",3,OPER)[:BRK]; 00193800
|
|
DUMB:=DUMB+1; 00193900
|
|
GO TO ENDTRN; 00194000
|
|
END; 00194100
|
|
IF FINDCH(RD[0],RP)>GP THEN 00194200
|
|
BEGIN 00194300
|
|
SKIPOVER:=SKIPOVER+3; 00194400
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,5,2,6,MESSAGE[10],MESSAGE 00194500
|
|
[11],1,"A",1,LP)[:BRK]; 00194600
|
|
DUMB:=DUMB+1; 00194700
|
|
GO TO ENDTRN; 00194800
|
|
END; 00194900
|
|
SHIFT(RD[0],CPACE:=FINDCH(RD[0],LP)+1,GP:=GP-CPACE); 00195000
|
|
SKIPBLANKS; 00195100
|
|
SKIPOVER:=SKIPOVER+CPACE; 00195200
|
|
READ (RD[*],<A1,I1>,TYPE[2],NUM[2]); 00195300
|
|
SKIPOVER:=SKIPOVER+2; 00195400
|
|
IF (TYPE[2]!"M" AND TYPE[2]!"V" AND TYPE[2]!"C" AND 00195500
|
|
TYPE[2]!"P") OR NUM[2]>9 THEN 00195600
|
|
BEGIN 00195700
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,2,3,6,MESSAGE[3],MESSAGE 00195800
|
|
[4],MESSAGE[5],2,"A",1,TYPE[2],NUM[2])[:BRK]; 00195900
|
|
DUMB:=DUMB+1; 00196000
|
|
GO TO ENDTRN; 00196100
|
|
END; 00196200
|
|
IF TYPE[1]="M" AND TYPE[2]="M" THEN 00196300
|
|
BEGIN 00196400
|
|
MTRAN(MATRIX[NUM[2],*,*],MATRIX[NUM[1],*,*]); 00196500
|
|
GO TO ENDTRN; 00196600
|
|
END ELSE 00196700
|
|
BEGIN 00196800
|
|
I:=1; 00196900
|
|
I.[36:6]:=1; 00197000
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,I,4,6,MESSAGE[25],MESSAGE 00197100
|
|
[26],MESSAGE[27],MESSAGE[28],3,"A",1,TYPE[1],MI, 00197200
|
|
TYPE[2])[:BRK]; 00197300
|
|
DUMB:=DUMB+1; 00197400
|
|
GO TO ENDTRN; 00197500
|
|
END; 00197600
|
|
ENDTRN: END; 00197700
|
|
GO TO CHECK; 00197800
|
|
EQU: BEGIN 00197900
|
|
LABEL ENDEQU; 00198000
|
|
IF TYPE[1]="M" AND TYPE[2]="M" THEN 00198100
|
|
BEGIN 00198200
|
|
FOR I~1 STEP 1 UNTIL MATRIX[NUM[2],1,0] DO 00198300
|
|
FOR J~1 STEP 1 UNTIL MATRIX[NUM[2],0,1] DO 00198400
|
|
MATRIX[NUM[1],I,J]:=MATRIX[NUM[2],I,J]; 00198500
|
|
MATRIX[NUM[1],1,0]:=MATRIX[NUM[2],1,0]; 00198600
|
|
MATRIX[NUM[1],0,1]:=MATRIX[NUM[2],0,1]; 00198700
|
|
GO TO ENDEQU; 00198800
|
|
END ELSE 00198900
|
|
IF TYPE[1]="V" AND TYPE[2]="V" THEN 00199000
|
|
BEGIN 00199100
|
|
FOR I~1 STEP 1 UNTIL VECTOR[NUM[2],0] DO 00199200
|
|
VECTOR[NUM[1],I]:=VECTOR[NUM[2],I]; 00199300
|
|
VECTOR[NUM[1],0]:=VECTOR[NUM[2],0]; 00199400
|
|
GO TO ENDEQU; 00199500
|
|
END ELSE 00199600
|
|
IF TYPE[1]="P" AND TYPE[2]="P" THEN 00199700
|
|
BEGIN 00199800
|
|
FOR I~1 STEP 1 UNTIL POLY[NUM[2],0] DO 00199900
|
|
POLY[NUM[1],I]:=POLY[NUM[2],I]; 00200000
|
|
POLY[NUM[1],0]:=POLY[NUM[2],0]; 00200100
|
|
GO TO ENDEQU; 00200200
|
|
END ELSE 00200300
|
|
IF TYPE[1]="C" AND TYPE[2]="C" THEN 00200400
|
|
BEGIN 00200500
|
|
CONST[NUM[1]]:=CONST[NUM[2]]; 00200600
|
|
GO TO ENDEQU; 00200700
|
|
END ELSE 00200800
|
|
BEGIN 00200900
|
|
I:=1; 00201000
|
|
I.[36:6]:=1; 00201100
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,I,4,6,MESSAGE[25],MESSAGE 00201200
|
|
[26],MESSAGE[27],MESSAGE[28],3,"A",1,TYPE[1],MI, 00201300
|
|
TYPE[2])[:BRK]; 00201400
|
|
DUMB:=DUMB+1; 00201500
|
|
GO TO ENDEQU; 00201600
|
|
END; 00201700
|
|
ENDEQU: END; 00201800
|
|
GO TO CHECK; 00201900
|
|
IDN: BEGIN 00202000
|
|
LABEL ENDIDN; 00202100
|
|
IF TYPE[1]="M" THEN 00202200
|
|
BEGIN 00202300
|
|
IF NUM[2]=0 AND NUM[3]=0 THEN 00202400
|
|
BEGIN 00202500
|
|
SKIPOVER:=SKIPOVER-1; 00202600
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,3,2,6,MESSAGE[8],MESSAGE 00202700
|
|
[9],2,"A",1,TYPE[1],NUM[1])[:BRK]; 00202800
|
|
DUMB:=DUMB+1; 00202900
|
|
GO TO ENDIDN; 00203000
|
|
END; 00203100
|
|
IF NUM[2]>NUM[3] THEN NUM[2]:=NUM[3]; 00203200
|
|
MID(MATRIX[NUM[1],*,*],NUM[2]); 00203300
|
|
GO TO ENDIDN; 00203400
|
|
END ELSE 00203500
|
|
BEGIN 00203600
|
|
I:=1; 00203700
|
|
I.[36:6]:=1; 00203800
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,I,4,6,MESSAGE[25],MESSAGE 00203900
|
|
[26],MESSAGE[27],MESSAGE[28],1,"A",1,TYPE[1])[:BRK];00204000
|
|
DUMB:=DUMB+1; 00204100
|
|
GO TO ENDIDN; 00204200
|
|
END; 00204300
|
|
ENDIDN: END; 00204400
|
|
GO TO CHECK; 00204500
|
|
NULL: BEGIN 00204600
|
|
LABEL ENDNULL; 00204700
|
|
IF TYPE[1]="M" THEN 00204800
|
|
IF NUM[2]=0 AND NUM[3]=0 THEN 00204900
|
|
BEGIN 00205000
|
|
BEGIN 00205100
|
|
SKIPOVER:=SKIPOVER-1; 00205200
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,3,2,6,MESSAGE[8],MESSAGE 00205300
|
|
[9],2,"A",1,TYPE[1],NUM[1])[:BRK]; 00205400
|
|
DUMB:=DUMB+1; 00205500
|
|
GO TO ENDNULL; 00205600
|
|
END; 00205700
|
|
FOR I~1 STEP 1 UNTIL NUM[2] DO 00205800
|
|
FOR J~1 STEP 1 UNTIL NUM[3] DO 00205900
|
|
MATRIX[NUM[1],I,J]:=0; 00206000
|
|
MATRIX[NUM[1],1,0]:=NUM[2]; 00206100
|
|
MATRIX[NUM[1],0,1]:=NUM[3]; 00206200
|
|
GO TO ENDNULL; 00206300
|
|
END ELSE 00206400
|
|
IF TYPE[1]="V" THEN 00206500
|
|
BEGIN 00206600
|
|
IF NUM[2]=0 THEN 00206700
|
|
BEGIN 00206800
|
|
SKIPOVER:=SKIPOVER-1; 00206900
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,3,2,6,MESSAGE[8],MESSAGE 00207000
|
|
[9],2,"A",1,TYPE[1],NUM[1])[:BRK]; 00207100
|
|
DUMB:=DUMB+1; 00207200
|
|
GO TO ENDNULL; 00207300
|
|
END; 00207400
|
|
FOR I~1 STEP 1 UNTIL NUM[2] DO 00207500
|
|
VECTOR[NUM[1],I]:=0; 00207600
|
|
VECTOR[NUM[1],0]:=NUM[2]; 00207700
|
|
GO TO ENDNULL; 00207800
|
|
END ELSE 00207900
|
|
IF TYPE[1]="P" THEN 00208000
|
|
BEGIN 00208100
|
|
FOR I~1 STEP 1 UNTIL NUM[2] DO 00208200
|
|
POLY[NUM[1],I]:=0; 00208300
|
|
POLY[NUM[1],0]:=NUM[2]; 00208400
|
|
GO TO ENDNULL; 00208500
|
|
END ELSE 00208600
|
|
BEGIN 00208700
|
|
CONST[NUM[1]]:=0; 00208800
|
|
GO TO ENDNULL; 00208900
|
|
END; 00209000
|
|
ENDNULL: END; 00209100
|
|
GO TO CHECK; 00209200
|
|
INV: BEGIN 00209300
|
|
LABEL ENDINV; 00209400
|
|
IF FINDCH(RD[0],LP)>GP THEN 00209500
|
|
BEGIN 00209600
|
|
SKIPOVER:=SKIPOVER+1; 00209700
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,3,2,6,MESSAGE[8],MESSAGE 00209800
|
|
[9],1,"A",3,OPER)[:BRK]; 00209900
|
|
DUMB:=DUMB+1; 00210000
|
|
GO TO ENDINV; 00210100
|
|
END; 00210200
|
|
IF FINDCH(RD[0],RP)>GP THEN 00210300
|
|
BEGIN 00210400
|
|
SKIPOVER:=SKIPOVER+3; 00210500
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,5,2,6,MESSAGE[10],MESSAGE 00210600
|
|
[11],1,"A",1,LP)[:BRK]; 00210700
|
|
DUMB:=DUMB+1; 00210800
|
|
GO TO ENDINV; 00210900
|
|
END; 00211000
|
|
SHIFT(RD[0],CPACE:=FINDCH(RD[0],LP)+1,GP:=GP-CPACE); 00211100
|
|
SKIPBLANKS; 00211200
|
|
SKIPOVER:=SKIPOVER+CPACE; 00211300
|
|
READ (RD[*],<A1,I1>,TYPE[2],NUM[2]); 00211400
|
|
SKIPOVER:=SKIPOVER+2; 00211500
|
|
IF (TYPE[2]!"M" AND TYPE[2]!"V" AND TYPE[2]!"C" AND 00211600
|
|
TYPE[2]!"P") OR NUM[2]>9 THEN 00211700
|
|
BEGIN 00211800
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,2,3,6,MESSAGE[3],MESSAGE 00211900
|
|
[4],MESSAGE[5],2,"A",1,TYPE[2],NUM[2])[:BRK]; 00212000
|
|
DUMB:=DUMB+1; 00212100
|
|
GO TO ENDINV; 00212200
|
|
END; 00212300
|
|
IF TYPE[1]="M" AND TYPE[2]="M" THEN 00212400
|
|
BEGIN 00212500
|
|
IF MATRIX[NUM[2],1,0]!MATRIX[NUM[2],0,1] THEN 00212600
|
|
BEGIN 00212700
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,9,2,6,MESSAGE[20],MESSAGE 00212800
|
|
[21],2,"A",1,TYPE[2],NUM[2])[:BRK]; 00212900
|
|
DUMB:=DUMB+1; 00213000
|
|
GO TO ENDINV; 00213100
|
|
END; 00213200
|
|
MINV(MATRIX[NUM[2],*,*],MATRIX[NUM[1],*,*]); 00213300
|
|
GO TO ENDINV; 00213400
|
|
END ELSE 00213500
|
|
BEGIN 00213600
|
|
I:=1; 00213700
|
|
I.[36:6]:=1; 00213800
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,I,4,6,MESSAGE[25],MESSAGE 00213900
|
|
[26],MESSAGE[27],MESSAGE[28],3,"A",1,TYPE[1],MI, 00214000
|
|
TYPE[2])[:BRK]; 00214100
|
|
DUMB:=DUMB+1; 00214200
|
|
GO TO ENDINV; 00214300
|
|
END; 00214400
|
|
ENDINV: END; 00214500
|
|
GO TO CHECK; 00214600
|
|
EVEC: BEGIN 00214700
|
|
LABEL ENDEVEC; 00214800
|
|
IF FINDCH(RD[0],LP)>GP THEN 00214900
|
|
BEGIN 00215000
|
|
SKIPOVER:=SKIPOVER+1; 00215100
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,3,2,6,MESSAGE[8],MESSAGE 00215200
|
|
[9],1,"A",3,OPER)[:BRK]; 00215300
|
|
DUMB:=DUMB+1; 00215400
|
|
GO TO ENDEVEC; 00215500
|
|
END; 00215600
|
|
IF FINDCH(RD[0],RP)>GP THEN 00215700
|
|
BEGIN 00215800
|
|
SKIPOVER:=SKIPOVER+3; 00215900
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,5,2,6,MESSAGE[10],MESSAGE 00216000
|
|
[11],1,"A",1,LP)[:BRK]; 00216100
|
|
DUMB:=DUMB+1; 00216200
|
|
GO TO ENDEVEC; 00216300
|
|
END; 00216400
|
|
SHIFT(RD[0],CPACE:=FINDCH(RD[0],LP)+1,GP:=GP-CPACE); 00216500
|
|
SKIPBLANKS; 00216600
|
|
SKIPOVER:=SKIPOVER+CPACE; 00216700
|
|
READ (RD[*],<A1,I1>,TYPE[2],NUM[2]); 00216800
|
|
SKIPOVER:=SKIPOVER+2; 00216900
|
|
IF (TYPE[2]!"M" AND TYPE[2]!"V" AND TYPE[2]!"C" AND 00217000
|
|
TYPE[2]!"P") OR NUM[2]>9 THEN 00217100
|
|
BEGIN 00217200
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,2,3,6,MESSAGE[3],MESSAGE 00217300
|
|
[4],MESSAGE[5],2,"A",1,TYPE[2],NUM[2])[:BRK]; 00217400
|
|
DUMB:=DUMB+1; 00217500
|
|
GO TO ENDEVEC; 00217600
|
|
END; 00217700
|
|
IF TYPE[1]="M" AND TYPE[2]="M" THEN 00217800
|
|
BEGIN 00217900
|
|
IF MATRIX[NUM[2],1,0]!MATRIX[NUM[2],0,1] THEN 00218000
|
|
BEGIN 00218100
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,9,2,6,MESSAGE[20],MESSAGE 00218200
|
|
[21],2,"A",1,TYPE[2],NUM[2])[:BRK]; 00218300
|
|
DUMB:=DUMB+1; 00218400
|
|
GO TO ENDEVEC; 00218500
|
|
END; 00218600
|
|
MEVE(MATRIX[NUM[2],*,*],MATRIX[NUM[1],*,*]); 00218700
|
|
GO TO ENDEVEC; 00218800
|
|
END ELSE 00218900
|
|
BEGIN 00219000
|
|
I:=1; 00219100
|
|
I.[36:6]:=1; 00219200
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,I,4,6,MESSAGE[25],MESSAGE 00219300
|
|
[26],MESSAGE[27],MESSAGE[28],3,"A",1,TYPE[1],MI, 00219400
|
|
TYPE[2])[:BRK]; 00219500
|
|
DUMB:=DUMB+1; 00219600
|
|
GO TO ENDEVEC; 00219700
|
|
END; 00219800
|
|
ENDEVEC: END; 00219900
|
|
GO TO CHECK; 00220000
|
|
CHECK: END; 00220100
|
|
IF DUMPTHISONE THEN GO TO STOP; 00220200
|
|
IF DUMB!OLDDUMB THEN GO TO DUMREED; 00220300
|
|
WRITE (TTOUT(STA),DONE)[:BRK]; 00220400
|
|
GO TO REED; 00220500
|
|
SOLVER: BEGIN 00220600
|
|
LABEL ENDSOLVER; 00220700
|
|
IF FINDCH(RD[0],TI)>GP THEN 00220800
|
|
BEGIN 00220900
|
|
SKIPOVER:=SKIPOVER+1; 00221000
|
|
I:=2; 00221100
|
|
I.[36:6]:=1; 00221200
|
|
WRITE(TTOUT(STA),ERR,SKIPOVER,I,2,6,MESSAGE[29],MESSAGE 00221300
|
|
[30],2,"A",1,TYPE[1],NUM[1])[:BRK]; 00221400
|
|
DUMB:=DUMB+1; 00221500
|
|
GO TO ENDSOLVER; 00221600
|
|
END; 00221700
|
|
SHIFT(RD[0],CPACE:=FINDCH(RD[0],TI)+1,GP:=GP-CPACE); 00221800
|
|
SKIPBLANKS; 00221900
|
|
READ (RD[*],<A1,I1>,TYPE[2],NUM[2]); 00222000
|
|
SKIPOVER:=SKIPOVER+CPACE+2; 00222100
|
|
IF (TYPE[2]!"M" AND TYPE[2]!"V" AND TYPE[2]!"C" AND 00222200
|
|
TYPE[2]!"P") OR NUM[2]>9 THEN 00222300
|
|
BEGIN 00222400
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,2,3,6,MESSAGE[3],MESSAGE 00222500
|
|
[4],MESSAGE[5],2,"A",1,TYPE[2],NUM[2])[:BRK]; 00222600
|
|
DUMB:=DUMB+1; 00222700
|
|
GO TO ENDSOLVER; 00222800
|
|
END; 00222900
|
|
IF FINDCH(RD[0],EQ)>GP THEN 00223000
|
|
BEGIN 00223100
|
|
SKIPOVER:=SKIPOVER+1; 00223200
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,7,2,6,MESSAGE[15],MESSAGE 00223300
|
|
[16],2,"A",1,TYPE[2],NUM[2])[:BRK]; 00223400
|
|
DUMB:=DUMB+1; 00223500
|
|
GO TO ENDSOLVER; 00223600
|
|
END; 00223700
|
|
SHIFT(RD[0],CPACE:=FINDCH(RD[0],EQ)+1,GP:=GP-CPACE); 00223800
|
|
SKIPBLANKS; 00223900
|
|
READ (RD[*],<A1,I1>,TYPE[3],NUM[3]); 00224000
|
|
SKIPOVER:=SKIPOVER+CPACE+2; 00224100
|
|
IF (TYPE[3]!"M" AND TYPE[3]!"V" AND TYPE[3]!"C" AND 00224200
|
|
TYPE[3]!"P") OR NUM[3]>9 THEN 00224300
|
|
BEGIN 00224400
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,2,3,6,MESSAGE[3],MESSAGE 00224500
|
|
[4],MESSAGE[5],2,"A",1,TYPE[3],NUM[3])[:BRK]; 00224600
|
|
DUMB:=DUMB+1; 00224700
|
|
GO TO ENDSOLVER; 00224800
|
|
END; 00224900
|
|
IF TYPE[1]="M" AND TYPE[2]="V" AND TYPE[3]="V" THEN 00225000
|
|
BEGIN 00225100
|
|
IF MATRIX[NUM[1],1,0]!MATRIX[NUM[1],0,1] THEN 00225200
|
|
BEGIN 00225300
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,9,2,6,MESSAGE[20],MESSAGE 00225400
|
|
[21],2,"A",1,TYPE[1],NUM[1])[:BRK]; 00225500
|
|
DUMB:=DUMB+1; 00225600
|
|
GO TO ENDSOLVER; 00225700
|
|
END; 00225800
|
|
IF MATRIX[NUM[1],1,0]!VECTOR[NUM[3],0] THEN 00225900
|
|
BEGIN 00226000
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,9,2,6,MESSAGE[20],MESSAGE 00226100
|
|
[21],2,"A",1,TYPE[3],NUM[3])[:BRK]; 00226200
|
|
DUMB:=DUMB+1; 00226300
|
|
GO TO ENDSOLVER; 00226400
|
|
END; 00226500
|
|
SOLVE(MATRIX[NUM[1],*,*],VECTOR[NUM[2],*],VECTOR[NUM[3],*]);00226600
|
|
GO TO ENDSOLVER; 00226700
|
|
END ELSE 00226800
|
|
BEGIN 00226900
|
|
I:=1; 00227000
|
|
I.[36:6]:=1; 00227100
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,I,4,6,MESSAGE[25],MESSAGE 00227200
|
|
[26],MESSAGE[27],MESSAGE[28],5,"A",1,TYPE[1],MI, 00227300
|
|
TYPE[2],MI,TYPE[3])[:BRK]; 00227400
|
|
DUMB:=DUMB+1; 00227500
|
|
GO TO ENDSOLVER; 00227600
|
|
END; 00227700
|
|
ENDSOLVER:END; 00227800
|
|
IF DUMPTHISONE THEN GO TO STOP; 00227900
|
|
IF DUMB!OLDDUMB THEN GO TO DUMREED; 00228000
|
|
WRITE (TTOUT(STA),DONE)[:BRK]; 00228100
|
|
GO TO REED; 00228200
|
|
ROOTS: BEGIN 00228300
|
|
LABEL ENDROOTS; 00228400
|
|
IF TYPE[1]="P" THEN 00228500
|
|
BEGIN 00228600
|
|
PROOTS(POLY[NUM[1],*]); 00228700
|
|
GO TO ENDROOTS; 00228800
|
|
END ELSE 00228900
|
|
BEGIN 00229000
|
|
I:=1; 00229100
|
|
I.[36:6]:=1; 00229200
|
|
WRITE (TTOUT(STA),ERR,SKIPOVER,I,4,6,MESSAGE[25],MESSAGE 00229300
|
|
[26],MESSAGE[27],MESSAGE[28],1,"A",1,TYPE[1])[:BRK];00229400
|
|
DUMB:=DUMB+1; 00229500
|
|
GO TO ENDROOTS; 00229600
|
|
END; 00229700
|
|
ENDROOTS: END; 00229800
|
|
IF DUMPTHISONE THEN GO TO STOP; 00229900
|
|
IF DUMB!OLDDUMB THEN GO TO DUMREED; 00230000
|
|
WRITE (TTOUT(STA),DONE)[:BRK]; 00230100
|
|
GO TO REED; 00230200
|
|
STOP:RERR: WRITE (TTOUT(STA),FO3)[:BRK]; 00230300
|
|
WATCHER[4]:=TIME(2); PUTCHRIN(WATCHER[1],0,"0"); %SPY00230400
|
|
WATCHER[1]:=TIME(0); WATCHER[1].[12:6]~1; %SPY00230500
|
|
WATCHER[3]:=TIME(1); %SPY00230600
|
|
% READ (DISC[0],*,PNTR)[STOP]; %SPY00230700
|
|
% WRITE (DISC[PNTR+1],5,WATCHER[*]); %SPY00230800
|
|
% WRITE (DISC[0],*,PNTR+1); %SPY00230900
|
|
% LOCK (DISC,SAVE); %SPY00231000
|
|
% IF PNTR+1}50 THEN 00231100
|
|
% BEGIN 00231200
|
|
%FORMAT F("CC EXECUTE PROGRAM/READER .B2/12137-025",00231300
|
|
% "3 81184 WITKIN LOUIS;END."); 00231400
|
|
% WRITE (CONST[*],F); 00231500
|
|
% ZIP WITH CONST[*]; 00231600
|
|
% END; 00231700
|
|
BRK: END. 00231800
|