-- file: TexParagraph2Impl.mesa -- Pascal-to-Mesa translator output, translated at September 27, 1985 10:21:38 am PDT DIRECTORY PascalBasic, TexTypes, TexInteraction, TexMemory, TexSymbols, TexOps, TexParagraph, TexSysdepInline; TexParagraph2Impl: PROGRAM IMPORTS TexTypes, TexInteraction, TexMemory, TexSymbols, TexOps, TexParagraph, TexSysdepInline EXPORTS TexParagraph = PUBLIC BEGIN OPEN PascalBasic, TexTypes, TexInteraction, TexMemory, TexSymbols, TexOps, TexParagraph, TexSysdepInline; LineBreak: PROCEDURE[FinalWidowPenalty: PascalInteger] = BEGIN --862:--AutoBreaking:PascalBoolean;PrevP:Halfword; Q, R, S:Halfword;F:InternalFontNumber;--:862----893:--J:SmallNumber; C:PascalInteger[0..255];--:893-- LineBreakInner: PROCEDURE = BEGIN--816: Mem[64997]^.Hh.Rh_Mem[CurList.HeadField]^.Hh.Rh; IF( INT[CurList.TailField]>=HiMemMin) THEN BEGIN Mem[CurList.TailField]^. Hh.Rh_NewPenalty[10000]; CurList.TailField_Mem[CurList.TailField]^.Hh.Rh; END ELSE IF Mem[CurList.TailField]^.Hh.B0#10 THEN BEGIN Mem[CurList. TailField]^.Hh.Rh_NewPenalty[10000]; CurList.TailField_Mem[CurList.TailField]^.Hh.Rh; END ELSE BEGIN Mem[CurList.TailField]^.Hh.B0_12; DeleteGlueRef[Mem[CurList.TailField+1]^.Hh.Lh]; FlushNodeList[Mem[CurList.TailField+1]^.Hh.Rh]; Mem[CurList.TailField+1]^.Int_10000; END; Mem[CurList.TailField]^.Hh.Rh_NewParamGlue[14];PopNest[];--:816----827: NoShrinkErrorYet_TRUE; IF(Mem[Eqtb^[3033].Hh.Rh]^.Hh.B1#0)AND (Mem[Eqtb^[3033].Hh.Rh+3]^.Int#0) THEN BEGIN Eqtb^[3033].Hh.Rh_FiniteShrink[Eqtb^[3033].Hh.Rh]; END; IF(Mem[Eqtb^[3034].Hh.Rh]^.Hh.B1#0)AND (Mem[Eqtb^[3034].Hh.Rh+3]^.Int#0) THEN BEGIN Eqtb^[3034].Hh.Rh_FiniteShrink[Eqtb^[3034].Hh.Rh]; END; Q_Eqtb^[3033].Hh.Rh;R_Eqtb^[3034].Hh.Rh; Background^[1]_Mem[Q+1]^.Int+Mem[R+1]^.Int;Background^[2]_0; Background^[3]_0;Background^[4]_0;Background^[5]_0; Background^[2+Mem[Q]^.Hh.B0]_Mem[Q+2]^.Int; Background^[2+Mem[R]^.Hh.B0]_Background^[2+Mem[R]^.Hh.B0]+Mem[R+2]^.Int; Background^[6]_Mem[Q+3]^.Int+Mem[R+3]^.Int;--:827----834: MinimumDemerits_1073741823;MinimalDemerits^[3]_1073741823; MinimalDemerits^[2]_1073741823;MinimalDemerits^[1]_1073741823; MinimalDemerits^[0]_1073741823;--:834----848: IF Eqtb^[3556].Hh.Rh=0 THEN IF Eqtb^[5218].Int=0 THEN BEGIN LastSpecialLine_0;SecondWidth_Eqtb^[5204].Int;SecondIndent_0; END ELSE--849:--BEGIN LastSpecialLine_ABS[Eqtb^[4808].Int]; IF Eqtb^[4808].Int<0 THEN BEGIN FirstWidth_Eqtb^[5204].Int-ABS[Eqtb^[5218 ].Int]; IF Eqtb^[5218].Int>=0 THEN FirstIndent_Eqtb^[5218].Int ELSE FirstIndent _0;SecondWidth_Eqtb^[5204].Int;SecondIndent_0; END ELSE BEGIN FirstWidth_Eqtb^[5204].Int;FirstIndent_0; SecondWidth_Eqtb^[5204].Int-ABS[Eqtb^[5218].Int]; IF Eqtb^[5218].Int>=0 THEN SecondIndent_Eqtb^[5218].Int ELSE SecondIndent_0; END; END--:849 ELSE BEGIN LastSpecialLine_ INT[Mem[Eqtb^[3556].Hh.Rh]^.Hh.Lh]-1; SecondWidth_Mem[Eqtb^[3556].Hh.Rh+ INT[2]*(LastSpecialLine+1)]^.Int; SecondIndent_Mem[Eqtb^[3556].Hh.Rh+ INT[2]*LastSpecialLine+1]^.Int; END; IF Eqtb^[4786].Int=0 THEN EasyLine_LastSpecialLine ELSE EasyLine_ 65515--:848--; END; --876: PackBeginLine_CurList.MlField; LineBreakInner[];--863:--Threshold_Eqtb^[4767].Int; IF Threshold>=0 THEN BEGIN IF Eqtb^[4799].Int>0 THEN BEGIN BeginDiagnostic[];PrintNl[792]; END;SecondPass_FALSE; END ELSE BEGIN Threshold_Eqtb^[4768].Int;SecondPass_TRUE; IF Eqtb^[4799].Int>0 THEN BeginDiagnostic[]; END;{WHILE TRUE DO BEGIN--864: Q_GetNode[3];Mem[Q]^.Hh.B0_0;Mem[Q]^.Hh.B1_2;Mem[Q]^.Hh.Rh_64994; Mem[Q+1]^.Hh.Rh_0;Mem[Q+1]^.Hh.Lh_CurList.PgField+1;Mem[Q+2]^.Int_0; Mem[64994]^.Hh.Rh_Q;ActiveWidth^[1]_Background^[1]; ActiveWidth^[2]_Background^[2];ActiveWidth^[3]_Background^[3]; ActiveWidth^[4]_Background^[4];ActiveWidth^[5]_Background^[5]; ActiveWidth^[6]_Background^[6];Passive_0;PrintedNode_64997; PassNumber_0;FontInShortDisplay_0--:864--;CurP_Mem[64997]^.Hh.Rh; AutoBreaking_TRUE;PrevP_CurP; WHILE(CurP#0)AND (Mem[64994]^.Hh.Rh#64994)DO--866: BEGIN IF( INT[CurP]>=HiMemMin) THEN--867:--BEGIN PrevP_CurP; DO F_Mem[CurP]^.Hh.B0; ActiveWidth^[1]_ActiveWidth^[1]+FontInfo^[WidthBase^[F]+FontInfo^ [CharBase^[F]+Mem[CurP]^.Hh.B1].Qqqq.B0].Int;CurP_Mem[CurP]^.Hh.Rh; IF NOT ( INT[CurP]>=HiMemMin) THEN EXIT; ENDLOOP; END--:867--; SELECT Mem[CurP]^.Hh.B0 FROM 0,1,2 =>ActiveWidth^[1]_ActiveWidth^[1]+Mem[ CurP+1]^.Int;8 =>--1362:----:1362-- NULL;10 =>BEGIN--868: IF AutoBreaking THEN BEGIN IF( INT[PrevP]>=HiMemMin) THEN TryBreak[0,0] ELSE IF( INT[Mem[PrevP]^.Hh.B0]<9) THEN TryBreak[0,0]; END--:868--;--869: BEGIN IF(Mem[Mem[CurP+1]^.Hh.Lh]^.Hh.B1#0)AND (Mem[Mem[CurP+1]^.Hh.Lh+3]^. Int#0) THEN BEGIN Mem[CurP+1]^.Hh.Lh_FiniteShrink[Mem[CurP+1]^.Hh.Lh]; END;Q_Mem[CurP+1]^.Hh.Lh;ActiveWidth^[1]_ActiveWidth^[1]+Mem[Q+1]^.Int; ActiveWidth^[2+Mem[Q]^.Hh.B0]_ActiveWidth^[2+Mem[Q]^.Hh.B0]+Mem[Q+2]^.Int; ActiveWidth^[6]_ActiveWidth^[6]+Mem[Q+3]^.Int; END--:869--; IF SecondPass AND AutoBreaking THEN--894:--BEGIN S_Mem[CurP]^.Hh.Rh; {IF S#0 THEN BEGIN--896: --899:-- {WHILE TRUE DO BEGIN IF( INT[S]>=HiMemMin) THEN BEGIN C_Mem[S]^.Hh.B1; Hf_Mem[S]^.Hh.B0; END ELSE IF Mem[S]^.Hh.B0=6 THEN BEGIN Q_Mem[S+1]^.Hh.Rh;C_Mem[Q]^.Hh.B1; Hf_Mem[Q]^.Hh.B0; END ELSE IF(Mem[S]^.Hh.B0=11)AND (Mem[S]^.Hh.B1=0) THEN C_128 ELSE IF Mem[S ]^.Hh.B0=8 THEN C_128 ELSE GOTO Label31; IF INT[C]<128 THEN IF Eqtb^[4255+C].Hh.Rh#0 THEN IF(Eqtb^[4255+C].Hh.Rh=C)OR ( Eqtb^[4805].Int>0) THEN GOTO Label32 ELSE GOTO Label31;S_Mem[S]^.Hh.Rh; END ENDLOOP ; EXITS Label32 => NULL};IF HyphenChar^[Hf]<0 THEN GOTO Label31; IF HyphenChar^[Hf]>255 THEN GOTO Label31;Ha_S--:896--;--897:--Hn_0; {WHILE TRUE DO BEGIN IF( INT[S]>=HiMemMin) THEN BEGIN IF Mem[S]^.Hh.B0#Hf THEN GOTO Label33;C_Mem[S]^.Hh.B1;IF INT[C]>=128 THEN GOTO Label33; IF(Eqtb^[4255+C].Hh.Rh=0)OR (Hn=63) THEN GOTO Label33;Hb_S;Hn_Hn+1;Hu^[Hn]_C; Hc^[Hn]_ INT[Eqtb^[4255+C].Hh.Rh]-1; END ELSE IF Mem[S]^.Hh.B0=6 THEN--898: BEGIN J_Hn;Q_Mem[S+1]^.Hh.Rh;IF Mem[Q]^.Hh.B0#Hf THEN GOTO Label33; DO C_Mem[Q]^.Hh.B1;IF INT[C]>=128 THEN GOTO Label33; IF(Eqtb^[4255+C].Hh.Rh=0)OR (J=63) THEN GOTO Label33;J_J+1;Hu^[J]_C; Hc^[J]_ INT[Eqtb^[4255+C].Hh.Rh]-1;Q_Mem[Q]^.Hh.Rh; IF Q=0 THEN EXIT; ENDLOOP;Hb_S;Hn_J; END--:898-- ELSE IF(Mem[S]^.Hh.B0#11)OR (Mem[S]^.Hh.B1#0) THEN GOTO Label33; S_Mem[S]^.Hh.Rh; END ENDLOOP ;EXITS Label33 => NULL};--:897--IF INT[Hn]<5 THEN GOTO Label31; {WHILE TRUE DO BEGIN IF NOT (( INT[S]>=HiMemMin)) THEN SELECT Mem[S]^.Hh.B0 FROM 6 => NULL; 11 =>IF Mem[S]^.Hh.B1#0 THEN GOTO Label34;8,10,12,3,5,4 => GOTO Label34; ENDCASE => GOTO Label31 ;S_Mem[S]^.Hh.Rh; END ENDLOOP ;EXITS Label34 => NULL};--:899--Hyphenate[]; END; EXITS Label31 => NULL}; END--:894--; END; 11 =>BEGIN IF NOT ( INT[Mem[CurP]^.Hh.Rh]>=HiMemMin)AND AutoBreaking THEN IF Mem[Mem[CurP]^.Hh.Rh]^.Hh.B0=10 THEN TryBreak[0,0]; ActiveWidth^[1]_ActiveWidth^[1]+Mem[CurP+1]^.Int; END; 6 =>BEGIN F_Mem[CurP+1]^.Hh.B0; ActiveWidth^[1]_ActiveWidth^[1]+FontInfo^[WidthBase^[F]+FontInfo^ [CharBase^[F]+Mem[CurP+1]^.Hh.B1].Qqqq.B0].Int; END;7 =>--870: BEGIN S_Mem[CurP+1]^.Hh.Lh;DiscWidth_0; IF S=0 THEN TryBreak[Eqtb^[4771].Int,1] ELSE BEGIN DO--871: IF( INT[S]>=HiMemMin) THEN BEGIN F_Mem[S]^.Hh.B0; DiscWidth_DiscWidth+FontInfo^[WidthBase^[F]+FontInfo^[ CharBase^[F]+Mem[S]^.Hh.B1].Qqqq.B0].Int; END ELSE SELECT Mem[S]^.Hh.B0 FROM 6 =>BEGIN F_Mem[S+1]^.Hh.B0; DiscWidth_DiscWidth+FontInfo^[WidthBase^[F]+FontInfo^[ CharBase^[F]+Mem[S+1]^.Hh.B1].Qqqq.B0].Int; END; 0,1,2,11 =>DiscWidth_DiscWidth+Mem[S+1]^.Int; ENDCASE =>Confusion[795]--:871--;S_Mem[S]^.Hh.Rh; IF S=0 THEN EXIT; ENDLOOP; ActiveWidth^[1]_ActiveWidth^[1]+DiscWidth;TryBreak[Eqtb^[4770].Int,1]; ActiveWidth^[1]_ActiveWidth^[1]-DiscWidth; END; END--:870--; 9 =>BEGIN AutoBreaking_(Mem[CurP]^.Hh.B1=1); BEGIN IF NOT ( INT[Mem[CurP]^.Hh.Rh]>=HiMemMin)AND AutoBreaking THEN IF Mem[ Mem[CurP]^.Hh.Rh]^.Hh.B0=10 THEN TryBreak[0,0]; ActiveWidth^[1]_ActiveWidth^[1]+Mem[CurP+1]^.Int; END; END; 12 =>TryBreak[Mem[CurP+1]^.Int,0];4,3,5 => NULL; ENDCASE =>Confusion[794]; PrevP_CurP;CurP_Mem[CurP]^.Hh.Rh; END--:866-- ENDLOOP ;IF CurP=0 THEN--873: BEGIN TryBreak[-10000,1];IF Mem[64994]^.Hh.Rh#64994 THEN BEGIN--874: R_Mem[64994]^.Hh.Rh;FewestDemerits_1073741823; DO IF Mem[R]^.Hh.B0#2 THEN IF Mem[R+2]^.IntActualLooseness)AND (Eqtb^[4786].Int>=LineDiff)) THEN BEGIN BestBet_R;ActualLooseness_LineDiff;FewestDemerits_Mem[R+2]^.Int; END ELSE IF(LineDiff=ActualLooseness)AND (Mem[R+2]^.Int0 THEN PrintNl[793]; Threshold_Eqtb^[4768].Int;SecondPass_TRUE; END ENDLOOP ; EXITS Label30 => NULL};IF Eqtb^[4799].Int>0 THEN EndDiagnostic[TRUE];--:863--PostLineBreak[FinalWidowPenalty]--:876--;--865:--Q_Mem[64994]^.Hh.Rh; WHILE Q#64994 DO BEGIN CurP_Mem[Q]^.Hh.Rh; IF Mem[Q]^.Hh.B0=2 THEN FreeNode[Q,7] ELSE FreeNode[Q,3];Q_CurP; END ENDLOOP ; Q_Passive;WHILE Q#0 DO BEGIN CurP_Mem[Q]^.Hh.Rh;FreeNode[Q,2]; Q_CurP; END--:865-- ENDLOOP ;PackBeginLine_0; END;--:815----934: END.