-- file: MFParsingImpl2.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, MFDebug, MFOps; MFParsingImpl2: PROGRAM IMPORTS PascalBasic, MFProcArray, MFInteraction, MFMath, MFMemory, MFSymbols, MFPaths, MFEdges, MFOctants, MFEnvelopes, MFEquations, MFInput, MFParsing, MFDebug, MFOps EXPORTS MFParsing = PUBLIC BEGIN OPEN PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFInteraction, MFMath, MFMemory, MFSymbols, MFPaths, MFEdges, MFOctants, MFEnvelopes, MFEquations, MFInput, MFParsing, MFDebug, MFOps; --854:----855:-- Encapsulate: PROCEDURE[P: Halfword] = BEGIN CurExp_GetNode[2];Mem[CurExp]^.Hh.B0_CurType; Mem[CurExp]^.Hh.B1_11;NewDep[CurExp,P]; END;--:855----857: Install: PROCEDURE[R,Q: Halfword] = BEGIN P:Halfword; IF Mem[Q]^.Hh.B0=16 THEN BEGIN Mem[ INT[R]+1]^.Int_Mem[ INT[Q]+1]^.Int; Mem[R]^.Hh.B0_16; END ELSE IF Mem[Q]^.Hh.B0=19 THEN BEGIN P_SingleDependency[Q]; IF P=DepFinal THEN BEGIN Mem[R]^.Hh.B0_16;Mem[ INT[R]+1]^.Int_0; FreeNode[P,2]; END ELSE BEGIN Mem[R]^.Hh.B0_17;NewDep[R,P]; END; END ELSE BEGIN Mem[R]^.Hh.B0_Mem[Q]^.Hh.B0; NewDep[R,CopyDepList[Mem[ INT[Q]+1]^.Hh.Rh]]; END; END;--:857 MakeExpCopy: PROCEDURE[P: Halfword] = BEGIN Q, R, T:Halfword; DO {--Label20:--CurType_Mem[P]^.Hh.B0; SELECT CurType FROM 1,2,16 =>CurExp_Mem[ INT[P]+1]^.Int; 3,5,7,12,10 =>CurExp_NewRingEntry[P];4 =>BEGIN CurExp_Mem[ INT[P]+1]^.Int; BEGIN IF INT[StrRef^[CurExp]]<127 THEN StrRef^[CurExp]_StrRef^[CurExp]+1; END; END;6 =>BEGIN CurExp_Mem[ INT[P]+1]^.Int; Mem[CurExp]^.Hh.Lh_ INT[Mem[CurExp]^.Hh.Lh]+1; END; 11 =>CurExp_CopyEdges[Mem[ INT[P]+1]^.Int]; 9,8 =>CurExp_CopyPath[Mem[ INT[P]+1]^.Int];13,14 =>--856: BEGIN IF Mem[ INT[P]+1]^.Int=0 THEN InitBigNode[P];T_GetNode[2]; Mem[T]^.Hh.B1_11;Mem[T]^.Hh.B0_CurType;InitBigNode[T]; Q_Mem[ INT[P]+1]^.Int+BigNodeSize^[CurType]; R_Mem[ INT[T]+1]^.Int+BigNodeSize^[CurType];DO Q_ INT[Q]-2;R_ INT[R]-2; Install[R,Q]; IF Q=Mem[ INT[P]+1]^.Int THEN EXIT; ENDLOOP;CurExp_T; END--:856--; 17,18 =>Encapsulate[CopyDepList[Mem[ INT[P]+1]^.Hh.Rh]]; 15 =>BEGIN Mem[P]^.Hh.B0_19;Mem[ INT[P]+1]^.Int_0; GOTO Label20; END; 19 =>BEGIN Q_SingleDependency[P];IF Q=DepFinal THEN BEGIN CurType_16; CurExp_0;FreeNode[Q,2]; END ELSE BEGIN CurType_17;Encapsulate[Q]; END; END; ENDCASE =>Confusion[665];EXIT; EXITS Label20 => NULL} ENDLOOP; END;--:854-- BinaryMac: PROCEDURE[P,C,N: Halfword] = BEGIN Q, R:Halfword; Q_GetAvail[];R_GetAvail[];Mem[Q]^.Hh.Rh_R;Mem[Q]^.Hh.Lh_P; Mem[R]^.Hh.Lh_StashCurExp[];MacroCall[C,Q,N]; END;--:862----864: MaterializePen: PROCEDURE = BEGIN AMinusB, APlusB, MajorAxis, MinorAxis:Scaled;Theta:Angle; P:Halfword;Q:Halfword; Q_CurExp; {IF Mem[Q]^.Hh.B0=0 THEN BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[133]; Print[671]; END;BEGIN HelpPtr_2;HelpLine^[1]_672;HelpLine^[0]_443; END;PutGetError[];CurExp_3; GOTO Label50; END ELSE IF Mem[Q]^.Hh.B0=4 THEN--865:--BEGIN Tx_Mem[ INT[Q]+1]^.Int; Ty_Mem[ INT[Q]+2]^.Int;Txx_Mem[ INT[Q]+3]^.Int-Tx;Tyx_Mem[ INT[Q]+4]^.Int-Ty; Txy_Mem[ INT[Q]+5]^.Int-Tx;Tyy_Mem[ INT[Q]+6]^.Int-Ty; AMinusB_PythAdd[Txx-Tyy,Tyx+Txy]; APlusB_PythAdd[Txx+Tyy,Tyx-Txy]; MajorAxis_ PascalDIVPower2[(AMinusB+APlusB),1]; MinorAxis_ PascalDIVPower2[(ABS[APlusB-AMinusB]),1]; IF MajorAxis=MinorAxis THEN Theta_0 ELSE Theta_ PascalDIVPower2[(NArg[Txx-Tyy, Tyx+Txy]+NArg[Txx+Tyy,Tyx-Txy]),1];FreeNode[Q,7]; Q_MakeEllipse[MajorAxis,MinorAxis,Theta]; IF(Tx#0)OR (Ty#0) THEN--866:--BEGIN P_Q; DO Mem[ INT[P]+1]^.Int_Mem[ INT[P]+1]^.Int+Tx;Mem[ INT[P]+2]^.Int_Mem[ INT[P]+2]^.Int+Ty; P_Mem[P]^.Hh.Rh; IF P=Q THEN EXIT; ENDLOOP; END--:866--; END--:865--;CurExp_MakePen[Q]; EXITS Label50 => NULL};TossKnotList[Q];CurType_6; END;--:864----870:----871: KnownPair: PROCEDURE = BEGIN P:Halfword; IF CurType#14 THEN BEGIN DispErr[0,674];BEGIN HelpPtr_5; HelpLine^[4]_675;HelpLine^[3]_676;HelpLine^[2]_677;HelpLine^[1]_678; HelpLine^[0]_679; END;PutGetFlushError[0];CurX_0;CurY_0; END ELSE BEGIN P_Mem[CurExp+1]^.Int;--872: IF Mem[P]^.Hh.B0=16 THEN CurX_Mem[ INT[P]+1]^.Int ELSE BEGIN DispErr[P,680]; BEGIN HelpPtr_5;HelpLine^[4]_681;HelpLine^[3]_676;HelpLine^[2]_677; HelpLine^[1]_678;HelpLine^[0]_679; END;PutGetError[];RecycleValue[P]; CurX_0; END; IF Mem[ INT[P]+2]^.Hh.B0=16 THEN CurY_Mem[ INT[P]+3]^.Int ELSE BEGIN DispErr[ INT[P]+2, 682];BEGIN HelpPtr_5;HelpLine^[4]_683;HelpLine^[3]_676; HelpLine^[2]_677;HelpLine^[1]_678;HelpLine^[0]_679; END;PutGetError[]; RecycleValue[ INT[P]+2];CurY_0; END--:872--;FlushCurExp[0]; END; END;--:871 ScanDirection: PROCEDURE RETURNS[ScanDirectionResult: SmallNumber] = BEGIN T:PascalInteger[2..4];X:Scaled; GetXNext[];IF CurCmd=60 THEN--875:--BEGIN GetXNext[]; ScanExpression[];IF(CurType#16)OR (CurExp<0) THEN BEGIN DispErr[0,686]; BEGIN HelpPtr_1;HelpLine^[0]_687; END;PutGetFlushError[65536]; END; T_3; END--:875-- ELSE--876:--BEGIN ScanExpression[];IF INT[CurType]>14 THEN--877: BEGIN IF CurType#16 THEN BEGIN DispErr[0,680];BEGIN HelpPtr_5; HelpLine^[4]_681;HelpLine^[3]_676;HelpLine^[2]_677;HelpLine^[1]_678; HelpLine^[0]_679; END;PutGetFlushError[0]; END;X_CurExp; IF CurCmd#79 THEN BEGIN MissingErr[44];BEGIN HelpPtr_2; HelpLine^[1]_688;HelpLine^[0]_689; END;BackError[]; END;GetXNext[]; ScanExpression[];IF CurType#16 THEN BEGIN DispErr[0,682]; BEGIN HelpPtr_5;HelpLine^[4]_683;HelpLine^[3]_676;HelpLine^[2]_677; HelpLine^[1]_678;HelpLine^[0]_679; END;PutGetFlushError[0]; END; CurY_CurExp;CurX_X; END--:877-- ELSE KnownPair[]; IF(CurX=0)AND (CurY=0) THEN T_4 ELSE BEGIN T_2; CurExp_NArg[CurX,CurY]; END; END--:876--; IF CurCmd#65 THEN BEGIN MissingErr[125];BEGIN HelpPtr_3; HelpLine^[2]_684;HelpLine^[1]_685;HelpLine^[0]_564; END;BackError[]; END;GetXNext[];ScanDirectionResult_T; END;--:874----894: ScanPrimary: PROCEDURE = BEGIN P, Q, R:Halfword;C:Quarterword;MyVarFlag:PascalInteger[0..82]; LDelim, RDelim:Halfword;--830:--GroupLine:PascalInteger;--:830----835: Num, Denom:Scaled;--:835----842:--PreHead, PostHead, Tail:Halfword; Tt:SmallNumber;T:Halfword;MacroRef:Halfword;--:842 MyVarFlag_VarFlag;VarFlag_0; DO {--Label20:--BEGIN IF ArithError THEN ClearArith[]; END;--824: IF Panicking THEN CheckMem[FALSE]; IF Interrupt#0 THEN IF OkToInterrupt THEN BEGIN BackInput[]; BEGIN IF Interrupt#0 THEN PauseForInstructions[]; END;GetXNext[]; END--:824--;{SELECT CurCmd FROM 31 =>--825:--BEGIN LDelim_CurSym; RDelim_CurMod;GetXNext[];ScanExpression[]; IF(CurCmd=79)AND ( INT[CurType]>=16) THEN--829:--BEGIN P_GetNode[2]; Mem[P]^.Hh.B0_14;Mem[P]^.Hh.B1_11;InitBigNode[P];Q_Mem[ INT[P]+1]^.Int; StashIn[Q];GetXNext[];ScanExpression[]; IF INT[CurType]<16 THEN BEGIN DispErr[0,640];BEGIN HelpPtr_4; HelpLine^[3]_641;HelpLine^[2]_642;HelpLine^[1]_643;HelpLine^[0]_644; END;PutGetFlushError[0]; END;StashIn[ INT[Q]+2]; CheckDelimiter[LDelim,RDelim];CurType_14;CurExp_P; END--:829 ELSE CheckDelimiter[LDelim,RDelim]; END--:825--;32 =>--831: BEGIN GroupLine_Line; IF Internal^[7]>0 THEN ShowCmdMod[CurCmd,CurMod];BEGIN P_GetAvail[]; Mem[P]^.Hh.Lh_0;Mem[P]^.Hh.Rh_SavePtr;SavePtr_P; END; DO DoStatement[]; IF CurCmd#80 THEN EXIT; ENDLOOP; IF CurCmd#81 THEN BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[133]; Print[645]; END;PrintInt[GroupLine];Print[646];BEGIN HelpPtr_2; HelpLine^[1]_647;HelpLine^[0]_648; END;BackError[];CurCmd_81; END; Unsave[];IF Internal^[7]>0 THEN ShowCmdMod[CurCmd,CurMod]; END--:831--; 39 =>--832:--BEGIN CurType_4;CurExp_CurMod; END--:832--;42 =>--836: BEGIN CurExp_CurMod;CurType_16;GetXNext[]; IF CurCmd#54 THEN BEGIN Num_0;Denom_0; END ELSE BEGIN GetXNext[]; IF CurCmd#42 THEN BEGIN BackInput[];CurCmd_54;CurMod_72; CurSym_2233; GOTO Label30; END;Num_CurExp;Denom_CurMod; IF Denom=0 THEN--837:--BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[133]; Print[649]; END;BEGIN HelpPtr_1;HelpLine^[0]_650; END;Error[]; END--:837 ELSE CurExp_MakeScaled[Num,Denom]; BEGIN IF ArithError THEN ClearArith[]; END;GetXNext[]; END; IF INT[CurCmd]>=30 THEN IF INT[CurCmd]<42 THEN BEGIN P_StashCurExp[]; ScanPrimary[]; IF(ABS[Num]>=ABS[Denom])OR ( INT[CurType]<14) THEN DoBinary[P,71] ELSE BEGIN FracMult[Num,Denom];FreeNode[P,2]; END; END; GOTO Label30; END--:836--;33 =>--833: DoNullary[CurMod]--:833--;34,30,36,43 =>--834:--BEGIN C_CurMod;GetXNext[]; ScanPrimary[];DoUnary[C]; GOTO Label30; END--:834--;37 =>--838:--BEGIN C_CurMod; GetXNext[];ScanExpression[];IF CurCmd#69 THEN BEGIN MissingErr[348]; Print[582];PrintCmdMod[37,C];BEGIN HelpPtr_1;HelpLine^[0]_583; END; BackError[]; END;P_StashCurExp[];GetXNext[];ScanPrimary[];DoBinary[P,C]; GOTO Label30; END--:838--;35 =>--839:--BEGIN GetXNext[];ScanSuffix[]; OldSetting_Selector;Selector_5;ShowTokenList[CurExp,0,100000,0]; FlushTokenList[CurExp];CurExp_MakeString[];Selector_OldSetting; CurType_4; GOTO Label30; END--:839--;40 =>--840:--BEGIN Q_CurMod; IF MyVarFlag=77 THEN BEGIN GetXNext[]; IF CurCmd=77 THEN BEGIN CurExp_GetAvail[];Mem[CurExp]^.Hh.Lh_ INT[Q]+2241; CurType_20; GOTO Label30; END;BackInput[]; END;CurType_16; CurExp_Internal^[Q]; END--:840--;38 =>MakeExpCopy[CurMod];41 =>--843: BEGIN BEGIN PreHead_Avail; IF PreHead=0 THEN PreHead_GetAvail [] ELSE BEGIN Avail_Mem[PreHead]^. Hh.Rh;Mem[PreHead]^.Hh.Rh_0;DynUsed_DynUsed+1; END; END; Tail_PreHead;PostHead_0;Tt_1;{WHILE TRUE DO BEGIN T_CurTok[]; Mem[Tail]^.Hh.Rh_T;IF Tt#0 THEN BEGIN--849: BEGIN P_Mem[PreHead]^.Hh.Rh;Q_Mem[P]^.Hh.Lh;Tt_0; {IF Eqtb^[Q].Lh MOD 83=41 THEN BEGIN Q_Eqtb^[Q].Rh;IF Q=0 THEN GOTO Label32; WHILE TRUE DO BEGIN P_Mem[P]^.Hh.Rh;IF P=0 THEN BEGIN Tt_Mem[Q]^.Hh.B0; GOTO Label32; END;IF Mem[Q]^.Hh.B0#21 THEN GOTO Label32; Q_Mem[Mem[ INT[Q]+1]^.Hh.Lh]^.Hh.Rh; IF INT[P]>=HiMemMin THEN BEGIN DO Q_Mem[Q]^.Hh.Rh; IF INT[Mem[ INT[Q]+2]^.Hh.Lh]>=Mem[P]^.Hh.Lh THEN EXIT; ENDLOOP; IF INT[Mem[ INT[Q]+2]^.Hh.Lh]>Mem[P]^.Hh.Lh THEN GOTO Label32; END; END ENDLOOP ; END;EXITS Label32 => NULL}; END--:849--; IF INT[Tt]>=22 THEN--844:--BEGIN Mem[Tail]^.Hh.Rh_0; IF INT[Tt]>22 THEN BEGIN PostHead_GetAvail[];Tail_PostHead; Mem[Tail]^.Hh.Rh_T;Tt_0;MacroRef_Mem[ INT[Q]+1]^.Int; Mem[MacroRef]^.Hh.Lh_ INT[Mem[MacroRef]^.Hh.Lh]+1; END ELSE--852: BEGIN P_GetAvail[];Mem[PreHead]^.Hh.Lh_Mem[PreHead]^.Hh.Rh; Mem[PreHead]^.Hh.Rh_P;Mem[P]^.Hh.Lh_T; MacroCall[Mem[ INT[Q]+1]^.Int,PreHead,0];GetXNext[]; GOTO Label20; END--:852--; END--:844--; END;GetXNext[];Tail_T;IF CurCmd=63 THEN--845: BEGIN GetXNext[];ScanExpression[];IF CurCmd#64 THEN--846: BEGIN BackInput[];BackExpr[];CurCmd_63;CurMod_0;CurSym_2232; END--:846-- ELSE BEGIN IF CurType#16 THEN BadSubscript[];CurCmd_42; CurMod_CurExp;CurSym_0; END; END--:845--;IF INT[CurCmd]>42 THEN GOTO Label31; IF INT[CurCmd]<40 THEN GOTO Label31; END ENDLOOP ;EXITS Label31 => NULL};--851:--IF PostHead#0 THEN--853: BEGIN BackInput[];P_GetAvail[];Q_Mem[PostHead]^.Hh.Rh; Mem[PreHead]^.Hh.Lh_Mem[PreHead]^.Hh.Rh;Mem[PreHead]^.Hh.Rh_PostHead; Mem[PostHead]^.Hh.Lh_Q;Mem[PostHead]^.Hh.Rh_P; Mem[P]^.Hh.Lh_Mem[Q]^.Hh.Rh;Mem[Q]^.Hh.Rh_0; MacroCall[MacroRef,PreHead,0]; Mem[MacroRef]^.Hh.Lh_ INT[Mem[MacroRef]^.Hh.Lh]-1;GetXNext[]; GOTO Label20; END--:853--;Q_Mem[PreHead]^.Hh.Rh;BEGIN Mem[PreHead]^.Hh.Rh_Avail; Avail_PreHead;DynUsed_DynUsed-1; END; IF CurCmd=MyVarFlag THEN BEGIN CurType_20;CurExp_Q; GOTO Label30; END; P_FindVariable[Q]; IF P#0 THEN MakeExpCopy[P] ELSE BEGIN Obliterated[Q]; HelpLine^[2]_662;HelpLine^[1]_663;HelpLine^[0]_664; PutGetFlushError[0]; END;FlushNodeList[Q]; GOTO Label30--:851--; END--:843--; ENDCASE =>BEGIN BadExp[634]; GOTO Label20; END ;GetXNext[]; EXITS Label30 => NULL};IF CurCmd=63 THEN IF INT[CurType]>=16 THEN--858:--BEGIN P_StashCurExp[]; GetXNext[];ScanExpression[];IF CurCmd#79 THEN BEGIN--846: BEGIN BackInput[];BackExpr[];CurCmd_63;CurMod_0;CurSym_2232; END--:846--;UnstashCurExp[P]; END ELSE BEGIN Q_StashCurExp[];GetXNext[]; ScanExpression[];IF CurCmd#64 THEN BEGIN MissingErr[93]; BEGIN HelpPtr_3;HelpLine^[2]_666;HelpLine^[1]_667;HelpLine^[0]_564; END;BackError[]; END;R_StashCurExp[];MakeExpCopy[Q];DoBinary[R,70]; DoBinary[P,71];DoBinary[Q,69];GetXNext[]; END; END--:858--;EXIT; EXITS Label20 => NULL} ENDLOOP; END;--:822 --859:-- ScanSuffix: PROCEDURE = BEGIN H, T:Halfword;P:Halfword; H_GetAvail[];T_H;{WHILE TRUE DO BEGIN IF CurCmd=63 THEN--860: BEGIN GetXNext[];ScanExpression[];IF CurType#16 THEN BadSubscript[]; IF CurCmd#64 THEN BEGIN MissingErr[93];BEGIN HelpPtr_3; HelpLine^[2]_668;HelpLine^[1]_667;HelpLine^[0]_564; END;BackError[]; END;CurCmd_42;CurMod_CurExp; END--:860--; IF CurCmd=42 THEN P_NewNumTok[CurMod] ELSE IF(CurCmd=41)OR ( CurCmd=40) THEN BEGIN P_GetAvail[];Mem[P]^.Hh.Lh_CurSym; END ELSE GOTO Label30; Mem[T]^.Hh.Rh_P;T_P;GetXNext[]; END ENDLOOP ;EXITS Label30 => NULL};CurExp_Mem[H]^.Hh.Rh; BEGIN Mem[H]^.Hh.Rh_Avail;Avail_H;DynUsed_DynUsed-1; END; CurType_20; END;--:859----861:-- END.