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.
1573 lines
124 KiB
Plaintext
1573 lines
124 KiB
Plaintext
BEGIN 00000100
|
|
COMMENT LOUIS A. WITKIN, FLEXIBLE TELETYPE PROGRAM FOR MATRIX 00000200
|
|
OPERATIONS. UNIVERSITY OF DENVER, 2/23/68; 00000300
|
|
COMMENT VERSION 4 4/2/69; 00000400
|
|
ALPHA FILE IN TTIN 14 (2,8); 00000500
|
|
ALPHA FILE OUT TTOUT 14 (2,8); 00000600
|
|
INTEGER STA; 00000700
|
|
INTEGER J,K; 00000800
|
|
INTEGER PNT; 00000900
|
|
REAL QUANT; 00001000
|
|
REAL MSG; 00001100
|
|
REAL NMSG; 00001200
|
|
REAL NCA; 00001300
|
|
REAL NLP; 00001400
|
|
REAL WO; 00001500
|
|
REAL MSGL; 00001600
|
|
ALPHA LP; 00001700
|
|
ALPHA CA; 00001800
|
|
INTEGER GP; 00001900
|
|
LABEL EQU; 00002000
|
|
LABEL NAME; 00002100
|
|
LABEL CHECK; 00002200
|
|
LABEL BMSG; 00002300
|
|
ARRAY TYPE,NUM[0:3]; 00002400
|
|
ARRAY CONST[0:9],POLY[0:9,0:20]; 00002500
|
|
ARRAY SPOLY,WPOLY[0:20]; 00002600
|
|
ALPHA LA; 00002700
|
|
ALPHA QUEST; 00002800
|
|
INTEGER I; 00002900
|
|
LABEL ERR,INPUT,PRINTER,SET, FREQL,ROOTS,STOP,TEACH,SIZE,LOCI,VL; 00003000
|
|
SWITCH SL~ERR,INPUT,PRINTER,SET,ERR,FREQL,ROOTS,STOP,TEACH,SIZE,LOCI,VL;00003100
|
|
LABEL MORE; 00003200
|
|
LABEL BRK; 00003300
|
|
SAVE REAL ARRAY RD[0:7]; 00003400
|
|
SAVE ARRAY WD[0:35]; 00003500
|
|
REAL NC,NCT; 00003600
|
|
ARRAY LINE [0:7]; 00003700
|
|
INTEGER ERRTOG; 00003800
|
|
LABEL INOP; 00003900
|
|
LABEL ADD,SUB,DVD,MULT,NULL; 00004000
|
|
SWITCH F~ADD,SUB,DVD,MULT,INOP,INOP,INOP,NULL,INOP,INOP; 00004100
|
|
INTEGER LOC; 00004200
|
|
LABEL RESET; 00004300
|
|
DEFINE E1="01INVA","LID VE","RB~ "," ",NCT,1," "#; 00004400
|
|
DEFINE E2="02INVA","LID ID","ENTIFI","ER~ ",NCT,1,2#; 00004500
|
|
DEFINE E2A="02INVA","LID ID","ENTIFI","ER~ ",NCT,2,2#; 00004600
|
|
DEFINE E3="03MISS","ING -(","-~ "," ",NMSG, 0,2#; 00004700
|
|
DEFINE E4="04MISS","ING -,","-~ "," ",NLP, 0,1#; 00004800
|
|
DEFINE E5="05MISS","ING -)","-~ "," ",WO , 0,1#; 00004900
|
|
DEFINE E6="06INVA","LID OP","ERATIO","N~ ",NCT,0,0#; 00005000
|
|
DEFINE E7 ="07MISS","ING -=","-~ "," ",NMSG,0,2#; 00005100
|
|
DEFINE E8="08INVA","LID IN","DEX~ "," ",NMSG,0,2#; 00005200
|
|
DEFINE E9="09INVA","LID SI","ZE~ "," ",NMSG,0,2#; 00005300
|
|
COMMENT E10="INDEX OVERFLOW OF"; 00005400
|
|
DEFINE E11="11IDEN","T. INV",". FOR ","OPER.~",NMSG,0,MSGL#; 00005500
|
|
DEFINE E12="12MISS","ING -*","-~ "," ",NMSG,0,2#; 00005600
|
|
DEFINE E13="13DIVI","DE BY ","ZERO~ "," ",NMSG,0,2#; 00005700
|
|
DEFINE E14="14MISS","ING -/","-~ "," ",NMSG,0,2#; 00005800
|
|
DEFINE E15="15INVA","LID PA","RAMETE","R~ ",WO , 0,1#; 00005900
|
|
DEFINE E16="16TOO ","MUCH C","OMMAND","~ ",NCT,1,"~"#; 00006000
|
|
FORMAT FO1(X8,"{!POLYOP/TTY, VERSION 4.{!IF YOU NEED HELP, TY~",00006100
|
|
/X8,"PE ",""","TEACH",""",".{!!~"), 00006200
|
|
PNULL(X8,"{!P",A1," (",I*,") IS NULL.{!~"), 00006300
|
|
PSIZE(X8,"{!P",A1," IS (",I*,").{!!~"), 00006400
|
|
WC(X8,"{!C",I1,"=",V10.3,"{!!~"), 00006500
|
|
RC (X8,"{!C",I1,"=",A1,"{!~"), 00006600
|
|
DONE(X8,"{!DONE.{!~"); 00006700
|
|
FORMAT FIC(X8,"{!NUMBER ERROR. VALID CHARACTERS ARE 0",00006800
|
|
"123456789+-,.@. ~"/X8," TYPE LINE AGAIN.{!~"); 00006900
|
|
SWITCH FORMAT SF~(/), 00007000
|
|
(X8,"{!THE USER HAS TYPED A VERB THAT THE PROGRAM DOES NOT~", 00007100
|
|
/X8,"{!RECOGNIZE.{!~"), 00007200
|
|
(X8,"{!THE USER HAS TYPED AN IDENTIFIER THAT THE PROGRAM~", 00007300
|
|
/X8,"{!DOES NOT RECOGNIZE.{!~"), 00007400
|
|
(X8,"{!THE USER HAS NOT TYPED A LEFT-PARENTHESIS.{!~"), 00007500
|
|
(X8,"{!THE USER HAS NOT TYPED A COMMA.{!~"), 00007600
|
|
(X8,"{!THE USER HAS NOT TYPED A RIGHT-PARENTHESIS.{!~"), 00007700
|
|
(X8,"{!THE USER HAS TYPED AN OPERATION THAT THE PROGRAM DOES~",00007800
|
|
/X8,"{!NOT RECOGNIZE.{!~"), 00007900
|
|
(X8,"{!THE USER HAS NOT TYPED AN EQUAL SIGN.{!~"), 00008000
|
|
(X8,"{!THE USER HAS TYPED AN AREA SIZE THAT THE PROGRAM CAN~", 00008100
|
|
/X8,"{!NOT HANDLE.{!~"), 00008200
|
|
(X8,"{!THE USER ATTEMPTED AN OPERATION WITH IDENTIFIERS OF~", 00008300
|
|
/X8,"{!THE WRONG SIZES.{!~"), 00008400
|
|
(X8,"{!THE USER HAS TYPED TOO MANY VALUES.{!~"), 00008500
|
|
(X8,"{!THE USER HAS ATTEMPTED AN OPERATION THAT THE PROGRAM~", 00008600
|
|
/X8,"{!CAN NOT DO USING THE IDENTIFIERS THAT HE TYPED.{!~"), 00008700
|
|
(X8,"{!THE USER HAS NOT TYPED A MULTIPLICATION SIGN.{!~"), 00008800
|
|
(X8,"{!THE USER HAS ATTEMPTED AN INVALID DIVISION.{!~"), 00008900
|
|
(X8,"{!THE USER HAS NOT TYPED A DIVISION SIGN.{!~"), 00009000
|
|
(X8,"{!THE USER HAS TYPED AN ALPHA CHARACTER WHEN A NUMBER~", 00009100
|
|
/X8,"{!WAS EXPECTED.{!~"), 00009200
|
|
(X8,"{!THE USER HAS TYPED MORE DATA THAN THE SYNTAX ALLOWS.~", 00009300
|
|
/X8,"{!~"), 00009400
|
|
(X8,"{!",""","INPUT","""," OR ",""","READ",""","--ENTER DATA~",00009500
|
|
/X8" WHEN THE~", 00009600
|
|
/X8,"{!COMPUTER TYPES A QUESTION MARK. EXAMPLES:~", 00009700
|
|
/X8,"{!INPUT C4~", 00009800
|
|
/X8,"{!INPUT P2 (7)~", 00009900
|
|
/X8,"{!--7 REPRESENTS THE DEGREE OF THE POLYNOMIAL--~", 00010000
|
|
/X8,"{!ENTER THE COEFFICIENT OF THE LOWEST POWER FIRST.{!~"), 00010100
|
|
(X8,"{!",""","WRITE","""," OR ",""","PRINT",""","--TYPE STOR~",00010200
|
|
/X8,"ED DATA. EXAMPLES:~", 00010300
|
|
/X8,"{!WRITE C2~", 00010400
|
|
/X8,"{!WRITE P3{!~"), 00010500
|
|
(X8,"{!",""","SET","""," OR ",""","LET",""","--EXECUTE ARITH~",00010600
|
|
/X8,"METIC OPERATIONS.~", 00010700
|
|
/X8,"{!THERE ARE SIX POSSIBLE OPERATIONS. EXAMPLES:~", 00010800
|
|
/X8,"{! 1. ADDITION:~", 00010900
|
|
/X8,"{! SET C1=C3+C4~", 00011000
|
|
/X8,"{! SET P5=P3+P4~", 00011100
|
|
/X8,"{! 2. SUBTRACTION:~", 00011200
|
|
/X8,"{! SET C1=C5-C6~", 00011300
|
|
/X8,"{! SET P7=P2-P1~", 00011400
|
|
/X8,"{! 3. MULTIPLICATION:~", 00011500
|
|
/X8,"{! SET P6=P4*P2~", 00011600
|
|
/X8,"{! SET C9=C0*C1~", 00011700
|
|
/X8,"{! SET P5=C4*P2 --EVERY ELEMENT*CONSTANT--~", 00011800
|
|
/X8,"{! 4. DIVISION:~", 00011900
|
|
/X8,"{! SET C7=C5/C2~", 00012000
|
|
/X8,"{! SET P3 (9)=P1/P2~", 00012100
|
|
/X8,"{!--9 IS THE DEGREE OF THE QUOTIENT POLYNOMIAL--~", 00012200
|
|
/X8,"{! 5. EQUATE:~", 00012300
|
|
/X8,"{! SET C2=C3~", 00012400
|
|
/X8,"{! SET P5=P3~", 00012500
|
|
/X8,"{! SET P2 (7)= 5 --A PARTICULAR ELEMENT--~", 00012600
|
|
/X8,"{! SET C4= 1000000000001.0~", 00012700
|
|
/X8,"{!6. NULLIFY:~", 00012800
|
|
/X8,"{! SET C9=NULL~", 00012900
|
|
/X8,"{! SET P3 (15)=NULL{!~"), 00013000
|
|
(/), 00013100
|
|
(X8,"{!",""","FREQ",""","--COMPUTES FREQUENCY RESP~", 00013200
|
|
/X8,"ONSE AND TYPES THE SOLUTION.{!FOR EXAMPLE, IF YOU TYPE~",00013300
|
|
/X8," ",""","FREQ P*/P#","""," WHERE * AND # ARE NUMBERS FR~",00013400
|
|
/X8,"OM{!0 TO 9, THE PROGRAM WILL RETURN TO THE NEXT LINE. ~",00013500
|
|
/X8," YOU MAY NOW EITHER{!TYPE A SINGLE VALUE OR AN INCREME~",00013600
|
|
/X8,"NT LIKE ",""","(1,2,10)","""," WHERE 1 IS THE{!STARTING VALU~",00013700
|
|
/X8,"E, 2 IS THE INCREMENT, AND 10 IS THE LIMITING VALUE.{!~",00013800
|
|
/X8,"THESE TWO FORMS OF VALUES CAN BE USED IN ANY ORDER AND~",00013900
|
|
/X8," ANY NUMBER OF{!TIMES. WHEN YOU ARE FINISHED USING FR~",00014000
|
|
/X8,"EQUENCY RESPONSE, TYPE ",""","OUT",""",".{!THE PROGRAM~",00014100
|
|
/X8," WILL RESPOND BY TYPING ",""","DONE",""",". YOU ARE N~",00014200
|
|
/X8,"OW IN THE MAIN{!PART OF THE PROGRAM AND YOU MAY USE AN~",00014300
|
|
/X8,"Y OPERATION (OR FREQUENCY{!RESPONSE AGAIN).{!~"), 00014400
|
|
(X8,"{!",""","ROOTS",""","--FINDS THE ROOTS OF A POLYNOMIAL~", 00014500
|
|
/X8,"{!AND TYPES THE SOLUTION. EXAMPLE:~", 00014600
|
|
/X8,"{!ROOTS P3{!~"), 00014700
|
|
(X8,"{!",""","STOP","""," OR ",""","QUIT",""","--END COMPUTA~",00014800
|
|
/X8,"TION AND TERMINATE THE PROGRAM.{!~"), 00014900
|
|
(X8,"{!THE FOLLOWING COMPUTATIONAL AREAS ARE AVAILABLE:~", 00015000
|
|
/X8,"{! 1. 10 CONSTANTS.~", 00015100
|
|
/X8,"{! 2. 10 POLYNOMIALS, 19TH DEGREE IN EACH.~", 00015200
|
|
/X8,"{!THESE AREAS MAY BE REFERENCED AS C* OR P*,~", 00015300
|
|
/X8,"{! WHERE * IS A NUMBER FROM 0 TO 9.~", 00015400
|
|
/X8,"{!!FOR THE MEANING OF A PARTICULAR COMMAND, TYPE ",""", 00015500
|
|
"TEACH~", 00015600
|
|
/X8,""","{!FOLLOWED BY ONE OF THE FOLLOWING COMMANDS:~", 00015700
|
|
/X8,"{!!",""","INPUT","""," OR ",""","READ",""~", 00015800
|
|
/X8,"{!",""","WRITE","""," OR ",""","PRINT",""~", 00015900
|
|
/X8,"{!",""","SET","""," OR ",""","LET",""~", 00016000
|
|
/X8,"{!",""","FREQ",""~", 00016100
|
|
/X8,"{!",""","ROOTS",""~", 00016200
|
|
/X8,"{!",""","STOP","""," OR ",""","QUIT",""~", 00016300
|
|
/X8,"{!",""","SIZE",""~", 00016400
|
|
/X8,"{!",""","LOCI",""~", 00016500
|
|
/X8,"{!!FOR THE MEANING OF AN ERROR MESSAGE, TYPE ",""", 00016600
|
|
"TEACH",""~", 00016700
|
|
/X8,"{!FOLLOWED BY THE NUMBER OF THE ERROR MESSAGE.{!~"), 00016800
|
|
(X8,"{!",""","SIZE",""","--TYPES THE DEGREE OF A POLYNOMIAL.~",00016900
|
|
/X8," EXAMPLE:~", 00017000
|
|
/X8,"{!SIZE P2{!~"); 00017100
|
|
SWITCH FORMAT SF2~ 00017200
|
|
(X8,"{!",""","LOCI",""","--IF THE USER TYPES ",""","LOCI (P*,P#)",""", 00017300
|
|
", WHERE * AND~", 00017400
|
|
/X8,"{!# ARE NUMBERS FROM 0 TO 9, THE PROGRAM WILL ASK FOR A~", 00017500
|
|
/X8,"{!K VALUE. THIS VALUE IS USED WHEN THE PROGRAM FINDS~", 00017600
|
|
/X8,"{!THE ROOTS OF P* + K X P# AND TYPES THE SOLUTION. IF~", 00017700
|
|
/X8,"{!THE USER WANTS THE COMBINED POLYNOMIAL PRINTED, TYPE~", 00017800
|
|
/X8,"{!",""","LOCI (P*,P#) POLY",""",". TYPE ",""","OUT","""," TO LEA",00017900
|
|
"VE LOCI AND~", 00018000
|
|
/X8,"{!RETURN TO THE MAIN SECTION OF THE PROGRAM.{!~"); 00018100
|
|
REAL STREAM PROCEDURE MKABS(BUFF); 00018200
|
|
BEGIN 00018300
|
|
SI~BUFF; SI~SI+8; MKABS~SI; 00018400
|
|
END MKABS; 00018500
|
|
REAL STREAM PROCEDURE MKCHR(BUFF); 00018600
|
|
BEGIN 00018700
|
|
SI~BUFF; MKCHR~SI; 00018800
|
|
END MKCHR; 00018900
|
|
INTEGER PROCEDURE SCAN; 00019000
|
|
BEGIN 00019100
|
|
REAL STREAM PROCEDURE LOOK(DICT,NC,NCV,VAR); 00019200
|
|
VALUE NCV; 00019300
|
|
BEGIN 00019400
|
|
LABEL ALPH,GOTIT,ALL; 00019500
|
|
LOCAL T,N,SSI; 00019600
|
|
SI~NCV; 56(IF SC=" " THEN SI~SI+1 ELSE JUMP OUT TO ALPH); 00019700
|
|
ALPH:T~SI; SI~DICT; 36(DI~LOC N; DI~DI+7; DS~CHR; DI~T; 00019800
|
|
IF N SC=DC THEN 00019900
|
|
BEGIN 00020000
|
|
T~DI; DI~VAR; DS~8 LIT "0"; DI~DI-N; SSI~SI; SI~T; 00020100
|
|
SI~SI-N; DS~N CHR;SI~SSI; DI~T; JUMP OUT TO GOTIT; 00020200
|
|
END ELSE 00020300
|
|
BEGIN 00020400
|
|
SI~SI-N; SI~SI+7; 00020500
|
|
END); 00020600
|
|
SI~T; IF SC=ALPHA THEN IF SC}"0" THEN 00020700
|
|
BEGIN 00020800
|
|
DI~LOC SSI; DS~CHR; TALLY~1; 7(IF SC}"0" THEN 00020900
|
|
BEGIN 00021000
|
|
DS~CHR; TALLY~TALLY+1; 00021100
|
|
END ELSE JUMP OUT TO ALL); 00021200
|
|
ALL:N~TALLY; T~SI; SI~LOC SSI; DI~VAR; DS~N OCT; TALLY~40; 00021300
|
|
N~TALLY; SI~LOC N; SI~SI+7; DI~T; GO TO GOTIT; 00021400
|
|
END; 00021500
|
|
TALLY~1; N~TALLY; SI~LOC N; SI~SI+7; 00021600
|
|
GOTIT:T~DI; DI~LOC LOOK; DI~DI+7; DS~CHR; SI~LOC T; DI~NC; 00021700
|
|
DS~WDS; 00021800
|
|
END LOOK; 00021900
|
|
SCAN~LOOK(WD,NCT,NCT,QUANT); 00022000
|
|
END SCAN; 00022100
|
|
STREAM PROCEDURE MARK(RD,NCT); 00022200
|
|
VALUE NCT; 00022300
|
|
BEGIN 00022400
|
|
DI~RD; 8(DS~8 LIT " "); DI~RD; DI~DI+8; DS~2 LIT "{!"; 00022500
|
|
DI~NCT; DI~DI+1; DS~5 LIT "+---~"; 00022600
|
|
END MARK; 00022700
|
|
STREAM PROCEDURE PRT(LINE,N1,N2,N3,N4,NC,BACK,NCH); 00022800
|
|
VALUE N1,N2,N3,N4,NC,BACK,NCH; 00022900
|
|
BEGIN 00023000
|
|
LOCAL TEMP,T; 00023100
|
|
LABEL DONE,STOP,CONT; 00023200
|
|
DI~LINE; DI~DI+8; DS~8 LIT "{!ERR # "; SI~LOC N1; SI~SI+2;00023300
|
|
DS~2 CHR; DS~3 LIT " - "; 00023400
|
|
4(IF SC="~" THEN JUMP OUT TO DONE; DS~CHR); 3(SI~SI+2; 00023500
|
|
6(IF SC="~" THEN JUMP OUT 2 TO DONE; DS~CHR)); 00023600
|
|
DONE:DS~3 LIT " .."; SI~NC; SI~SI-BACK; TEMP~SI; SI~LOC NCH; 00023700
|
|
SI~SI+7; IF SC}"0" THEN 00023800
|
|
BEGIN 00023900
|
|
SI~TEMP; NCH(IF SC="~" THEN JUMP OUT TO STOP; DS~CHR); 00024000
|
|
END ELSE 00024100
|
|
BEGIN 00024200
|
|
SI~TEMP; T~DI; DI~LOC NCH; DI~DI+7; 00024300
|
|
13(IF SC="~" THEN JUMP OUT TO CONT; 00024400
|
|
IF SC=DC THEN JUMP OUT TO CONT; TALLY~TALLY+1; DI~DI-1); 00024500
|
|
CONT:SI~TEMP; DI~T; TEMP~TALLY; DS~TEMP CHR; 00024600
|
|
END; 00024700
|
|
STOP:DS~5 LIT "..{!~"; 00024800
|
|
END PRT; 00024900
|
|
PROCEDURE ERROR(N1,N2,N3,N4,NC,BACK,NCH); 00025000
|
|
VALUE N1,N2,N3,N4,NC,BACK,NCH; 00025100
|
|
ALPHA N1,N2,N3,N4,NCH; 00025200
|
|
INTEGER NC,BACK; 00025300
|
|
BEGIN 00025400
|
|
PRT(LINE,N1,N2,N3,N4,NC,BACK,NCH); 00025500
|
|
MARK(RD,NCT); 00025600
|
|
WRITE(TTOUT(STA),8,RD[*]); 00025700
|
|
WRITE(TTOUT(STA),8,LINE[*]); 00025800
|
|
ERRTOG~ERRTOG+1; 00025900
|
|
IF ERRTOG=5 THEN 00026000
|
|
WRITE(TTOUT(STA),<X8,"{!PLEASE READ THE INSTRUCTION MANUAL.{!!~">); 00026100
|
|
IF ERRTOG=6 THEN 00026200
|
|
GO TO STOP; 00026300
|
|
GO TO MORE; 00026400
|
|
END ERROR; 00026500
|
|
COMMENT REMOTE UNIT INPUT PROCEDURE PACKAGE 00026600
|
|
-----------------------------------------------------------------------;00026700
|
|
PROCEDURE STATION(STA); 00026800
|
|
INTEGER STA; 00026900
|
|
BEGIN 00027000
|
|
ARRAY RD1[0:7]; 00027100
|
|
STA:=STATUS(RD1[*]); 00027200
|
|
STA.[9:9]:=RD1[0].[9:9]; 00027300
|
|
END OF PROCEDURE STATION; 00027400
|
|
INTEGER STREAM PROCEDURE FINDCH(B,CH); 00027500
|
|
VALUE CH; 00027600
|
|
BEGIN 00027700
|
|
DI:=LOC CH; DI:=DI+7; SI:=B; 00027800
|
|
63(IF SC=DC THEN JUMP OUT; DI:=DI-1; TALLY:=TALLY+1); 00027900
|
|
FINDCH:=TALLY; 00028000
|
|
END OF PROCEDURE FINDCH; 00028100
|
|
BOOLEAN STREAM PROCEDURE ANYFUNNYCHRS(B,NCH); 00028200
|
|
VALUE NCH; 00028300
|
|
BEGIN 00028400
|
|
LABEL OK; 00028500
|
|
SI:=B; TALLY:=0; NCH(IF SC=ALPHA THEN BEGIN IF SC}"0" 00028600
|
|
THEN GO TO OK; END; IF SC="." THEN GO TO OK; IF SC=","00028700
|
|
THEN GO TO OK; IF SC="+" THEN GO TO OK; IF SC="-" THEN00028800
|
|
GO TO OK; IF SC="@" THEN GO TO OK; TALLY:=1; JUMP OUT;00028900
|
|
OK: SI:=SI+1); 00029000
|
|
ANYFUNNYCHRS:=TALLY 00029100
|
|
END OF PROCEDURE ANYFUNNYCHRS; 00029200
|
|
BOOLEAN STREAM PROCEDURE LASTCOMMA(B,NCH); 00029300
|
|
VALUE NCH; 00029400
|
|
BEGIN 00029500
|
|
SI:=B; SI:=SI+NCH; IF SC="," THEN TALLY:=1; 00029600
|
|
LASTCOMMA:=TALLY 00029700
|
|
END OF PROCEDURE LASTCOMMA; 00029800
|
|
STREAM PROCEDURE PUTCHRIN(B,NCH,CH); 00029900
|
|
VALUE NCH,CH; 00030000
|
|
BEGIN 00030100
|
|
DI:=B; SI:=LOC CH; SI:=SI+7; DI:=DI+NCH; DS:=1 CHR 00030200
|
|
END OF PROCEDURE PUTCHRIN; 00030300
|
|
INTEGER STREAM PROCEDURE COUNTCOMMAS(B,NCH); 00030400
|
|
VALUE NCH; 00030500
|
|
BEGIN 00030600
|
|
SI:=B; NCH(IF SC="," THEN TALLY:=TALLY+1; SI:=SI+1); 00030700
|
|
COUNTCOMMAS:=TALLY 00030800
|
|
END OF PROCEDURE COUNTCOMMAS; 00030900
|
|
STREAM PROCEDURE MOVER(B,T,N); 00031000
|
|
VALUE N; 00031100
|
|
BEGIN 00031200
|
|
SI:=B; DI:=T; DS:=N CHR; DS:=6 LIT " " 00031300
|
|
END OF PROCEDURE MOVER; 00031400
|
|
STREAM PROCEDURE SHIFT(A,S,N); 00031500
|
|
VALUE S,N; 00031600
|
|
BEGIN 00031700
|
|
SI:=LOC S; SI:=SI+7; IF SC!"0" THEN 00031800
|
|
BEGIN 00031900
|
|
SI:=A; SI:=SI+S; DI:=A; DS:=N CHR 00032000
|
|
END 00032100
|
|
END OF PROCEDURE SHIFT; 00032200
|
|
BOOLEAN STREAM PROCEDURE DECIMAL(B,NCH); 00032300
|
|
VALUE NCH; 00032400
|
|
BEGIN 00032500
|
|
SI:=B; TALLY:=0; NCH(IF SC="." THEN BEGIN TALLY:=1; JUMP00032600
|
|
OUT; END; SI:=SI+1); DECIMAL:=TALLY 00032700
|
|
END OF PROCEDURE DECIMAL; 00032800
|
|
STREAM PROCEDURE MOVE(B,T,N); 00032900
|
|
VALUE N; 00033000
|
|
BEGIN 00033100
|
|
SI:=B; DI:=T; DS:=N CHR; DS:=20 LIT "0" 00033200
|
|
END OF PROCEDURE MOVE; 00033300
|
|
PROCEDURE READVAL(V,STA); 00033400
|
|
VALUE STA; INTEGER STA; REAL V; 00033500
|
|
BEGIN 00033600
|
|
INTEGER GP; 00033700
|
|
FORMAT FSO(X8,"{!TYPE VALUE AGAIN.{!~"); 00033800
|
|
LABEL RER,XIT,TRYAGIN; 00033900
|
|
ARRAY RD1[0:7]; 00034000
|
|
ALPHA LA,COMA; 00034100
|
|
LA:=31; COMA:=58; 00034200
|
|
TRYAGIN:READ(TTIN(STA),8,RD1[*]); 00034300
|
|
GP:=FINDCH(RD1[1],LA); 00034400
|
|
IF ANYFUNNYCHRS(RD1[1],GP) THEN GO TO RER; 00034500
|
|
PUTCHRIN(RD1[1],GP,COMA); GP:=GP+1; 00034600
|
|
MOVER(RD1[1],RD1[0],GP); 00034700
|
|
READ(RD1[*],/,V)[:RER]; GO TO XIT; 00034800
|
|
RER: WRITE(TTOUT(STA),FSO); GO TO TRYAGIN; 00034900
|
|
XIT:END OF PROCEDURE READVAL; 00035000
|
|
PROCEDURE READROW(N,A,STA); 00035100
|
|
VALUE N,STA; INTEGER N,STA; ARRAY A[0]; 00035200
|
|
BEGIN 00035300
|
|
INTEGER GP,I,J,CCM; 00035400
|
|
ALPHA LA,COMA; 00035500
|
|
LABEL MORE,XIT,R; 00035600
|
|
FORMAT F1(X8,"{!TYPING ERROR. VALID CHARACTERS ARE 0",00035700
|
|
"123456789+-,.@. ~"/X8," TYPE LINE AGAIN.{!~"), 00035800
|
|
F2(X8,"{!~"); 00035900
|
|
ARRAY RD1[0:7]; 00036000
|
|
J:=1; LA:=31; COMA:=58; 00036100
|
|
NCT~NC; 00036200
|
|
MORE: READ(TTIN(STA),8,RD1[*]); 00036300
|
|
GP:=FINDCH(RD1[1],LA); 00036400
|
|
IF ANYFUNNYCHRS(RD1[1],GP) THEN GO TO R; 00036500
|
|
IF NOT LASTCOMMA(RD1[1],GP-1) THEN 00036600
|
|
BEGIN 00036700
|
|
PUTCHRIN(RD1[1],GP,COMA); GP:=GP+1 00036800
|
|
END; 00036900
|
|
CCM:=COUNTCOMMAS(RD1[1],GP)-1; 00037000
|
|
IF J+CCM>N THEN 00037100
|
|
BEGIN 00037200
|
|
WRITE (TTOUT(STA),<X8,"{!ERR # 10 - INDEX OVERFLOW OF .",00037300
|
|
".",I2,"..{!~">,J+CCM-N); 00037400
|
|
GO TO MORE; 00037500
|
|
END; 00037600
|
|
MOVER(RD1[1],RD1[0],GP); 00037700
|
|
READ(RD1[*],/,FOR I:=J STEP 1 UNTIL J+CCM DO A[I])[:R]00037800
|
|
; J:=J+CCM+1; 00037900
|
|
WRITE(TTOUT(STA),F2); 00038000
|
|
IF J{N THEN GO TO MORE ELSE GO TO XIT; 00038100
|
|
R: WRITE(TTOUT(STA),F1); GO TO MORE; 00038200
|
|
XIT:END OF PROCEDURE READROW; 00038300
|
|
PROCEDURE PRINT (RD); 00038400
|
|
ARRAY RD[0]; 00038500
|
|
BEGIN 00038600
|
|
BOOLEAN STREAM PROCEDURE LINE (NC,NCT,RD2); 00038700
|
|
VALUE NCT; 00038800
|
|
BEGIN 00038900
|
|
LOCAL T; 00039000
|
|
LABEL DONE; 00039100
|
|
SI~NCT; DI~RD2; DI~DI+8; 00039200
|
|
55(IF SC="~" THEN 00039300
|
|
BEGIN 00039400
|
|
TALLY~0; JUMP OUT TO DONE; 00039500
|
|
END; 00039600
|
|
DS~CHR); TALLY~1; 00039700
|
|
DONE:DS~1 LIT "~"; T~SI; SI~LOC T; DI~NC; DS~WDS; LINE~TALLY; 00039800
|
|
END LINE; 00039900
|
|
ARRAY RD2[0:7]; 00040000
|
|
REAL NCT; 00040100
|
|
NCT~MKABS(RD); 00040200
|
|
WHILE LINE(NCT,NCT,RD2) DO 00040300
|
|
WRITE (TTOUT(STA),8,RD2[*]); 00040400
|
|
WRITE (TTOUT(STA),8,RD2[*]); 00040500
|
|
END PRINT; 00040600
|
|
COMMENT----------------------------------------------------------------;00040700
|
|
PROCEDURE SKIPBLANKS; 00040800
|
|
BEGIN 00040900
|
|
LABEL MORESPACE; 00041000
|
|
MORESPACE: IF FINDCH(RD[0]," " )=0 THEN 00041100
|
|
BEGIN 00041200
|
|
SHIFT(RD[0],1,GP:=GP-1); 00041300
|
|
GO TO MORESPACE; 00041400
|
|
END; 00041500
|
|
END OF PROCEDURE SKIPBLANKS; 00041600
|
|
COMMENT PROCEDURES ARE INSERTED IN THIS SPACE 00041700
|
|
***********************************************************************;00041800
|
|
PROCEDURE PREAD(N); 00041900
|
|
ARRAY N[0]; 00042000
|
|
READROW(N[2],POLY[N[1],*],STA); 00042100
|
|
PROCEDURE READARRAY (V); 00042200
|
|
REAL V; 00042300
|
|
BEGIN 00042400
|
|
INTEGER GP; 00042500
|
|
ALPHA LA,COMA; 00042600
|
|
LA~31; COMA~58; 00042700
|
|
GP~FINDCH(RD[0],LA); 00042800
|
|
PUTCHRIN(RD[0],GP,COMA); 00042900
|
|
READ(RD[*],/,V); 00043000
|
|
END OF PROCEDURE READARRAY; 00043100
|
|
PROCEDURE PWRITE(NUM); 00043200
|
|
ARRAY NUM[0]; 00043300
|
|
BEGIN 00043400
|
|
FORMAT FP(X8,"{!P",A1," (",I*,")={!~"), 00043500
|
|
F1(X8,"{!",*(V10.3,X2),"{!",*(V10.3,X2),"{!",*(V10.3,X2),00043600
|
|
"{!",*(V10.3,X2),"~"); 00043700
|
|
ALPHA ARRAY RD1[0:32]; 00043800
|
|
INTEGER I; 00043900
|
|
ALPHA LA; 00044000
|
|
LABEL MORE; 00044100
|
|
LA:=31; 00044200
|
|
WRITE (TTOUT(STA),FP,NUM[1],IF NUM[2]-1<10 AND NUM[2]-1> 00044300
|
|
-1 THEN 1 ELSE 2,NUM[2]-1); 00044400
|
|
IF NUM[2]{6 THEN 00044500
|
|
WRITE (RD1[*],F1,NUM[2],FOR I~1 STEP 1 UNTIL NUM[2] DO 00044600
|
|
[IF POLY[NUM[1],I]<@-1 OR POLY[NUM[1],I]>@5 THEN 00044700
|
|
"E" ELSE "F",POLY[NUM[1],I]],-1,-1,-1) ELSE 00044800
|
|
IF NUM[2]{12 THEN 00044900
|
|
WRITE (RD1[*],F1,6,FOR I~1,2,3,4,5,6 DO [IF POLY[NUM[1], 00045000
|
|
I]<@-1 OR POLY[NUM[1],I]>@5 THEN "E" ELSE "F",POLY 00045100
|
|
[NUM[1],I]],NUM[2]-6,FOR I~7 STEP 1 UNTIL NUM[2] DO 00045200
|
|
[IF POLY[NUM[1],I]<@-1 OR POLY[NUM[1],I]>@5 THEN "E"00045300
|
|
ELSE "F",POLY[NUM[1],I]],-1,-1) ELSE 00045400
|
|
IF NUM[2]{18 THEN 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]],NUM[2]-12,FOR I~13 STEP 1 UNTIL 00046000
|
|
NUM[2] DO [IF POLY[NUM[1],I]<@-1 OR POLY[NUM[1],I]> 00046100
|
|
@5 THEN "E" ELSE "F",POLY[NUM[1],I]],-1) ELSE 00046200
|
|
WRITE (RD1[*],F1,6,FOR I~1,2,3,4,5,6 DO [IF POLY[NUM[1], 00046300
|
|
I]<@-1 OR POLY[NUM[1],I]>@5 THEN "E" ELSE "F",POLY 00046400
|
|
[NUM[1],I]],6,FOR I~7,8,9,10,11,12 DO [IF POLY 00046500
|
|
[NUM[1],I]<@-1 OR POLY[NUM[1],I]>@5 THEN "E" ELSE 00046600
|
|
"F",POLY[NUM[1],I]],6,FOR I~13,14,15,16,17,18 DO [IF00046700
|
|
POLY[NUM[1],I]<@-1 OR POLY[NUM[1],I]>@5 THEN "E" 00046800
|
|
ELSE "F",POLY[NUM[1],I]],NUM[2]-18,FOR I~19 STEP 1 00046900
|
|
UNTIL NUM[2] DO [IF POLY[NUM[1],I]<@-1 OR POLY 00047000
|
|
[NUM[1],I]>@5 THEN "E" ELSE "F",POLY[NUM[1],I]]); 00047100
|
|
PRINT(RD1); 00047200
|
|
WRITE (TTOUT(STA),<X8,"{!~">); 00047300
|
|
END OF PROCEDURE PWRITE; 00047400
|
|
REAL PROCEDURE MAX(A,N); 00047500
|
|
VALUE N; INTEGER N; ARRAY A[0]; 00047600
|
|
BEGIN 00047700
|
|
INTEGER I; 00047800
|
|
REAL M; M:=A[1]; 00047900
|
|
FOR I:=2 STEP 1 UNTIL N DO 00048000
|
|
IF A[I]>M THEN M:=A[I]; 00048100
|
|
MAX:=M 00048200
|
|
END OF PROCEDURE MAX; 00048300
|
|
REAL PROCEDURE MIN(A,N); 00048400
|
|
VALUE N; INTEGER N; ARRAY A[0]; 00048500
|
|
BEGIN 00048600
|
|
INTEGER I; 00048700
|
|
REAL M; M:=A[1]; 00048800
|
|
FOR I:=2 STEP 1 UNTIL N DO 00048900
|
|
IF A[I]<M THEN M:=A[I]; 00049000
|
|
MIN:=M 00049100
|
|
END OF PROCEDURE MIN; 00049200
|
|
REAL PROCEDURE CABS(X,Y); 00049300
|
|
VALUE X,Y; REAL X,Y; 00049400
|
|
BEGIN 00049500
|
|
COMMENT ALGORITHM 312 OCT. 1967 <PAUL FRIEDLAND>; 00049600
|
|
X:=ABS(X); Y:=ABS(Y); 00049700
|
|
CABS:=IF X=0 THEN Y ELSE IF Y=0 THEN X ELSE 00049800
|
|
IF X>Y THEN X|SQRT(1+(Y/X)*2) 00049900
|
|
ELSE Y|SQRT(1+(X/Y)*2) 00050000
|
|
END OF PROCEDURE CABS; 00050100
|
|
PROCEDURE CMULT(XR,XI,YR,YI,AR,AI); 00050200
|
|
VALUE XR,XI,YR,YI; REAL XR,XI,YR,YI,AR,AI; 00050300
|
|
BEGIN 00050400
|
|
AR:=XR|YR-XI|YI; AI:=XR|YI+XI|YR 00050500
|
|
END; 00050600
|
|
PROCEDURE CADD(XR,XI,YR,YI,AR,AI); 00050700
|
|
VALUE XR,XI,YR,YI; REAL XR,XI,YR,YI,AR,AI; 00050800
|
|
BEGIN 00050900
|
|
AR:=XR+YR; AI:=XI+YI 00051000
|
|
END; 00051100
|
|
REAL PROCEDURE ABSCPOLY(N,CO,ZR,ZI); 00051200
|
|
VALUE N; INTEGER N; ARRAY CO[0]; REAL ZR,ZI; 00051300
|
|
BEGIN 00051400
|
|
INTEGER I; 00051500
|
|
REAL YR,YI; 00051600
|
|
YR:=CO[N]; 00051700
|
|
FOR I:=N STEP -1 UNTIL 1 DO 00051800
|
|
BEGIN 00051900
|
|
CMULT(YR,YI,ZR,ZI,YR,YI); 00052000
|
|
CADD(YR,YI,CO[I-1],0,YR,YI) 00052100
|
|
END; 00052200
|
|
ABSCPOLY:=CABS(YR,YI) 00052300
|
|
END OF PROCEDURE ABSCPOLY; 00052400
|
|
PROCEDURE DOUBLESYNTHEDIV(A,N,REALROOT,IMAGROOT); 00052500
|
|
VALUE N,REALROOT,IMAGROOT; INTEGER N; REAL REALROOT, 00052600
|
|
IMAGROOT; ARRAY A[0]; 00052700
|
|
BEGIN 00052800
|
|
INTEGER I; 00052900
|
|
A[N-1]:=A[N-1]+2|REALROOT|A[N]; 00053000
|
|
FOR I:=2 STEP 1 UNTIL N DO 00053100
|
|
A[N-I]:=A[N-I]-(REALROOT*2+IMAGROOT*2)|A[N-I+2] 00053200
|
|
+2|REALROOT|A[N-I+1]; 00053300
|
|
FOR I:=0 STEP 1 UNTIL N-2 DO A[I]:=A[I+2] 00053400
|
|
END OF PROCEDURE DOUBLESYNTHEDIV; 00053500
|
|
PROCEDURE SYNTHETICDIV(A,N,ROOT); 00053600
|
|
VALUE N,ROOT; INTEGER N; REAL ROOT; ARRAY A[0]; 00053700
|
|
BEGIN 00053800
|
|
INTEGER I; 00053900
|
|
FOR I:=1 STEP 1 UNTIL N DO 00054000
|
|
A[N-I]:=A[N-I]+ROOT|A[N-I+1]; 00054100
|
|
FOR I:=0 STEP 1 UNTIL N-1 DO A[I]:=A[I+1] 00054200
|
|
END OF PROCEDURE SYNTHETICDIV; 00054300
|
|
PROCEDURE QADD(P,Q,PADDQ); 00054400
|
|
ARRAY P,Q,PADDQ[0]; 00054500
|
|
BEGIN 00054600
|
|
INTEGER SMALL,I; 00054700
|
|
IF P[0]>Q[0] THEN 00054800
|
|
BEGIN SMALL:=Q[0]; PADDQ[0]:=P[0]; 00054900
|
|
FOR I:=SMALL+1 STEP 1 UNTIL P[0] DO 00055000
|
|
PADDQ[I]:=P[I] 00055100
|
|
END 00055200
|
|
ELSE 00055300
|
|
BEGIN SMALL:=P[0]; PADDQ[0]:=Q[0]; 00055400
|
|
FOR I:=SMALL+1 STEP 1 UNTIL Q[0] DO 00055500
|
|
PADDQ[I]:=Q[I] 00055600
|
|
END; 00055700
|
|
FOR I:=1 STEP 1 UNTIL SMALL DO PADDQ[I]:=P[I]+Q[I]; 00055800
|
|
END 0F PROCEDURE QADD; 00055900
|
|
PROCEDURE QMULT(A,B,PROD); 00056000
|
|
ARRAY A,B,PROD[0]; 00056100
|
|
BEGIN 00056200
|
|
INTEGER I,J; 00056300
|
|
FOR I:=0 STEP 1 UNTIL A[0]+B[0] DO PROD[I]:=0; 00056400
|
|
FOR I:=1 STEP 1 UNTIL A[0] DO 00056500
|
|
FOR J:=1 STEP 1 UNTIL B[0] DO 00056600
|
|
PROD[I+J-1]:=PROD[I+J-1]+A[I]|B[J]; 00056700
|
|
PROD[0]:=A[0]+B[0]-1; 00056800
|
|
END OF PROCEDURE QMULT; 00056900
|
|
PROCEDURE CTV(A,B,C); 00057000
|
|
VALUE C; 00057100
|
|
ARRAY A,B[0]; 00057200
|
|
REAL C; 00057300
|
|
BEGIN 00057400
|
|
INTEGER I; 00057500
|
|
B[0]:=A[0]; 00057600
|
|
FOR I:=1 STEP 1 UNTIL A[0] DO 00057700
|
|
B[I]:=A[I]|C; 00057800
|
|
END OF PROCEDURE CTV; 00057900
|
|
PROCEDURE QSUB(P,Q,QSUBQ); 00058000
|
|
ARRAY P,Q,QSUBQ[0]; 00058100
|
|
BEGIN 00058200
|
|
INTEGER SMALL,I; 00058300
|
|
IF P[0]>Q[0] THEN 00058400
|
|
BEGIN SMALL:=Q[0]; QSUBQ[0]:=P[0]; 00058500
|
|
FOR I:=SMALL+1 STEP 1 UNTIL P[0] DO 00058600
|
|
QSUBQ[I]:=P[I] 00058700
|
|
END 00058800
|
|
ELSE 00058900
|
|
BEGIN SMALL:=P[0]; QSUBQ[0]:=Q[0]; 00059000
|
|
FOR I:=SMALL+1 STEP 1 UNTIL Q[0] DO 00059100
|
|
QSUBQ[I]:=-Q[I] 00059200
|
|
END; 00059300
|
|
FOR I:=1 STEP 1 UNTIL SMALL DO QSUBQ[I]:=P[I]-Q[I]; 00059400
|
|
END OF PROCEDURE QSUB; 00059500
|
|
PROCEDURE QDIV(N,D,Q,SIZE); 00059600
|
|
VALUE SIZE; ARRAY N,D,Q[0]; INTEGER SIZE; 00059700
|
|
BEGIN 00059800
|
|
ARRAY TEMPN,TSUB[0:20]; INTEGER I,J; 00059900
|
|
Q[0]~SIZE; TSUB[0]~D[0]; 00060000
|
|
FOR I~0 STEP 1 UNTIL N[0] DO TEMPN[I]~N[I]; 00060100
|
|
Q[1]~TEMPN[1]/D[1]; 00060200
|
|
FOR J~ 2 STEP 1 UNTIL Q[0] DO 00060300
|
|
BEGIN 00060400
|
|
FOR I~1 STEP 1 UNTIL TSUB[0] DO TSUB[I]~D[I]|Q[J-1]; 00060500
|
|
QSUB(TEMPN,TSUB,TEMPN); 00060600
|
|
FOR I~2 STEP 1 UNTIL TEMPN[0] DO TEMPN[I-1]~TEMPN[I]; 00060700
|
|
TEMPN[TEMPN[0]]~0; 00060800
|
|
Q[J]~ TEMPN[1]/D[1]; 00060900
|
|
END; 00061000
|
|
END OF PROCEDURE QDIV; 00061100
|
|
PROCEDURE FINDROOT(A,N,ROOTR,ROOTI); 00061200
|
|
VALUE N; INTEGER N; ARRAY A[0]; REAL ROOTR,ROOTI; 00061300
|
|
BEGIN 00061400
|
|
REAL GUESR,INCR,COMP,GUESI,PGUS; 00061500
|
|
INTEGER I,FLG1,FLG2; 00061600
|
|
ARRAY NBR,NBI,PNB[0:4]; 00061700
|
|
LABEL L1,L2,L3,L4,L5,L6,L7,XIT; 00061800
|
|
IF N=1 THEN 00061900
|
|
BEGIN 00062000
|
|
ROOTR:=-A[0]/A[1]; ROOTI:=0; GO TO XIT 00062100
|
|
END; 00062200
|
|
GUESR:=GUESI:=FLG1:=FLG2:=0; INCR:=0.5; COMP:=@-20; 00062300
|
|
L1: IF FLG1<5 OR FLG2>0 THEN 00062400
|
|
BEGIN 00062500
|
|
FLG1:=FLG1+1; GO TO L3 00062600
|
|
END; 00062700
|
|
L2: FLG1:=0; INCR:=8.0|INCR; 00062800
|
|
L3: NBR[1]:=GUESR +INCR; NBI[1]:=GUESI; 00062900
|
|
NBR[2]:=GUESR-INCR; NBI[2]:=GUESI; 00063000
|
|
NBR[3]:=GUESR; NBI[3]:=GUESI+INCR; 00063100
|
|
NBR[4]:=GUESR; NBI[4]:=GUESI-INCR; 00063200
|
|
PGUS:=ABSCPOLY(N,A,GUESR,GUESI); 00063300
|
|
FOR I:= 1,2,3,4 DO 00063400
|
|
PNB[I]:=ABSCPOLY(N,A,NBR[I],NBI[I]); 00063500
|
|
IF FLG2>27 THEN GO TO L4; 00063600
|
|
IF PNB[1]<@-30 AND PNB[2]<@-30 AND PNB[3]<@-30 00063700
|
|
AND PNB[4]<@-30 THEN GO TO L4; 00063800
|
|
IF MAX(PNB,4)-MIN(PNB,4)<@-20 THEN GO TO L2; 00063900
|
|
L4: IF PGUS!0 THEN GO TO L6; 00064000
|
|
L5: ROOTR:=GUESR; ROOTI:=GUESI; 00064100
|
|
GO TO XIT; 00064200
|
|
L6: FOR I:=1,2,3,4 DO IF PNB[I]=0 THEN 00064300
|
|
BEGIN 00064400
|
|
ROOTR:=NBR[I]; ROOTI:=NBI[I]; 00064500
|
|
GO TO XIT 00064600
|
|
END; 00064700
|
|
FOR I:=1,2,3,4 DO IF PGUS>PNB[I] THEN GO TO L7; 00064800
|
|
INCR:= INCR/2; 00064900
|
|
IF INCR<COMP OR FLG2>50 THEN GO TO L5; 00065000
|
|
FLG2:=FLG2+1; GO TO L3; 00065100
|
|
L7: FOR I:=1,2,3,4 DO IF PNB[I]=MIN(PNB,4) THEN 00065200
|
|
BEGIN 00065300
|
|
GUESR:=NBR[I]; GUESI:=NBI[I]; GO TO L1 00065400
|
|
END; 00065500
|
|
XIT:END OF PROCEDURE FINDROOT; 00065600
|
|
PROCEDURE PROOTS(B); 00065700
|
|
ARRAY B[0]; 00065800
|
|
BEGIN 00065900
|
|
REAL ARRAY A[0:B[0]]; 00066000
|
|
INTEGER NNOW,N,I; REAL RP,IP; 00066100
|
|
FORMAT FT(X8,"{!REAL PART IMAG PART{!~"), 00066200
|
|
ANS(X8,"{!",*(E10.3,X2),"~"); 00066300
|
|
NNOW:=N:=B[0]-1; FOR I:=0 STEP 1 UNTIL N DO A[I]:=B[I+1]; 00066400
|
|
WRITE (TTOUT(STA),FT); 00066500
|
|
FOR I:=1 STEP 1 UNTIL N DO 00066600
|
|
BEGIN 00066700
|
|
FINDROOT(A,NNOW,RP,IP); 00066800
|
|
IF IP!0 THEN 00066900
|
|
BEGIN 00067000
|
|
WRITE (TTOUT(STA),ANS, 2,RP,IP); 00067100
|
|
I:=I+1; 00067200
|
|
WRITE (TTOUT(STA),ANS, 2,RP,-IP); 00067300
|
|
DOUBLESYNTHEDIV(A,NNOW,RP,IP); 00067400
|
|
NNOW:=NNOW-2; 00067500
|
|
END ELSE 00067600
|
|
BEGIN 00067700
|
|
WRITE (TTOUT(STA),ANS, 1,RP); 00067800
|
|
SYNTHETICDIV(A,NNOW,RP); 00067900
|
|
NNOW:=NNOW-1; 00068000
|
|
END; 00068100
|
|
END; 00068200
|
|
END OF PROCEDURE PROOTS; 00068300
|
|
PROCEDURE QIEV(P,X,REEL,IMAG); 00068400
|
|
ARRAY P[0]; REAL X,REEL,IMAG; 00068500
|
|
BEGIN 00068600
|
|
INTEGER I; REEL:=0; IMAG:=0; 00068700
|
|
FOR I:=2|ENTIER((P[0]-1)/2) STEP -2 UNTIL 0 DO 00068800
|
|
REEL:=REEL|X|X + P[I+1]|(-1)*(ENTIER(I/2)); 00068900
|
|
FOR I:=2|ENTIER(P[0]/2)-1 STEP -2 UNTIL 1 DO 00069000
|
|
IMAG:=IMAG|X|X + P[I+1]|(-1)*(ENTIER(I/2)); 00069100
|
|
IMAG:=IMAG|X; 00069200
|
|
END OF PROCEDURE QIEV; 00069300
|
|
PROCEDURE FREQ(W,N,D,MAG,ANGLE,DB); 00069400
|
|
VALUE W; ARRAY N,D[0]; REAL MAG,ANGLE,DB,W; 00069500
|
|
BEGIN 00069600
|
|
REAL AN,AD,NR,NI,DR,DI; 00069700
|
|
QIEV(N,W,NR,NI); 00069800
|
|
QIEV(D,W,DR,DI); 00069900
|
|
IF ABS(NR)>0 THEN AN~57.29578|ARCTAN(NI/NR) ELSE 00070000
|
|
AN~90; 00070100
|
|
IF NR < 0 THEN AN~AN+180; 00070200
|
|
IF ABS(DR)>0 THEN AD~57.29578|ARCTAN(DI/DR) ELSE 00070300
|
|
AD~90; 00070400
|
|
IF DR < 0 THEN AD~AD+180; 00070500
|
|
ANGLE~AN-AD; 00070600
|
|
MAG~SQRT(NR|NR+NI|NI)/SQRT(DR|DR+DI|DI); 00070700
|
|
DB~8.685989|LN(MAG); 00070800
|
|
END OF PROCEDURE FREQ; 00070900
|
|
REAL PROCEDURE VAL (P,A); 00071000
|
|
REAL P; 00071100
|
|
ARRAY A[0]; 00071200
|
|
BEGIN 00071300
|
|
INTEGER I; 00071400
|
|
REAL TOT; 00071500
|
|
TOT~A[A[0]]; 00071600
|
|
FOR I~A[0]-1 STEP -1 UNTIL 1 DO 00071700
|
|
TOT~A[I]+P|TOT; 00071800
|
|
VAL~TOT; 00071900
|
|
END VAL; 00072000
|
|
COMMENT****************************************************************;00072100
|
|
FILE DISC DISK SERIAL "PROGRAM""USERS" (2,5,30,SAVE 9); %SPY00072200
|
|
ARRAY WATCHER [0:4]; %SPY00072300
|
|
FORMAT FN(X8,"{!TYPE IN YOUR LAST NAME.{!~"); %SPY00072400
|
|
INTEGER PNTR; WATCHER[3]:=TIME(1); %SPY00072500
|
|
FILL WD[*] WITH 00072600
|
|
OCT0551252124600200, % READ CLASS= 2 00072700
|
|
OCT0631454764636002, % INPUT CLASS= 2 00072800
|
|
OCT0666513163256003, % WRITE CLASS= 3 00072900
|
|
OCT0647513145636003, % PRINT CLASS= 3 00073000
|
|
OCT0462256360040000, % SET CLASS= 4 00073100
|
|
OCT0443256360040000, % LET CLASS= 4 00073200
|
|
OCT0662464365256005, % SOLVE CLASS= 5 00073300
|
|
OCT0526512550600600, % FREQ CLASS= 6 00073400
|
|
OCT0651464663626007, % ROOTS CLASS= 7 00073500
|
|
OCT0462634647100000, % STOP CLASS= 8 00073600
|
|
OCT0450643163100000, % QUIT CLASS= 8 00073700
|
|
OCT0563252123301100, % TEACH CLASS= 9 00073800
|
|
OCT0562317125601200, % SIZE CLASS=10 00073900
|
|
OCT0443462331130000, % LOCI CLASS=11 00074000
|
|
OCT0465214360140000, % VAL CLASS=12 00074100
|
|
OCT0144510000000000, % M CLASS=41 00074200
|
|
OCT0165520000000000, % V CLASS=42 00074300
|
|
OCT0123530000000000, % C CLASS=43 00074400
|
|
OCT0135250000000000, % ( CLASS=21 00074500
|
|
OCT0155260000000000, % ) CLASS=22 00074600
|
|
OCT0175270000000000, % = CLASS=23 00074700
|
|
OCT0120300000000000, % + CLASS=24 00074800
|
|
OCT0154310000000000, % - CLASS=25 00074900
|
|
OCT0161320000000000, % / CLASS=26 00075000
|
|
OCT0153330000000000, % * CLASS=27 00075100
|
|
OCT0324256334000000, % DET CLASS=28 00075200
|
|
OCT0331456535000000, % INV CLASS=29 00075300
|
|
OCT0363514536000000, % TRN CLASS=30 00075400
|
|
OCT0445644343370000, % NULL CLASS=31 00075500
|
|
OCT0425652523400000, % EVEC CLASS=32 00075600
|
|
OCT0331244541000000, % IDN CLASS=33 00075700
|
|
OCT0447464370450000, % POLY CLASS=37 00075800
|
|
OCT0147540000000000, % P CLASS=44 00075900
|
|
OCT0346646346000000, % OUT CLASS=38 00076000
|
|
OCT0172470000000000, % , CLASS=39 00076100
|
|
OCT0137240000000000; % ~ CLASS=20 00076200
|
|
COMMENT CONSTANT CLASS=40; 00076300
|
|
STATION(STA); 00076400
|
|
NC~MKABS(RD); 00076500
|
|
LA~31; 00076600
|
|
QUEST~12; 00076700
|
|
LP~29; 00076800
|
|
CA~58; 00076900
|
|
NMSG~MKCHR(MSG); 00077000
|
|
NMSG.[30:3]~1; 00077100
|
|
NLP~MKCHR(LP); 00077200
|
|
NLP.[30:3]~7; 00077300
|
|
NCA~MKCHR(CA); 00077400
|
|
NCA.[30:3]~7; 00077500
|
|
NAME: WRITE (TTOUT(STA),FN); %SPY00077600
|
|
READ (TTIN(STA,900),8,RD[*])[STOP:STOP]; 00077700
|
|
NCT~NC; 00077800
|
|
PNT~SCAN; 00077900
|
|
IF PNT>1 AND PNT<13 THEN GO TO NAME; 00078000
|
|
MOVER (RD[1],RD[0],56); %SPY00078100
|
|
SKIPBLANKS; 00078200
|
|
MOVER(RD[0],WATCHER[1],FINDCH(RD[0],LA)); 00078300
|
|
WATCHER[0]:=0; SHIFT(WATCHER[0],7,8); %SPY00078400
|
|
PUTCHRIN(WATCHER[2],0,"0"); %SPY00078500
|
|
WATCHER[2]:=WATCHER[3]; %SPY00078600
|
|
WRITE (TTOUT(STA),FO1)[:MORE]; 00078700
|
|
MORE: READ (TTIN(STA,900),8,RD[*])[STOP:STOP]; 00078800
|
|
NCT~NC; 00078900
|
|
PNT~SCAN; 00079000
|
|
GO TO SL[PNT]; 00079100
|
|
ERR: ERROR(E1); 00079200
|
|
TEACH: BEGIN 00079300
|
|
LABEL ETCH; 00079400
|
|
GP~FINDCH(RD[1],LA); 00079500
|
|
PUTCHRIN(RD[1],GP," "); 00079600
|
|
PUTCHRIN(RD[1],GP+1,"~"); 00079700
|
|
PNT~SCAN; 00079800
|
|
IF PNT=20 THEN 00079900
|
|
BEGIN 00080000
|
|
WRITE (TTOUT(STA),SF[24])[:BRK]; 00080100
|
|
GO TO ETCH; 00080200
|
|
END; 00080300
|
|
IF PNT=40 THEN 00080400
|
|
IF QUANT>0 AND QUANT<17 THEN 00080500
|
|
BEGIN 00080600
|
|
WRITE (TTOUT(STA),SF[QUANT])[:BRK]; 00080700
|
|
GO TO ETCH; 00080800
|
|
END ELSE 00080900
|
|
BEGIN 00081000
|
|
WRITE (TTOUT(STA),<X8,"{!MESSAGE ",I2, 00081100
|
|
" DOES NOT EXIST.{!~">,QUANT); 00081200
|
|
GO TO MORE; 00081300
|
|
END; 00081400
|
|
IF PNT>1 AND PNT<11 AND PNT!5 THEN 00081500
|
|
WRITE (TTOUT(STA),SF[15+PNT])[:BRK] 00081600
|
|
ELSE IF PNT>10 AND PNT<12 THEN 00081700
|
|
WRITE (TTOUT(STA),SF2[PNT-11])[:BRK] 00081800
|
|
ELSE ERROR(E1); 00081900
|
|
ETCH: ERRTOG~0; 00082000
|
|
GO TO MORE; 00082100
|
|
END; 00082200
|
|
SIZE: BEGIN 00082300
|
|
PNT~SCAN; 00082400
|
|
IF PNT<43 OR PNT>44 THEN ERROR(E2); 00082500
|
|
TYPE[1]~QUANT; 00082600
|
|
PNT~SCAN; 00082700
|
|
IF PNT!40 OR QUANT>9 THEN ERROR(E2A); 00082800
|
|
NUM[1]~QUANT; 00082900
|
|
PNT~SCAN; 00083000
|
|
IF PNT!20 THEN ERROR(E16); 00083100
|
|
IF TYPE[1]="P" THEN 00083200
|
|
WRITE (TTOUT(STA),PSIZE,NUM[1],IF NUM[2]:=POLY[NUM[1],0] 00083300
|
|
-1<10 AND NUM[2]>-1 THEN 1 ELSE 2,NUM[2])[:MORE] ELSE 00083400
|
|
BEGIN 00083500
|
|
MSG.[6:6]~"C"; 00083600
|
|
MSGL~1; 00083700
|
|
ERROR(E11); 00083800
|
|
END; 00083900
|
|
ERRTOG~0; 00084000
|
|
GO TO MORE; 00084100
|
|
END; 00084200
|
|
PRINTER: BEGIN 00084300
|
|
LABEL ENDPRINT; 00084400
|
|
PNT~SCAN; 00084500
|
|
IF PNT<43 OR PNT>44 THEN ERROR(E2); 00084600
|
|
TYPE[1]~QUANT; 00084700
|
|
PNT~SCAN; 00084800
|
|
IF PNT!40 OR QUANT>9 THEN ERROR(E2A); 00084900
|
|
NUM[1]~QUANT; 00085000
|
|
PNT~SCAN; 00085100
|
|
IF PNT!20 THEN ERROR(E16); 00085200
|
|
IF TYPE[1]="P" THEN 00085300
|
|
BEGIN 00085400
|
|
NUM[2]:=POLY[NUM[1],0]; 00085500
|
|
K:=0; 00085600
|
|
FOR I~1 STEP 1 UNTIL NUM[2] DO 00085700
|
|
IF POLY[NUM[1],I]!0 THEN K:=K+1; 00085800
|
|
IF K=0 THEN 00085900
|
|
BEGIN 00086000
|
|
WRITE (TTOUT(STA),PNULL,NUM[1],IF NUM[2]-1<10 AND NUM[2] 00086100
|
|
-1>-1 THEN 1 ELSE 2,NUM[2]-1)[:BRK ]; 00086200
|
|
GO TO ENDPRINT; 00086300
|
|
END; 00086400
|
|
PWRITE(NUM); 00086500
|
|
END ELSE 00086600
|
|
WRITE (TTOUT(STA),WC,NUM[1],IF CONST[NUM[1]]<@-1 OR 00086700
|
|
CONST[NUM[1]]>@5 THEN "E" ELSE "F",CONST[NUM[1]]); 00086800
|
|
ENDPRINT: ERRTOG~0; 00086900
|
|
WRITE (TTOUT(STA),<X8,"{!~">); 00087000
|
|
GO TO MORE; 00087100
|
|
END; 00087200
|
|
INPUT: BEGIN 00087300
|
|
LABEL ENDINPUT; 00087400
|
|
FORMAT FMQUEST(X8,"{!",2A1,"=",A1,"{!~"); 00087500
|
|
LABEL CDONE; 00087600
|
|
PNT~SCAN; 00087700
|
|
IF PNT<43 OR PNT>44 THEN ERROR(E2); 00087800
|
|
TYPE[1]~QUANT; 00087900
|
|
PNT~SCAN; 00088000
|
|
IF PNT!40 OR QUANT>9 THEN ERROR(E2A); 00088100
|
|
NUM[1]~QUANT; 00088200
|
|
IF TYPE[1]="C" THEN 00088300
|
|
GO TO CDONE; 00088400
|
|
PNT~SCAN; 00088500
|
|
IF PNT!21 THEN 00088600
|
|
BEGIN 00088700
|
|
MSG.[6:6]~TYPE[1]; 00088800
|
|
MSG.[12:6]~NUM[1]; 00088900
|
|
ERROR(E3); 00089000
|
|
END; 00089100
|
|
PNT~SCAN; 00089200
|
|
IF PNT!40 THEN 00089300
|
|
BEGIN 00089400
|
|
WO~NLP; 00089500
|
|
ERROR(E15); 00089600
|
|
END; 00089700
|
|
IF QUANT>19 THEN 00089800
|
|
BEGIN 00089900
|
|
MSG.[6:6]~ENTIER(QUANT/10); 00090000
|
|
MSG.[12:6]~QUANT-10|ENTIER(QUANT/10); 00090100
|
|
ERROR(E8); 00090200
|
|
END; 00090300
|
|
NUM[2]~QUANT; 00090400
|
|
NUM[2]~NUM[2]+1; 00090500
|
|
PNT~SCAN; 00090600
|
|
IF PNT!22 THEN 00090700
|
|
BEGIN 00090800
|
|
WO~NLP; 00090900
|
|
ERROR(E5); 00091000
|
|
END; 00091100
|
|
CDONE: PNT~SCAN; 00091200
|
|
IF PNT!20 THEN ERROR(E16); 00091300
|
|
IF TYPE[1]="P" THEN 00091400
|
|
BEGIN 00091500
|
|
WRITE (TTOUT(STA),FMQUEST,TYPE[1],NUM[1],QUEST); 00091600
|
|
FOR I~0 STEP 1 UNTIL 20 DO 00091700
|
|
POLY[NUM[1],I]:=0; 00091800
|
|
POLY[NUM[1],0]:=NUM[2]; 00091900
|
|
PREAD(NUM); 00092000
|
|
END ELSE 00092100
|
|
BEGIN 00092200
|
|
WRITE (TTOUT(STA),RC,NUM[1],QUEST); 00092300
|
|
READVAL(CONST[NUM[1]],STA); 00092400
|
|
END; 00092500
|
|
ENDINPUT: ERRTOG~0; 00092600
|
|
WRITE (TTOUT(STA),<X8,"{!~">); 00092700
|
|
GO TO MORE; 00092800
|
|
END; 00092900
|
|
SET: BEGIN 00093000
|
|
LABEL ENDLET; 00093100
|
|
LABEL STP2; 00093200
|
|
LABEL CHKLA; 00093300
|
|
LABEL STP1; 00093400
|
|
LABEL CHKEQ; 00093500
|
|
I~0; 00093600
|
|
PNT~SCAN; 00093700
|
|
IF PNT<43 OR PNT>44 THEN ERROR(E2); 00093800
|
|
TYPE[1]~QUANT; 00093900
|
|
PNT~SCAN; 00094000
|
|
IF PNT!40 OR QUANT>9 THEN ERROR(E2A); 00094100
|
|
NUM[1]~QUANT; 00094200
|
|
IF TYPE[1]="C" THEN 00094300
|
|
GO TO CHKEQ; 00094400
|
|
PNT~SCAN; 00094500
|
|
IF PNT=21 THEN 00094600
|
|
BEGIN 00094700
|
|
PNT~SCAN; 00094800
|
|
IF PNT!40 THEN 00094900
|
|
BEGIN 00095000
|
|
WO~NLP; 00095100
|
|
ERROR(E15); 00095200
|
|
END; 00095300
|
|
IF QUANT>19 THEN 00095400
|
|
BEGIN 00095500
|
|
MSG.[6:6]~ENTIER(QUANT/10); 00095600
|
|
MSG.[12:6]~QUANT-10|ENTIER(QUANT/10); 00095700
|
|
ERROR(E8); 00095800
|
|
END; 00095900
|
|
I~QUANT+1; 00096000
|
|
PNT~SCAN; 00096100
|
|
IF PNT!22 THEN 00096200
|
|
BEGIN 00096300
|
|
WO~NLP; 00096400
|
|
ERROR(E5); 00096500
|
|
END; 00096600
|
|
CHKEQ: PNT~SCAN; 00096700
|
|
END; 00096800
|
|
IF PNT!23 THEN 00096900
|
|
BEGIN 00097000
|
|
MSG.[6:6]~TYPE[1]; 00097100
|
|
MSG.[12:6]~NUM[1]; 00097200
|
|
ERROR(E7); 00097300
|
|
END; 00097400
|
|
PNT~SCAN; 00097500
|
|
IF PNT>27 AND PNT<39 THEN GO TO STP1; 00097600
|
|
IF PNT=40 THEN GO TO RESET; 00097700
|
|
IF PNT<43 OR PNT>44 THEN ERROR(E2); 00097800
|
|
TYPE[2]~QUANT; 00097900
|
|
PNT~SCAN; 00098000
|
|
IF PNT!40 OR QUANT>9 THEN ERROR(E2A); 00098100
|
|
NUM[2]~QUANT; 00098200
|
|
PNT~SCAN; 00098300
|
|
IF PNT=20 THEN GO TO EQU; 00098400
|
|
IF PNT>23 AND PNT<28 THEN GO TO STP2; 00098500
|
|
ERROR(E6); 00098600
|
|
STP1: LOC~PNT-23; 00098700
|
|
IF PNT=31 OR PNT=33 THEN GO TO CHKLA; 00098800
|
|
PNT~SCAN; 00098900
|
|
IF PNT!21 THEN 00099000
|
|
BEGIN 00099100
|
|
MSG.[6:6]~" "; 00099200
|
|
MSG.[12:6]~" "; 00099300
|
|
ERROR(E3); 00099400
|
|
END; 00099500
|
|
PNT~SCAN; 00099600
|
|
IF PNT<43 OR PNT>44 THEN ERROR(E2); 00099700
|
|
TYPE[2]~QUANT; 00099800
|
|
PNT~SCAN; 00099900
|
|
IF PNT!40 OR QUANT>9 THEN ERROR(E2A); 00100000
|
|
NUM[2]~QUANT; 00100100
|
|
PNT~SCAN; 00100200
|
|
IF PNT!22 THEN 00100300
|
|
BEGIN 00100400
|
|
WO~NLP; 00100500
|
|
ERROR(E5); 00100600
|
|
END; 00100700
|
|
CHKLA: PNT~SCAN; 00100800
|
|
IF PNT!20 THEN ERROR(E16); 00100900
|
|
GO TO F[LOC]; 00101000
|
|
STP2: LOC~PNT-23; 00101100
|
|
PNT~SCAN; 00101200
|
|
IF PNT<43 OR PNT>44 THEN ERROR(E2); 00101300
|
|
TYPE[3]~QUANT; 00101400
|
|
PNT~SCAN; 00101500
|
|
IF PNT!40 OR QUANT>9 THEN ERROR(E2A); 00101600
|
|
NUM[3]~QUANT; 00101700
|
|
GO TO CHKLA; 00101800
|
|
END; 00101900
|
|
INOP: ERROR(E6); 00102000
|
|
GO TO MORE; 00102100
|
|
RESET: IF I=0 AND TYPE[1]!"C" THEN 00102200
|
|
BEGIN 00102300
|
|
MSG.[6:6]~TYPE[1]; 00102400
|
|
MSG.[12:6]~NUM[1]; 00102500
|
|
ERROR(E3); 00102600
|
|
END; 00102700
|
|
MOVER(RD[1],RD[0],56); 00102800
|
|
GP~FINDCH(RD[0],LA)+1; 00102900
|
|
SHIFT(RD[0],K~FINDCH(RD[0],"=")+1,GP~GP-K); 00103000
|
|
SKIPBLANKS; 00103100
|
|
IF NOT ANYFUNNYCHRS(RD[0],GP-1) THEN 00103200
|
|
BEGIN 00103300
|
|
IF TYPE[1]="C" THEN 00103400
|
|
READARRAY(CONST[NUM[1]]) ELSE 00103500
|
|
IF TYPE[1]="P" THEN 00103600
|
|
READARRAY(POLY[NUM[1],I]); 00103700
|
|
GO TO CHECK; 00103800
|
|
END ELSE 00103900
|
|
BEGIN 00104000
|
|
WRITE (TTOUT(STA),FIC); 00104100
|
|
GO TO MORE; 00104200
|
|
END; 00104300
|
|
ADD: BEGIN 00104400
|
|
LABEL ENDADD; 00104500
|
|
IF TYPE[1]="P" AND TYPE[2]="P" AND TYPE[3]="P" THEN 00104600
|
|
BEGIN 00104700
|
|
QADD(POLY[NUM[2],*],POLY[NUM[3],*],POLY[NUM[1],*]); 00104800
|
|
GO TO ENDADD; 00104900
|
|
END ELSE 00105000
|
|
IF TYPE[1]="C" AND TYPE[2]="C" AND TYPE[3]="C" THEN 00105100
|
|
BEGIN 00105200
|
|
CONST[NUM[1]]:=CONST[NUM[2]]+CONST[NUM[3]]; 00105300
|
|
GO TO ENDADD; 00105400
|
|
END ELSE 00105500
|
|
BEGIN 00105600
|
|
MSG.[6:6]~TYPE[1]; 00105700
|
|
MSG.[12:6]~"-"; 00105800
|
|
MSG.[18:6]~TYPE[2]; 00105900
|
|
MSG.[24:6]~"-"; 00106000
|
|
MSG.[30:6]~TYPE[3]; 00106100
|
|
MSGL~5; 00106200
|
|
ERROR(E11); 00106300
|
|
END; 00106400
|
|
ENDADD: END; 00106500
|
|
GO TO CHECK; 00106600
|
|
SUB: BEGIN 00106700
|
|
LABEL ENDSUB; 00106800
|
|
IF TYPE[1]="P" AND TYPE[2]="P" AND TYPE[3]="P" THEN 00106900
|
|
BEGIN 00107000
|
|
QSUB(POLY[NUM[2],*],POLY[NUM[3],*],POLY[NUM[1],*]); 00107100
|
|
GO TO ENDSUB; 00107200
|
|
END ELSE 00107300
|
|
IF TYPE[1]="C" AND TYPE[2]="C" AND TYPE[3]="C" THEN 00107400
|
|
BEGIN 00107500
|
|
CONST[NUM[1]]:=CONST[NUM[2]]-CONST[NUM[3]]; 00107600
|
|
GO TO ENDSUB; 00107700
|
|
END ELSE 00107800
|
|
BEGIN 00107900
|
|
MSG.[6:6]~TYPE[1]; 00108000
|
|
MSG.[12:6]~"-"; 00108100
|
|
MSG.[18:6]~TYPE[2]; 00108200
|
|
MSG.[24:6]~"-"; 00108300
|
|
MSG.[30:6]~TYPE[3]; 00108400
|
|
MSGL~5; 00108500
|
|
ERROR(E11); 00108600
|
|
END; 00108700
|
|
ENDSUB: END; 00108800
|
|
GO TO CHECK; 00108900
|
|
MULT: BEGIN 00109000
|
|
LABEL ENDMULT; 00109100
|
|
IF TYPE[1]="P" AND TYPE[2]="P" AND TYPE[3]="P" THEN 00109200
|
|
BEGIN 00109300
|
|
IF POLY[NUM[2],0]+POLY[NUM[3],0]>20 THEN 00109400
|
|
BEGIN 00109500
|
|
MSG.[6:6]~TYPE[3]; 00109600
|
|
MSG.[12:6]~NUM[3]; 00109700
|
|
ERROR(E9); 00109800
|
|
END; 00109900
|
|
QMULT(POLY[NUM[2],*],POLY[NUM[3],*],POLY[NUM[1],*]); 00110000
|
|
GO TO ENDMULT; 00110100
|
|
END ELSE 00110200
|
|
IF TYPE[1]="C" AND TYPE[2]="C" AND TYPE[3]="C" THEN 00110300
|
|
BEGIN 00110400
|
|
CONST[NUM[1]]:=CONST[NUM[2]]|CONST[NUM[3]]; 00110500
|
|
GO TO ENDMULT; 00110600
|
|
END ELSE 00110700
|
|
IF TYPE[1]="P" AND TYPE[2]="C" AND TYPE[3]="P" THEN 00110800
|
|
BEGIN 00110900
|
|
CTV(POLY[NUM[3],*],POLY[NUM[1],*],CONST[NUM[2]]); 00111000
|
|
GO TO ENDMULT; 00111100
|
|
END ELSE 00111200
|
|
IF TYPE[1]="P" AND TYPE[2]="P" AND TYPE[3]="C" THEN 00111300
|
|
BEGIN 00111400
|
|
CTV(POLY[NUM[2],*],POLY[NUM[1],*],CONST[NUM[3]]); 00111500
|
|
GO TO ENDMULT; 00111600
|
|
END ELSE 00111700
|
|
BEGIN 00111800
|
|
MSG.[6:6]~TYPE[1]; 00111900
|
|
MSG.[12:6]~"-"; 00112000
|
|
MSG.[18:6]~TYPE[2]; 00112100
|
|
MSG.[24:6]~"-"; 00112200
|
|
MSG.[30:6]~TYPE[3]; 00112300
|
|
MSGL~5; 00112400
|
|
ERROR(E11); 00112500
|
|
END; 00112600
|
|
ENDMULT: END; 00112700
|
|
GO TO CHECK; 00112800
|
|
DVD: BEGIN 00112900
|
|
LABEL ENDDVD; 00113000
|
|
IF TYPE[1]="C" AND TYPE[2]="C" AND TYPE[3]="C" THEN 00113100
|
|
BEGIN 00113200
|
|
IF CONST[NUM[3]]=0 THEN 00113300
|
|
BEGIN 00113400
|
|
MSG.[6:6]~TYPE[3]; 00113500
|
|
MSG.[12:6]~NUM[3]; 00113600
|
|
ERROR(E13); 00113700
|
|
END; 00113800
|
|
CONST[NUM[1]]:=CONST[NUM[2]]/CONST[NUM[3]]; 00113900
|
|
GO TO ENDDVD; 00114000
|
|
END ELSE 00114100
|
|
IF TYPE[1]="P" AND TYPE[2]="P" AND TYPE[3]="P" THEN 00114200
|
|
BEGIN 00114300
|
|
IF I=0 THEN 00114400
|
|
BEGIN 00114500
|
|
MSG.[6:6]~TYPE[1]; 00114600
|
|
MSG.[12:6]~NUM[1]; 00114700
|
|
ERROR(E3); 00114800
|
|
END; 00114900
|
|
K:=0; 00115000
|
|
FOR J:=1 STEP 1 UNTIL POLY[NUM[3],0] DO 00115100
|
|
IF POLY[NUM[3],J]=0 THEN K:=K+1; 00115200
|
|
IF K=POLY[NUM[3],0] THEN 00115300
|
|
BEGIN 00115400
|
|
MSG.[6:6]~TYPE[3]; 00115500
|
|
MSG.[12:6]~NUM[3]; 00115600
|
|
ERROR(E13); 00115700
|
|
END; 00115800
|
|
QDIV(POLY[NUM[2],*],POLY[NUM[3],*],POLY[NUM[1],*],I); 00115900
|
|
GO TO ENDDVD; 00116000
|
|
END ELSE 00116100
|
|
BEGIN 00116200
|
|
MSG.[6:6]~TYPE[1]; 00116300
|
|
MSG.[12:6]~"-"; 00116400
|
|
MSG.[18:6]~TYPE[2]; 00116500
|
|
MSG.[24:6]~"-"; 00116600
|
|
MSG.[30:6]~TYPE[3]; 00116700
|
|
MSGL~5; 00116800
|
|
ERROR(E11); 00116900
|
|
END; 00117000
|
|
ENDDVD: END; 00117100
|
|
GO TO CHECK; 00117200
|
|
EQU: BEGIN 00117300
|
|
LABEL ENDEQU; 00117400
|
|
IF TYPE[1]="P" AND TYPE[2]="P" THEN 00117500
|
|
BEGIN 00117600
|
|
FOR I~1 STEP 1 UNTIL POLY[NUM[2],0] DO 00117700
|
|
POLY[NUM[1],I]:=POLY[NUM[2],I]; 00117800
|
|
POLY[NUM[1],0]:=POLY[NUM[2],0]; 00117900
|
|
GO TO ENDEQU; 00118000
|
|
END ELSE 00118100
|
|
IF TYPE[1]="C" AND TYPE[2]="C" THEN 00118200
|
|
BEGIN 00118300
|
|
CONST[NUM[1]]:=CONST[NUM[2]]; 00118400
|
|
GO TO ENDEQU; 00118500
|
|
END ELSE 00118600
|
|
BEGIN 00118700
|
|
MSG.[6:6]~TYPE[1]; 00118800
|
|
MSG.[12:6]~"-"; 00118900
|
|
MSG.[18:6]~TYPE[2]; 00119000
|
|
MSGL~3; 00119100
|
|
ERROR(E11); 00119200
|
|
END; 00119300
|
|
ENDEQU: END; 00119400
|
|
GO TO CHECK; 00119500
|
|
NULL: BEGIN 00119600
|
|
LABEL ENDNULL; 00119700
|
|
IF TYPE[1]="P" THEN 00119800
|
|
BEGIN 00119900
|
|
FOR J:=1 STEP 1 UNTIL I DO 00120000
|
|
POLY[NUM[1],J]:=0; 00120100
|
|
POLY[NUM[1],0]:=I; 00120200
|
|
GO TO ENDNULL; 00120300
|
|
END ELSE 00120400
|
|
BEGIN 00120500
|
|
CONST[NUM[1]]:=0; 00120600
|
|
GO TO ENDNULL; 00120700
|
|
END; 00120800
|
|
ENDNULL: END; 00120900
|
|
CHECK: WRITE (TTOUT(STA),DONE)[:BRK ]; 00121000
|
|
ERRTOG~0; 00121100
|
|
GO TO MORE; 00121200
|
|
ROOTS: BEGIN 00121300
|
|
PNT~SCAN; 00121400
|
|
IF PNT<43 OR PNT>44 THEN ERROR(E2); 00121500
|
|
TYPE[1]~QUANT; 00121600
|
|
PNT~SCAN; 00121700
|
|
IF PNT!40 OR QUANT>9 THEN ERROR(E2A); 00121800
|
|
NUM[1]~QUANT; 00121900
|
|
PNT~SCAN; 00122000
|
|
IF PNT!20 THEN ERROR(E16); 00122100
|
|
IF TYPE[1]!"P" THEN 00122200
|
|
BEGIN 00122300
|
|
MSG.[6:6]~TYPE[1]; 00122400
|
|
MSGL~1; 00122500
|
|
ERROR(E11); 00122600
|
|
END; 00122700
|
|
PROOTS(POLY[NUM[1],*]); 00122800
|
|
ERRTOG~0; 00122900
|
|
WRITE (TTOUT(STA),DONE)[:BRK ]; 00123000
|
|
GO TO MORE; 00123100
|
|
END; 00123200
|
|
FREQL: BEGIN 00123300
|
|
LABEL MODE; 00123400
|
|
PROCEDURE ERROR2(N1,N2,N3,N4,NC,BACK,NCH); 00123500
|
|
VALUE N1,N2,N3,N4,NC,BACK,NCH; 00123600
|
|
ALPHA N1,N2,N3,N4,NCH; 00123700
|
|
INTEGER NC,BACK; 00123800
|
|
BEGIN 00123900
|
|
PRT(LINE,N1,N2,N3,N4,NC,BACK,NCH); 00124000
|
|
MARK(RD,NCT); 00124100
|
|
WRITE(TTOUT(STA),8,RD[*]); 00124200
|
|
WRITE(TTOUT(STA),8,LINE[*]); 00124300
|
|
ERRTOG~ERRTOG+1; 00124400
|
|
IF ERRTOG=5 THEN 00124500
|
|
WRITE(TTOUT(STA),<X8,"{!PLEASE READ THE INSTRUCTION MANUAL.{!!~">); 00124600
|
|
IF ERRTOG=6 THEN 00124700
|
|
GO TO STOP; 00124800
|
|
GO TO MODE; 00124900
|
|
END ERROR2; 00125000
|
|
LABEL ENDFREQ; 00125100
|
|
LABEL RBRK; 00125200
|
|
LABEL RMSG; 00125300
|
|
BOOLEAN FORLOOP; 00125400
|
|
REAL W,MAG,ANGLE,DB; 00125500
|
|
REAL LOW,INCREM,HIGH; 00125600
|
|
FORMAT HEADING(X8,"{!",X5,"W",X10,"MAG",X8,"ANGLE",X8,"DB{!!~" 00125700
|
|
),FI(X8,"{!INCREMENT CANT BE ZERO. TYPE LINE AGAIN.{!~"), 00125800
|
|
F1(X8,"{!",4(F10.3,X2),"~"), 00125900
|
|
F2(X8,"{!",X12,3(F10.3,X2),"{!!~"), 00126000
|
|
FE(X8,"{!TYPING ERROR. TYPE LINE AGAIN.{!~"); 00126100
|
|
PNT~SCAN; 00126200
|
|
IF PNT<43 OR PNT>44 THEN ERROR(E2); 00126300
|
|
TYPE[1]~QUANT; 00126400
|
|
PNT~SCAN; 00126500
|
|
IF PNT!40 OR QUANT>9 THEN ERROR(E2A); 00126600
|
|
NUM[1]~QUANT; 00126700
|
|
PNT~SCAN; 00126800
|
|
IF PNT!26 THEN 00126900
|
|
BEGIN 00127000
|
|
MSG.[6:6]~TYPE[1]; 00127100
|
|
MSG.[12:6]~NUM[1]; 00127200
|
|
ERROR(E14); 00127300
|
|
END; 00127400
|
|
PNT~SCAN; 00127500
|
|
IF PNT<43 OR PNT>44 THEN ERROR(E2); 00127600
|
|
TYPE[2]~QUANT; 00127700
|
|
PNT~SCAN; 00127800
|
|
IF PNT!40 OR QUANT>9 THEN ERROR(E2A); 00127900
|
|
NUM[2]~QUANT; 00128000
|
|
PNT~SCAN; 00128100
|
|
IF PNT!20 THEN ERROR(E16); 00128200
|
|
IF TYPE[1]!"P" OR TYPE[2]!"P" THEN 00128300
|
|
BEGIN 00128400
|
|
MSG.[6:6]~TYPE[1]; 00128500
|
|
MSG.[12:6]~"-"; 00128600
|
|
MSG.[18:6]~TYPE[2]; 00128700
|
|
MSGL~3; 00128800
|
|
ERROR(E11); 00128900
|
|
END; 00129000
|
|
WRITE (TTOUT(STA),HEADING); 00129100
|
|
NCT~NC; 00129200
|
|
MODE: FORLOOP:=FALSE; 00129300
|
|
READ (TTIN(STA,900),8,RD[*])[STOP:STOP]; 00129400
|
|
PNT~SCAN; 00129500
|
|
IF PNT=38 THEN 00129600
|
|
GO TO ENDFREQ; 00129700
|
|
NCT~NC; 00129800
|
|
GP:=FINDCH(RD[1],LA)+1; 00129900
|
|
MOVER(RD[1],RD[0],GP); 00130000
|
|
SKIPBLANKS; 00130100
|
|
IF FINDCH(RD[0],"(")<GP THEN 00130200
|
|
BEGIN 00130300
|
|
FORLOOP:=TRUE; 00130400
|
|
IF COUNTCOMMAS(RD[0],GP)!2 THEN 00130500
|
|
BEGIN 00130600
|
|
WO~NLP; 00130700
|
|
ERROR2(E4); 00130800
|
|
END; 00130900
|
|
IF FINDCH(RD[0],")")>GP THEN 00131000
|
|
BEGIN 00131100
|
|
WO~NCA; 00131200
|
|
ERROR2(E5); 00131300
|
|
END; 00131400
|
|
SHIFT(RD[0],K~FINDCH(RD[0],"(")+1,GP~GP-K); 00131500
|
|
PUTCHRIN(RD[0],FINDCH(RD[0],")"),CA); 00131600
|
|
END ELSE 00131700
|
|
IF FINDCH(RD[0],")")<GP THEN 00131800
|
|
BEGIN 00131900
|
|
MSG.[6:6]~" "; 00132000
|
|
MSG.[12:6]~" "; 00132100
|
|
ERROR2(E3); 00132200
|
|
END; 00132300
|
|
IF FORLOOP THEN 00132400
|
|
BEGIN 00132500
|
|
READ (RD[*],/,LOW,INCREM,HIGH); 00132600
|
|
IF INCREM=0 THEN BEGIN WRITE (TTOUT(STA),FI); GO TO MODE; END; 00132700
|
|
FOR W:=LOW STEP INCREM UNTIL HIGH DO 00132800
|
|
BEGIN 00132900
|
|
FREQ(W,POLY[NUM[1],*],POLY[NUM[2],*],MAG,ANGLE,DB); 00133000
|
|
WRITE (TTOUT(STA),F1,W,MAG,ANGLE,DB)[:RBRK]; 00133100
|
|
END; 00133200
|
|
WRITE (TTOUT(STA),<X8,"{!~">); 00133300
|
|
GO TO MODE; 00133400
|
|
END; 00133500
|
|
IF ANYFUNNYCHRS(RD[0],GP-1) THEN 00133600
|
|
BEGIN 00133700
|
|
WRITE (TTOUT(STA),FE); 00133800
|
|
GO TO MODE; 00133900
|
|
END; 00134000
|
|
READARRAY(W); 00134100
|
|
FREQ(W,POLY[NUM[1],*],POLY[NUM[2],*],MAG,ANGLE,DB); 00134200
|
|
WRITE (TTOUT(STA),F2,MAG,ANGLE,DB)[:RBRK]; 00134300
|
|
GO TO MODE; 00134400
|
|
ENDFREQ: ERRTOG~0; 00134500
|
|
WRITE (TTOUT(STA),DONE)[:BRK ]; 00134600
|
|
GO TO MORE; 00134700
|
|
RBRK: READ (TTIN(STA,0),8,RD[*])[RMSG]; 00134800
|
|
RMSG: WRITE (TTOUT(STA),<X8,"{!BREAK.{!~">); 00134900
|
|
GO TO MODE; 00135000
|
|
END; 00135100
|
|
LOCI: BEGIN 00135200
|
|
LABEL KEQ,FINIS; 00135300
|
|
BOOLEAN WP; 00135400
|
|
FORMAT FE(X8,"{!TYPING ERROR. TYPE LINE AGAIN.{!~"); 00135500
|
|
WP~FALSE; 00135600
|
|
PNT~SCAN; 00135700
|
|
IF PNT!21 THEN 00135800
|
|
BEGIN 00135900
|
|
MSG.[6:12]~" "; 00136000
|
|
ERROR(E3); 00136100
|
|
END; 00136200
|
|
PNT~SCAN; 00136300
|
|
IF PNT<43 OR PNT>44 THEN ERROR(E2); 00136400
|
|
TYPE[1]~QUANT; 00136500
|
|
PNT~SCAN; 00136600
|
|
IF PNT!40 OR QUANT>9 THEN ERROR(E2A); 00136700
|
|
NUM[1]~QUANT; 00136800
|
|
PNT~SCAN; 00136900
|
|
IF PNT!39 THEN ERROR(E4); 00137000
|
|
PNT~SCAN; 00137100
|
|
IF PNT<43 OR PNT>44 THEN ERROR(E2); 00137200
|
|
TYPE[2]~QUANT; 00137300
|
|
PNT~SCAN; 00137400
|
|
IF PNT!40 OR QUANT>9 THEN ERROR(E2A); 00137500
|
|
NUM[2]~QUANT; 00137600
|
|
PNT~SCAN; 00137700
|
|
IF PNT!22 THEN 00137800
|
|
BEGIN 00137900
|
|
WO~NCA; 00138000
|
|
ERROR(E5); 00138100
|
|
END; 00138200
|
|
PNT~SCAN; 00138300
|
|
IF PNT=37 THEN 00138400
|
|
BEGIN 00138500
|
|
WP~TRUE; 00138600
|
|
PNT~SCAN; 00138700
|
|
END; 00138800
|
|
IF PNT!20 THEN ERROR(E16); 00138900
|
|
IF TYPE[1]!"P" OR TYPE[2]!"P" THEN 00139000
|
|
BEGIN 00139100
|
|
MSG.[6:6]~TYPE[1]; 00139200
|
|
MSG.[12:6]~"-"; 00139300
|
|
MSG.[18:6]~TYPE[2]; 00139400
|
|
MSGL~3; 00139500
|
|
ERROR(E11); 00139600
|
|
END; 00139700
|
|
KEQ: WRITE (TTOUT(STA),<X8,"{!K=",A1,"{!~">,QUEST); 00139800
|
|
NCT~NC; 00139900
|
|
K~0; 00140000
|
|
READ (TTIN(STA,900),8,RD[*])[STOP:STOP]; 00140100
|
|
PNT~SCAN; 00140200
|
|
IF PNT=38 THEN GO TO FINIS; 00140300
|
|
GP:=FINDCH(RD[1],LA)+1; 00140400
|
|
MOVER(RD[1],RD[0],GP); 00140500
|
|
SKIPBLANKS; 00140600
|
|
IF ANYFUNNYCHRS(RD[0],GP-1) THEN 00140700
|
|
BEGIN 00140800
|
|
WRITE (TTOUT(STA),FE); 00140900
|
|
GO TO KEQ; 00141000
|
|
END; 00141100
|
|
READARRAY(NUM[3]); 00141200
|
|
CTV(POLY[NUM[2],*],SPOLY,NUM[3]); 00141300
|
|
QADD(SPOLY,POLY[NUM[1],*],WPOLY); 00141400
|
|
IF WP THEN 00141500
|
|
BEGIN 00141600
|
|
IF POLY[0,0]!0 THEN 00141700
|
|
BEGIN 00141800
|
|
FOR I~0 STEP 1 UNTIL POLY[0,0] DO 00141900
|
|
SPOLY[I]~POLY[0,I]; 00142000
|
|
K~1; 00142100
|
|
END; 00142200
|
|
FOR I~0 STEP 1 UNTIL WPOLY[0] DO 00142300
|
|
POLY[0,I]~WPOLY[I]; 00142400
|
|
I~NUM[1]; 00142500
|
|
J~NUM[2]; 00142600
|
|
NUM[1]~0; 00142700
|
|
NUM[2]~WPOLY[0]; 00142800
|
|
PWRITE(NUM); 00142900
|
|
NUM[1]~I; 00143000
|
|
NUM[2]~J; 00143100
|
|
POLY[0,0]~0; 00143200
|
|
IF K=1 THEN 00143300
|
|
FOR I~0 STEP 1 UNTIL SPOLY[0] DO 00143400
|
|
POLY[0,I]~SPOLY[I]; 00143500
|
|
END; 00143600
|
|
PROOTS(WPOLY); 00143700
|
|
GO TO KEQ; 00143800
|
|
FINIS: ERRTOG~0; 00143900
|
|
WRITE (TTOUT(STA),DONE); 00144000
|
|
GO TO MORE; 00144100
|
|
END; 00144200
|
|
VL: BEGIN 00144300
|
|
LABEL MODE; 00144400
|
|
PROCEDURE ERROR2(N1,N2,N3,N4,NC,BACK,NCH); 00144500
|
|
VALUE N1,N2,N3,N4,NC,BACK,NCH; 00144600
|
|
ALPHA N1,N2,N3,N4,NCH; 00144700
|
|
INTEGER NC,BACK; 00144800
|
|
BEGIN 00144900
|
|
PRT(LINE,N1,N2,N3,N4,NC,BACK,NCH); 00145000
|
|
MARK(RD,NCT); 00145100
|
|
WRITE(TTOUT(STA),8,RD[*]); 00145200
|
|
WRITE(TTOUT(STA),8,LINE[*]); 00145300
|
|
ERRTOG~ERRTOG+1; 00145400
|
|
IF ERRTOG=5 THEN 00145500
|
|
WRITE(TTOUT(STA),<X8,"{!PLEASE READ THE INSTRUCTION MANUAL.{!!~">); 00145600
|
|
IF ERRTOG=6 THEN 00145700
|
|
GO TO STOP; 00145800
|
|
GO TO MODE; 00145900
|
|
END ERROR2; 00146000
|
|
REAL X,Y; 00146100
|
|
LABEL ENDVAL; 00146200
|
|
LABEL RBRK; 00146300
|
|
LABEL RMSG; 00146400
|
|
BOOLEAN FORLOOP; 00146500
|
|
REAL LOW,INCREM,HIGH; 00146600
|
|
FORMAT HEADING(X8,"{!",X5,"X",X11,"Y{!!~"), 00146700
|
|
FI(X8,"{!INCREMENT CANT BE ZERO. TYPE LINE AGAIN.{!~"), 00146800
|
|
F1(X8,"{!",F10.3,X2,F10.3,"~"), 00146900
|
|
F2(X8,"{!",X12,F10.3,"{!!~"), 00147000
|
|
FE(X8,"{!TYPING ERROR. TYPE LINE AGAIN.{!~"); 00147100
|
|
PNT~SCAN; 00147200
|
|
IF PNT<43 OR PNT>44 THEN ERROR(E2); 00147300
|
|
TYPE[1]~QUANT; 00147400
|
|
PNT~SCAN; 00147500
|
|
IF PNT!40 OR QUANT>9 THEN ERROR(E2A); 00147600
|
|
NUM[1]~QUANT; 00147700
|
|
PNT~SCAN; 00147800
|
|
IF PNT!20 THEN ERROR(E16); 00147900
|
|
IF TYPE[1]!"P" THEN 00148000
|
|
BEGIN 00148100
|
|
MSG.[6:6]~TYPE[1]; 00148200
|
|
MSGL~1; 00148300
|
|
ERROR(E11); 00148400
|
|
END; 00148500
|
|
WRITE (TTOUT(STA),HEADING); 00148600
|
|
NCT~NC; 00148700
|
|
MODE: FORLOOP:=FALSE; 00148800
|
|
READ (TTIN(STA,900),8,RD[*])[STOP:STOP]; 00148900
|
|
PNT~SCAN; 00149000
|
|
IF PNT=38 THEN 00149100
|
|
GO TO ENDVAL; 00149200
|
|
NCT~NC; 00149300
|
|
GP:=FINDCH(RD[1],LA)+1; 00149400
|
|
MOVER(RD[1],RD[0],GP); 00149500
|
|
SKIPBLANKS; 00149600
|
|
IF FINDCH(RD[0],"(")<GP THEN 00149700
|
|
BEGIN 00149800
|
|
FORLOOP:=TRUE; 00149900
|
|
IF COUNTCOMMAS(RD[0],GP)!2 THEN 00150000
|
|
BEGIN 00150100
|
|
WO~NLP; 00150200
|
|
ERROR2(E4); 00150300
|
|
END; 00150400
|
|
IF FINDCH(RD[0],")")>GP THEN 00150500
|
|
BEGIN 00150600
|
|
WO~NCA; 00150700
|
|
ERROR2(E5); 00150800
|
|
END; 00150900
|
|
SHIFT(RD[0],K~FINDCH(RD[0],"(")+1,GP~GP-K); 00151000
|
|
PUTCHRIN(RD[0],FINDCH(RD[0],")"),CA); 00151100
|
|
END ELSE 00151200
|
|
IF FINDCH(RD[0],")")<GP THEN 00151300
|
|
BEGIN 00151400
|
|
MSG.[6:6]~" "; 00151500
|
|
MSG.[12:6]~" "; 00151600
|
|
ERROR2(E3); 00151700
|
|
END; 00151800
|
|
IF FORLOOP THEN 00151900
|
|
BEGIN 00152000
|
|
READ (RD[*],/,LOW,INCREM,HIGH); 00152100
|
|
IF INCREM=0 THEN BEGIN WRITE (TTOUT(STA),FI); GO TO MODE; END; 00152200
|
|
FOR X~LOW STEP INCREM UNTIL HIGH DO 00152300
|
|
BEGIN 00152400
|
|
Y~VAL(X,POLY[NUM[1],*]); 00152500
|
|
WRITE (TTOUT(STA),F1,X,Y)[:RBRK]; 00152600
|
|
END; 00152700
|
|
WRITE (TTOUT(STA),<X8,"{!~">); 00152800
|
|
GO TO MODE; 00152900
|
|
END; 00153000
|
|
IF ANYFUNNYCHRS(RD[0],GP-1) THEN 00153100
|
|
BEGIN 00153200
|
|
WRITE (TTOUT(STA),FE); 00153300
|
|
GO TO MODE; 00153400
|
|
END; 00153500
|
|
READARRAY(X); 00153600
|
|
Y~VAL(X,POLY[NUM[1],*]); 00153700
|
|
WRITE (TTOUT(STA),F2,Y)[:RBRK]; 00153800
|
|
GO TO MODE; 00153900
|
|
ENDVAL: ERRTOG~0; 00154000
|
|
WRITE (TTOUT(STA),DONE)[:BRK ]; 00154100
|
|
GO TO MORE; 00154200
|
|
RBRK: READ (TTIN(STA,0),8,RD[*])[RMSG]; 00154300
|
|
RMSG: WRITE (TTOUT(STA),<X8,"{!BREAK.{!~">); 00154400
|
|
GO TO MODE; 00154500
|
|
END; 00154600
|
|
BRK: READ (TTIN(STA,0),8,RD[*])[BMSG]; 00154700
|
|
BMSG: WRITE (TTOUT(STA),<X8,"{!BREAK.{!~">); 00154800
|
|
GO TO MORE; 00154900
|
|
STOP: PNT~SCAN; 00155000
|
|
IF PNT!20 THEN ERROR(E16); 00155100
|
|
WATCHER[4]:=TIME(2); PUTCHRIN(WATCHER[1],0,"0"); %SPY00155200
|
|
WATCHER[1]:=TIME(0); WATCHER[1].[12:6]~2; %SPY00155300
|
|
WATCHER[3]:=TIME(1); %SPY00155400
|
|
READ (DISC[0],*,PNTR)[STOP]; %SPY00155500
|
|
WRITE (TTOUT(STA),<X8,"{!PROCESSOR TIME = ",F8.2, 00155600
|
|
" SEC.{!~">,WATCHER[4]/60); 00155700
|
|
IF WATCHER[0].[6:36]="WITKIN" THEN 00155800
|
|
WRITE(TTOUT(STA),<X8,"{!THERE ARE ",I2," USERS.{!!~">, 00155900
|
|
PNTR+1); 00156000
|
|
WRITE(TTOUT(STA),<X8,"{!GOODBYE.{!!~">); 00156100
|
|
WRITE (DISC[PNTR+1],5,WATCHER[*]); %SPY00156200
|
|
WRITE (DISC[0],*,PNTR+1); %SPY00156300
|
|
% LOCK (DISC,SAVE); %SPY00156400
|
|
% IF PNTR+1}50 THEN 00156500
|
|
% BEGIN 00156600
|
|
%FORMAT F("CC EXECUTE PROGRAM/READER .B2/12137-025",00156700
|
|
% "3 81184 WITKIN LOUIS;END."); 00156800
|
|
% WRITE (CONST[*],F); 00156900
|
|
% ZIP WITH CONST[*]; 00157000
|
|
% END; 00157100
|
|
END. 00157200
|