-- 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.