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