-- file: TexBuildPageImpl.mesa -- Pascal-to-Mesa translator output, translated at September 27, 1985 10:21:38 am PDT DIRECTORY PascalBasic, TexTypes, TexInteraction, TexMemory, TexSymbols, TexScan, TexDvi, TexOps, TexBuildPage, TexRest, TexSysdepInline; TexBuildPageImpl: PROGRAM IMPORTS TexTypes, TexInteraction, TexMemory, TexSymbols, TexBuildPage, TexRest, TexSysdepInline EXPORTS TexBuildPage = PUBLIC BEGIN OPEN PascalBasic, TexTypes, TexInteraction, TexMemory, TexSymbols, TexScan, TexDvi, TexOps, TexBuildPage, TexRest, TexSysdepInline; --:555----592:-- TotalPages: PascalInteger; MaxV: Scaled; MaxH: Scaled; MaxPush: PascalInteger; LastBop: PascalInteger; DeadCycles: PascalInteger; DoingLeaders: PascalBoolean; C: Quarterword; F: Quarterword; RuleHt: Scaled; RuleDp: Scaled; RuleWd: Scaled; G: Halfword; Lq: PascalInteger; Lr: PascalInteger; --:1012-- BuildPage: PROCEDURE = BEGIN P:Halfword; Q, R:Halfword;B, C:PascalInteger;Pi:PascalInteger;N:PascalInteger[0..255];Delta, H, W:Scaled; {IF (Mem[64999]^.Hh.Rh=0)OR OutputActive THEN GOTO Label10; DO --998:-- DO {--Label22:--P_Mem[64999]^.Hh.Rh;--996: IF LastGlue#65515 THEN DeleteGlueRef[LastGlue];LastPenalty_0; LastKern_0;IF Mem[P]^.Hh.B0=10 THEN BEGIN LastGlue_Mem[P+1]^.Hh.Lh; Mem[LastGlue]^.Hh.Rh_Mem[LastGlue]^.Hh.Rh+1; END ELSE BEGIN LastGlue_65515; IF Mem[P]^.Hh.B0=12 THEN LastPenalty_Mem[P+1]^.Int ELSE IF Mem[P]^.Hh.B0=11 THEN LastKern_Mem[P+1]^.Int; END--:996--;--997:----1000: {{{{SELECT Mem[P]^.Hh.B0 FROM 0,1,2 =>IF INT[PageContents]<2 THEN--1001: BEGIN IF PageContents=0 THEN FreezePageSpecs[2] ELSE PageContents_2; Q_NewSkipParam[9];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; Mem[Q]^.Hh.Rh_P;Mem[64999]^.Hh.Rh_Q; GOTO Label22; END--:1001-- ELSE--1002: BEGIN PageSoFar^[1]_PageSoFar^[1]+PageSoFar^[7]+Mem[P+3]^.Int; PageSoFar^[7]_Mem[P+2]^.Int; GOTO Label80; END--:1002--;8 =>--1363:-- GOTO Label80--:1363--; 10 =>IF INT[PageContents]<2 THEN GOTO Label31 ELSE IF( INT[Mem[PageTail]^.Hh.B0]<9) THEN Pi_0 ELSE GOTO Label90; 11 =>IF INT[PageContents]<2 THEN GOTO Label31 ELSE IF Mem[P]^.Hh.Rh=0 THEN GOTO Label10 ELSE IF Mem[Mem[P]^.Hh.Rh]^.Hh.B0=10 THEN Pi_0 ELSE GOTO Label90; 12 =>IF INT[PageContents]<2 THEN GOTO Label31 ELSE Pi_Mem[P+1]^.Int;4 => GOTO Label80; 3 =>--1008:--BEGIN IF PageContents=0 THEN FreezePageSpecs[1]; N_Mem[P]^.Hh.B1;R_65000; WHILE INT[N]>=Mem[Mem[R]^.Hh.Rh]^.Hh.B1 DO R_Mem[R]^.Hh.Rh ENDLOOP ;N_N; IF Mem[R]^.Hh.B1#N THEN--1009:--BEGIN Q_GetNode[4]; Mem[Q]^.Hh.Rh_Mem[R]^.Hh.Rh;Mem[R]^.Hh.Rh_Q;R_Q;Mem[R]^.Hh.B1_N; Mem[R]^.Hh.B0_0;EnsureVbox[N]; IF Eqtb^[3822+N].Hh.Rh=0 THEN Mem[R+3]^.Int_0 ELSE Mem[R+3]^.Int_Mem[Eqtb ^[3822+N].Hh.Rh+3]^.Int+Mem[Eqtb^[3822+N].Hh.Rh+2]^.Int;Mem[R+2]^.Hh.Lh_0; Q_Eqtb^[3044+N].Hh.Rh; IF Eqtb^[4817+N].Int=1000 THEN H_Mem[R+3]^.Int ELSE H_XOverN[Mem[R+3]^. Int,1000]*Eqtb^[4817+N].Int; PageSoFar^[0]_PageSoFar^[0]-H-Mem[Q+1]^.Int; PageSoFar^[2+Mem[Q]^.Hh.B0]_PageSoFar^[2+Mem[Q]^.Hh.B0]+Mem[Q+2]^.Int; PageSoFar^[6]_PageSoFar^[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[851]; END;PrintEsc[263];PrintInt[N]; BEGIN HelpPtr_3;HelpLine^[2]_852;HelpLine^[1]_853;HelpLine^[0]_781; END;Error[]; END; END--:1009--; IF Mem[R]^.Hh.B0=1 THEN InsertPenalties_InsertPenalties+Mem[P+1]^.Int ELSE BEGIN Mem[R+2]^.Hh.Rh_P; Delta_PageSoFar^[0]-PageSoFar^[1]-PageSoFar^[7]+PageSoFar^[6]; IF Eqtb^[4817+N].Int=1000 THEN H_Mem[P+3]^.Int ELSE H_XOverN[Mem[P+3]^. Int,1000]*Eqtb^[4817+N].Int; IF((H<=0)OR (H<=Delta))AND (Mem[P+3]^.Int+Mem[R+3]^.Int<=Eqtb^[5221+N].Int) THEN BEGIN PageSoFar^[0]_PageSoFar^[0]-H; Mem[R+3]^.Int_Mem[R+3]^.Int+Mem[P+3]^.Int; END ELSE--1010: BEGIN IF Eqtb^[4817+N].Int<=0 THEN W_1073741823 ELSE BEGIN W_ PageSoFar^[0]-PageSoFar^[1]-PageSoFar^[7]; IF Eqtb^[4817+N].Int#1000 THEN W_XOverN[W,Eqtb^[4817+N].Int]*1000; END; IF W>Eqtb^[5221+N].Int-Mem[R+3]^.Int THEN W_Eqtb^[5221+N].Int-Mem[R+3]^.Int ;Q_VertBreak[Mem[P+4]^.Hh.Lh,W,Mem[P+2]^.Int]; Mem[R+3]^.Int_Mem[R+3]^.Int+BestHeightPlusDepth; IF Eqtb^[4800].Int>0 THEN--1011:--BEGIN BeginDiagnostic[];PrintNl[854]; PrintInt[N];Print[855];PrintScaled[W];PrintChar[44]; PrintScaled[BestHeightPlusDepth];Print[790]; IF Q=0 THEN PrintInt[-10000] ELSE IF Mem[Q]^.Hh.B0=12 THEN PrintInt[Mem[ Q+1]^.Int] ELSE PrintChar[48];EndDiagnostic[FALSE]; END--:1011--; IF Eqtb^[4817+N].Int#1000 THEN BestHeightPlusDepth_XOverN[ BestHeightPlusDepth,1000]*Eqtb^[4817+N].Int; PageSoFar^[0]_PageSoFar^[0]-BestHeightPlusDepth;Mem[R]^.Hh.B0_1; Mem[R+1]^.Hh.Rh_Q;Mem[R+1]^.Hh.Lh_P; IF Q=0 THEN InsertPenalties_InsertPenalties-10000 ELSE IF Mem[Q]^.Hh. B0=12 THEN InsertPenalties_InsertPenalties+Mem[Q+1]^.Int; END--:1010--; END; GOTO Label80; END--:1008--; ENDCASE =>Confusion[846]--:1000--;--1005: IF Pi<10000 THEN BEGIN--1007: IF PageSoFar^[1]PageSoFar^[6] THEN B_1073741823 ELSE B_Badness[ PageSoFar^[1]-PageSoFar^[0],PageSoFar^[6]]--:1007--; IF B<1073741823 THEN IF Pi<=-10000 THEN C_Pi ELSE IF B<10000 THEN C_ B+Pi+InsertPenalties ELSE C_100000 ELSE C_B; IF InsertPenalties>=10000 THEN C_1073741823; IF Eqtb^[4800].Int>0 THEN--1006:--BEGIN BeginDiagnostic[];PrintNl[37]; Print[786];PrintTotals[];Print[849];PrintScaled[PageSoFar^[0]]; Print[789];IF B=1073741823 THEN PrintChar[42] ELSE PrintInt[B]; Print[790];PrintInt[Pi];Print[850]; IF C=1073741823 THEN PrintChar[42] ELSE PrintInt[C]; IF C<=LeastPageCost THEN PrintChar[35];EndDiagnostic[FALSE]; END--:1006--;IF C<=LeastPageCost THEN BEGIN BestPageBreak_P; BestSize_PageSoFar^[0];LeastPageCost_C;R_Mem[65000]^.Hh.Rh; WHILE R#65000 DO BEGIN Mem[R+2]^.Hh.Lh_Mem[R+2]^.Hh.Rh;R_Mem[R]^.Hh.Rh; END ENDLOOP ; END;IF(C=1073741823)OR (Pi<=-10000) THEN BEGIN FireUp[P]; IF OutputActive THEN GOTO Label10; GOTO Label30; END; END--:1005--; IF( INT[Mem[P]^.Hh.B0]<10)OR ( INT[Mem[P]^.Hh.B0]>11) THEN GOTO Label80;EXITS Label90 => NULL};--1004: IF Mem[P]^.Hh.B0=11 THEN Q_P ELSE BEGIN Q_Mem[P+1]^.Hh.Lh; PageSoFar^[2+Mem[Q]^.Hh.B0]_PageSoFar^[2+Mem[Q]^.Hh.B0]+Mem[Q+2]^.Int; PageSoFar^[6]_PageSoFar^[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[847]; END;BEGIN HelpPtr_4;HelpLine^[3]_848; 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;PageSoFar^[1]_PageSoFar^[1]+PageSoFar^[7]+Mem[Q+1]^.Int; PageSoFar^[7]_0--:1004--;EXITS Label80 => NULL};--1003: IF PageSoFar^[7]>PageMaxDepth THEN BEGIN PageSoFar^[1]_PageSoFar^ [1]+PageSoFar^[7]-PageMaxDepth;PageSoFar^[7]_PageMaxDepth; END; --:1003--Mem[PageTail]^.Hh.Rh_P;PageTail_P; Mem[64999]^.Hh.Rh_Mem[P]^.Hh.Rh;Mem[P]^.Hh.Rh_0; GOTO Label30--:998--;EXITS Label31 => NULL};--999: Mem[64999]^.Hh.Rh_Mem[P]^.Hh.Rh;Mem[P]^.Hh.Rh_0;FlushNodeList[P]--:999--; EXITS Label30 => NULL};--:997--EXIT; EXITS Label22 => NULL} ENDLOOP; IF Mem[64999]^.Hh.Rh=0 THEN EXIT; ENDLOOP;--995: IF NestPtr=0 THEN CurList.TailField_64999 ELSE Nest^[0].TailField_ 64999--:995--;EXITS Label10 => NULL}; END;--:994----1030:----1043:-- END.