-- file: TexMemory2Impl.mesa
-- Pascal-to-Mesa translator output, translated at September 27, 1985 10:21:37 am PDT


DIRECTORY
  PascalBasic,
  TexTypes,
  TexInteraction,
  TexMemory,
  TexSymbols,
  TexBuildPage,
  TexScan,
  TexOps,
  TexExtensions,
  TexRest,
  TexSysdep,
  TexSysdepInline;

TexMemory2Impl: PROGRAM IMPORTS PascalBasic, TexInteraction, TexMemory, TexSymbols, TexScan, TexOps, TexExtensions, TexSysdepInline EXPORTS TexMemory = PUBLIC
BEGIN OPEN PascalBasic, TexTypes, TexInteraction, TexMemory, TexSymbols, TexBuildPage, TexScan, TexOps, TexExtensions, TexRest, TexSysdep, TexSysdepInline;
 ShortDisplay: PROCEDURE[P: PascalInteger] = 
BEGIN N:PascalInteger;
 WHILE P>0 DO BEGIN IF(P>=HiMemMin) THEN BEGIN IF P<=MemEnd  THEN
BEGIN IF Mem[P]↑.Hh.B0#FontInShortDisplay  THEN BEGIN IF(
 INT[Mem[P]↑.Hh.B0]<0)OR ( INT[Mem[P]↑.Hh.B0]>FontMax) THEN PrintChar[42] ELSE--267:
PrintEsc[Hash↑[2768+Mem[P]↑.Hh.B0].Rh]--:267--;PrintChar[32];
FontInShortDisplay←Mem[P]↑.Hh.B0; END;PrintAscii[Mem[P]↑.Hh.B1]; END;
 END  ELSE--175:--SELECT Mem[P]↑.Hh.B0 FROM 0,1,3,8,4,5,13 =>Print[180];
2 =>PrintChar[124];10 =>IF Mem[P+1]↑.Hh.Lh#0  THEN PrintChar[32];
9 =>PrintChar[36];6 =>ShortDisplay[Mem[P+1]↑.Hh.Rh];
7 =>BEGIN ShortDisplay[Mem[P+1]↑.Hh.Lh];ShortDisplay[Mem[P+1]↑.Hh.Rh];
N←Mem[P]↑.Hh.B1;
WHILE N>0 DO BEGIN IF Mem[P]↑.Hh.Rh#0  THEN P←Mem[P]↑.Hh.Rh;N←N-1; END ENDLOOP ;
 END; ENDCASE => NULL--:175--;P←Mem[P]↑.Hh.Rh; END ENDLOOP ; END;--:174----176:
 PrintFontAndChar: PROCEDURE[P: PascalInteger]
 = 
BEGIN IF P>MemEnd  THEN PrintEsc[181] ELSE BEGIN IF( INT[Mem[P]↑.Hh.B0]<0)OR (
 INT[Mem[P]↑.Hh.B0]>FontMax) THEN PrintChar[42] ELSE--267:
PrintEsc[Hash↑[2768+Mem[P]↑.Hh.B0].Rh]--:267--;PrintChar[32];
PrintAscii[Mem[P]↑.Hh.B1]; END; END; PrintMark: PROCEDURE[P: PascalInteger]
 = 
BEGIN PrintChar[123];
IF(P<HiMemMin)OR (P>MemEnd) THEN PrintEsc[181] ELSE ShowTokenList[Mem
[P]↑.Hh.Rh,0,MaxPrintLine-10];PrintChar[125]; END;
 PrintRuleDimen: PROCEDURE[D: Scaled]
 = 
BEGIN IF(D=-1073741824) THEN PrintChar[42] ELSE PrintScaled[D]; END;
--:176----177:-- PrintGlue: PROCEDURE[D: Scaled,Order: PascalInteger,S: StrNumber]
 = 
BEGIN PrintScaled[D];
IF(Order<0)OR (Order>3) THEN Print[182] ELSE IF Order>0  THEN BEGIN Print[
183];WHILE Order>1 DO BEGIN PrintChar[108];Order←Order-1; END ENDLOOP ;
 END  ELSE IF S#0  THEN Print[S]; END;--:177----178:
 PrintSpec: PROCEDURE[P: PascalInteger,S: StrNumber]
 = 
