-- file: TexHyphImpl.mesa -- Pascal-to-Mesa translator output, translated at September 27, 1985 10:21:38 am PDT DIRECTORY PascalBasic, TexTypes, TexInit, TexInteraction, TexMemory, TexSymbols, TexScan, TexParagraph, TexSysdepInline; TexHyphImpl: PROGRAM IMPORTS PascalBasic, TexTypes, TexInit, TexInteraction, TexMemory, TexSymbols, TexScan, TexParagraph, TexSysdepInline EXPORTS TexParagraph = PUBLIC BEGIN OPEN PascalBasic, TexTypes, TexInit, TexInteraction, TexMemory, TexSymbols, TexScan, TexParagraph, TexSysdepInline; Hyphenate: PROCEDURE = BEGIN --901:--I, J, L:PascalInteger[0..65];Q, R, S:Halfword;--:901----912: MajorTail, MinorTail:Halfword;C:AsciiCode;--:912----922:--Z:TriePointer; V:Quarterword;--:922----929:--H:HyphPointer;K:StrNumber;U:PoolPointer; --:929----923:-- --903: FOR i:INT IN [ INT[0 ].. INT[Hn ]] DO J _ i; Hyf^[J]_0 ENDLOOP;--930:--H_Hc^[1]; FOR i:INT IN [ INT[2 ].. INT[Hn ]] DO J _ i; H_ ( INT[H+H]+Hc^[J])MOD 307 ENDLOOP;{{WHILE TRUE DO BEGIN--931: K_HyphWord^[H];IF K=0 THEN GOTO Label45; IF( INT[StrStart^[K+1]]-StrStart^[K])Hc^[J] THEN GOTO Label30;J_J+1;U_U+1; IF INT[J]>Hn THEN EXIT; ENDLOOP;--932: S_HyphList^[H];WHILE S#0 DO BEGIN Hyf^[Mem[S]^.Hh.Lh]_1; S_Mem[S]^.Hh.Rh; END--:932-- ENDLOOP ; GOTO Label40; END;EXITS Label30 => NULL};--:931--IF INT[H]>0 THEN H_H-1 ELSE H_307; END ENDLOOP ;EXITS Label45 => NULL};--:930--Hc^[0]_127;Hc^[Hn+1]_127; Hc^[Hn+2]_256;FOR i:INT IN [ INT[0 ].. INT[Hn-2 ]] DO J _ i; Z_Hc^[J];L_J; WHILE Hc^[L]=Trie^[Z].B1 DO BEGIN IF Trie^[Z].B0#0 THEN--924: BEGIN V_Trie^[Z].B0;DO I_L-HyfDistance^[V]; IF INT[HyfNum^[V]]>Hyf^[I] THEN Hyf^[I]_HyfNum^[V];V_HyfNext^[V]; IF V=0 THEN EXIT; ENDLOOP; END--:924--;L_L+1;Z_ INT[Trie^[Z].Rh]+Hc^[L]; END ENDLOOP ; ENDLOOP;EXITS Label40 => NULL};Hyf^[1]_0;Hyf^[Hn-2]_0; Hyf^[Hn-1]_0;Hyf^[Hn]_0--:923--;--902: {{FOR i:INT IN [ INT[2 ].. INT[Hn-3 ]] DO J _ i; IF PascalODD[Hyf^[J]] THEN GOTO Label41 ENDLOOP; GOTO Label10;EXITS Label41 => NULL};--:902--Q_Mem[Hb]^.Hh.Rh;Mem[Hb]^.Hh.Rh_0;S_CurP; WHILE Mem[S]^.Hh.Rh#Ha DO S_Mem[S]^.Hh.Rh ENDLOOP ;Mem[S]^.Hh.Rh_0; FlushNodeList[Ha];--913:--J_0;DO L_J;J_Reconstitute[J+1,Hn]; IF HyphenPassed#0 THEN--914:--BEGIN R_GetNode[2];Mem[S]^.Hh.Rh_R; Mem[R]^.Hh.Rh_Mem[64996]^.Hh.Rh;Mem[R]^.Hh.B0_7; MajorTail_Mem[64996]^.Hh.Rh; IF Mem[MajorTail]^.Hh.Rh#0 THEN MajorTail_Mem[MajorTail]^.Hh.Rh; I_HyphenPassed;--915:--MinorTail_0;C_Hu^[I+1]; Hu^[I+1]_HyphenChar^[Hf];DO L_Reconstitute[L+1,I+1]; IF MinorTail=0 THEN Mem[R+1]^.Hh.Lh_Mem[64996]^.Hh.Rh ELSE Mem[ MinorTail]^.Hh.Rh_Mem[64996]^.Hh.Rh;MinorTail_Mem[64996]^.Hh.Rh; IF Mem[MinorTail]^.Hh.Rh#0 THEN MinorTail_Mem[MinorTail]^.Hh.Rh; IF INT[L]>I THEN EXIT; ENDLOOP;Hu^[I+1]_C;L_L-1;Hyf^[L]_0--:915--;--916:--MinorTail_0; Mem[R+1]^.Hh.Rh_0;WHILE INT[L]=J THEN EXIT; ENDLOOP; WHILE INT[L]>J DO BEGIN J_Reconstitute[J+1,Hn]; Mem[MajorTail]^.Hh.Rh_Mem[64996]^.Hh.Rh;MajorTail_Mem[64996]^.Hh.Rh; IF Mem[MajorTail]^.Hh.Rh#0 THEN BEGIN Hyf^[J]_0; MajorTail_Mem[MajorTail]^.Hh.Rh; END; END ENDLOOP ; END--:916-- ENDLOOP ;--917:--I_0;S_R; WHILE Mem[S]^.Hh.Rh#0 DO BEGIN I_I+1;S_Mem[S]^.Hh.Rh; END ENDLOOP ; Mem[R]^.Hh.B1_I--:917--; END--:914 ELSE BEGIN Mem[S]^.Hh.Rh_Mem[64996]^.Hh.Rh;S_Mem[S]^.Hh.Rh; IF Mem[S]^.Hh.Rh#0 THEN S_Mem[S]^.Hh.Rh; END;IF PascalODD[Hyf^[J]] THEN--918: BEGIN R_NewDisc[];Mem[R+1]^.Hh.Lh_NewCharacter[Hf,HyphenChar^[Hf]]; Mem[S]^.Hh.Rh_R;S_R; END--:918--; IF J=Hn THEN EXIT; ENDLOOP;Mem[S]^.Hh.Rh_Q--:913----:903--; EXITS Label10 => NULL}; END;--:895-- NewHyphExceptions: PROCEDURE = BEGIN N:SmallNumber; J:SmallNumber;H:HyphPointer;K:StrNumber;P:Halfword;Q:Halfword; S, T:StrNumber;U, V:PoolPointer; ScanLeftBrace[];--935:--N_0;P_0; {WHILE TRUE DO BEGIN GetXToken[];DO {--Label21:--SELECT CurCmd FROM 11,12,67 =>--937: IF CurChr=45 THEN--938:--BEGIN IF INT[N]>1 THEN BEGIN Q_GetAvail[]; Mem[Q]^.Hh.Rh_P;Mem[Q]^.Hh.Lh_N;P_Q; END; END--:938 ELSE BEGIN IF( INT[CurChr]>127)OR (Eqtb^[ INT[4255]+CurChr].Hh.Rh=0) THEN BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[134];Print[802]; END;BEGIN HelpPtr_2; HelpLine^[1]_803;HelpLine^[0]_804; END;Error[]; END ELSE IF INT[N]<63 THEN BEGIN N_N+1;Hc^[N]_ INT[Eqtb^[ INT[4255]+CurChr].Hh.Rh]-1; END; END--:937--;16 =>BEGIN ScanCharNum[];CurChr_CurVal;CurCmd_67; GOTO Label21; END;10,2 =>BEGIN IF INT[N]>4 THEN--939: BEGIN BEGIN IF INT[PoolPtr+N]>PoolSize THEN Overflow[129, PoolSize-InitPoolPtr]; END;H_0;FOR i:INT IN [ INT[1 ].. INT[N ]] DO J _ i; H_ ( INT[H+H]+Hc^[J])MOD 307; BEGIN StrPool^[PoolPtr]_Hc^[J];PoolPtr_PoolPtr+1; END; ENDLOOP; S_MakeString[];{WHILE TRUE DO BEGIN IF P=0 THEN GOTO Label30; IF INT[Mem[P]^.Hh.Lh] NULL};--940:--IF HyphCount=307 THEN Overflow[805,307]; HyphCount_HyphCount+1;WHILE HyphWord^[H]#0 DO BEGIN--941: K_HyphWord^[H]; {{IF( INT[StrStart^[K+1]]-StrStart^[K])<( INT[StrStart^[S+1]]-StrStart^[S]) THEN GOTO Label40; IF( INT[StrStart^[K+1]]-StrStart^[K])>( INT[StrStart^[S+1]]-StrStart^[S]) THEN GOTO Label45;U_StrStart^[K];V_StrStart^[S]; DO IF INT[StrPool^[U]]StrPool^[V] THEN GOTO Label45;U_U+1;V_V+1; IF U=StrStart^[K+1] THEN EXIT; ENDLOOP;EXITS Label40 => NULL};Q_HyphList^[H];HyphList^[H]_P;P_Q; T_HyphWord^[H];HyphWord^[H]_S;S_T;EXITS Label45 => NULL};--:941--IF INT[H]>0 THEN H_H-1 ELSE H_307; END ENDLOOP ;HyphWord^[H]_S;HyphList^[H]_P--:940 ; END--:939--;IF CurCmd=2 THEN GOTO Label10;N_0;P_0; END; ENDCASE =>--936: BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[134];Print[539]; END; PrintEsc[798];Print[799];BEGIN HelpPtr_2;HelpLine^[1]_800; HelpLine^[0]_801; END;Error[]; END--:936--;EXIT; EXITS Label21 => NULL} ENDLOOP; END--:935-- ENDLOOP ;EXITS Label10 => NULL}; END;--:934----942: --944:-- NewTrieOp: PROCEDURE[D,N: SmallNumber,V: Quarterword] RETURNS[NewTrieOpResult: Quarterword] = BEGIN H:PascalInteger[0..510];U:Quarterword; H_ ABS[N+313*D+ INT[361]*V]MOD 510; {WHILE TRUE DO BEGIN U_TrieOpHash^[H]; IF U=0 THEN BEGIN IF TrieOpPtr=255 THEN BEGIN NewTrieOpResult_0; GOTO Label10; END;TrieOpPtr_TrieOpPtr+1;HyfDistance^[TrieOpPtr]_D; HyfNum^[TrieOpPtr]_N;HyfNext^[TrieOpPtr]_V; TrieOpHash^[H]_TrieOpPtr;NewTrieOpResult_TrieOpPtr; GOTO Label10; END; IF(HyfDistance^[U]=D)AND (HyfNum^[U]=N)AND (HyfNext^[U]=V) THEN BEGIN NewTrieOpResult_U; GOTO Label10; END;IF INT[H]>0 THEN H_H-1 ELSE H_510; END ENDLOOP ;EXITS Label10 => NULL}; END; --:944----947:-- TrieNode: PROCEDURE[P: TriePointer] RETURNS[TrieNodeResult: TriePointer] = BEGIN H:TriePointer;Q:TriePointer; H_ ABS[TrieC^[P]+ INT[1009]*TrieO^[P]+ INT[2718]*TrieL^[P]+ INT[3142]*TrieR^[P]]MOD TrieSize;{WHILE TRUE DO BEGIN Q_TrieHash^[H]; IF Q=0 THEN BEGIN TrieHash^[H]_P;TrieNodeResult_P; GOTO Label10; END; IF(TrieC^[Q]=TrieC^[P])AND (TrieO^[Q]=TrieO^[P])AND (TrieL^[Q]=TrieL^[P]) AND (TrieR^[Q]=TrieR^[P]) THEN BEGIN TrieNodeResult_Q; GOTO Label10; END; IF INT[H]>0 THEN H_H-1 ELSE H_TrieSize; END ENDLOOP ;EXITS Label10 => NULL}; END;--:947----948: CompressTrie: PROCEDURE[P: TriePointer] RETURNS[CompressTrieResult: TriePointer] = BEGIN IF P=0 THEN CompressTrieResult_0 ELSE BEGIN TrieL^[P]_CompressTrie[ TrieL^[P]];TrieR^[P]_CompressTrie[TrieR^[P]]; CompressTrieResult_TrieNode[P]; END; END;--:948----949: --:949----951:-- InitTrieMemory: PROCEDURE = BEGIN P:TriePointer; FOR i:INT IN [ INT[0 ].. INT[TriePtr ]] DO P _ i; TrieHash^[P]_0 ENDLOOP;TrieMax_128; TrieMin_128;Trie^[0].Rh_1;TrieTaken^[0]_FALSE; FOR i:INT IN [ INT[1 ].. INT[128 ]] DO P _ i; Trie^[P].Lh_P-1;Trie^[P].Rh_P+1; TrieTaken^[P]_FALSE; ENDLOOP; END;--:951----953: FirstFit: PROCEDURE[P: TriePointer] = BEGIN H:TriePointer; Z:TriePointer;Q:TriePointer;C:AsciiCode; C_TrieC^[P]; IF INT[C]0 DO BEGIN IF Trie^[H+TrieC^[Q]].Rh=0 THEN GOTO Label45; Q_TrieR^[Q]; END ENDLOOP ; GOTO Label40--:955--;EXITS Label45 => NULL};Z_Trie^[Z].Rh; END ENDLOOP ;EXITS Label40 => NULL};--956: TrieTaken^[H]_TRUE;TrieHash^[P]_H;Q_P;DO Z_H+TrieC^[Q]; Trie^[Trie^[Z].Rh].Lh_Trie^[Z].Lh;Trie^[Trie^[Z].Lh].Rh_Trie^[Z].Rh; Trie^[Z].Rh_0;Q_TrieR^[Q]; IF Q=0--:956-- THEN EXIT; ENDLOOP; END;--:953----957: TriePack: PROCEDURE[P: TriePointer] = BEGIN Q:TriePointer; DO Q_TrieL^[P]; IF( INT[Q]>0)AND (TrieHash^[Q]=0) THEN BEGIN FirstFit[Q];TriePack[Q]; END; P_TrieR^[P]; IF P=0 THEN EXIT; ENDLOOP; END;--:957----959: TrieFix: PROCEDURE[P: TriePointer] = BEGIN Q:TriePointer;C:AsciiCode; Z:TriePointer; Z_TrieHash^[P];WHILE P#0 DO BEGIN Q_TrieL^[P]; C_TrieC^[P];Trie^[Z+C].Rh_TrieHash^[Q];Trie^[Z+C].B1_C; Trie^[Z+C].B0_TrieO^[P];IF INT[Q]>0 THEN TrieFix[Q];P_TrieR^[P]; END ENDLOOP ; END; --:959----960:-- NewPatterns: PROCEDURE = BEGIN K, L:SmallNumber; DigitSensed:PascalBoolean;V:Quarterword;P, Q:TriePointer;FirstChild:PascalBoolean; C:AsciiCode;R, S:TriePointer;H:TwoHalves; ScanLeftBrace[]; InitPatternMemory[];--961:--K_0;Hyf^[0]_0;DigitSensed_FALSE; {WHILE TRUE DO BEGIN GetXToken[];SELECT CurCmd FROM 11,12 =>--962: IF DigitSensed OR ( INT[CurChr]<48)OR ( INT[CurChr]>57) THEN BEGIN IF CurChr=46 THEN CurChr_128 ELSE BEGIN CurChr_Eqtb^[ INT[4255]+CurChr].Hh.Rh; IF CurChr=0 THEN BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[134]; Print[810]; END;BEGIN HelpPtr_1;HelpLine^[0]_809; END;Error[]; CurChr_128; END; END;IF INT[K]<63 THEN BEGIN K_K+1;Hc^[K]_ INT[CurChr]-1; Hyf^[K]_0;DigitSensed_FALSE; END; END ELSE BEGIN Hyf^[K]_ INT[CurChr]-48; IF INT[K]<63 THEN DigitSensed_TRUE; END--:962--;10,2 =>BEGIN IF INT[K]>0 THEN--963: BEGIN--965:-- IF Hc^[1]=127 THEN Hyf^[0]_0;IF Hc^[K]=127 THEN Hyf^[K]_0;L_K; V_0;{WHILE TRUE DO BEGIN IF Hyf^[L]#0 THEN V_NewTrieOp[K-L,Hyf^[L],V]; IF INT[L]>0 THEN L_L-1 ELSE GOTO Label31; END ENDLOOP ;EXITS Label31 => NULL};--:965--Q_0; WHILE INT[L]0)AND ( INT[C]>TrieC^[P])DO BEGIN Q_P;P_TrieR^[Q];FirstChild_FALSE; END ENDLOOP ;IF(P=0)OR ( INT[C]BEGIN BEGIN IF Interaction=3 THEN NULL; PrintNl[134];Print[807]; END;PrintEsc[808];BEGIN HelpPtr_1; HelpLine^[0]_809; END;Error[]; END ; END ENDLOOP ;EXITS Label30 => NULL};--:961--TrieL^[0]_CompressTrie[TrieL^[0]];--966:--InitTrieMemory[]; IF TrieL^[0]#0 THEN BEGIN FirstFit[TrieL^[0]];TriePack[TrieL^[0]]; END;--958:--R_0;WHILE TrieTaken^[R]DO R_R+1 ENDLOOP ;TrieHash^[0]_R; TrieFix[TrieL^[0]]--:958--;R_0;H.Rh_0;H.B0_0;H.B1_0; DO S_Trie^[R].Rh;Trie^[R]_H;R_S; IF INT[R]>TrieMax--:966-- THEN EXIT; ENDLOOP; END;--:960 END.