-- file: MFInputImpl3.mesa
-- Pascal-to-Mesa translator output, translated at October 31, 1985 4:28:02 pm PST


DIRECTORY
  PascalBasic,
  PascalWizardFiles,
  MFTypes,
  MFProcArray,
  MFExternals,
  MFInteraction,
  MFMemory,
  MFSymbols,
  MFInput,
  MFFileNames,
  MFParsing;

MFInputImpl3: PROGRAM IMPORTS PascalWizardFiles, MFProcArray, MFExternals, MFInteraction, MFMemory, MFSymbols, MFInput, MFFileNames, MFParsing EXPORTS MFInput = PUBLIC
BEGIN OPEN PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFExternals, MFInteraction, MFMemory, MFSymbols, MFInput, MFFileNames, MFParsing;
 PrintArg: PROCEDURE[Q: Halfword,
N: PascalInteger,B: Halfword]
 = 
BEGIN IF Mem[Q]↑.Hh.Rh=1  THEN PrintNl[366] ELSE IF( INT[B]<2542)AND (B#7) THEN
PrintNl[367] ELSE PrintNl[368];PrintInt[N];Print[569];
IF Mem[Q]↑.Hh.Rh=1  THEN PrintExp[Q,1] ELSE ShowTokenList[Q,0,1000,0];
 END;--:722----729:-- ScanTextArg: PROCEDURE[LDelim,RDelim: Halfword]
 = 
BEGIN  Balance:PascalInteger;P:Halfword; WarningInfo←LDelim;
ScannerStatus←3;P←49999;Balance←1;Mem[49999]↑.Hh.Rh←0;
{WHILE TRUE DO BEGIN GetNext[];IF LDelim=0  THEN--731:
BEGIN IF  INT[CurCmd]>79  THEN BEGIN IF Balance=1  THEN  GOTO Label30  ELSE IF CurCmd
=81  THEN Balance←Balance-1;
 END  ELSE IF CurCmd=32  THEN Balance←Balance+1; END--:731-- ELSE--730:
BEGIN IF CurCmd=62  THEN BEGIN IF CurMod=LDelim  THEN BEGIN Balance←
Balance-1;IF Balance=0  THEN  GOTO Label30; END;
 END  ELSE IF CurCmd=31  THEN IF CurMod=RDelim  THEN Balance←Balance+1;
 END--:730--;Mem[P]↑.Hh.Rh←CurTok[];P←Mem[P]↑.Hh.Rh; END ENDLOOP ;
EXITS Label30 => NULL};CurExp←Mem[49999]↑.Hh.Rh;CurType←20;ScannerStatus←0; END;--:729
 MacroCall: PROCEDURE[DefRef,ArgList,MacroName: Halfword] = 
BEGIN 
 R:Halfword;P, Q:Halfword;N:PascalInteger;LDelim, RDelim:Halfword;
Tail:Halfword; R←Mem[DefRef]↑.Hh.Rh;
Mem[DefRef]↑.Hh.Lh← INT[Mem[DefRef]↑.Hh.Lh]+1;
IF ArgList=0  THEN N←0  ELSE--723:--BEGIN N←1;Tail←ArgList;
WHILE Mem[Tail]↑.Hh.Rh#0 DO BEGIN N←N+1;Tail←Mem[Tail]↑.Hh.Rh; END ENDLOOP ;
 END--:723--;IF Internal↑[9]>0  THEN--720:--BEGIN BeginDiagnostic[];PrintLn[];
PrintMacroName[ArgList,MacroName];IF N=3  THEN Print[531];
ShowMacro[DefRef,0,100000];IF ArgList#0  THEN BEGIN N←0;P←ArgList;
DO Q←Mem[P]↑.Hh.Lh;PrintArg[Q,N,0];N←N+1;P←Mem[P]↑.Hh.Rh;
 IF P=0 THEN EXIT; ENDLOOP; END;EndDiagnostic[FALSE]; END--:720--;--724:--CurCmd←80;
WHILE  INT[Mem[R]↑.Hh.Lh]>=2242 DO BEGIN--725:
{IF CurCmd#79  THEN BEGIN GetXNext[];
IF CurCmd#31  THEN BEGIN BEGIN IF Interaction=3  THEN NULL;PrintNl[133];
Print[575]; END;PrintMacroName[ArgList,MacroName];BEGIN HelpPtr←3;
HelpLine↑[2]←576;HelpLine↑[1]←577;HelpLine↑[0]←578; END;
IF  INT[Mem[R]↑.Hh.Lh]>=2392  THEN BEGIN CurExp←0;CurType←20;
 END  ELSE BEGIN CurExp←0;CurType←16; END;BackError[];CurCmd←62;
 GOTO Label40; END;LDelim←CurSym;RDelim←CurMod; END;--728:
IF  INT[Mem[R]↑.Hh.Lh]>=2542  THEN ScanTextArg[LDelim,RDelim] ELSE BEGIN
GetXNext[];IF  INT[Mem[R]↑.Hh.Lh]>=2392  THEN ScanSuffix [] ELSE ScanExpression[];
 END--:728--;IF CurCmd#79  THEN--726:
IF(CurCmd#62)OR (CurMod#LDelim) THEN IF  INT[Mem[Mem[R]↑.Hh.Rh]↑.Hh.Lh]>=2242
 THEN BEGIN MissingErr[44];BEGIN HelpPtr←3;HelpLine↑[2]←579;
HelpLine↑[1]←580;HelpLine↑[0]←574; END;BackError[];CurCmd←79;
 END  ELSE BEGIN MissingErr[Hash↑[RDelim].Rh];BEGIN HelpPtr←2;
HelpLine↑[1]←581;HelpLine↑[0]←574; END;BackError[]; END--:726--;EXITS Label40 => NULL};--727:
BEGIN P←GetAvail[];
IF CurType=20  THEN Mem[P]↑.Hh.Lh←CurExp  ELSE Mem[P]↑.Hh.Lh←
StashCurExp[];IF Internal↑[9]>0  THEN BEGIN BeginDiagnostic[];
PrintArg[Mem[P]↑.Hh.Lh,N,Mem[R]↑.Hh.Lh];EndDiagnostic[FALSE]; END;
IF ArgList=0  THEN ArgList←P  ELSE Mem[Tail]↑.Hh.Rh←P;Tail←P;N←N+1;
 END--:727----:725--;R←Mem[R]↑.Hh.Rh; END ENDLOOP ;
IF CurCmd=79  THEN BEGIN BEGIN IF Interaction=3  THEN NULL;PrintNl[133];
Print[570]; END;PrintMacroName[ArgList,MacroName];PrintChar[59];
PrintNl[571];Print[Hash↑[RDelim].Rh];Print[172];BEGIN HelpPtr←3;
HelpLine↑[2]←572;HelpLine↑[1]←573;HelpLine↑[0]←574; END;Error[]; END;
IF Mem[R]↑.Hh.Lh#0  THEN--732:
BEGIN IF  INT[Mem[R]↑.Hh.Lh]<7  THEN BEGIN GetXNext[];
IF Mem[R]↑.Hh.Lh#6  THEN IF(CurCmd=51)OR (CurCmd=77) THEN GetXNext[]; END;
SELECT Mem[R]↑.Hh.Lh FROM 1 =>ScanPrimary[];2 =>ScanSecondary[];3 =>ScanTertiary[];
4 =>ScanExpression[];5 =>--733:--BEGIN ScanExpression[];P←GetAvail[];
Mem[P]↑.Hh.Lh←StashCurExp[];
IF Internal↑[9]>0  THEN BEGIN BeginDiagnostic[];
PrintArg[Mem[P]↑.Hh.Lh,N,0];EndDiagnostic[FALSE]; END;
IF ArgList=0  THEN ArgList←P  ELSE Mem[Tail]↑.Hh.Rh←P;Tail←P;N←N+1;
IF CurCmd#69  THEN BEGIN MissingErr[348];Print[582];
PrintMacroName[ArgList,MacroName];BEGIN HelpPtr←1;
HelpLine↑[0]←583; END;BackError[]; END;GetXNext[];ScanPrimary[]; END--:733--;
6 =>--734:
BEGIN IF CurCmd#31  THEN LDelim←0  ELSE BEGIN LDelim←CurSym;
RDelim←CurMod;GetXNext[]; END;ScanSuffix[];
IF LDelim#0  THEN BEGIN IF(CurCmd#62)OR (CurMod#LDelim) THEN BEGIN
MissingErr[Hash↑[RDelim].Rh];BEGIN HelpPtr←2;HelpLine↑[1]←581;
HelpLine↑[0]←574; END;BackError[]; END;GetXNext[]; END; END--:734--;
7 =>ScanTextArg[0,0]; ENDCASE;BackInput[];--727:--BEGIN P←GetAvail[];
IF CurType=20  THEN Mem[P]↑.Hh.Lh←CurExp  ELSE Mem[P]↑.Hh.Lh←
StashCurExp[];IF Internal↑[9]>0  THEN BEGIN BeginDiagnostic[];
PrintArg[Mem[P]↑.Hh.Lh,N,Mem[R]↑.Hh.Lh];EndDiagnostic[FALSE]; END;
IF ArgList=0  THEN ArgList←P  ELSE Mem[Tail]↑.Hh.Rh←P;Tail←P;N←N+1;
 END--:727--; END--:732--;R←Mem[R]↑.Hh.Rh--:724--;--735:
WHILE( INT[CurInput.IndexField]>6)AND (CurInput.LocField=0)DO
EndTokenList[] ENDLOOP ;
IF ParamPtr+N>MaxParamStack  THEN BEGIN MaxParamStack←ParamPtr+N;
IF MaxParamStack>150  THEN Overflow[553,150]; END;
BeginTokenList[DefRef,12];CurInput.NameField←MacroName;
CurInput.LocField←R;IF N>0  THEN BEGIN P←ArgList;
DO ParamStack↑[ParamPtr]←Mem[P]↑.Hh.Lh;ParamPtr←ParamPtr+1;
P←Mem[P]↑.Hh.Rh; IF P=0 THEN EXIT; ENDLOOP;FlushList[ArgList]; END--:735--; END;--:719
--:705----706:-- Expand: PROCEDURE
 = 
BEGIN P:Halfword;K:PascalInteger;J:PoolPointer;
 IF Internal↑[7]>65536  THEN IF CurCmd#10  THEN ShowCmdMod[CurCmd
,CurMod];SELECT CurCmd FROM 1 =>Conditional[];2 =>--750:
IF CurMod>IfLimit  THEN IF IfLimit=1  THEN BEGIN MissingErr[58];
BackInput[];CurSym←2234;InsError[];
 END  ELSE BEGIN BEGIN IF Interaction=3  THEN NULL;PrintNl[133];Print[590]; END;
PrintCmdMod[2,CurMod];BEGIN HelpPtr←1;HelpLine↑[0]←591; END;Error[];
 END  ELSE BEGIN WHILE CurMod#2 DO PassText[] ENDLOOP ;--744:--BEGIN P←CondPtr;
IfLine←Mem[ INT[P]+1]↑.Int;CurIf←Mem[P]↑.Hh.B1;IfLimit←Mem[P]↑.Hh.B0;
CondPtr←Mem[P]↑.Hh.Rh;FreeNode[P,2]; END--:744--; END--:750--;3 =>--710:
IF CurMod>0  THEN ForceEof←TRUE  ELSE StartInput--:710--[];
4 =>IF CurMod=0  THEN--707:--BEGIN BEGIN IF Interaction=3  THEN NULL;
PrintNl[133];Print[554]; END;BEGIN HelpPtr←2;HelpLine↑[1]←555;
HelpLine↑[0]←556; END;Error[]; END--:707-- ELSE BeginIteration[];5 =>--711:
BEGIN WHILE( INT[CurInput.IndexField]>6)AND (CurInput.LocField=0)DO
EndTokenList[] ENDLOOP ;IF LoopPtr=0  THEN BEGIN BEGIN IF Interaction=3  THEN NULL;
PrintNl[133];Print[558]; END;BEGIN HelpPtr←2;HelpLine↑[1]←559;
HelpLine↑[0]←560; END;Error[]; END  ELSE ResumeIteration[]; END--:711--;6 =>--712:
BEGIN GetBoolean[];IF Internal↑[7]>65536  THEN ShowCmdMod[33,CurExp];
IF CurExp=30  THEN IF LoopPtr=0  THEN BEGIN BEGIN IF Interaction=3  THEN NULL;
PrintNl[133];Print[561]; END;BEGIN HelpPtr←1;HelpLine↑[0]←562; END;
IF CurCmd=80  THEN Error [] ELSE BackError[]; END  ELSE--713:--BEGIN P←0;
DO IF( INT[CurInput.IndexField]<=6) THEN EndFileReading [] ELSE BEGIN IF
 INT[CurInput.IndexField]<=8  THEN P←CurInput.StartField;EndTokenList[];
 END; IF P#0 THEN EXIT; ENDLOOP;IF P#Mem[LoopPtr]↑.Hh.Lh  THEN FatalError[565];
StopIteration[]; END--:713-- ELSE IF CurCmd#80  THEN BEGIN MissingErr[59];
BEGIN HelpPtr←2;HelpLine↑[1]←563;HelpLine↑[0]←564; END;BackError[];
 END; END--:712--;7 => NULL;9 =>--714:--BEGIN GetNext[];P←CurTok[];GetNext[];
IF  INT[CurCmd]<11  THEN Expand [] ELSE BackInput[];BeginTokenList[P,10];
 END--:714--;8 =>--715:--BEGIN GetXNext[];ScanPrimary[];
IF CurType#4  THEN BEGIN DispErr[0,566];BEGIN HelpPtr←2;
HelpLine↑[1]←567;HelpLine↑[0]←568; END;PutGetFlushError[0];
 END  ELSE BEGIN BackInput[];
IF INT[(StrStart↑[CurExp+1]-StrStart↑[CurExp])]>0  THEN--716:
BEGIN BeginFileReading[];CurInput.NameField←2;
K← INT[First]+(StrStart↑[CurExp+1]-StrStart↑[CurExp]);
IF K>=MaxBufStack  THEN BEGIN IF K>=BufSize  THEN BEGIN MaxBufStack←
BufSize;Overflow[128,BufSize]; END;MaxBufStack←K+1; END;
J←StrStart↑[CurExp];CurInput.LimitField←K;
WHILE  INT[First]<CurInput.LimitField DO BEGIN Buffer↑[First]←StrPool↑[J];
J←J+1;First←First+1; END ENDLOOP ;Buffer↑[CurInput.LimitField]←37;
First← INT[CurInput.LimitField]+1;
CurInput.LocField←CurInput.StartField;FlushCurExp[0]; END--:716--;
 END; END--:715--;10 =>MacroCall[CurMod,0,CurSym]; ENDCASE; END;--:706----717:
 
 GetXNext: PROCEDURE = 
BEGIN SaveExp:Halfword; GetNext[];
IF  INT[CurCmd]<11  THEN BEGIN SaveExp←StashCurExp[];
DO IF CurCmd=10  THEN MacroCall[CurMod,0,CurSym] ELSE Expand[];
GetNext[]; IF  INT[CurCmd]>=11 THEN EXIT; ENDLOOP;UnstashCurExp[SaveExp]; END; END;--:717
--736:-- StackArgument: PROCEDURE[P: Halfword]
 = 
BEGIN IF ParamPtr=MaxParamStack  THEN BEGIN MaxParamStack←
MaxParamStack+1;IF MaxParamStack>150  THEN Overflow[553,150]; END;
ParamStack↑[ParamPtr]←P;ParamPtr←ParamPtr+1; END;--:736----741:
  PassText: PROCEDURE = 
BEGIN  L:PascalInteger; ScannerStatus←1;L←0;
WarningInfo←Line;{WHILE TRUE DO BEGIN GetNext[];
IF  INT[CurCmd]<=2  THEN IF  INT[CurCmd]<2  THEN L←L+1  ELSE BEGIN IF L=0  THEN 
GOTO Label30;IF CurMod=2  THEN L←L-1; END  ELSE--742:
IF CurCmd=39  THEN BEGIN IF  INT[StrRef↑[CurMod]]<127  THEN IF  INT[StrRef↑[CurMod
]]>1  THEN StrRef↑[CurMod]←StrRef↑[CurMod]-1  ELSE FlushString[CurMod]
; END--:742--; END ENDLOOP ;EXITS Label30 => NULL};ScannerStatus←0; END;--:741----745:
 ChangeIfLimit: PROCEDURE[L: SmallNumber,P: Halfword] = 
BEGIN 
 Q:Halfword;
 {IF P=CondPtr  THEN IfLimit←L  ELSE BEGIN Q←CondPtr;
WHILE TRUE DO BEGIN IF Q=0  THEN Confusion[584];
IF Mem[Q]↑.Hh.Rh=P  THEN BEGIN Mem[Q]↑.Hh.B0←L; GOTO Label10; END;
Q←Mem[Q]↑.Hh.Rh; END ENDLOOP ; END;EXITS Label10 => NULL}; END;--:745----746:-- CheckColon: PROCEDURE
 = 
BEGIN IF CurCmd#78  THEN BEGIN MissingErr[58];BEGIN HelpPtr←2;
HelpLine↑[1]←587;HelpLine↑[0]←564; END;BackError[]; END; END;--:746----747:
 
 Conditional: PROCEDURE = 
BEGIN  SaveCondPtr:Halfword;
NewIfLimit:PascalInteger[2..4];P:Halfword;--743:--BEGIN P←GetNode[2];
Mem[P]↑.Hh.Rh←CondPtr;Mem[P]↑.Hh.B0←IfLimit;Mem[P]↑.Hh.B1←CurIf;
Mem[ INT[P]+1]↑.Int←IfLine;CondPtr←P;IfLimit←1;IfLine←Line;CurIf←1;
 END--:743--;SaveCondPtr←CondPtr;DO {--Label21:--GetBoolean[];NewIfLimit←4;
IF Internal↑[7]>65536  THEN--749:--BEGIN BeginDiagnostic[];
IF CurExp=30  THEN Print[588] ELSE Print[589];EndDiagnostic[FALSE];
 END--:749--;DO {--Label40:--CheckColon[];
{IF CurExp=30  THEN BEGIN ChangeIfLimit[NewIfLimit,SaveCondPtr];
 GOTO Label10; END;--748:--{WHILE TRUE DO BEGIN PassText[];
IF CondPtr=SaveCondPtr  THEN  GOTO Label30  ELSE IF CurMod=2  THEN--744:
BEGIN P←CondPtr;IfLine←Mem[ INT[P]+1]↑.Int;CurIf←Mem[P]↑.Hh.B1;
IfLimit←Mem[P]↑.Hh.B0;CondPtr←Mem[P]↑.Hh.Rh;FreeNode[P,2]; END--:744--;
 END--:748-- ENDLOOP ;EXITS Label30 => NULL};CurIf←CurMod;IfLine←Line;IF CurMod=2  THEN--744:
BEGIN P←CondPtr;IfLine←Mem[ INT[P]+1]↑.Int;CurIf←Mem[P]↑.Hh.B1;
IfLimit←Mem[P]↑.Hh.B0;CondPtr←Mem[P]↑.Hh.Rh;FreeNode[P,2]; END--:744
 ELSE IF CurMod=4  THEN  GOTO Label21  ELSE BEGIN CurExp←30;NewIfLimit←2;
GetXNext[]; GOTO Label40; END;EXITS Label10 => NULL};EXIT; EXITS Label40 => NULL} ENDLOOP;EXIT; EXITS Label21 => NULL} ENDLOOP; END;--:747----753:
 BadFor: PROCEDURE[S: StrNumber] = 
BEGIN DispErr[0,592];Print[S];
Print[179];BEGIN HelpPtr←4;HelpLine↑[3]←593;HelpLine↑[2]←594;
HelpLine↑[1]←595;HelpLine↑[0]←181; END;PutGetFlushError[0]; END;
--:753----754:-- 
 BeginIteration: PROCEDURE = 
BEGIN  M:Halfword;
N:Halfword;P, Q, S, Pp:Halfword; 
 M←CurMod;N←CurSym;S←GetNode[2];
{IF M=1  THEN BEGIN Mem[ INT[S]+1]↑.Hh.Lh←1;P←0;GetXNext[]; GOTO Label40; END;
GetSymbol[];P←GetNode[2];Mem[P]↑.Hh.Lh←CurSym;Mem[ INT[P]+1]↑.Int←M;
GetXNext[];IF(CurCmd#51)AND (CurCmd#77) THEN BEGIN MissingErr[61];
BEGIN HelpPtr←3;HelpLine↑[2]←596;HelpLine↑[1]←539;HelpLine↑[0]←597;
 END;BackError[]; END;--763:--Mem[ INT[S]+1]↑.Hh.Lh←0;Q← INT[S]+1;Mem[Q]↑.Hh.Rh←0;
{DO GetXNext[];
{IF M#2242  THEN ScanSuffix [] ELSE BEGIN IF  INT[CurCmd]>=78  THEN IF 
 INT[CurCmd]<=79  THEN  GOTO Label22;ScanExpression[];IF CurCmd=74  THEN IF Q= INT[S]+1  THEN--764:
BEGIN IF CurType#16  THEN BadFor[603];Pp←GetNode[4];
Mem[ INT[Pp]+1]↑.Int←CurExp;GetXNext[];ScanExpression[];
IF CurType#16  THEN BadFor[604];Mem[ INT[Pp]+2]↑.Int←CurExp;
IF CurCmd#75  THEN BEGIN MissingErr[358];BEGIN HelpPtr←2;
HelpLine↑[1]←605;HelpLine↑[0]←606; END;BackError[]; END;GetXNext[];
ScanExpression[];IF CurType#16  THEN BadFor[607];
Mem[ INT[Pp]+3]↑.Int←CurExp;Mem[ INT[S]+1]↑.Hh.Lh←Pp; GOTO Label30; END--:764--;
CurExp←StashCurExp[]; END;Mem[Q]↑.Hh.Rh←GetAvail[];Q←Mem[Q]↑.Hh.Rh;
Mem[Q]↑.Hh.Lh←CurExp;CurType←1;EXITS Label22 => NULL}; IF CurCmd#79 THEN EXIT; ENDLOOP;EXITS Label30 => NULL};--:763--EXITS Label40 => NULL};--755:--IF CurCmd#78  THEN BEGIN MissingErr[58];BEGIN HelpPtr←3;
HelpLine↑[2]←598;HelpLine↑[1]←599;HelpLine↑[0]←600; END;BackError[];
 END--:755--;--757:--Q←GetAvail[];Mem[Q]↑.Hh.Lh←2230;ScannerStatus←6;
WarningInfo←N;Mem[S]↑.Hh.Lh←ScanToks[4,P,Q,0];ScannerStatus←0;
Mem[S]↑.Hh.Rh←LoopPtr;LoopPtr←S--:757--;ResumeIteration[]; END;--:754
--759:--  ResumeIteration: PROCEDURE = 
BEGIN  P, Q:Halfword;
 P←Mem[ INT[LoopPtr]+1]↑.Hh.Lh;{{IF  INT[P]>1  THEN BEGIN CurExp←Mem[ INT[P]+1]↑.Int;
IF--760:
((Mem[ INT[P]+2]↑.Int>0)AND (CurExp>Mem[ INT[P]+3]↑.Int))OR ((Mem[ INT[P]+2]↑.Int<0)AND (
CurExp<Mem[ INT[P]+3]↑.Int))--:760-- THEN  GOTO Label45;CurType←16;Q←StashCurExp[];
Mem[ INT[P]+1]↑.Int←CurExp+Mem[ INT[P]+2]↑.Int;
 END  ELSE IF  INT[P]<1  THEN BEGIN P←Mem[ INT[LoopPtr]+1]↑.Hh.Rh;IF P=0  THEN  GOTO Label45;
Mem[ INT[LoopPtr]+1]↑.Hh.Rh←Mem[P]↑.Hh.Rh;Q←Mem[P]↑.Hh.Lh;
BEGIN Mem[P]↑.Hh.Rh←Avail;Avail←P;DynUsed←DynUsed-1; END;
 END  ELSE BEGIN BeginTokenList[Mem[LoopPtr]↑.Hh.Lh,7]; GOTO Label10; END;
BeginTokenList[Mem[LoopPtr]↑.Hh.Lh,8];StackArgument[Q];
IF Internal↑[7]>65536  THEN--761:--BEGIN BeginDiagnostic[];PrintNl[602];
IF(Q#0)AND (Mem[Q]↑.Hh.Rh=1) THEN PrintExp[Q,1] ELSE ShowTokenList[Q,0,
50,0];PrintChar[125];EndDiagnostic[FALSE]; END--:761--; GOTO Label10;
EXITS Label45 => NULL};StopIteration[];EXITS Label10 => NULL}; END;--:759----762:-- 

 StopIteration: PROCEDURE = 
BEGIN P, Q:Halfword; P←Mem[ INT[LoopPtr]+1]↑.Hh.Lh;
IF  INT[P]>1  THEN FreeNode[P,4] ELSE IF  INT[P]<1  THEN BEGIN Q←Mem[ INT[LoopPtr]+1]↑.Hh.
Rh;WHILE Q#0 DO BEGIN P←Mem[Q]↑.Hh.Lh;
IF P#0  THEN IF Mem[P]↑.Hh.Rh=1  THEN BEGIN RecycleValue[P];
FreeNode[P,2]; END  ELSE FlushTokenList[P];P←Q;Q←Mem[Q]↑.Hh.Rh;
BEGIN Mem[P]↑.Hh.Rh←Avail;Avail←P;DynUsed←DynUsed-1; END; END ENDLOOP ; END;
P←LoopPtr;LoopPtr←Mem[P]↑.Hh.Rh;FlushTokenList[Mem[P]↑.Hh.Lh];
FreeNode[P,2]; END;--:762----769:----:787----792:--  StartInput: PROCEDURE = 
BEGIN 
 StrPtrMinusOne:Halfword;--794:
WHILE( INT[CurInput.IndexField]>6)AND (CurInput.LocField=0)DO
EndTokenList[] ENDLOOP ;
IF( INT[CurInput.IndexField]>6) THEN BEGIN BEGIN IF Interaction=3  THEN NULL;
PrintNl[133];Print[622]; END;BEGIN HelpPtr←3;HelpLine↑[2]←623;
HelpLine↑[1]←624;HelpLine↑[0]←625; END;Error[]; END;
IF( INT[CurInput.IndexField]<=6) THEN ScanFileName [] ELSE BEGIN CurName←157
;CurExt←157;CurArea←157; END--:794--;IF CurExt=157  THEN CurExt←612;
PackFileName[CurName,CurArea,CurExt];
{WHILE TRUE DO BEGIN BeginFileReading[];
IF AOpenIn[@InputFile↑[CurInput.IndexField]] THEN  GOTO Label30;
PackFileName[CurName,MfArea,CurExt];
IF AOpenIn[@InputFile↑[CurInput.IndexField]] THEN  GOTO Label30;
EndFileReading[];PromptFileName[608,612]; END ENDLOOP ;
EXITS Label30 => NULL};CurInput.NameField←AMakeNameString[@InputFile↑[CurInput.
IndexField]];StrRef↑[CurName]←127;
IF JobName=0  THEN BEGIN JobName←CurName;OpenLogFile[]; END;
IF  INT[TermOffset]+(StrStart↑[ INT[CurInput.NameField]+1]-StrStart↑[CurInput.
NameField])>MaxPrintLine-2  THEN PrintLn [] ELSE IF( INT[TermOffset]>0)OR (
 INT[FileOffset]>0) THEN PrintChar[32];PrintChar[40];
Print[CurInput.NameField];PascalTextBREAK[file: @TermOut];
StrPtrMinusOne←StrPtr-1;
IF CurInput.NameField=StrPtrMinusOne  THEN BEGIN FlushString[
CurInput.NameField];CurInput.NameField←CurName; END;--793:
BEGIN IF  NOT InputLn[@InputFile↑[CurInput.IndexField],FALSE] THEN NULL;
FirmUpTheLine[];Buffer↑[CurInput.LimitField]←37;
First← INT[CurInput.LimitField]+1;
CurInput.LocField←CurInput.StartField;Line←1; END--:793--; END;--:792

END.