-- file: TexBuildPage2Impl.mesa -- Pascal-to-Mesa translator output, translated at September 27, 1985 10:21:38 am PDT DIRECTORY PascalBasic, TexTypes, TexInteraction, TexMemory, TexSymbols, TexOps, TexParagraph, TexBuildPage, TexScan, TexDvi, TexRest, TexSysdepInline; TexBuildPage2Impl: PROGRAM IMPORTS TexTypes, TexInteraction, TexMemory, TexSymbols, TexOps, TexParagraph, TexBuildPage, TexScan, TexDvi, TexRest, TexSysdepInline EXPORTS TexBuildPage = PUBLIC BEGIN OPEN PascalBasic, TexTypes, TexInteraction, TexMemory, TexSymbols, TexOps, TexParagraph, TexBuildPage, TexScan, TexDvi, TexRest, TexSysdepInline; --:942----968:-- PrunePageTop: PROCEDURE[P: Halfword] RETURNS[PrunePageTopResult: Halfword] = BEGIN PrevP:Halfword;Q:Halfword; PrevP_64997;Mem[64997]^.Hh.Rh_P; WHILE P#0 DO SELECT Mem[P]^.Hh.B0 FROM 0,1,2 =>--969: BEGIN Q_NewSkipParam[10];Mem[PrevP]^.Hh.Rh_Q;Mem[Q]^.Hh.Rh_P; IF Mem[TempPtr+1]^.Int>Mem[P+3]^.Int THEN Mem[TempPtr+1]^.Int_Mem[ TempPtr+1]^.Int-Mem[P+3]^.Int ELSE Mem[TempPtr+1]^.Int_0;P_0; END--:969--; 8,4,3 =>BEGIN PrevP_P;P_Mem[PrevP]^.Hh.Rh; END;10,11,12 =>BEGIN Q_P; P_Mem[Q]^.Hh.Rh;Mem[Q]^.Hh.Rh_0;Mem[PrevP]^.Hh.Rh_P;FlushNodeList[Q]; END; ENDCASE =>Confusion[812] ENDLOOP ;PrunePageTopResult_Mem[64997]^.Hh.Rh; END;--:968 --970:-- VertBreak: PROCEDURE[P: Halfword,H,D: Scaled] RETURNS[VertBreakResult: Halfword] = BEGIN PrevP:Halfword;Q, R:Halfword;Pi:PascalInteger;B:PascalInteger; LeastCost:PascalInteger;BestPlace:Halfword;PrevDp:Scaled;T:SmallNumber; PrevP_P;LeastCost_1073741823;ActiveWidth^[1]_0; ActiveWidth^[2]_0;ActiveWidth^[3]_0;ActiveWidth^[4]_0; ActiveWidth^[5]_0;ActiveWidth^[6]_0;PrevDp_0; {WHILE TRUE DO BEGIN--972:-- {{IF P=0 THEN Pi_-10000 ELSE--973: SELECT Mem[P]^.Hh.B0 FROM 0,1,2 =>BEGIN ActiveWidth^[1]_ ActiveWidth^[1]+PrevDp+Mem[P+3]^.Int;PrevDp_Mem[P+2]^.Int; GOTO Label45; END;8 =>--1364: GOTO Label45--:1364--;10 =>IF( INT[Mem[PrevP]^.Hh.B0]<9) THEN Pi_0 ELSE GOTO Label90; 11 =>BEGIN IF Mem[P]^.Hh.Rh=0 THEN T_12 ELSE T_Mem[Mem[P]^.Hh.Rh]^.Hh.B0; IF T=10 THEN Pi_0 ELSE GOTO Label90; END;12 =>Pi_Mem[P+1]^.Int;4,3 => GOTO Label45; ENDCASE =>Confusion[813]--:973--;--974:--IF Pi<10000 THEN BEGIN--975: IF ActiveWidth^[1]ActiveWidth^[6] THEN B_ 1073741823 ELSE B_Badness[ActiveWidth^[1]-H,ActiveWidth^[6]]--:975--; IF B<1073741823 THEN IF Pi<=-10000 THEN B_Pi ELSE IF B<10000 THEN B_ B+Pi ELSE B_100000;IF B<=LeastCost THEN BEGIN BestPlace_P; LeastCost_B;BestHeightPlusDepth_ActiveWidth^[1]+PrevDp; END; IF(B=1073741823)OR (Pi<=-10000) THEN GOTO Label30; END--:974--; IF( INT[Mem[P]^.Hh.B0]<10)OR ( INT[Mem[P]^.Hh.B0]>11) THEN GOTO Label45;EXITS Label90 => NULL};--976: IF Mem[P]^.Hh.B0=11 THEN Q_P ELSE BEGIN Q_Mem[P+1]^.Hh.Lh; ActiveWidth^[2+Mem[Q]^.Hh.B0]_ActiveWidth^[2+Mem[Q]^.Hh.B0]+Mem[Q+2]^.Int; ActiveWidth^[6]_ActiveWidth^[6]+Mem[Q+3]^.Int; IF(Mem[Q]^.Hh.B1#0)AND (Mem[Q+3]^.Int#0) THEN BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[134];Print[814]; END;BEGIN HelpPtr_4;HelpLine^[3]_815; HelpLine^[2]_816;HelpLine^[1]_817;HelpLine^[0]_781; END;Error[]; R_NewSpec[Q];Mem[R]^.Hh.B1_0;DeleteGlueRef[Q];Mem[P+1]^.Hh.Lh_R; END; END;ActiveWidth^[1]_ActiveWidth^[1]+PrevDp+Mem[Q+1]^.Int; PrevDp_0--:976--; EXITS Label45 => NULL};IF PrevDp>D THEN BEGIN ActiveWidth^[1]_ActiveWidth^[1]+PrevDp-D; PrevDp_D; END;--:972--PrevP_P;P_Mem[PrevP]^.Hh.Rh; END ENDLOOP ; EXITS Label30 => NULL};VertBreakResult_BestPlace; END;--:970----977:-- Vsplit: PROCEDURE[N: EightBits, H: Scaled] RETURNS[VsplitResult: Halfword] = BEGIN V:Halfword;P:Halfword;Q:Halfword; V_Eqtb^[3822+N].Hh.Rh; IF CurMark^[3]#0 THEN BEGIN DeleteTokenRef[CurMark^[3]]; CurMark^[3]_0;DeleteTokenRef[CurMark^[4]];CurMark^[4]_0; END;--978: {IF V=0 THEN BEGIN VsplitResult_0; GOTO Label10; END; IF Mem[V]^.Hh.B0#1 THEN BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[134]; Print[210]; END;PrintEsc[818];Print[819];PrintEsc[820]; BEGIN HelpPtr_2;HelpLine^[1]_821;HelpLine^[0]_822; END;Error[]; VsplitResult_0; GOTO Label10; END--:978--; Q_VertBreak[Mem[V+5]^.Hh.Rh,H,Eqtb^[5207].Int];--979:--P_Mem[V+5]^.Hh.Rh; {IF P=Q THEN Mem[V+5]^.Hh.Rh_0 ELSE WHILE TRUE DO BEGIN IF Mem[P]^.Hh.B0=4 THEN IF CurMark^[3]=0 THEN BEGIN CurMark^[3]_Mem[P+1]^.Int; CurMark^[4]_CurMark^[3]; Mem[CurMark^[3]]^.Hh.Lh_Mem[CurMark^[3]]^.Hh.Lh+2; END ELSE BEGIN DeleteTokenRef[CurMark^[4]];CurMark^[4]_Mem[P+1]^.Int; Mem[CurMark^[4]]^.Hh.Lh_Mem[CurMark^[4]]^.Hh.Lh+1; END; IF Mem[P]^.Hh.Rh=Q THEN BEGIN Mem[P]^.Hh.Rh_0; GOTO Label30; END; P_Mem[P]^.Hh.Rh; END ENDLOOP ;EXITS Label30 => NULL};--:979--Q_PrunePageTop[Q];P_Mem[V+5]^.Hh.Rh; FreeNode[V,7]; IF Q=0 THEN Eqtb^[3822+N].Hh.Rh_0 ELSE Eqtb^[3822+N].Hh.Rh_Vpackage[Q,0, 1,1073741823];VsplitResult_Vpackage[P,H,0,Eqtb^[5207].Int];EXITS Label10 => NULL}; END;--:977----985: PrintTotals: PROCEDURE = BEGIN PrintScaled[PageSoFar^[1]]; IF PageSoFar^[2]#0 THEN BEGIN Print[184];PrintScaled[PageSoFar^[2]]; Print[210]; END;IF PageSoFar^[3]#0 THEN BEGIN Print[184]; PrintScaled[PageSoFar^[3]];Print[183]; END; IF PageSoFar^[4]#0 THEN BEGIN Print[184];PrintScaled[PageSoFar^[4]]; Print[831]; END;IF PageSoFar^[5]#0 THEN BEGIN Print[184]; PrintScaled[PageSoFar^[5]];Print[832]; END; IF PageSoFar^[6]#0 THEN BEGIN Print[185];PrintScaled[PageSoFar^[6]]; END; END;--:985----987:-- FreezePageSpecs: PROCEDURE[S: SmallNumber] = BEGIN PageContents_S;PageSoFar^[0]_Eqtb^[5205].Int; PageMaxDepth_Eqtb^[5206].Int;PageSoFar^[7]_0;PageSoFar^[1]_0; PageSoFar^[2]_0;PageSoFar^[3]_0;PageSoFar^[4]_0;PageSoFar^[5]_0; PageSoFar^[6]_0;LeastPageCost_1073741823; IF Eqtb^[4800].Int>0 THEN BEGIN BeginDiagnostic[];PrintNl[840]; PrintScaled[PageSoFar^[0]];Print[841];PrintScaled[PageMaxDepth]; EndDiagnostic[FALSE]; END; END;--:987----992: BoxError: PROCEDURE[N: EightBits] = BEGIN Error[];BeginDiagnostic[]; PrintNl[693];ShowBox[Eqtb^[3822+N].Hh.Rh];EndDiagnostic[TRUE]; FlushNodeList[Eqtb^[3822+N].Hh.Rh];Eqtb^[3822+N].Hh.Rh_0; END;--:992 --993:-- EnsureVbox: PROCEDURE[N: EightBits] = BEGIN P:Halfword; P_Eqtb^[3822+N].Hh.Rh; IF P#0 THEN IF Mem[P]^.Hh.B0=0 THEN BEGIN BEGIN IF Interaction=3 THEN NULL; PrintNl[134];Print[842]; END;BEGIN HelpPtr_3;HelpLine^[2]_843; HelpLine^[1]_844;HelpLine^[0]_845; END;BoxError[N]; END; END;--:993 --994:----1012:-- FireUp: PROCEDURE[C: Halfword] = BEGIN P, Q, R, S:Halfword;PrevP:Halfword;N:PascalInteger[0..255];Wait:PascalBoolean; SaveVbadness:PascalInteger;SaveVfuzz:Scaled;SaveSplitTopSkip:Halfword; --1013: IF Mem[BestPageBreak]^.Hh.B0=12 THEN BEGIN GeqWordDefine[4806,Mem[ BestPageBreak+1]^.Int];Mem[BestPageBreak+1]^.Int_10000; END ELSE GeqWordDefine[4806,10000]--:1013--; IF CurMark^[2]#0 THEN BEGIN IF CurMark^[0]#0 THEN DeleteTokenRef[ CurMark^[0]];CurMark^[0]_CurMark^[2]; Mem[CurMark^[0]]^.Hh.Lh_Mem[CurMark^[0]]^.Hh.Lh+1; DeleteTokenRef[CurMark^[1]];CurMark^[1]_0; END;--1014: IF C=BestPageBreak THEN BestPageBreak_0;--1015: IF Eqtb^[4077].Hh.Rh#0 THEN BEGIN BEGIN IF Interaction=3 THEN NULL; PrintNl[134];Print[210]; END;PrintEsc[277];Print[856]; BEGIN HelpPtr_2;HelpLine^[1]_857;HelpLine^[0]_845; END; BoxError[255]; END--:1015--;InsertPenalties_0; SaveSplitTopSkip_Eqtb^[3036].Hh.Rh;--1018:--R_Mem[65000]^.Hh.Rh; WHILE R#65000 DO BEGIN IF Mem[R+2]^.Hh.Lh#0 THEN BEGIN N_Mem[R]^.Hh.B1; EnsureVbox[N]; IF Eqtb^[3822+N].Hh.Rh=0 THEN Eqtb^[3822+N].Hh.Rh_NewNullBox[]; P_Eqtb^[3822+N].Hh.Rh+5;WHILE Mem[P]^.Hh.Rh#0 DO P_Mem[P]^.Hh.Rh ENDLOOP ; Mem[R+2]^.Hh.Rh_P; END;R_Mem[R]^.Hh.Rh; END--:1018-- ENDLOOP ;Q_64996; Mem[Q]^.Hh.Rh_0;PrevP_64998;P_Mem[PrevP]^.Hh.Rh; WHILE P#BestPageBreak DO BEGIN IF Mem[P]^.Hh.B0=3 THEN--1020: BEGIN R_Mem[65000]^.Hh.Rh; WHILE Mem[R]^.Hh.B1#Mem[P]^.Hh.B1 DO R_Mem[R]^.Hh.Rh ENDLOOP ; IF Mem[R+2]^.Hh.Lh=0 THEN Wait_TRUE ELSE BEGIN Wait_FALSE; S_Mem[P+4]^.Hh.Lh;Mem[Mem[R+2]^.Hh.Rh]^.Hh.Rh_S;S_Mem[R+2]^.Hh.Rh; IF Mem[R+2]^.Hh.Lh=P THEN--1021: BEGIN IF Mem[R]^.Hh.B0=1 THEN IF(Mem[R+1]^.Hh.Lh=P)AND (Mem[R+1]^.Hh.Rh#0) THEN BEGIN WHILE Mem[S]^.Hh.Rh#Mem[R+1]^.Hh.Rh DO S_Mem[S]^.Hh.Rh ENDLOOP ; Eqtb^[3036].Hh.Rh_Mem[P+4]^.Hh.Rh; Mem[P+4]^.Hh.Lh_PrunePageTop[Mem[R+1]^.Hh.Rh]; IF Mem[P+4]^.Hh.Lh#0 THEN BEGIN TempPtr_Vpackage[Mem[P+4]^.Hh.Lh,0,1, 1073741823];Mem[P+3]^.Int_Mem[TempPtr+3]^.Int+Mem[TempPtr+2]^.Int; FreeNode[TempPtr,7];Wait_TRUE; END;Mem[S]^.Hh.Rh_0; END; Mem[R+2]^.Hh.Lh_0;N_Mem[R]^.Hh.B1; TempPtr_Mem[Eqtb^[3822+N].Hh.Rh+5]^.Hh.Rh; FreeNode[Eqtb^[3822+N].Hh.Rh,7]; Eqtb^[3822+N].Hh.Rh_Vpackage[TempPtr,0,1,1073741823]; END--:1021 ELSE BEGIN WHILE Mem[S]^.Hh.Rh#0 DO S_Mem[S]^.Hh.Rh ENDLOOP ;Mem[R+2]^.Hh.Rh_S; END; END;--1022:--Mem[PrevP]^.Hh.Rh_Mem[P]^.Hh.Rh;Mem[P]^.Hh.Rh_0; IF Wait THEN BEGIN Mem[Q]^.Hh.Rh_P;Q_P; InsertPenalties_InsertPenalties+1; END ELSE BEGIN DeleteGlueRef[Mem[P+4]^.Hh.Rh];FreeNode[P,5]; END; P_PrevP--:1022--; END--:1020-- ELSE IF Mem[P]^.Hh.B0=4 THEN--1016: BEGIN IF CurMark^[1]=0 THEN BEGIN CurMark^[1]_Mem[P+1]^.Int; Mem[CurMark^[1]]^.Hh.Lh_Mem[CurMark^[1]]^.Hh.Lh+1; END; IF CurMark^[2]#0 THEN DeleteTokenRef[CurMark^[2]]; CurMark^[2]_Mem[P+1]^.Int; Mem[CurMark^[2]]^.Hh.Lh_Mem[CurMark^[2]]^.Hh.Lh+1; END--:1016--;PrevP_P; P_Mem[PrevP]^.Hh.Rh; END ENDLOOP ;Eqtb^[3036].Hh.Rh_SaveSplitTopSkip;--1017: IF P#0 THEN BEGIN IF Mem[64999]^.Hh.Rh=0 THEN IF NestPtr=0 THEN CurList.TailField_PageTail ELSE Nest^[0].TailField_PageTail; Mem[PageTail]^.Hh.Rh_Mem[64999]^.Hh.Rh;Mem[64999]^.Hh.Rh_P; Mem[PrevP]^.Hh.Rh_0; END;SaveVbadness_Eqtb^[4794].Int; Eqtb^[4794].Int_10000;SaveVfuzz_Eqtb^[5210].Int; Eqtb^[5210].Int_1073741823; Eqtb^[4077].Hh.Rh_Vpackage[Mem[64998]^.Hh.Rh,BestSize,0,PageMaxDepth]; Eqtb^[4794].Int_SaveVbadness;Eqtb^[5210].Int_SaveVfuzz; IF LastGlue#65515 THEN DeleteGlueRef[LastGlue];--991: PageContents_0;PageTail_64998;Mem[64998]^.Hh.Rh_0;LastGlue_65515; LastPenalty_0;LastKern_0;PageSoFar^[7]_0;PageMaxDepth_0--:991--; IF Q#64996 THEN BEGIN Mem[64998]^.Hh.Rh_Mem[64996]^.Hh.Rh;PageTail_Q; END--:1017--;--1019:--R_Mem[65000]^.Hh.Rh; WHILE R#65000 DO BEGIN Q_Mem[R]^.Hh.Rh;FreeNode[R,4];R_Q; END ENDLOOP ; Mem[65000]^.Hh.Rh_65000--:1019----:1014--; IF(CurMark^[0]#0)AND (CurMark^[1]=0) THEN BEGIN CurMark^[1]_CurMark^[0]; Mem[CurMark^[0]]^.Hh.Lh_Mem[CurMark^[0]]^.Hh.Lh+1; END; {IF Eqtb^[3557].Hh.Rh#0 THEN IF DeadCycles>=Eqtb^[4807].Int THEN--1024: BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[134];Print[858]; END; PrintInt[DeadCycles];Print[859];BEGIN HelpPtr_3;HelpLine^[2]_860; HelpLine^[1]_861;HelpLine^[0]_862; END;Error[]; END--:1024-- ELSE--1025: BEGIN OutputActive_TRUE;DeadCycles_DeadCycles+1;PushNest[]; CurList.ModeField_-1;CurList.AuxField_-65536000; CurList.MlField_-Line;BeginTokenList[Eqtb^[3557].Hh.Rh,6]; NewSaveLevel[8];NormalParagraph[];ScanLeftBrace[]; GOTO Label10; END--:1025--; --1023: BEGIN IF Mem[64998]^.Hh.Rh#0 THEN BEGIN IF Mem[64999]^.Hh.Rh=0 THEN IF NestPtr=0 THEN CurList.TailField_PageTail ELSE Nest^[0].TailField_ PageTail ELSE Mem[PageTail]^.Hh.Rh_Mem[64999]^.Hh.Rh; Mem[64999]^.Hh.Rh_Mem[64998]^.Hh.Rh;Mem[64998]^.Hh.Rh_0;PageTail_64998; END;ShipOut[Eqtb^[4077].Hh.Rh];Eqtb^[4077].Hh.Rh_0; END--:1023--;EXITS Label10 => NULL}; END; AppSpace: PROCEDURE = BEGIN P:Halfword;Q:Halfword;F:InternalFontNumber;K:PascalInteger[0..FontMemSize]; IF(CurList.AuxField>=2000)AND (Eqtb^[3039].Hh.Rh#0) THEN Q_ NewParamGlue[13] ELSE BEGIN IF Eqtb^[3038].Hh.Rh#0 THEN P_Eqtb^[3038]. Hh.Rh ELSE--1042:--BEGIN P_FontGlue^[Eqtb^[4078].Hh.Rh]; IF P=0 THEN BEGIN F_Eqtb^[4078].Hh.Rh;P_NewSpec[0];K_ParamBase^[F]+2; Mem[P+1]^.Int_FontInfo^[K].Int;Mem[P+2]^.Int_FontInfo^[K+1].Int; Mem[P+3]^.Int_FontInfo^[K+2].Int;FontGlue^[F]_P; END; END--:1042--; P_NewSpec[P];--1044: IF CurList.AuxField>=2000 THEN Mem[P+1]^.Int_Mem[P+1]^.Int+FontInfo^[ 7+ParamBase^[Eqtb^[4078].Hh.Rh]].Int; Mem[P+2]^.Int_XnOverD[Mem[P+2]^.Int,CurList.AuxField,1000]; Mem[P+3]^.Int_XnOverD[Mem[P+3]^.Int,1000,CurList.AuxField]--:1044--; Q_NewGlue[P];Mem[P]^.Hh.Rh_0; END;Mem[CurList.TailField]^.Hh.Rh_Q; CurList.TailField_Q; END;--:1043----1047:-- InsertDollarSign: PROCEDURE = BEGIN BackInput[];CurTok_804;BEGIN IF Interaction=3 THEN NULL;PrintNl[134]; Print[870]; END;BEGIN HelpPtr_2;HelpLine^[1]_871;HelpLine^[0]_872; END;InsError[]; END;--:1047----1049:-- YouCant: PROCEDURE = BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[134];Print[544]; END; PrintCmdChr[CurCmd,CurChr];Print[873]; PrintMode[CurList.ModeField]; END;--:1049----1050: ReportIllegalCase: PROCEDURE = BEGIN YouCant[];BEGIN HelpPtr_4; HelpLine^[3]_874;HelpLine^[2]_875;HelpLine^[1]_876;HelpLine^[0]_877; END;Error[]; END;--:1050----1051:-- Privileged: PROCEDURE RETURNS[PrivilegedResult: PascalBoolean] = BEGIN IF INT[CurList.ModeField]>0 THEN PrivilegedResult_TRUE ELSE BEGIN ReportIllegalCase[];PrivilegedResult_FALSE; END; END;--:1051----1054: ItsAllOver: PROCEDURE RETURNS[ItsAllOverResult: PascalBoolean] = BEGIN {IF Privileged [] THEN BEGIN IF(64998=PageTail)AND (CurList. HeadField=CurList.TailField)AND (DeadCycles=0) THEN BEGIN ItsAllOverResult _TRUE; GOTO Label10; END;BackInput[]; BEGIN Mem[CurList.TailField]^.Hh.Rh_NewNullBox[]; CurList.TailField_Mem[CurList.TailField]^.Hh.Rh; END; Mem[CurList.TailField+1]^.Int_Eqtb^[5204].Int; BEGIN Mem[CurList.TailField]^.Hh.Rh_NewGlue[8]; CurList.TailField_Mem[CurList.TailField]^.Hh.Rh; END; BEGIN Mem[CurList.TailField]^.Hh.Rh_NewPenalty[-1073741824]; CurList.TailField_Mem[CurList.TailField]^.Hh.Rh; END;BuildPage[]; END; ItsAllOverResult_FALSE;EXITS Label10 => NULL}; END;--:1054----1060:-- DeleteLast: PROCEDURE = BEGIN P:Halfword; IF(CurList.ModeField=1)AND (CurList.TailField=CurList. HeadField) THEN--1106: BEGIN IF(CurChr#10)OR (LastGlue#65515) THEN BEGIN YouCant[]; BEGIN HelpPtr_2;HelpLine^[1]_924;HelpLine^[0]_940; END; IF CurChr=11 THEN HelpLine^[0]_(941) ELSE IF CurChr#10 THEN HelpLine ^[0]_(942);Error[]; END; END--:1106 ELSE BEGIN IF NOT ( INT[CurList.TailField]>=HiMemMin) THEN IF Mem[CurList. TailField]^.Hh.B0=CurChr THEN BEGIN P_CurList.HeadField; WHILE Mem[P]^.Hh.Rh#CurList.TailField DO P_Mem[P]^.Hh.Rh ENDLOOP ; Mem[P]^.Hh.Rh_0;FlushNodeList[CurList.TailField]; CurList.TailField_P; END; END; END;--:1105----1110:-- END.