-- file: MFEquationsImpl.mesa -- Pascal-to-Mesa translator output, translated at October 31, 1985 4:28:02 pm PST DIRECTORY PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFInteraction, MFMath, MFMemory, MFSymbols, MFPaths, MFEdges, MFParsing, MFEquations; MFEquationsImpl: PROGRAM IMPORTS PascalBasic, MFProcArray, MFInteraction, MFMath, MFMemory, MFSymbols, MFPaths, MFEdges, MFParsing EXPORTS MFEquations = PUBLIC BEGIN OPEN PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFInteraction, MFMath, MFMemory, MFSymbols, MFPaths, MFEdges, MFParsing, MFEquations; --:579----591:-- FixNeeded: PascalBoolean; WatchCoefs: PascalBoolean; DepFinal: Halfword; SlowAdd: PROCEDURE[X,Y: PascalInteger] RETURNS[SlowAddResult: PascalInteger] = BEGIN IF X>=0 THEN IF Y<=2147483647-X THEN SlowAddResult_X+Y ELSE BEGIN ArithError_TRUE;SlowAddResult_2147483647; END ELSE IF-Y<=2147483647+X THEN SlowAddResult_X+Y ELSE BEGIN ArithError_ TRUE;SlowAddResult_-2147483647; END; END;--:100----102: PrintDependency: PROCEDURE[P: Halfword,T: SmallNumber] = BEGIN V:PascalInteger;Pp, Q:Halfword; Pp_P; {WHILE TRUE DO BEGIN V_ABS[Mem[ INT[P]+1]^.Int];Q_Mem[P]^.Hh.Lh; IF Q=0 THEN BEGIN IF(V#0)OR (P=Pp) THEN BEGIN IF Mem[ INT[P]+1]^.Int>0 THEN IF P #Pp THEN PrintChar[43];PrintScaled[Mem[ INT[P]+1]^.Int]; END; GOTO Label10; END; --589: IF Mem[ INT[P]+1]^.Int<0 THEN PrintChar[45] ELSE IF P#Pp THEN PrintChar[43]; IF T=17 THEN V_RoundFraction[V];IF V#65536 THEN PrintScaled[V]--:589 ;IF Mem[Q]^.Hh.B0#19 THEN Confusion[455];PrintVariableName[Q]; V_Mem[ INT[Q]+1]^.Int;WHILE V>0 DO BEGIN Print[456];V_V-2; END ENDLOOP ; P_Mem[P]^.Hh.Rh; END ENDLOOP ;EXITS Label10 => NULL}; END;--:588----800:----804: PPlusFq: PROCEDURE[P: Halfword,F: PascalInteger, Q: Halfword,T,Tt: SmallNumber] RETURNS[PPlusFqResult: Halfword] = BEGIN Pp, Qq:Halfword; R, S:Halfword;Threshold:PascalInteger;V:PascalInteger; IF T=17 THEN Threshold_2685 ELSE Threshold_8;R_49999; Pp_Mem[P]^.Hh.Lh;Qq_Mem[Q]^.Hh.Lh; {WHILE TRUE DO IF Pp=Qq THEN IF Pp=0 THEN GOTO Label30 ELSE--594: BEGIN IF Tt=17 THEN V_Mem[ INT[P]+1]^.Int+TakeFraction[F,Mem[ INT[Q]+1]^.Int] ELSE V _Mem[ INT[P]+1]^.Int+TakeScaled[F,Mem[ INT[Q]+1]^.Int];Mem[ INT[P]+1]^.Int_V;S_P; P_Mem[P]^.Hh.Rh; IF ABS[V]=626349397 THEN IF WatchCoefs THEN BEGIN Mem[Qq]^.Hh.B0_0;FixNeeded_TRUE; END; Mem[R]^.Hh.Rh_S;R_S; END;Pp_Mem[P]^.Hh.Lh;Q_Mem[Q]^.Hh.Rh; Qq_Mem[Q]^.Hh.Lh; END--:594-- ELSE IF INT[Pp]PascalDIVPower2[(Threshold),1] THEN BEGIN S_GetNode[2]; Mem[S]^.Hh.Lh_Qq;Mem[ INT[S]+1]^.Int_V; IF ABS[V]>=626349397 THEN IF WatchCoefs THEN BEGIN Mem[Qq]^.Hh.B0_0; FixNeeded_TRUE; END;Mem[R]^.Hh.Rh_S;R_S; END;Q_Mem[Q]^.Hh.Rh; Qq_Mem[Q]^.Hh.Lh; END--:595-- ELSE BEGIN Mem[R]^.Hh.Rh_P;R_P; P_Mem[P]^.Hh.Rh;Pp_Mem[P]^.Hh.Lh; END ENDLOOP ; EXITS Label30 => NULL};IF T=17 THEN Mem[ INT[P]+1]^.Int_SlowAdd[Mem[ INT[P]+1]^.Int,TakeFraction[Mem[ INT[Q ]+1]^.Int,F]] ELSE Mem[ INT[P]+1]^.Int_SlowAdd[Mem[ INT[P]+1]^.Int,TakeScaled[Mem[ INT[Q]+1]^ .Int,F]];Mem[R]^.Hh.Rh_P;DepFinal_P;PPlusFqResult_Mem[49999]^.Hh.Rh; END; --:593----599:-- POverV: PROCEDURE[P: Halfword,V: Scaled, T0,T1: SmallNumber] RETURNS[POverVResult: Halfword] = BEGIN R, S:Halfword;W:PascalInteger; Threshold:PascalInteger;ScalingDown:PascalBoolean; IF T0#T1 THEN ScalingDown_TRUE ELSE ScalingDown_FALSE; IF T1=17 THEN Threshold_1342 ELSE Threshold_4;R_49999; WHILE Mem[P]^.Hh.Lh#0 DO BEGIN IF ScalingDown THEN IF ABS[V]<524288 THEN W_MakeScaled[Mem[ INT[P]+1]^.Int,V*4096] ELSE W_MakeScaled[ RoundFraction[Mem[ INT[P]+1]^.Int],V] ELSE W_MakeScaled[Mem[ INT[P]+1]^.Int,V]; IF ABS[W]<=Threshold THEN BEGIN S_Mem[P]^.Hh.Rh;FreeNode[P,2];P_S; END ELSE BEGIN IF ABS[W]>=626349397 THEN BEGIN FixNeeded_TRUE; Mem[Mem[P]^.Hh.Lh]^.Hh.B0_0; END;Mem[R]^.Hh.Rh_P;R_P;Mem[ INT[P]+1]^.Int_W; P_Mem[P]^.Hh.Rh; END; END ENDLOOP ;Mem[R]^.Hh.Rh_P; Mem[ INT[P]+1]^.Int_MakeScaled[Mem[ INT[P]+1]^.Int,V];POverVResult_Mem[49999]^.Hh.Rh; END;--:599----601:-- ValTooBig: PROCEDURE[X: Scaled] = BEGIN IF Internal^[40]>0 THEN BEGIN BEGIN IF Interaction=3 THEN NULL; PrintNl[133];Print[457]; END;PrintScaled[X];PrintChar[41]; BEGIN HelpPtr_4;HelpLine^[3]_458;HelpLine^[2]_459;HelpLine^[1]_460; HelpLine^[0]_461; END;Error[]; END; END;--:601----602: MakeKnown: PROCEDURE[P,Q: Halfword] = BEGIN T:PascalInteger[17..18]; Mem[ INT[Mem[Q]^.Hh.Rh]+1]^.Hh.Lh_Mem[ INT[P]+1]^.Hh.Lh; Mem[Mem[ INT[P]+1]^.Hh.Lh]^.Hh.Rh_Mem[Q]^.Hh.Rh;T_Mem[P]^.Hh.B0; Mem[P]^.Hh.B0_16;Mem[ INT[P]+1]^.Int_Mem[ INT[Q]+1]^.Int;FreeNode[Q,2]; IF ABS[Mem[ INT[P]+1]^.Int]>=268435456 THEN ValTooBig[Mem[ INT[P]+1]^.Int]; IF Internal^[2]>0 THEN IF Interesting[P] THEN BEGIN BeginDiagnostic[]; PrintNl[462];PrintVariableName[P];PrintChar[61]; PrintScaled[Mem[ INT[P]+1]^.Int];EndDiagnostic[FALSE]; END; IF CurExp=P THEN IF CurType=T THEN BEGIN CurType_16; CurExp_Mem[ INT[P]+1]^.Int;FreeNode[P,2]; END; END;--:602----603: FixDependencies: PROCEDURE = BEGIN P, Q, R, S, T:Halfword;X:Halfword; R_Mem[13]^.Hh.Rh;S_0;WHILE R#13 DO BEGIN T_R;--604:--R_ INT[T]+1; {WHILE TRUE DO BEGIN Q_Mem[R]^.Hh.Rh;X_Mem[Q]^.Hh.Lh;IF X=0 THEN GOTO Label30; IF INT[Mem[X]^.Hh.B0]<=1 THEN BEGIN IF INT[Mem[X]^.Hh.B0]<1 THEN BEGIN P_GetAvail[]; Mem[P]^.Hh.Rh_S;S_P;Mem[S]^.Hh.Lh_X;Mem[X]^.Hh.B0_1; END; Mem[ INT[Q]+1]^.Int_ PascalDIVPower2[Mem[ INT[Q]+1]^.Int ,2]; IF Mem[ INT[Q]+1]^.Int=0 THEN BEGIN Mem[R]^.Hh.Rh_Mem[Q]^.Hh.Rh;FreeNode[Q,2]; Q_R; END; END;R_Q; END ENDLOOP ;EXITS Label30 => NULL};--:604--R_Mem[Q]^.Hh.Rh; IF Q=Mem[ INT[T]+1]^.Hh.Rh THEN MakeKnown[T,Q]; END ENDLOOP ; WHILE S#0 DO BEGIN P_Mem[S]^.Hh.Rh;X_Mem[S]^.Hh.Lh; BEGIN Mem[S]^.Hh.Rh_Avail;Avail_S;DynUsed_DynUsed-1; END;S_P; Mem[X]^.Hh.B0_19;Mem[ INT[X]+1]^.Int_Mem[ INT[X]+1]^.Int+2; END ENDLOOP ;FixNeeded_FALSE; END; RingDelete: PROCEDURE[P: Halfword] = BEGIN Q:Halfword; Q_Mem[ INT[P]+1]^.Int; IF Q#0 THEN IF Q#P THEN BEGIN WHILE Mem[ INT[Q]+1]^.Int#P DO Q_Mem[ INT[Q]+1]^.Int ENDLOOP ;Mem[ INT[Q]+1]^.Int_Mem[ INT[P]+1]^.Int; END; END;--:619----808: --:577----590:-- MaxCoef: PROCEDURE[P: Halfword] RETURNS[MaxCoefResult: Fraction] = BEGIN X:Fraction; X_0; WHILE Mem[P]^.Hh.Lh#0 DO BEGIN IF ABS[Mem[ INT[P]+1]^.Int]>X THEN X_ABS[Mem[ INT[P ]+1]^.Int];P_Mem[P]^.Hh.Rh; END ENDLOOP ;MaxCoefResult_X; END;--:590----596: PPlusQ: PROCEDURE[P: Halfword,Q: Halfword,T: SmallNumber] RETURNS[PPlusQResult: Halfword] = BEGIN Pp, Qq:Halfword;R, S:Halfword;Threshold:PascalInteger;V:PascalInteger; IF T=17 THEN Threshold_2685 ELSE Threshold_8;R_49999; Pp_Mem[P]^.Hh.Lh;Qq_Mem[Q]^.Hh.Lh; {WHILE TRUE DO IF Pp=Qq THEN IF Pp=0 THEN GOTO Label30 ELSE--597: BEGIN V_Mem[ INT[P]+1]^.Int+Mem[ INT[Q]+1]^.Int;Mem[ INT[P]+1]^.Int_V;S_P;P_Mem[P]^.Hh.Rh; Pp_Mem[P]^.Hh.Lh; IF ABS[V]=626349397 THEN IF WatchCoefs THEN BEGIN Mem[Qq]^.Hh.B0_0;FixNeeded_TRUE; END; Mem[R]^.Hh.Rh_S;R_S; END;Q_Mem[Q]^.Hh.Rh;Qq_Mem[Q]^.Hh.Lh; END--:597 ELSE IF INT[Pp] NULL};Mem[ INT[P]+1]^.Int_SlowAdd[Mem[ INT[P]+1]^.Int,Mem[ INT[Q]+1]^.Int];Mem[R]^.Hh.Rh_P; DepFinal_P;PPlusQResult_Mem[49999]^.Hh.Rh; END;--:596----598: PTimesV: PROCEDURE[P: Halfword,V: PascalInteger,T0,T1: SmallNumber, VIsScaled: PascalBoolean] RETURNS[PTimesVResult: Halfword] = BEGIN R, S:Halfword;W:PascalInteger; Threshold:PascalInteger;ScalingDown:PascalBoolean; IF T0#T1 THEN ScalingDown_TRUE ELSE ScalingDown_ NOT VIsScaled;IF T1=17 THEN Threshold_1342 ELSE Threshold_4;R_49999; WHILE Mem[P]^.Hh.Lh#0 DO BEGIN IF ScalingDown THEN W_TakeFraction[V, Mem[ INT[P]+1]^.Int] ELSE W_TakeScaled[V,Mem[ INT[P]+1]^.Int]; IF ABS[W]<=Threshold THEN BEGIN S_Mem[P]^.Hh.Rh;FreeNode[P,2];P_S; END ELSE BEGIN IF ABS[W]>=626349397 THEN BEGIN FixNeeded_TRUE; Mem[Mem[P]^.Hh.Lh]^.Hh.B0_0; END;Mem[R]^.Hh.Rh_P;R_P;Mem[ INT[P]+1]^.Int_W; P_Mem[P]^.Hh.Rh; END; END ENDLOOP ;Mem[R]^.Hh.Rh_P; IF VIsScaled THEN Mem[ INT[P]+1]^.Int_TakeScaled[Mem[ INT[P]+1]^.Int,V] ELSE Mem[ INT[P ]+1]^.Int_TakeFraction[Mem[ INT[P]+1]^.Int,V];PTimesVResult_Mem[49999]^.Hh.Rh; END; --:598----600:-- PWithXBecomingQ: PROCEDURE[P,X,Q: Halfword, T: SmallNumber] RETURNS[PWithXBecomingQResult: Halfword] = BEGIN R, S:Halfword;V:PascalInteger; S_P;R_49999; WHILE INT[Mem[S]^.Hh.Lh]>X DO BEGIN R_S;S_Mem[S]^.Hh.Rh; END ENDLOOP ; IF Mem[S]^.Hh.Lh#X THEN PWithXBecomingQResult_P ELSE BEGIN Mem[49999]^.Hh. Rh_P;Mem[R]^.Hh.Rh_Mem[S]^.Hh.Rh;V_Mem[ INT[S]+1]^.Int;FreeNode[S,2]; PWithXBecomingQResult_PPlusFq[Mem[49999]^.Hh.Rh,V,Q,T,17]; END; END;--:600 --605:-- NewDep: PROCEDURE[Q,P: Halfword] = BEGIN R:Halfword; Mem[ INT[Q]+1]^.Hh.Rh_P;Mem[ INT[Q]+1]^.Hh.Lh_13;R_Mem[13]^.Hh.Rh; Mem[DepFinal]^.Hh.Rh_R;Mem[ INT[R]+1]^.Hh.Lh_DepFinal;Mem[13]^.Hh.Rh_Q; END; LinearEq: PROCEDURE[P: Halfword,T: SmallNumber] = BEGIN Q, R, S:Halfword; X:Halfword;N:PascalInteger;V:PascalInteger;PrevR:Halfword;FinalNode:Halfword; W:PascalInteger;--610:--Q_P;R_Mem[P]^.Hh.Rh;V_Mem[ INT[Q]+1]^.Int; WHILE Mem[R]^.Hh.Lh#0 DO BEGIN IF ABS[Mem[ INT[R]+1]^.Int]>ABS[V] THEN BEGIN Q_ R;V_Mem[ INT[R]+1]^.Int; END;R_Mem[R]^.Hh.Rh; END--:610-- ENDLOOP ;X_Mem[Q]^.Hh.Lh; N_Mem[ INT[X]+1]^.Int;--611:--S_49999;Mem[S]^.Hh.Rh_P;R_P; DO IF R=Q THEN BEGIN Mem[S]^.Hh.Rh_Mem[R]^.Hh.Rh;FreeNode[R,2]; END ELSE BEGIN W_MakeFraction[Mem[ INT[R]+1]^.Int,V]; IF ABS[W]<=1342 THEN BEGIN Mem[S]^.Hh.Rh_Mem[R]^.Hh.Rh;FreeNode[R,2]; END ELSE BEGIN Mem[ INT[R]+1]^.Int_-W;S_R; END; END;R_Mem[S]^.Hh.Rh; IF Mem[R]^.Hh.Lh=0 THEN EXIT; ENDLOOP; IF T=18 THEN Mem[ INT[R]+1]^.Int_-MakeScaled[Mem[ INT[R]+1]^.Int,V] ELSE IF V#-268435456 THEN Mem[ INT[R]+1]^.Int_-MakeFraction[Mem[ INT[R]+1]^.Int,V]; FinalNode_R;P_Mem[49999]^.Hh.Rh--:611--;IF Internal^[2]>0 THEN--612: IF Interesting[X] THEN BEGIN BeginDiagnostic[];PrintNl[463]; PrintVariableName[X];W_N;WHILE W>0 DO BEGIN Print[456];W_W-2; END ENDLOOP ; PrintChar[61];PrintDependency[P,17];EndDiagnostic[FALSE]; END--:612--; --613:--PrevR_13;R_Mem[13]^.Hh.Rh; WHILE R#13 DO BEGIN S_Mem[ INT[R]+1]^.Hh.Rh; Q_PWithXBecomingQ[S,X,P,Mem[R]^.Hh.B0]; IF Mem[Q]^.Hh.Lh=0 THEN MakeKnown[R,Q] ELSE BEGIN Mem[ INT[R]+1]^.Hh.Rh_Q; DO Q_Mem[Q]^.Hh.Rh; IF Mem[Q]^.Hh.Lh=0 THEN EXIT; ENDLOOP;PrevR_Q; END; R_Mem[PrevR]^.Hh.Rh; END--:613-- ENDLOOP ;--614:--IF N>0 THEN--615:--BEGIN S_49999; Mem[49999]^.Hh.Rh_P;R_P; DO IF N>30 THEN W_0 ELSE W_ Mem[ INT[R]+1]^.Int /TwoToThe^[N]; IF(ABS[W]<=1342)AND (Mem[R]^.Hh.Lh#0) THEN BEGIN Mem[S]^.Hh.Rh_Mem[R]^.Hh. Rh;FreeNode[R,2]; END ELSE BEGIN Mem[ INT[R]+1]^.Int_W;S_R; END; R_Mem[S]^.Hh.Rh; IF Mem[S]^.Hh.Lh=0 THEN EXIT; ENDLOOP;P_Mem[49999]^.Hh.Rh; END--:615--; IF Mem[P]^.Hh.Lh=0 THEN BEGIN Mem[X]^.Hh.B0_16; Mem[ INT[X]+1]^.Int_Mem[ INT[P]+1]^.Int; IF ABS[Mem[ INT[X]+1]^.Int]>=268435456 THEN ValTooBig[Mem[ INT[X]+1]^.Int]; FreeNode[P,2]; IF CurExp=X THEN IF CurType=19 THEN BEGIN CurExp_Mem[ INT[X]+1]^.Int; CurType_16;FreeNode[X,2]; END; END ELSE BEGIN Mem[X]^.Hh.B0_17; DepFinal_FinalNode;NewDep[X,P]; IF CurExp=X THEN IF CurType=19 THEN CurType_17; END--:614--; IF FixNeeded THEN FixDependencies[]; END;--:609----618: NewRingEntry: PROCEDURE[P: Halfword] RETURNS[NewRingEntryResult: Halfword] = BEGIN Q:Halfword; Q_GetNode[2];Mem[Q]^.Hh.B1_11;Mem[Q]^.Hh.B0_Mem[P]^.Hh.B0; IF Mem[ INT[P]+1]^.Int=0 THEN Mem[ INT[Q]+1]^.Int_P ELSE Mem[ INT[Q]+1]^.Int_Mem[ INT[P]+1]^.Int; Mem[ INT[P]+1]^.Int_Q;NewRingEntryResult_Q; END;--:618----620: NonlinearEq: PROCEDURE[V: PascalInteger,P: Halfword,FlushP: PascalBoolean] = BEGIN T:SmallNumber;Q, R:Halfword; T_Mem[P]^.Hh.B0-1;Q_Mem[ INT[P]+1]^.Int; IF FlushP THEN Mem[P]^.Hh.B0_1 ELSE P_Q;DO R_Mem[ INT[Q]+1]^.Int; Mem[Q]^.Hh.B0_T;SELECT T FROM 2 =>Mem[ INT[Q]+1]^.Int_V;4 =>BEGIN Mem[ INT[Q]+1]^.Int_V; BEGIN IF INT[StrRef^[V]]<127 THEN StrRef^[V]_StrRef^[V]+1; END; END; 6 =>BEGIN Mem[ INT[Q]+1]^.Int_V;Mem[V]^.Hh.Lh_ INT[Mem[V]^.Hh.Lh]+1; END; 9 =>Mem[ INT[Q]+1]^.Int_CopyPath[V];11 =>Mem[ INT[Q]+1]^.Int_CopyEdges[V]; ENDCASE;Q_R; IF Q=P THEN EXIT; ENDLOOP; END;--:620----621:-- RingMerge: PROCEDURE[P,Q: Halfword] = BEGIN R:Halfword; R_Mem[ INT[P]+1]^.Int; {WHILE R#P DO BEGIN IF R=Q THEN BEGIN--622: BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[133];Print[466]; END; BEGIN HelpPtr_2;HelpLine^[1]_467;HelpLine^[0]_468; END;PutGetError[]; END--:622--; GOTO Label10; END;R_Mem[ INT[R]+1]^.Int; END ENDLOOP ;R_Mem[ INT[P]+1]^.Int; Mem[ INT[P]+1]^.Int_Mem[ INT[Q]+1]^.Int;Mem[ INT[Q]+1]^.Int_R;EXITS Label10 => NULL}; END;--:621----625: END.