-- file: MFParsingImpl1.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, MFOctants, MFEnvelopes, MFEquations, MFInput, MFParsing; MFParsingImpl1: PROGRAM IMPORTS PascalBasic, MFProcArray, MFInteraction, MFMath, MFMemory, MFSymbols, MFPaths, MFEdges, MFOctants, MFEnvelopes, MFEquations, MFInput, MFParsing EXPORTS MFParsing = PUBLIC BEGIN OPEN PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFInteraction, MFMath, MFMemory, MFSymbols, MFPaths, MFEdges, MFOctants, MFEnvelopes, MFEquations, MFInput, MFParsing; --:790----795: CurType: SmallNumber; CurExp: PascalInteger; --:795----812: MaxC: LONG POINTER TO ARRAY PascalInteger[17..18] OF PascalInteger _ PascalStaticZone.NEW[ARRAY PascalInteger[17..18] OF PascalInteger]; MaxPtr: LONG POINTER TO ARRAY PascalInteger[17..18] OF Halfword _ PascalStaticZone.NEW[ARRAY PascalInteger[17..18] OF Halfword]; MaxLink: LONG POINTER TO ARRAY PascalInteger[17..18] OF Halfword _ PascalStaticZone.NEW[ARRAY PascalInteger[17..18] OF Halfword]; --:812----820:-- VarFlag: PascalInteger[0..82]; PrintDp: PROCEDURE[T: SmallNumber,P: Halfword,Verbosity: SmallNumber] = BEGIN Q:Halfword; Q_Mem[P]^.Hh.Rh; IF(Mem[Q]^.Hh.Lh=0)OR ( INT[Verbosity]>0) THEN PrintDependency[P,T] ELSE Print[ 629]; END;--:804----798:-- StashCurExp: PROCEDURE RETURNS[StashCurExpResult: Halfword] = BEGIN P:Halfword; SELECT CurType FROM 3,5,7,12,10,13,14,17,18,19 =>P_CurExp; ENDCASE =>BEGIN P_GetNode[2];Mem[P]^.Hh.B1_11;Mem[P]^.Hh.B0_CurType; Mem[ INT[P]+1]^.Int_CurExp; END ;CurType_1;Mem[P]^.Hh.Rh_1; StashCurExpResult_P; END;--:798----799:-- UnstashCurExp: PROCEDURE[P: Halfword] = BEGIN CurType_Mem[P]^.Hh.B0; SELECT CurType FROM 3,5,7,12,10,13,14,17,18,19 =>CurExp_P; ENDCASE =>BEGIN CurExp_Mem[ INT[P]+1]^.Int;FreeNode[P,2]; END ; END;--:799 PrintExp: PROCEDURE[P: Halfword,Verbosity: SmallNumber] = BEGIN RestoreCurExp:PascalBoolean;T:SmallNumber;V:PascalInteger;Q:Halfword; IF P#0 THEN RestoreCurExp_FALSE ELSE BEGIN P_StashCurExp[]; RestoreCurExp_TRUE; END;T_Mem[P]^.Hh.B0; IF INT[T]<17 THEN V_Mem[ INT[P]+1]^.Int ELSE IF INT[T]<19 THEN V_Mem[ INT[P]+1]^.Hh.Rh;--801: SELECT T FROM 1 =>Print[196];2 =>IF V=30 THEN Print[220] ELSE Print[221]; 3,5,7,12,10,15 =>--805:--BEGIN PrintType[T]; IF V#0 THEN BEGIN PrintChar[32]; WHILE(Mem[V]^.Hh.B1=11)AND (V#P)DO V_Mem[V+1]^.Int ENDLOOP ; PrintVariableName[V]; END; END--:805--;4 =>BEGIN PrintChar[34]; SlowPrint[V];PrintChar[34]; END;6,8,9,11 =>--803: IF INT[Verbosity]<=1 THEN PrintType[T] ELSE BEGIN IF Selector=3 THEN IF Internal^[13]<=0 THEN BEGIN Selector_1;PrintType[T];Print[627]; Selector_3; END;SELECT T FROM 6 =>PrintPen[V,157,FALSE]; 8 =>PrintPath[V,628,FALSE];9 =>PrintPath[V,157,FALSE]; 11 =>BEGIN CurEdges_V;PrintEdges[157,FALSE,0,0]; END; ENDCASE; END--:803--; 13,14 =>IF V=0 THEN PrintType[T] ELSE--802:--BEGIN PrintChar[40]; Q_V+BigNodeSize^[T]; DO IF Mem[V]^.Hh.B0=16 THEN PrintScaled[Mem[V+1]^.Int] ELSE IF Mem[V]^. Hh.B0=19 THEN PrintVariableName[V] ELSE PrintDp[Mem[V]^.Hh.B0,Mem[V+1]^. Hh.Rh,Verbosity];V_V+2;IF V#Q THEN PrintChar[44]; IF V=Q THEN EXIT; ENDLOOP; PrintChar[41]; END--:802--;16 =>PrintScaled[V]; 17,18 =>PrintDp[T,V,Verbosity];19 =>PrintVariableName[P]; ENDCASE =>Confusion[626]--:801--; IF RestoreCurExp THEN UnstashCurExp[P]; END;--:800----806: DispErr: PROCEDURE[P: Halfword,S: StrNumber] = BEGIN IF Interaction=3 THEN NULL; PrintNl[630];PrintExp[P,1];IF S#157 THEN BEGIN PrintNl[133]; Print[S]; END; END;--:806----593:-- RecycleValue: PROCEDURE[P: Halfword] = BEGIN T:SmallNumber; V:PascalInteger;Vv:PascalInteger;Q, R, S, Pp:Halfword; T_Mem[P]^.Hh.B0; IF INT[T]<17 THEN V_Mem[ INT[P]+1]^.Int;SELECT T FROM 0,1,2,16,15 => NULL; 3,5,7,12,10 =>RingDelete[P]; 4 =>BEGIN IF INT[StrRef^[V]]<127 THEN IF INT[StrRef^[V]]>1 THEN StrRef^[V]_StrRef^ [V]-1 ELSE FlushString[V]; END; 6 =>IF Mem[V]^.Hh.Lh=0 THEN TossPen[V] ELSE Mem[V]^.Hh.Lh_ INT[Mem[V]^.Hh.Lh]-1; 9,8 =>TossKnotList[V];11 =>TossEdges[V];14,13 =>--809: IF V#0 THEN BEGIN Q_V+BigNodeSize^[T];DO Q_ INT[Q]-2;RecycleValue[Q]; IF Q=V THEN EXIT; ENDLOOP;FreeNode[V,BigNodeSize^[T]]; END--:809--;17,18 =>--810: BEGIN Q_Mem[ INT[P]+1]^.Hh.Rh;WHILE Mem[Q]^.Hh.Lh#0 DO Q_Mem[Q]^.Hh.Rh ENDLOOP ; Mem[Mem[ INT[P]+1]^.Hh.Lh]^.Hh.Rh_Mem[Q]^.Hh.Rh; Mem[ INT[Mem[Q]^.Hh.Rh]+1]^.Hh.Lh_Mem[ INT[P]+1]^.Hh.Lh;Mem[Q]^.Hh.Rh_0; FlushNodeList[Mem[ INT[P]+1]^.Hh.Rh]; END--:810--;19 =>--811:--BEGIN MaxC^[17]_0; MaxC^[18]_0;MaxLink^[17]_0;MaxLink^[18]_0;Q_Mem[13]^.Hh.Rh; WHILE Q#13 DO BEGIN S_ INT[Q]+1;{WHILE TRUE DO BEGIN R_Mem[S]^.Hh.Rh; IF Mem[R]^.Hh.Lh=0 THEN GOTO Label30; IF Mem[R]^.Hh.Lh#P THEN S_R ELSE BEGIN T_Mem[Q]^.Hh.B0; Mem[S]^.Hh.Rh_Mem[R]^.Hh.Rh;Mem[R]^.Hh.Lh_Q; IF ABS[Mem[ INT[R]+1]^.Int]>MaxC^[T] THEN--813: BEGIN IF MaxC^[T]>0 THEN BEGIN Mem[MaxPtr^[T]]^.Hh.Rh_MaxLink^[T]; MaxLink^[T]_MaxPtr^[T]; END;MaxC^[T]_ABS[Mem[ INT[R]+1]^.Int];MaxPtr^[T]_R; END--:813-- ELSE BEGIN Mem[R]^.Hh.Rh_MaxLink^[T];MaxLink^[T]_R; END; END; END ENDLOOP ;EXITS Label30 => NULL};Q_Mem[R]^.Hh.Rh; END ENDLOOP ;IF(MaxC^[17]>0)OR (MaxC^[18]>0) THEN--814: BEGIN IF(MaxC^[17]>=268435456)OR ( PascalDIVPower2[MaxC^[17],12]>=MaxC^[18]) THEN T_17 ELSE T_18;--815:--R_MaxPtr^[T];Pp_Mem[R]^.Hh.Lh;V_Mem[ INT[R]+1]^.Int; IF T=17 THEN Mem[ INT[R]+1]^.Int_-268435456 ELSE Mem[ INT[R]+1]^.Int_-65536;Q_ INT[Pp]+1; S_Mem[Q]^.Hh.Rh;WHILE INT[Mem[S]^.Hh.Lh]>Pp DO BEGIN Q_S;S_Mem[Q]^.Hh.Rh; END ENDLOOP ; Mem[Q]^.Hh.Rh_R;Mem[R]^.Hh.Rh_S; WHILE Mem[S]^.Hh.Lh#0 DO S_Mem[S]^.Hh.Rh ENDLOOP ;Q_Mem[S]^.Hh.Rh; Mem[S]^.Hh.Rh_0;S_Mem[ INT[Pp]+1]^.Hh.Rh;Mem[ INT[Q]+1]^.Hh.Lh_Mem[ INT[Pp]+1]^.Hh.Lh; Mem[Mem[ INT[Pp]+1]^.Hh.Lh]^.Hh.Rh_Q;Mem[Pp]^.Hh.B0_19;Mem[ INT[Pp]+1]^.Int_0; IF CurExp=Pp THEN IF CurType=T THEN CurType_19; IF Internal^[2]>0 THEN--816:--IF Interesting[P] THEN BEGIN BeginDiagnostic[]; PrintNl[632];IF V>0 THEN PrintChar[45]; IF T=17 THEN Vv_RoundFraction[MaxC^[17]] ELSE Vv_MaxC^[18]; IF Vv#65536 THEN PrintScaled[Vv];PrintVariableName[P]; WHILE Mem[ INT[P]+1]^.Int>0 DO BEGIN Print[456];Mem[ INT[P]+1]^.Int_Mem[ INT[P]+1]^.Int-2; END ENDLOOP ;IF T=17 THEN PrintChar[61] ELSE Print[633];PrintDependency[S,T]; EndDiagnostic[FALSE]; END--:816----:815--;T_35-T; IF MaxC^[T]>0 THEN BEGIN Mem[MaxPtr^[T]]^.Hh.Rh_MaxLink^[T]; MaxLink^[T]_MaxPtr^[T]; END;IF T#17 THEN--817: FOR i:INT IN [ INT[17 ].. INT[18 ]] DO T _ i; R_MaxLink^[T]; WHILE R#0 DO BEGIN Q_Mem[R]^.Hh.Lh; Mem[ INT[Q]+1]^.Hh.Rh_PPlusFq[Mem[ INT[Q]+1]^.Hh.Rh,MakeFraction[Mem[ INT[R]+1]^.Int,-V], S,T,17];IF Mem[ INT[Q]+1]^.Hh.Rh=DepFinal THEN MakeKnown[Q,DepFinal];Q_R; R_Mem[R]^.Hh.Rh;FreeNode[Q,2]; END ENDLOOP ;--:817-- ENDLOOP ELSE--818: FOR i:INT IN [ INT[17 ].. INT[18 ]] DO T _ i; R_MaxLink^[T]; WHILE R#0 DO BEGIN Q_Mem[R]^.Hh.Lh; IF T=17 THEN BEGIN IF CurExp=Q THEN IF CurType=17 THEN CurType_18; Mem[ INT[Q]+1]^.Hh.Rh_POverV[Mem[ INT[Q]+1]^.Hh.Rh,65536,17,18];Mem[Q]^.Hh.B0_18; Mem[ INT[R]+1]^.Int_RoundFraction[Mem[ INT[R]+1]^.Int]; END; Mem[ INT[Q]+1]^.Hh.Rh_PPlusFq[Mem[ INT[Q]+1]^.Hh.Rh,MakeScaled[Mem[ INT[R]+1]^.Int,-V],S, 18,18];IF Mem[ INT[Q]+1]^.Hh.Rh=DepFinal THEN MakeKnown[Q,DepFinal];Q_R; R_Mem[R]^.Hh.Rh;FreeNode[Q,2]; END ENDLOOP ;--:818-- ENDLOOP;FlushNodeList[S]; IF FixNeeded THEN FixDependencies[]; BEGIN IF ArithError THEN ClearArith[]; END; END--:814--; END--:811--; 20,21 =>Confusion[631];22,23 =>DeleteMacRef[Mem[ INT[P]+1]^.Int]; ENDCASE; Mem[P]^.Hh.B0_0; END;--:808----807:-- FlushCurExp: PROCEDURE[V: Scaled] = BEGIN SELECT CurType FROM 3,5,7,12,10,13,14,17,18,19 =>BEGIN RecycleValue[ CurExp];FreeNode[CurExp,2]; END; 6 =>IF Mem[CurExp]^.Hh.Lh=0 THEN TossPen[CurExp] ELSE Mem[CurExp]^.Hh.Lh _ INT[Mem[CurExp]^.Hh.Lh]-1; 4 =>BEGIN IF INT[StrRef^[CurExp]]<127 THEN IF INT[StrRef^[CurExp]]>1 THEN StrRef^ [CurExp]_StrRef^[CurExp]-1 ELSE FlushString[CurExp]; END; 8,9 =>TossKnotList[CurExp];11 =>TossEdges[CurExp]; ENDCASE => NULL; CurType_16;CurExp_V; END;--:807----819:-- FlushError: PROCEDURE[V: Scaled] = BEGIN Error[];FlushCurExp[V]; END; PutGetError: PROCEDURE = BEGIN BackError[]; GetXNext[]; END; PutGetFlushError: PROCEDURE[V: Scaled] = BEGIN PutGetError[];FlushCurExp[V]; END;--:819----247: --:605----606:-- ConstDependency: PROCEDURE[V: Scaled] RETURNS[ConstDependencyResult: Halfword] = BEGIN DepFinal_GetNode[2];Mem[ INT[DepFinal]+1]^.Int_V; Mem[DepFinal]^.Hh.Lh_0;ConstDependencyResult_DepFinal; END;--:606----607: SingleDependency: PROCEDURE[P: Halfword] RETURNS[SingleDependencyResult: Halfword] = BEGIN Q:Halfword; IF Mem[ INT[P]+1]^.Int>28 THEN SingleDependencyResult_ConstDependency[0] ELSE BEGIN Q_GetNode[2];Mem[ INT[Q]+1]^.Int_TwoToThe^[28-Mem[ INT[P]+1]^.Int]; Mem[Q]^.Hh.Lh_P;Mem[Q]^.Hh.Rh_ConstDependency[0];SingleDependencyResult_Q; END; END;--:607----608:-- CopyDepList: PROCEDURE[P: Halfword] RETURNS[CopyDepListResult: Halfword] = BEGIN Q:Halfword; Q_GetNode[2];DepFinal_Q; {WHILE TRUE DO BEGIN Mem[DepFinal]^.Hh.Lh_Mem[P]^.Hh.Lh; Mem[ INT[DepFinal]+1]^.Int_Mem[ INT[P]+1]^.Int; IF Mem[DepFinal]^.Hh.Lh=0 THEN GOTO Label30; Mem[DepFinal]^.Hh.Rh_GetNode[2];DepFinal_Mem[DepFinal]^.Hh.Rh; P_Mem[P]^.Hh.Rh; END ENDLOOP ;EXITS Label30 => NULL};CopyDepListResult_Q; END;--:608----609: --823:-- BadExp: PROCEDURE[S: StrNumber] = BEGIN SaveFlag:PascalInteger[0..82]; BEGIN IF Interaction=3 THEN NULL;PrintNl[133];Print[S]; END;Print[635]; PrintCmdMod[CurCmd,CurMod];PrintChar[39];BEGIN HelpPtr_4; HelpLine^[3]_636;HelpLine^[2]_637;HelpLine^[1]_638;HelpLine^[0]_639; END;BackInput[];CurSym_0;CurCmd_42;CurMod_0;InsError[]; SaveFlag_VarFlag;VarFlag_0;GetXNext[];VarFlag_SaveFlag; END; --:823----826:-- StashIn: PROCEDURE[P: Halfword] = BEGIN Q:Halfword; Mem[P]^.Hh.B0_CurType; IF CurType=16 THEN Mem[ INT[P]+1]^.Int_CurExp ELSE BEGIN IF CurType=19 THEN --828:--BEGIN Q_SingleDependency[CurExp]; IF Q=DepFinal THEN BEGIN Mem[P]^.Hh.B0_16;Mem[ INT[P]+1]^.Int_0; FreeNode[Q,2]; END ELSE BEGIN Mem[P]^.Hh.B0_17;NewDep[P,Q]; END; RecycleValue[CurExp]; END--:828-- ELSE BEGIN Mem[ INT[P]+1]^_Mem[CurExp+1]^; Mem[Mem[ INT[P]+1]^.Hh.Lh]^.Hh.Rh_P; END;FreeNode[CurExp,2]; END;CurType_1; END;--:826----847:-- BackExpr: PROCEDURE = BEGIN P:Halfword; P_StashCurExp[];Mem[P]^.Hh.Rh_0;BeginTokenList[P,10]; END;--:847 --848:-- BadSubscript: PROCEDURE = BEGIN DispErr[0,651];BEGIN HelpPtr_3; HelpLine^[2]_652;HelpLine^[1]_653;HelpLine^[0]_654; END; FlushError[0]; END;--:848----850:-- Obliterated: PROCEDURE[Q: Halfword] = BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[133];Print[655]; END; ShowTokenList[Q,0,1000,0];Print[656];BEGIN HelpPtr_5; HelpLine^[4]_657;HelpLine^[3]_658;HelpLine^[2]_659;HelpLine^[1]_660; HelpLine^[0]_661; END; END;--:850----862: NewKnot: PROCEDURE RETURNS[NewKnotResult: Halfword] = BEGIN Q:Halfword; Q_GetNode[7]; Mem[Q]^.Hh.B0_0;Mem[Q]^.Hh.B1_0;Mem[Q]^.Hh.Rh_Q;KnownPair[]; Mem[ INT[Q]+1]^.Int_CurX;Mem[ INT[Q]+2]^.Int_CurY;NewKnotResult_Q; END;--:870----874: END.