-- file: TexRestImpl.mesa
-- Pascal-to-Mesa translator output, translated at September 27, 1985 10:21:38 am PDT
DIRECTORY
PascalBasic,
PascalWizardFiles,
TexTypes,
TexInteraction,
TexMemory,
TexSymbols,
TexScan,
TexOps,
TexParagraph,
TexBuildPage,
TexRest,
TexSysdepInline;
TexRestImpl: PROGRAM IMPORTS TexTypes, TexInteraction, TexMemory, TexSymbols, TexBuildPage, TexSysdepInline EXPORTS TexRest = PUBLIC
BEGIN OPEN PascalBasic, PascalWizardFiles, TexTypes, TexInteraction, TexMemory, TexSymbols, TexScan, TexOps, TexParagraph, TexBuildPage, TexRest, TexSysdepInline;
MacroCall: PROCEDURE =
BEGIN
R:Halfword;P:Halfword;Q:Halfword;S:Halfword;T:Halfword;U, V:Halfword;
RbracePtr:Halfword;N:SmallNumber;Unbalance:Halfword;M:Halfword;
RefCount:Halfword;SaveScannerStatus:SmallNumber;
SaveWarningIndex:Halfword;MatchChr:AsciiCode;
SaveScannerStatus←ScannerStatus;
SaveWarningIndex←WarningIndex;WarningIndex←CurCs;
RefCount←CurChr;R←Mem[RefCount]↑.Hh.Rh;N←0;
IF Eqtb↑[4797].Int>0 THEN--401:--BEGIN BeginDiagnostic[];PrintLn[];
PrintCs[WarningIndex];TokenShow[RefCount];EndDiagnostic[FALSE];
END--:401--;{IF Mem[R]↑.Hh.Lh#3584 THEN--391:--BEGIN ScannerStatus←3;
Unbalance←0;LongState←Eqtb↑[CurCs].Hh.B0;
IF INT[LongState]>=112 THEN LongState←LongState-2;
DO IF( INT[Mem[R]↑.Hh.Lh]>3455)OR ( INT[Mem[R]↑.Hh.Lh]<3328) THEN S←0 ELSE BEGIN
MatchChr← INT[Mem[R]↑.Hh.Lh]-3328;S←Mem[R]↑.Hh.Rh;R←S;P←64997;
Mem[P]↑.Hh.Rh←0;M←0; END;--392:--DO {--Label22:--GetToken[];
{IF CurTok=Mem[R]↑.Hh.Lh THEN--394:--BEGIN R←Mem[R]↑.Hh.Rh;
IF( INT[Mem[R]↑.Hh.Lh]>=3328)AND ( INT[Mem[R]↑.Hh.Lh]<=3584) THEN BEGIN IF INT[CurTok]<512
THEN AlignState←AlignState-1; GOTO Label40; END ELSE GOTO Label22; END--:394--;
--397:--IF S#R THEN IF S=0 THEN--398:--BEGIN BEGIN IF Interaction=3 THEN NULL;
PrintNl[134];Print[511]; END;SprintCs[WarningIndex];Print[512];
BEGIN HelpPtr←4;HelpLine↑[3]←513;HelpLine↑[2]←514;HelpLine↑[1]←515;
HelpLine↑[0]←516; END;Error[]; GOTO Label10; END--:398-- ELSE BEGIN T←S;
DO BEGIN Q←GetAvail[];Mem[P]↑.Hh.Rh←Q;Mem[Q]↑.Hh.Lh←Mem[T]↑.Hh.Lh;
P←Q; END;M←M+1;U←Mem[T]↑.Hh.Rh;V←S;
{WHILE TRUE DO BEGIN IF U=R THEN IF CurTok#Mem[V]↑.Hh.Lh THEN GOTO Label30
ELSE BEGIN R←Mem[V]↑.Hh.Rh; GOTO Label22; END;
IF Mem[U]↑.Hh.Lh#Mem[V]↑.Hh.Lh THEN GOTO Label30;U←Mem[U]↑.Hh.Rh;
V←Mem[V]↑.Hh.Rh; END ENDLOOP ;EXITS Label30 => NULL};T←Mem[T]↑.Hh.Rh; IF T=R THEN EXIT; ENDLOOP;R←S; END--:397--;
IF CurTok=ParToken THEN IF LongState#111 THEN--396:
BEGIN IF LongState=110 THEN BEGIN Runaway[];BEGIN IF Interaction=3 THEN NULL;
PrintNl[134];Print[506]; END;SprintCs[WarningIndex];Print[507];
BEGIN HelpPtr←3;HelpLine↑[2]←508;HelpLine↑[1]←509;HelpLine↑[0]←510;
END;BackError[]; END;Pstack↑[N]←Mem[64997]↑.Hh.Rh;
AlignState←AlignState-Unbalance;
FOR i:INT IN [ INT[0 ].. INT[N ]] DO M ← i; FlushList[Pstack↑[M]] ENDLOOP; GOTO Label10; END--:396--;
IF INT[CurTok]<768 THEN IF INT[CurTok]<512 THEN--399:--BEGIN Unbalance←1;
{WHILE TRUE DO BEGIN BEGIN BEGIN Q←Avail;
IF Q=0 THEN Q←GetAvail [] ELSE BEGIN Avail←Mem[Q]↑.Hh.Rh;Mem[Q]↑.Hh.Rh←0;
DynUsed←DynUsed+1; END; END;Mem[P]↑.Hh.Rh←Q;Mem[Q]↑.Hh.Lh←CurTok;P←Q;
END;GetToken[];IF CurTok=ParToken THEN IF LongState#111 THEN--396:
BEGIN IF LongState=110 THEN BEGIN Runaway[];BEGIN IF Interaction=3 THEN NULL;
PrintNl[134];Print[506]; END;SprintCs[WarningIndex];Print[507];
BEGIN HelpPtr←3;HelpLine↑[2]←508;HelpLine↑[1]←509;HelpLine↑[0]←510;
END;BackError[]; END;Pstack↑[N]←Mem[64997]↑.Hh.Rh;
AlignState←AlignState-Unbalance;
FOR i:INT IN [ INT[0 ].. INT[N ]] DO M ← i; FlushList[Pstack↑[M]] ENDLOOP; GOTO Label10; END--:396--;
IF INT[CurTok]<768 THEN IF INT[CurTok]<512 THEN Unbalance←Unbalance+1 ELSE
BEGIN Unbalance← INT[Unbalance]-1;IF Unbalance=0 THEN GOTO Label31; END; END ENDLOOP ;
EXITS Label31 => NULL};RbracePtr←P;BEGIN Q←GetAvail[];Mem[P]↑.Hh.Rh←Q;
Mem[Q]↑.Hh.Lh←CurTok;P←Q; END; END--:399-- ELSE--395:--BEGIN BackInput[];
BEGIN IF Interaction=3 THEN NULL;PrintNl[134];Print[498]; END;
SprintCs[WarningIndex];Print[499];BEGIN HelpPtr←6;HelpLine↑[5]←500;
HelpLine↑[4]←501;HelpLine↑[3]←502;HelpLine↑[2]←503;HelpLine↑[1]←504;
HelpLine↑[0]←505; END;AlignState←AlignState+1;LongState←110;
CurTok←ParToken;InsError[]; END--:395-- ELSE--393:
BEGIN IF CurTok=2592 THEN IF INT[Mem[R]↑.Hh.Lh]<=3584 THEN IF
INT[Mem[R]↑.Hh.Lh]>=3328 THEN GOTO Label22;BEGIN Q←GetAvail[];Mem[P]↑.Hh.Rh←Q;
Mem[Q]↑.Hh.Lh←CurTok;P←Q; END; END--:393--;M←M+1;
IF INT[Mem[R]↑.Hh.Lh]>3584 THEN GOTO Label22;IF INT[Mem[R]↑.Hh.Lh]<3328 THEN GOTO Label22;
EXITS Label40 => NULL};IF S#0 THEN--400:
BEGIN IF(M=1)AND ( INT[Mem[P]↑.Hh.Lh]<768)AND (P#64997) THEN BEGIN Mem[RbracePtr
]↑.Hh.Rh←0;BEGIN Mem[P]↑.Hh.Rh←Avail;Avail←P;DynUsed←DynUsed-1; END;
P←Mem[64997]↑.Hh.Rh;Pstack↑[N]←Mem[P]↑.Hh.Rh;BEGIN Mem[P]↑.Hh.Rh←Avail;
Avail←P;DynUsed←DynUsed-1; END; END ELSE Pstack↑[N]←Mem[64997]↑.Hh.Rh;
N←N+1;IF Eqtb↑[4797].Int>0 THEN BEGIN BeginDiagnostic[];
PrintNl[MatchChr];PrintInt[N];Print[517];
ShowTokenList[Pstack↑[N-1],0,1000];EndDiagnostic[FALSE]; END; END--:400
--:392--;EXIT; EXITS Label22 => NULL} ENDLOOP; IF Mem[R]↑.Hh.Lh=3584 THEN EXIT; ENDLOOP; END--:391--;--390:
WHILE(CurInput.StateField=0)AND (CurInput.LocField=0)DO
EndTokenList[] ENDLOOP ;BeginTokenList[RefCount,5];
CurInput.NameField←WarningIndex;CurInput.LocField←Mem[R]↑.Hh.Rh;
IF INT[N]>0 THEN BEGIN IF ParamPtr+N>MaxParamStack THEN BEGIN
MaxParamStack←ParamPtr+N;
IF MaxParamStack>ParamSize THEN Overflow[497,ParamSize]; END;
FOR i:INT IN [ INT[0 ].. INT[N-1 ]] DO M ← i; ParamStack↑[ INT[ParamPtr]+M]←Pstack↑[M] ENDLOOP;
ParamPtr←ParamPtr+N; END--:390--;EXITS Label10 => NULL};ScannerStatus←SaveScannerStatus;
WarningIndex←SaveWarningIndex; END;--:389----379:
StrToks: PROCEDURE RETURNS[StrToksResult: Halfword] =
BEGIN P:Halfword;Q:Halfword;T:Halfword;
K:PoolPointer;
BEGIN IF INT[PoolPtr+1]>PoolSize THEN Overflow[129,
PoolSize-InitPoolPtr]; END;P←64997;Mem[P]↑.Hh.Rh←0;K←StrStart↑[StrPtr];
WHILE INT[K]<PoolPtr DO BEGIN T←StrPool↑[K];
IF T=32 THEN T←2592 ELSE T← INT[3072]+T;BEGIN BEGIN Q←Avail;
IF Q=0 THEN Q←GetAvail [] ELSE BEGIN Avail←Mem[Q]↑.Hh.Rh;Mem[Q]↑.Hh.Rh←0;
DynUsed←DynUsed+1; END; END;Mem[P]↑.Hh.Rh←Q;Mem[Q]↑.Hh.Lh←T;P←Q; END;
K←K+1; END ENDLOOP ;PoolPtr←StrStart↑[StrPtr];StrToksResult←P; END;--:464----465:
ResumeAfterDisplay: PROCEDURE =
BEGIN IF CurGroup#15 THEN Confusion[1022];Unsave[];
CurList.PgField←CurList.PgField+3;PushNest[];
CurList.ModeField←101;CurList.AuxField←1000;--443:
BEGIN GetXToken[];IF CurCmd#10 THEN BackInput[]; END--:443--;
IF NestPtr=1 THEN BuildPage[]; END;--:1200----1211:----1215:
END.