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