-- file: TexParagraphImpl.mesa -- Pascal-to-Mesa translator output, translated at September 27, 1985 10:21:37 am PDT DIRECTORY PascalBasic, TexTypes, TexInteraction, TexMemory, TexSymbols, TexOps, TexParagraph, TexSysdepInline; TexParagraphImpl: PROGRAM IMPORTS PascalBasic, TexTypes, TexInteraction, TexMemory, TexSymbols, TexOps, TexSysdepInline EXPORTS TexParagraph = PUBLIC BEGIN OPEN PascalBasic, TexTypes, TexInteraction, TexMemory, TexSymbols, TexOps, TexParagraph, TexSysdepInline; --:814----821: Passive: Halfword; PassNumber: Halfword; --:821----823: ActiveWidth: LONG POINTER TO ARRAY PascalInteger[1..6] OF Scaled _ PascalStaticZone.NEW[ARRAY PascalInteger[1..6] OF Scaled]; CurActiveWidth: LONG POINTER TO ARRAY PascalInteger[1..6] OF Scaled _ PascalStaticZone.NEW[ARRAY PascalInteger[1..6] OF Scaled]; Background: LONG POINTER TO ARRAY PascalInteger[1..6] OF Scaled _ PascalStaticZone.NEW[ARRAY PascalInteger[1..6] OF Scaled]; BreakWidth: LONG POINTER TO ARRAY PascalInteger[1..6] OF Scaled _ PascalStaticZone.NEW[ARRAY PascalInteger[1..6] OF Scaled]; --:823 --825:-- NoShrinkErrorYet: PascalBoolean; --:825----828:-- CurP: Halfword; SecondPass: PascalBoolean; Threshold: PascalInteger; --:828----833: MinimalDemerits: LONG POINTER TO ARRAY PascalInteger[0..3] OF Scaled _ PascalStaticZone.NEW[ARRAY PascalInteger[0..3] OF Scaled]; MinimumDemerits: Scaled; BestPlace: LONG POINTER TO ARRAY PascalInteger[0..3] OF Halfword _ PascalStaticZone.NEW[ARRAY PascalInteger[0..3] OF Halfword]; BestPlLine: LONG POINTER TO ARRAY PascalInteger[0..3] OF Halfword _ PascalStaticZone.NEW[ARRAY PascalInteger[0..3] OF Halfword]; --:833----839:-- DiscWidth: Scaled; --:839----847:-- EasyLine: Halfword; LastSpecialLine: Halfword; FirstWidth: Scaled; SecondWidth: Scaled; FirstIndent: Scaled; SecondIndent: Scaled; --:847----872:-- BestBet: Halfword; FewestDemerits: PascalInteger; BestLine: Halfword; ActualLooseness: PascalInteger; LineDiff: PascalInteger; --:872----892:--Hc: LONG POINTER TO ARRAY PascalInteger[0..65] OF Halfword _ PascalStaticZone.NEW[ARRAY PascalInteger[0..65] OF Halfword]; Hn: SmallNumber; Ha: Halfword; Hb: Halfword; Hf: InternalFontNumber; Hu: LONG POINTER TO ARRAY PascalInteger[1..63] OF AsciiCode _ PascalStaticZone.NEW[ARRAY PascalInteger[1..63] OF AsciiCode]; --:892----900:--Hyf: LONG POINTER TO ARRAY PascalInteger[0..64] OF PascalInteger[0..9] _ PascalStaticZone.NEW[ARRAY PascalInteger[0..64] OF PascalInteger[0..9]]; --:900 --905:-- HyphenPassed: SmallNumber; --:905----921: Trie: LONG POINTER TO ARRAY TriePointer OF TwoHalves _ PascalStaticZone.NEW[ARRAY TriePointer OF TwoHalves]; HyfDistance: LONG POINTER TO ARRAY Quarterword OF SmallNumber _ PascalStaticZone.NEW[ARRAY Quarterword OF SmallNumber]; HyfNum: LONG POINTER TO ARRAY Quarterword OF SmallNumber _ PascalStaticZone.NEW[ARRAY Quarterword OF SmallNumber]; HyfNext: LONG POINTER TO ARRAY Quarterword OF Quarterword _ PascalStaticZone.NEW[ARRAY Quarterword OF Quarterword]; --:921----926: HyphWord: LONG POINTER TO ARRAY HyphPointer OF StrNumber _ PascalStaticZone.NEW[ARRAY HyphPointer OF StrNumber]; HyphList: LONG POINTER TO ARRAY HyphPointer OF Halfword _ PascalStaticZone.NEW[ARRAY HyphPointer OF Halfword]; HyphCount: HyphPointer; --:926 --943:--TrieOpHash: LONG POINTER TO ARRAY PascalInteger[0..510] OF Quarterword _ PascalStaticZone.NEW[ARRAY PascalInteger[0..510] OF Quarterword]; TrieOpPtr: Quarterword; --:943----945:--TrieC: LONG POINTER TO PACKED ARRAY TriePointer OF AsciiCode _ PascalStaticZone.NEW[PACKED ARRAY TriePointer OF AsciiCode]; TrieO: LONG POINTER TO PACKED ARRAY TriePointer OF Quarterword _ PascalStaticZone.NEW[PACKED ARRAY TriePointer OF Quarterword]; TrieL: LONG POINTER TO PACKED ARRAY TriePointer OF TriePointer _ PascalStaticZone.NEW[PACKED ARRAY TriePointer OF TriePointer]; TrieR: LONG POINTER TO PACKED ARRAY TriePointer OF TriePointer _ PascalStaticZone.NEW[PACKED ARRAY TriePointer OF TriePointer]; TriePtr: TriePointer; --:945----946:--TrieHash: LONG POINTER TO PACKED ARRAY TriePointer OF TriePointer _ PascalStaticZone.NEW[PACKED ARRAY TriePointer OF TriePointer]; --:946 --950:--TrieTaken: LONG POINTER TO PACKED ARRAY TriePointer OF PascalBoolean _ PascalStaticZone.NEW[PACKED ARRAY TriePointer OF PascalBoolean]; TrieMin: TriePointer; TrieMax: TriePointer; --826:-- FiniteShrink: PROCEDURE[P: Halfword] RETURNS[FiniteShrinkResult: Halfword] = BEGIN Q:Halfword; IF NoShrinkErrorYet THEN BEGIN NoShrinkErrorYet_FALSE; BEGIN IF Interaction=3 THEN NULL;PrintNl[134];Print[776]; END; BEGIN HelpPtr_5;HelpLine^[4]_777;HelpLine^[3]_778;HelpLine^[2]_779; HelpLine^[1]_780;HelpLine^[0]_781; END;Error[]; END;Q_NewSpec[P]; Mem[Q]^.Hh.B1_0;DeleteGlueRef[P];FiniteShrinkResult_Q; END;--:826----829: PostLineBreak: PROCEDURE[FinalWidowPenalty: PascalInteger] = BEGIN Q, R, S:Halfword;DiscBreak:PascalBoolean;CurWidth:Scaled; CurIndent:Scaled;T:Quarterword;Pen:PascalInteger;CurLine:Halfword; --878:--Q_Mem[BestBet+1]^.Hh.Rh;CurP_0;DO R_Q; Q_Mem[Q+1]^.Hh.Lh;Mem[R+1]^.Hh.Lh_CurP;CurP_R; IF Q=0--:878-- THEN EXIT; ENDLOOP; CurLine_CurList.PgField+1;DO--880:----881:----887: Q_Mem[CurP+1]^.Hh.Rh; DiscBreak_FALSE; {IF Q#0 THEN IF Mem[Q]^.Hh.B0=10 THEN BEGIN DeleteGlueRef[Mem[Q+1]^.Hh. Lh];Mem[Q+1]^.Hh.Lh_Eqtb^[3034].Hh.Rh;Mem[Q]^.Hh.B1_9; Mem[Eqtb^[3034].Hh.Rh]^.Hh.Rh_Mem[Eqtb^[3034].Hh.Rh]^.Hh.Rh+1; GOTO Label30; END ELSE BEGIN IF Mem[Q]^.Hh.B0=7 THEN--882:--BEGIN T_Mem[Q]^.Hh.B1;--883: IF T=0 THEN R_Mem[Q]^.Hh.Rh ELSE BEGIN R_Q; WHILE INT[T]>1 DO BEGIN R_Mem[R]^.Hh.Rh;T_T-1; END ENDLOOP ;S_Mem[R]^.Hh.Rh; IF NOT ( INT[S]>=HiMemMin) THEN IF Mem[CurP+1]^.Hh.Lh#0 THEN IF Mem[Mem[CurP +1]^.Hh.Lh+1]^.Hh.Rh=S THEN S_R;R_Mem[S]^.Hh.Rh;Mem[S]^.Hh.Rh_0; FlushNodeList[Mem[Q]^.Hh.Rh];Mem[Q]^.Hh.B1_0; END--:883--; IF Mem[Q+1]^.Hh.Rh#0 THEN--884:--BEGIN S_Mem[Q+1]^.Hh.Rh; WHILE Mem[S]^.Hh.Rh#0 DO S_Mem[S]^.Hh.Rh ENDLOOP ;Mem[S]^.Hh.Rh_R; R_Mem[Q+1]^.Hh.Rh;Mem[Q+1]^.Hh.Rh_0; END--:884--; IF Mem[Q+1]^.Hh.Lh#0 THEN--885:--BEGIN S_Mem[Q+1]^.Hh.Lh;Mem[Q]^.Hh.Rh_S; WHILE Mem[S]^.Hh.Rh#0 DO S_Mem[S]^.Hh.Rh ENDLOOP ;Mem[Q+1]^.Hh.Lh_0;Q_S; END--:885--;Mem[Q]^.Hh.Rh_R;DiscBreak_TRUE; END--:882--; IF NOT ( INT[Q]>=HiMemMin) THEN IF(Mem[Q]^.Hh.B0=9)OR (Mem[Q]^.Hh.B0=11) THEN Mem[ Q+1]^.Int_0; END ELSE BEGIN Q_64997; WHILE Mem[Q]^.Hh.Rh#0 DO Q_Mem[Q]^.Hh.Rh ENDLOOP ; END;--886:--R_NewParamGlue[8]; Mem[R]^.Hh.Rh_Mem[Q]^.Hh.Rh;Mem[Q]^.Hh.Rh_R;Q_R--:886--;EXITS Label30 => NULL};--:881--R_Mem[Q]^.Hh.Rh;Mem[Q]^.Hh.Rh_0;Q_Mem[64997]^.Hh.Rh;Mem[64997]^.Hh.Rh_R; IF Eqtb^[3033].Hh.Rh#0 THEN BEGIN R_NewParamGlue[7];Mem[R]^.Hh.Rh_Q; Q_R; END--:887--;--889: IF INT[CurLine]>LastSpecialLine THEN BEGIN CurWidth_SecondWidth; CurIndent_SecondIndent; END ELSE IF Eqtb^[3556].Hh.Rh=0 THEN BEGIN CurWidth_FirstWidth; CurIndent_FirstIndent; END ELSE BEGIN CurWidth_Mem[Eqtb^[3556].Hh.Rh+ INT[2]*CurLine]^.Int; CurIndent_Mem[Eqtb^[3556].Hh.Rh+ INT[2]*CurLine-1]^.Int; END; AdjustTail_64995;JustBox_Hpack[Q,CurWidth,0]; Mem[JustBox+4]^.Int_CurIndent--:889--;--888:--AppendToVlist[JustBox]; IF 64995#AdjustTail THEN BEGIN Mem[CurList.TailField]^.Hh.Rh_Mem[ 64995]^.Hh.Rh;CurList.TailField_AdjustTail; END;AdjustTail_0--:888--; --890:--IF CurLine+1#BestLine THEN BEGIN Pen_Eqtb^[4780].Int; IF CurLine=CurList.PgField+1 THEN Pen_Pen+Eqtb^[4772].Int; IF CurLine+2=BestLine THEN Pen_Pen+FinalWidowPenalty; IF DiscBreak THEN Pen_Pen+Eqtb^[4775].Int; IF Pen#0 THEN BEGIN R_NewPenalty[Pen]; Mem[CurList.TailField]^.Hh.Rh_R;CurList.TailField_R; END; END--:890 --:880--;CurLine_CurLine+1;CurP_Mem[CurP+1]^.Hh.Lh; IF CurP#0 THEN--879:--BEGIN R_64997; {WHILE TRUE DO BEGIN Q_Mem[R]^.Hh.Rh; IF Q=Mem[CurP+1]^.Hh.Rh THEN GOTO Label31;IF( INT[Q]>=HiMemMin) THEN GOTO Label31; IF( INT[Mem[Q]^.Hh.B0]<9) THEN GOTO Label31;R_Q; END ENDLOOP ; EXITS Label31 => NULL};IF R#64997 THEN BEGIN Mem[R]^.Hh.Rh_0; FlushNodeList[Mem[64997]^.Hh.Rh];Mem[64997]^.Hh.Rh_Q; END; END--:879--; IF CurP=0 THEN EXIT; ENDLOOP; IF(CurLine#BestLine)OR (Mem[64997]^.Hh.Rh#0) THEN Confusion[796]; CurList.PgField_ INT[BestLine]-1; END;--:877----895:----906: Reconstitute: PROCEDURE[J,N: SmallNumber] RETURNS[ReconstituteResult: SmallNumber] = BEGIN P:Halfword;S:Halfword;Q:FourQuarters;C:Quarterword;D:Quarterword; W:Scaled;R:PascalInteger[0..FontMemSize];--907:----910: HyphenPassed_0;S_64996;W_0; D_Hu^[J];C_D;{WHILE TRUE DO BEGIN DO {--Label22:--P_GetAvail[];Mem[P]^.Hh.B0_Hf; Mem[P]^.Hh.B1_C;Mem[S]^.Hh.Rh_P;--908:--IF J=N THEN GOTO Label30; Q_FontInfo^[CharBase^[Hf]+D].Qqqq;IF( PascalMODPower2Mask[(Q.B2),3])#1 THEN GOTO Label30; R_LigKernBase^[Hf]+Q.B3;C_Hu^[J+1]; WHILE TRUE DO BEGIN Q_FontInfo^[R].Qqqq; IF Q.B1=C THEN BEGIN IF PascalODD[Hyf^[J]]AND (HyphenPassed=0) THEN HyphenPassed_J;IF INT[Q.B2]<128 THEN--909:--BEGIN D_Q.B3;J_J+1;S_P; GOTO Label22; END--:909-- ELSE BEGIN W_FontInfo^[KernBase^[Hf]+Q.B3].Int; GOTO Label30; END; END ELSE IF INT[Q.B0]<128 THEN R_R+1 ELSE GOTO Label30; END--:908-- ENDLOOP ;EXIT; EXITS Label22 => NULL} ENDLOOP; END ENDLOOP ; EXITS Label30 => NULL};--:907--IF S#64996 THEN BEGIN P_NewLigature[Hf,D,Mem[64996]^.Hh.Rh]; Mem[64996]^.Hh.Rh_P; END--:910--;--911: IF W#0 THEN Mem[Mem[64996]^.Hh.Rh]^.Hh.Rh_NewKern[W]--:911--; ReconstituteResult_J; END;--:906-- END.