BEGIN IF(P<MemMin)OR (P>=LoMemMax) THEN PrintChar[42] ELSE BEGIN
PrintScaled[Mem[P+1]↑.Int];IF S#0  THEN Print[S];
IF Mem[P+2]↑.Int#0  THEN BEGIN Print[184];
PrintGlue[Mem[P+2]↑.Int,Mem[P]↑.Hh.B0,S]; END;
IF Mem[P+3]↑.Int#0  THEN BEGIN Print[185];
PrintGlue[Mem[P+3]↑.Int,Mem[P]↑.Hh.B1,S]; END; END; END;--:178----179:----691:
 ShowNodeList: PROCEDURE[P: Halfword] = 
BEGIN  N:PascalInteger;G:PascalReal;
 {IF( INT[PoolPtr]-StrStart↑[StrPtr])>DepthThreshold  THEN BEGIN IF  INT[P]>0
 THEN Print[186]; GOTO Label10; END;N←0;WHILE  INT[P]>0 DO BEGIN PrintLn[];
PrintCurrentString[];IF  INT[P]>MemEnd  THEN BEGIN Print[187]; GOTO Label10; END;
N←N+1;IF N>BreadthMax  THEN BEGIN Print[188]; GOTO Label10; END;--183:
IF( INT[P]>=HiMemMin) THEN PrintFontAndChar[P] ELSE SELECT Mem[P]↑.Hh.B0 FROM 0,
1,13 =>--184:
BEGIN IF Mem[P]↑.Hh.B0=0  THEN PrintEsc[104] ELSE IF Mem[P]↑.Hh.B0=1  THEN
PrintEsc[118] ELSE PrintEsc[190];Print[191];PrintScaled[Mem[P+3]↑.Int];
PrintChar[43];PrintScaled[Mem[P+2]↑.Int];Print[192];
PrintScaled[Mem[P+1]↑.Int];IF Mem[P]↑.Hh.B0=13  THEN--185:
BEGIN IF Mem[P]↑.Hh.B1#0  THEN BEGIN Print[158];
PrintInt[Mem[P]↑.Hh.B1+1];Print[194]; END;
IF Mem[P+6]↑.Int#0  THEN BEGIN Print[195];
PrintGlue[Mem[P+6]↑.Int,Mem[P+5]↑.Hh.B1,0]; END;
IF Mem[P+4]↑.Int#0  THEN BEGIN Print[196];
PrintGlue[Mem[P+4]↑.Int,Mem[P+5]↑.Hh.B0,0]; END; END--:185-- ELSE BEGIN--186:
G←Mem[P+6]↑.Gr;IF(G#0.0)AND (Mem[P+5]↑.Hh.B0#0) THEN BEGIN Print[197];
IF Mem[P+5]↑.Hh.B0=2  THEN Print[198];
IF ABS[Mem[P+6]↑.Int]<1048576  THEN Print[199] ELSE IF ABS[G]>20000.0  THEN
BEGIN IF G>0.0  THEN PrintChar[62] ELSE Print[200];
PrintGlue[20000*65536,Mem[P+5]↑.Hh.B1,0];
 END  ELSE PrintGlue[PascalROUND[PascalFLOAT[65536]*G],Mem[P+5]↑.Hh.B1,0]; END--:186--;
IF Mem[P+4]↑.Int#0  THEN BEGIN Print[193];PrintScaled[Mem[P+4]↑.Int]; END;
 END;BEGIN BEGIN StrPool↑[PoolPtr]←46;PoolPtr←PoolPtr+1; END;
ShowNodeList[Mem[P+5]↑.Hh.Rh];PoolPtr← INT[PoolPtr]-1; END; END--:184--;
2 =>--187:--BEGIN PrintEsc[201];PrintRuleDimen[Mem[P+3]↑.Int];
PrintChar[43];PrintRuleDimen[Mem[P+2]↑.Int];Print[192];
PrintRuleDimen[Mem[P+1]↑.Int]; END--:187--;3 =>--188:--BEGIN PrintEsc[202];
PrintInt[Mem[P]↑.Hh.B1];Print[203];PrintScaled[Mem[P+3]↑.Int];
Print[204];PrintSpec[Mem[P+4]↑.Hh.Rh,0];PrintChar[44];
PrintScaled[Mem[P+2]↑.Int];Print[205];PrintInt[Mem[P+1]↑.Int];
BEGIN BEGIN StrPool↑[PoolPtr]←46;PoolPtr←PoolPtr+1; END;
ShowNodeList[Mem[P+4]↑.Hh.Lh];PoolPtr← INT[PoolPtr]-1; END; END--:188--;
8 =>--1356:--SELECT Mem[P]↑.Hh.B1 FROM 0 =>BEGIN PrintWriteWhatsit[1134,P];
PrintChar[61];
PrintFileName[Mem[P+1]↑.Hh.Rh,Mem[P+2]↑.Hh.Lh,Mem[P+2]↑.Hh.Rh]; END;
1 =>BEGIN PrintWriteWhatsit[456,P];PrintMark[Mem[P+1]↑.Hh.Rh]; END;
2 =>PrintWriteWhatsit[1135,P];3 =>BEGIN PrintEsc[1136];
PrintMark[Mem[P+1]↑.Hh.Rh]; END; ENDCASE =>Print[1140]--:1356--;10 =>--189:
IF  INT[Mem[P]↑.Hh.B1]>=100  THEN--190:--BEGIN PrintEsc[210];
IF Mem[P]↑.Hh.B1=101  THEN PrintChar[99] ELSE IF Mem[P]↑.Hh.B1=102  THEN
PrintChar[120];Print[211];PrintSpec[Mem[P+1]↑.Hh.Lh,0];
BEGIN BEGIN StrPool↑[PoolPtr]←46;PoolPtr←PoolPtr+1; END;
ShowNodeList[Mem[P+1]↑.Hh.Rh];PoolPtr← INT[PoolPtr]-1; END; END--:190
 ELSE BEGIN PrintEsc[206];IF Mem[P]↑.Hh.B1#0  THEN BEGIN PrintChar[40];
IF  INT[Mem[P]↑.Hh.B1]<98  THEN PrintSkipParam[Mem[P]↑.Hh.B1-1] ELSE IF Mem[P]↑.
Hh.B1=98  THEN PrintEsc[207] ELSE PrintEsc[208];PrintChar[41]; END;
IF Mem[P]↑.Hh.B1#98  THEN BEGIN PrintChar[32];
IF  INT[Mem[P]↑.Hh.B1]<98  THEN PrintSpec[Mem[P+1]↑.Hh.Lh,0] ELSE PrintSpec[Mem[
P+1]↑.Hh.Lh,209]; END; END--:189--;11 =>--191:
IF  INT[Mem[P]↑.Hh.B1]<=1  THEN BEGIN PrintEsc[212];
IF Mem[P]↑.Hh.B1=1  THEN PrintChar[32];PrintScaled[Mem[P+1]↑.Int];
 END  ELSE BEGIN PrintEsc[213];PrintScaled[Mem[P+1]↑.Int];Print[209];
 END--:191--;9 =>--192:--BEGIN PrintEsc[214];
IF Mem[P]↑.Hh.B1=0  THEN Print[215] ELSE Print[216];
IF Mem[P+1]↑.Int#0  THEN BEGIN Print[217];PrintScaled[Mem[P+1]↑.Int]; END;
 END--:192--;6 =>--193:--BEGIN PrintFontAndChar[P+1];Print[218];
FontInShortDisplay←Mem[P+1]↑.Hh.B0;ShortDisplay[Mem[P+1]↑.Hh.Rh];
PrintChar[41]; END--:193--;12 =>--194:--BEGIN PrintEsc[219];
PrintInt[Mem[P+1]↑.Int]; END--:194--;7 =>--195:--BEGIN PrintEsc[220];
IF  INT[Mem[P]↑.Hh.B1]>0  THEN BEGIN Print[221];PrintInt[Mem[P]↑.Hh.B1]; END;
BEGIN BEGIN StrPool↑[PoolPtr]←46;PoolPtr←PoolPtr+1; END;
ShowNodeList[Mem[P+1]↑.Hh.Lh];PoolPtr← INT[PoolPtr]-1; END;
BEGIN StrPool↑[PoolPtr]←124;PoolPtr←PoolPtr+1; END;
ShowNodeList[Mem[P+1]↑.Hh.Rh];PoolPtr← INT[PoolPtr]-1; END--:195--;4 =>--196:
BEGIN PrintEsc[222];PrintMark[Mem[P+1]↑.Int]; END--:196--;5 =>--197:
BEGIN PrintEsc[223];BEGIN BEGIN StrPool↑[PoolPtr]←46;
PoolPtr←PoolPtr+1; END;ShowNodeList[Mem[P+1]↑.Int];
PoolPtr← INT[PoolPtr]-1; END; END--:197--;--690:--14 =>PrintStyle[Mem[P]↑.Hh.B1];
15 =>--695:--BEGIN PrintEsc[387];BEGIN StrPool↑[PoolPtr]←68;
PoolPtr←PoolPtr+1; END;ShowNodeList[Mem[P+1]↑.Hh.Lh];
PoolPtr← INT[PoolPtr]-1;BEGIN StrPool↑[PoolPtr]←84;PoolPtr←PoolPtr+1;
 END;ShowNodeList[Mem[P+1]↑.Hh.Rh];PoolPtr← INT[PoolPtr]-1;
BEGIN StrPool↑[PoolPtr]←83;PoolPtr←PoolPtr+1; END;
ShowNodeList[Mem[P+2]↑.Hh.Lh];PoolPtr← INT[PoolPtr]-1;
BEGIN StrPool↑[PoolPtr]←115;PoolPtr←PoolPtr+1; END;
ShowNodeList[Mem[P+2]↑.Hh.Rh];PoolPtr← INT[PoolPtr]-1; END--:695--;
16,17,18,19,20,21,22,23,24,27,26,29,28,30,31 =>--696:
BEGIN SELECT Mem[P]↑.Hh.B0 FROM 16 =>PrintEsc[724];17 =>PrintEsc[725];
18 =>PrintEsc[726];19 =>PrintEsc[727];20 =>PrintEsc[728];21 =>PrintEsc[729];
22 =>PrintEsc[730];23 =>PrintEsc[731];27 =>PrintEsc[732];26 =>PrintEsc[733];
29 =>PrintEsc[400];24 =>BEGIN PrintEsc[394];PrintDelimiter[P+4]; END;
28 =>BEGIN PrintEsc[370];PrintFamAndChar[P+4]; END;
30 =>BEGIN PrintEsc[734];PrintDelimiter[P+1]; END;
31 =>BEGIN PrintEsc[735];PrintDelimiter[P+1]; END; ENDCASE;
IF Mem[P]↑.Hh.B1#0  THEN IF Mem[P]↑.Hh.B1=1  THEN PrintEsc[736] ELSE
PrintEsc[737];IF  INT[Mem[P]↑.Hh.B0]<30  THEN PrintSubsidiaryData[P+1,46];
PrintSubsidiaryData[P+2,94];PrintSubsidiaryData[P+3,95]; END--:696--;
25 =>--697:--BEGIN PrintEsc[738];
IF Mem[P+1]↑.Int=1073741824  THEN Print[739] ELSE PrintScaled[Mem[P+1]↑.Int
];
IF(Mem[P+4]↑.Qqqq.B0#0)OR (Mem[P+4]↑.Qqqq.B1#0)OR (Mem[P+4]↑.Qqqq.B2#0)OR (
Mem[P+4]↑.Qqqq.B3#0) THEN BEGIN Print[740];PrintDelimiter[P+4]; END;
IF(Mem[P+5]↑.Qqqq.B0#0)OR (Mem[P+5]↑.Qqqq.B1#0)OR (Mem[P+5]↑.Qqqq.B2#0)OR (
Mem[P+5]↑.Qqqq.B3#0) THEN BEGIN Print[741];PrintDelimiter[P+5]; END;
PrintSubsidiaryData[P+2,92];PrintSubsidiaryData[P+3,47]; END--:697--;
--:690-- ENDCASE =>Print[189]--:183--;P←Mem[P]↑.Hh.Rh; END ENDLOOP ;EXITS Label10 => NULL}; END;--:182----198:
 ShowBox: PROCEDURE[P: Halfword] = 
BEGIN--236:
DepthThreshold←Eqtb↑[4792].Int;BreadthMax←Eqtb↑[4791].Int--:236--;
IF BreadthMax<=0  THEN BreadthMax←5;
IF PoolPtr+DepthThreshold>=PoolSize  THEN DepthThreshold←
 INT[PoolSize-PoolPtr]-1;ShowNodeList[P];PrintLn[]; END;--:198----200:
 DeleteTokenRef: PROCEDURE[P: Halfword]
 = 
BEGIN IF Mem[P]↑.Hh.Lh=0  THEN FlushList[P] ELSE Mem[P]↑.Hh.Lh← INT[Mem[P]↑.Hh.
Lh]-1; END;--:200----201:-- DeleteGlueRef: PROCEDURE[P: Halfword]
 = 
BEGIN IF Mem[P]↑.Hh.Rh=0  THEN FreeNode[P,4] ELSE Mem[P]↑.Hh.Rh← INT[Mem[P]↑.Hh.
Rh]-1; END;--:201----202:-- FlushNodeList: PROCEDURE[P: Halfword] = 
BEGIN 
 Q:Halfword; WHILE P#0 DO BEGIN Q←Mem[P]↑.Hh.Rh;
IF( INT[P]>=HiMemMin) THEN BEGIN Mem[P]↑.Hh.Rh←Avail;Avail←P;
DynUsed←DynUsed-1;
 END  ELSE BEGIN {SELECT Mem[P]↑.Hh.B0 FROM 0,1,13 =>BEGIN FlushNodeList[Mem[P+5
]↑.Hh.Rh];FreeNode[P,7]; GOTO Label30; END;2 =>BEGIN FreeNode[P,4]; GOTO Label30; END;
3 =>BEGIN FlushNodeList[Mem[P+4]↑.Hh.Lh];DeleteGlueRef[Mem[P+4]↑.Hh.Rh];
FreeNode[P,5]; GOTO Label30; END;8 =>--1358:
BEGIN SELECT Mem[P]↑.Hh.B1 FROM 0 =>FreeNode[P,3];
1,3 =>BEGIN DeleteTokenRef[Mem[P+1]↑.Hh.Rh];FreeNode[P,2]; GOTO Label30; END;
2 =>FreeNode[P,2]; ENDCASE =>Confusion[1142]; GOTO Label30; END--:1358--;
10 =>BEGIN BEGIN IF Mem[Mem[P+1]↑.Hh.Lh]↑.Hh.Rh=0  THEN FreeNode[Mem[P+1]↑.Hh
.Lh,4] ELSE Mem[Mem[P+1]↑.Hh.Lh]↑.Hh.Rh← INT[Mem[Mem[P+1]↑.Hh.Lh]↑.Hh.Rh]-1; END;
IF Mem[P+1]↑.Hh.Rh#0  THEN FlushNodeList[Mem[P+1]↑.Hh.Rh]; END;11,9,12 => NULL;
6 =>FlushNodeList[Mem[P+1]↑.Hh.Rh];4 =>DeleteTokenRef[Mem[P+1]↑.Int];
7 =>BEGIN FlushNodeList[Mem[P+1]↑.Hh.Lh];FlushNodeList[Mem[P+1]↑.Hh.Rh];
 END;5 =>FlushNodeList[Mem[P+1]↑.Int];--698:--14 =>BEGIN FreeNode[P,3];
 GOTO Label30; END;15 =>BEGIN FlushNodeList[Mem[P+1]↑.Hh.Lh];
FlushNodeList[Mem[P+1]↑.Hh.Rh];FlushNodeList[Mem[P+2]↑.Hh.Lh];
FlushNodeList[Mem[P+2]↑.Hh.Rh];FreeNode[P,3]; GOTO Label30; END;
16,17,18,19,20,21,22,23,24,27,26,29,28 =>BEGIN IF  INT[Mem[P+1]↑.Hh.Rh]>=2  THEN
FlushNodeList[Mem[P+1]↑.Hh.Lh];
IF  INT[Mem[P+2]↑.Hh.Rh]>=2  THEN FlushNodeList[Mem[P+2]↑.Hh.Lh];
IF  INT[Mem[P+3]↑.Hh.Rh]>=2  THEN FlushNodeList[Mem[P+3]↑.Hh.Lh];
IF Mem[P]↑.Hh.B0=24  THEN FreeNode[P,5] ELSE IF Mem[P]↑.Hh.B0=28  THEN
FreeNode[P,5] ELSE FreeNode[P,4]; GOTO Label30; END;
30,31 =>BEGIN FreeNode[P,4]; GOTO Label30; END;
25 =>BEGIN FlushNodeList[Mem[P+2]↑.Hh.Lh];
FlushNodeList[Mem[P+3]↑.Hh.Lh];FreeNode[P,6]; GOTO Label30; END;--:698
 ENDCASE =>Confusion[224];FreeNode[P,2];EXITS Label30 => NULL}; END;P←Q; END ENDLOOP ; END;--:202----204:

END.