-- file: MFParsingImpl3.mesa -- Pascal-to-Mesa translator output, translated at October 31, 1985 4:28:02 pm PST DIRECTORY PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFInteraction, MFMemory, MFPaths, MFOctants, MFInput, MFParsing, MFOps; MFParsingImpl3: PROGRAM IMPORTS MFProcArray, MFInteraction, MFMemory, MFPaths, MFOctants, MFInput, MFParsing, MFOps EXPORTS MFParsing = PUBLIC BEGIN OPEN PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFInteraction, MFMemory, MFPaths, MFOctants, MFInput, MFParsing, MFOps; ScanSecondary: PROCEDURE = BEGIN P:Halfword;C, D:Halfword;MacName:Halfword; DO {--Label20:--IF( INT[CurCmd]<30)OR ( INT[CurCmd]>43) THEN BadExp[669];ScanPrimary[]; DO {--Label22:--IF INT[CurCmd]<=55 THEN IF INT[CurCmd]>=52 THEN BEGIN P←StashCurExp[]; C←CurMod;D←CurCmd;IF D=53 THEN BEGIN MacName←CurSym; Mem[C]↑.Hh.Lh← INT[Mem[C]↑.Hh.Lh]+1; END;GetXNext[];ScanPrimary[]; IF D#53 THEN DoBinary[P,C] ELSE BEGIN BackInput[]; BinaryMac[P,C,MacName];Mem[C]↑.Hh.Lh← INT[Mem[C]↑.Hh.Lh]-1;GetXNext[]; GOTO Label20; END; GOTO Label22; END;EXIT; EXITS Label22 => NULL} ENDLOOP;EXIT; EXITS Label20 => NULL} ENDLOOP; END;--:861----863:-- ScanTertiary: PROCEDURE = BEGIN P:Halfword;C, D:Halfword;MacName:Halfword; DO {--Label20:--IF( INT[CurCmd]<30)OR ( INT[CurCmd]>43) THEN BadExp[670];ScanSecondary[]; IF CurType=8 THEN MaterializePen[]; DO {--Label22:--IF INT[CurCmd]<=45 THEN IF INT[CurCmd]>=43 THEN BEGIN P←StashCurExp[]; C←CurMod;D←CurCmd;IF D=44 THEN BEGIN MacName←CurSym; Mem[C]↑.Hh.Lh← INT[Mem[C]↑.Hh.Lh]+1; END;GetXNext[];ScanSecondary[]; IF D#44 THEN DoBinary[P,C] ELSE BEGIN BackInput[]; BinaryMac[P,C,MacName];Mem[C]↑.Hh.Lh← INT[Mem[C]↑.Hh.Lh]-1;GetXNext[]; GOTO Label20; END; GOTO Label22; END;EXIT; EXITS Label22 => NULL} ENDLOOP;EXIT; EXITS Label20 => NULL} ENDLOOP; END;--:863----867:-- ScanExpression: PROCEDURE = BEGIN P, Q, R, Pp, Qq:Halfword;C, D:Halfword; MyVarFlag:PascalInteger[0..82];MacName:Halfword;CycleHit:PascalBoolean;X, Y:Scaled;T:PascalInteger[0..4]; MyVarFlag←VarFlag; DO {--Label20:--IF( INT[CurCmd]<30)OR ( INT[CurCmd]>43) THEN BadExp[673];ScanTertiary[]; DO {--Label22:--{IF INT[CurCmd]<=51 THEN IF INT[CurCmd]>=46 THEN IF(CurCmd#51)OR (MyVarFlag #77) THEN BEGIN P←StashCurExp[];C←CurMod;D←CurCmd; IF D=49 THEN BEGIN MacName←CurSym;Mem[C]↑.Hh.Lh← INT[Mem[C]↑.Hh.Lh]+1; END; IF( INT[D]<48)OR ((D=48)AND ((Mem[P]↑.Hh.B0=14)OR (Mem[P]↑.Hh.B0=9))) THEN--868: BEGIN CycleHit←FALSE;--869:--BEGIN UnstashCurExp[P]; IF CurType=14 THEN P←NewKnot [] ELSE IF CurType=9 THEN P←CurExp ELSE GOTO Label10;Q←P;WHILE Mem[Q]↑.Hh.Rh#P DO Q←Mem[Q]↑.Hh.Rh ENDLOOP ; IF Mem[P]↑.Hh.B0#0 THEN BEGIN R←CopyKnot[P];Mem[Q]↑.Hh.Rh←R;Q←R; END; Mem[P]↑.Hh.B0←4;Mem[Q]↑.Hh.B1←4; END--:869--;DO {--Label25:----873: IF CurCmd=46 THEN--878:--BEGIN T←ScanDirection[]; IF T#4 THEN BEGIN Mem[Q]↑.Hh.B1←T;Mem[ INT[Q]+5]↑.Int←CurExp; IF Mem[Q]↑.Hh.B0=4 THEN BEGIN Mem[Q]↑.Hh.B0←T;Mem[ INT[Q]+3]↑.Int←CurExp; END; END; END--:878--;D←CurCmd;{IF D=47 THEN--880:--BEGIN GetXNext[]; {IF CurCmd=58 THEN--881:--BEGIN GetXNext[];Y←CurCmd; IF CurCmd=59 THEN GetXNext[];ScanPrimary[];--882: IF(CurType#16)OR (CurExp<49152) THEN BEGIN DispErr[0,691]; BEGIN HelpPtr←1;HelpLine↑[0]←692; END;PutGetFlushError[65536]; END--:882--;IF Y=59 THEN CurExp←-CurExp;Mem[ INT[Q]+6]↑.Int←CurExp; IF CurCmd=52 THEN BEGIN GetXNext[];Y←CurCmd; IF CurCmd=59 THEN GetXNext[];ScanPrimary[];--882: IF(CurType#16)OR (CurExp<49152) THEN BEGIN DispErr[0,691]; BEGIN HelpPtr←1;HelpLine↑[0]←692; END;PutGetFlushError[65536]; END--:882--;IF Y=59 THEN CurExp←-CurExp; END;Y←CurExp; END--:881 ELSE IF CurCmd=57 THEN--883:--BEGIN Mem[Q]↑.Hh.B1←1;T←1;GetXNext[]; ScanPrimary[];KnownPair[];Mem[ INT[Q]+5]↑.Int←CurX;Mem[ INT[Q]+6]↑.Int←CurY; IF CurCmd#52 THEN BEGIN X←Mem[ INT[Q]+5]↑.Int;Y←Mem[ INT[Q]+6]↑.Int; END ELSE BEGIN GetXNext[];ScanPrimary[];KnownPair[];X←CurX;Y←CurY; END; END--:883-- ELSE BEGIN Mem[ INT[Q]+6]↑.Int←65536;Y←65536;BackInput[]; GOTO Label30; END; IF CurCmd#47 THEN BEGIN MissingErr[281];BEGIN HelpPtr←1; HelpLine↑[0]←690; END;BackError[]; END;EXITS Label30 => NULL}; END--:880 ELSE IF D#48 THEN GOTO Label26;GetXNext[];IF CurCmd=46 THEN--879: BEGIN T←ScanDirection[];IF Mem[Q]↑.Hh.B1#1 THEN X←CurExp ELSE T←1; END--:879-- ELSE IF Mem[Q]↑.Hh.B1#1 THEN BEGIN T←4;X←0; END--:873--; IF CurCmd=36 THEN--885:--BEGIN CycleHit←TRUE;GetXNext[];Pp←P;Qq←P; IF D=48 THEN IF P=Q THEN BEGIN D←47;Mem[ INT[Q]+6]↑.Int←65536;Y←65536; END; END--:885-- ELSE BEGIN ScanTertiary[];--884: BEGIN IF CurType#9 THEN Pp←NewKnot [] ELSE Pp←CurExp;Qq←Pp; WHILE Mem[Qq]↑.Hh.Rh#Pp DO Qq←Mem[Qq]↑.Hh.Rh ENDLOOP ; IF Mem[Pp]↑.Hh.B0#0 THEN BEGIN R←CopyKnot[Pp];Mem[Qq]↑.Hh.Rh←R;Qq←R; END;Mem[Pp]↑.Hh.B0←4;Mem[Qq]↑.Hh.B1←4; END--:884--; END;--886: BEGIN IF D=48 THEN IF(Mem[ INT[Q]+1]↑.Int#Mem[ INT[Pp]+1]↑.Int)OR (Mem[ INT[Q]+2]↑.Int#Mem[ INT[Pp]+2]↑.Int) THEN BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[133]; Print[693]; END;BEGIN HelpPtr←3;HelpLine↑[2]←694;HelpLine↑[1]←695; HelpLine↑[0]←696; END;PutGetError[];D←47;Mem[ INT[Q]+6]↑.Int←65536;Y←65536; END;--888: IF Mem[Pp]↑.Hh.B1=4 THEN IF(T=3)OR (T=2) THEN BEGIN Mem[Pp]↑.Hh.B1←T; Mem[ INT[Pp]+5]↑.Int←X; END--:888--;IF D=48 THEN--889: BEGIN IF Mem[Q]↑.Hh.B0=4 THEN IF Mem[Q]↑.Hh.B1=4 THEN BEGIN Mem[Q]↑.Hh.B0← 3;Mem[ INT[Q]+3]↑.Int←65536; END; IF Mem[Pp]↑.Hh.B1=4 THEN IF T=4 THEN BEGIN Mem[Pp]↑.Hh.B1←3; Mem[ INT[Pp]+5]↑.Int←65536; END;Mem[Q]↑.Hh.B1←Mem[Pp]↑.Hh.B1; Mem[Q]↑.Hh.Rh←Mem[Pp]↑.Hh.Rh;Mem[ INT[Q]+5]↑.Int←Mem[ INT[Pp]+5]↑.Int; Mem[ INT[Q]+6]↑.Int←Mem[ INT[Pp]+6]↑.Int;FreeNode[Pp,7];IF Qq=Pp THEN Qq←Q; END--:889-- ELSE BEGIN--887: IF Mem[Q]↑.Hh.B1=4 THEN IF(Mem[Q]↑.Hh.B0=3)OR (Mem[Q]↑.Hh.B0=2) THEN BEGIN Mem[Q]↑.Hh.B1←Mem[Q]↑.Hh.B0;Mem[ INT[Q]+5]↑.Int←Mem[ INT[Q]+3]↑.Int; END--:887--; Mem[Q]↑.Hh.Rh←Pp;Mem[ INT[Pp]+4]↑.Int←Y;IF T#4 THEN BEGIN Mem[ INT[Pp]+3]↑.Int←X; Mem[Pp]↑.Hh.B0←T; END; END;Q←Qq; END--:886--; IF INT[CurCmd]>=46 THEN IF INT[CurCmd]<=48 THEN IF NOT CycleHit THEN GOTO Label25; EXITS Label26 => NULL};--890:--IF CycleHit THEN BEGIN IF D=48 THEN P←Q; END ELSE BEGIN Mem[P]↑.Hh.B0←0; IF Mem[P]↑.Hh.B1=4 THEN BEGIN Mem[P]↑.Hh.B1←3;Mem[ INT[P]+5]↑.Int←65536; END; Mem[Q]↑.Hh.B1←0;IF Mem[Q]↑.Hh.B0=4 THEN BEGIN Mem[Q]↑.Hh.B0←3; Mem[ INT[Q]+3]↑.Int←65536; END;Mem[Q]↑.Hh.Rh←P; END;MakeChoices[P];CurType←9; CurExp←P--:890--;EXIT; EXITS Label25 => NULL} ENDLOOP; END--:868-- ELSE BEGIN GetXNext[];ScanTertiary[]; IF D#49 THEN DoBinary[P,C] ELSE BEGIN BackInput[]; BinaryMac[P,C,MacName];Mem[C]↑.Hh.Lh← INT[Mem[C]↑.Hh.Lh]-1;GetXNext[]; GOTO Label20; END; END; GOTO Label22; END;EXITS Label10 => NULL};EXIT; EXITS Label22 => NULL} ENDLOOP;EXIT; EXITS Label20 => NULL} ENDLOOP; END;--:867----891:-- GetBoolean: PROCEDURE = BEGIN GetXNext[];ScanExpression[]; IF CurType#2 THEN BEGIN DispErr[0,697];BEGIN HelpPtr←2; HelpLine↑[1]←698;HelpLine↑[0]←699; END;PutGetFlushError[31]; CurType←2; END; END;--:891----224:-- END.