-- file: MFInputImpl1.mesa -- Pascal-to-Mesa translator output, translated at October 31, 1985 4:28:02 pm PST DIRECTORY PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFExternals, MFInteraction, MFMath, MFMemory, MFSymbols, MFInput, MFParsing; MFInputImpl1: PROGRAM IMPORTS PascalBasic, PascalWizardFiles, MFProcArray, MFExternals, MFInteraction, MFMath, MFMemory, MFSymbols, MFParsing EXPORTS MFInput = PUBLIC BEGIN OPEN PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFExternals, MFInteraction, MFMath, MFMemory, MFSymbols, MFInput, MFParsing; --:591----623:-- CurCmd: EightBits; CurMod: PascalInteger; CurSym: Halfword; --:623----627: InputStack: LONG POINTER TO ARRAY PascalInteger[0..30] OF InStateRecord _ PascalStaticZone.NEW[ARRAY PascalInteger[0..30] OF InStateRecord]; InputPtr: PascalInteger[0..StackSize]; MaxInStack: PascalInteger[0..StackSize]; CurInput: InStateRecord; --:627----630:-- InOpen: PascalInteger[0..6]; InputFile: LONG POINTER TO ARRAY PascalInteger[1..6] OF AlphaFile _ PascalStaticZone.NEW[ARRAY PascalInteger[1..6] OF AlphaFile]; Line: PascalInteger; LineStack: LONG POINTER TO ARRAY PascalInteger[1..6] OF PascalInteger _ PascalStaticZone.NEW[ARRAY PascalInteger[1..6] OF PascalInteger]; --:630----632: ParamStack: LONG POINTER TO ARRAY PascalInteger[0..150] OF Halfword _ PascalStaticZone.NEW[ARRAY PascalInteger[0..150] OF Halfword]; ParamPtr: PascalInteger[0..150]; MaxParamStack: PascalInteger; --:632----633:-- FilePtr: PascalInteger[0..StackSize]; --:633----658: ScannerStatus: PascalInteger[0..6]; WarningInfo: PascalInteger; --:658----679:-- ForceEof: PascalBoolean; --:698----737:-- CondPtr: Halfword; IfLimit: PascalInteger[0..4]; CurIf: SmallNumber; IfLine: PascalInteger; --:737----751: LoopPtr: Halfword; --:27----30: InputLn: PROCEDURE[ F: LONG POINTER TO AlphaFile,BypassEoln: PascalBoolean] RETURNS[InputLnResult: PascalBoolean] = BEGIN LastNonblank:PascalInteger[0..BufSize]; IF BypassEoln THEN IF NOT PascalTextEOF[file: @F^] THEN PascalTextGET[file: @F^];Last_First; IF PascalTextEOF[file: @F^] THEN InputLnResult_FALSE ELSE BEGIN LastNonblank_First; WHILE NOT PascalTextEOLN[file: @F^]DO BEGIN IF INT[Last]>=MaxBufStack THEN BEGIN MaxBufStack_Last+1; IF MaxBufStack=BufSize THEN Overflow[128,BufSize]; END; Buffer^[Last]_Xord^[PascalTextElement[file: @F^]];PascalTextGET[file: @F^];Last_Last+1; IF Buffer^[Last-1]#32 THEN LastNonblank_Last; END ENDLOOP ;Last_LastNonblank; InputLnResult_TRUE; END; END;--:30----36:-- BeginTokenList: PROCEDURE[P: Halfword,T: Quarterword] = BEGIN BEGIN IF INT[InputPtr]>MaxInStack THEN BEGIN MaxInStack_InputPtr ;IF InputPtr=StackSize THEN Overflow[481,StackSize]; END; InputStack^[InputPtr]_CurInput;InputPtr_InputPtr+1; END; CurInput.StartField_P;CurInput.IndexField_T; CurInput.LimitField_ParamPtr;CurInput.LocField_P; END;--:648----649: EndTokenList: PROCEDURE = BEGIN P:Halfword; {IF INT[CurInput.IndexField]>=10 THEN IF INT[CurInput.IndexField]<=11 THEN BEGIN FlushTokenList[CurInput.StartField]; GOTO Label30; END ELSE DeleteMacRef[CurInput.StartField]; WHILE INT[ParamPtr]>CurInput.LimitField DO BEGIN ParamPtr_ParamPtr-1; P_ParamStack^[ParamPtr]; IF P#0 THEN IF Mem[P]^.Hh.Rh=1 THEN BEGIN RecycleValue[P]; FreeNode[P,2]; END ELSE FlushTokenList[P]; END ENDLOOP ; EXITS Label30 => NULL};BEGIN InputPtr_InputPtr-1;CurInput_InputStack^[InputPtr]; END; BEGIN IF Interrupt#0 THEN PauseForInstructions[]; END; END;--:649----650: CurTok: PROCEDURE RETURNS[CurTokResult: Halfword] = BEGIN P:Halfword;SaveType:SmallNumber;SaveExp:PascalInteger; IF CurSym=0 THEN IF CurCmd=38 THEN BEGIN SaveType_CurType; SaveExp_CurExp;MakeExpCopy[CurMod];P_StashCurExp[]; Mem[P]^.Hh.Rh_0;CurType_SaveType;CurExp_SaveExp; END ELSE BEGIN P_GetNode[2];Mem[ INT[P]+1]^.Int_CurMod;Mem[P]^.Hh.B1_12; IF CurCmd=42 THEN Mem[P]^.Hh.B0_16 ELSE Mem[P]^.Hh.B0_4; END ELSE BEGIN BEGIN P_Avail; IF P=0 THEN P_GetAvail [] ELSE BEGIN Avail_Mem[P]^.Hh.Rh;Mem[P]^.Hh.Rh_0; DynUsed_DynUsed+1; END; END;Mem[P]^.Hh.Lh_CurSym; END;CurTokResult_P; END; --:650----651:-- BackInput: PROCEDURE = BEGIN P:Halfword; P_CurTok[]; WHILE( INT[CurInput.IndexField]>6)AND (CurInput.LocField=0)DO EndTokenList[] ENDLOOP ;BeginTokenList[P,10]; END;--:651----652: BackError: PROCEDURE = BEGIN OkToInterrupt_FALSE;BackInput[]; OkToInterrupt_TRUE;Error[]; END; InsError: PROCEDURE = BEGIN OkToInterrupt_FALSE;BackInput[];CurInput.IndexField_11; OkToInterrupt_TRUE;Error[]; END;--:652----653: BeginFileReading: PROCEDURE = BEGIN IF InOpen=6 THEN Overflow[482,6]; IF First=BufSize THEN Overflow[128,BufSize];InOpen_InOpen+1; BEGIN IF INT[InputPtr]>MaxInStack THEN BEGIN MaxInStack_InputPtr; IF InputPtr=StackSize THEN Overflow[481,StackSize]; END; InputStack^[InputPtr]_CurInput;InputPtr_InputPtr+1; END; CurInput.IndexField_InOpen;LineStack^[CurInput.IndexField]_Line; CurInput.StartField_First;CurInput.NameField_0; END;--:653----654: EndFileReading: PROCEDURE = BEGIN First_CurInput.StartField; Line_LineStack^[CurInput.IndexField]; IF CurInput.IndexField#InOpen THEN Confusion[483]; IF INT[CurInput.NameField]>2 THEN AClose[@InputFile^[CurInput.IndexField] ];BEGIN InputPtr_InputPtr-1;CurInput_InputStack^[InputPtr]; END; InOpen_InOpen-1; END;--:654----655:-- ClearForErrorPrompt: PROCEDURE = BEGIN WHILE( INT[CurInput.IndexField]<=6)AND (CurInput.NameField=0)AND ( INT[InputPtr]>0)AND (CurInput.LocField=CurInput.LimitField)DO EndFileReading[] ENDLOOP ;PrintLn[]; END;--:655----660: CheckOuterValidity: PROCEDURE RETURNS[CheckOuterValidityResult: PascalBoolean] = BEGIN P:Halfword; IF ScannerStatus=0 THEN CheckOuterValidityResult_TRUE ELSE BEGIN DeletionsAllowed_FALSE;--661:--IF CurSym#0 THEN BEGIN P_GetAvail[]; Mem[P]^.Hh.Lh_CurSym;BeginTokenList[P,10]; END--:661--; IF INT[ScannerStatus]>1 THEN--662:--BEGIN Runaway[]; IF CurSym=0 THEN BEGIN IF Interaction=3 THEN NULL;PrintNl[133];Print[489]; END ELSE BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[133];Print[490]; END; END;Print[491];BEGIN HelpPtr_4;HelpLine^[3]_492;HelpLine^[2]_493; HelpLine^[1]_494;HelpLine^[0]_495; END;SELECT ScannerStatus FROM--663: 2 =>BEGIN Print[496];HelpLine^[3]_497;CurSym_2235; END; 3 =>BEGIN Print[498];HelpLine^[3]_499; IF WarningInfo=0 THEN CurSym_2239 ELSE BEGIN CurSym_2231; Eqtb^[2231].Rh_WarningInfo; END; END;4,5 =>BEGIN Print[500]; IF ScannerStatus=5 THEN Print[Hash^[WarningInfo].Rh] ELSE PrintVariableName[WarningInfo];CurSym_2237; END;6 =>BEGIN Print[501]; Print[Hash^[WarningInfo].Rh];Print[502];HelpLine^[3]_503;CurSym_2236; END;--:663-- ENDCASE;InsError[]; END--:662-- ELSE BEGIN BEGIN IF Interaction=3 THEN NULL; PrintNl[133];Print[484]; END;PrintInt[WarningInfo];BEGIN HelpPtr_3; HelpLine^[2]_485;HelpLine^[1]_486;HelpLine^[0]_487; END; IF CurSym=0 THEN HelpLine^[2]_488;CurSym_2238;InsError[]; END; DeletionsAllowed_TRUE;CheckOuterValidityResult_FALSE; END; END;--:660----665: --:665----666:-- GetNext: PROCEDURE = BEGIN K:PascalInteger[0..BufSize];KPlusOne:Halfword; C:AsciiCode;Class:AsciiCode;N, F:PascalInteger; DO {--Label20:--CurSym_0; {IF( INT[CurInput.IndexField]<=6) THEN--668: BEGIN DO {--Label25:--C_Buffer^[CurInput.LocField]; CurInput.LocField_ INT[CurInput.LocField]+1;Class_CharClass^[C]; {{{{SELECT Class FROM 0 => GOTO Label85; 1 =>BEGIN Class_CharClass^[Buffer^[CurInput.LocField]]; IF INT[Class]>1 THEN GOTO Label25 ELSE IF INT[Class]<1 THEN BEGIN N_0; GOTO Label86; END; END; 2 => GOTO Label25;3 =>BEGIN--678:--IF INT[CurInput.NameField]>2 THEN--680: BEGIN Line_FileGetPos[@InputFile^[CurInput.IndexField]]; First_CurInput.StartField; IF NOT ForceEof THEN BEGIN IF InputLn[@InputFile^[CurInput.IndexField ],TRUE] THEN FirmUpTheLine [] ELSE ForceEof_TRUE; END; IF ForceEof THEN BEGIN PrintChar[41];ForceEof_FALSE;PascalTextBREAK[file: @TermOut]; EndFileReading[];IF CheckOuterValidity [] THEN GOTO Label20 ELSE GOTO Label20; END; Buffer^[CurInput.LimitField]_37;First_ INT[CurInput.LimitField]+1; CurInput.LocField_CurInput.StartField; END--:680 ELSE BEGIN IF INT[InputPtr]>0 THEN BEGIN EndFileReading[]; GOTO Label20; END; IF INT[Selector]<2 THEN OpenLogFile[]; IF INT[Interaction]>1 THEN BEGIN IF CurInput.LimitField=CurInput. StartField THEN PrintNl[518];PrintLn[];First_CurInput.StartField; BEGIN Print[42];TermInput[]; END;CurInput.LimitField_Last; Buffer^[CurInput.LimitField]_37;First_ INT[CurInput.LimitField]+1; CurInput.LocField_CurInput.StartField; END ELSE FatalError[519]; END--:678--;BEGIN IF Interrupt#0 THEN PauseForInstructions[]; END; GOTO Label25; END;4 =>--670: BEGIN IF Buffer^[CurInput.LocField]=34 THEN CurMod_157 ELSE BEGIN K_ CurInput.LocField;Buffer^[ INT[CurInput.LimitField]+1]_34; DO CurInput.LocField_ INT[CurInput.LocField]+1; IF Buffer^[CurInput.LocField]=34 THEN EXIT; ENDLOOP; IF INT[CurInput.LocField]>CurInput.LimitField THEN--671: BEGIN CurInput.LocField_CurInput.LimitField; BEGIN IF Interaction=3 THEN NULL;PrintNl[133];Print[511]; END; BEGIN HelpPtr_3;HelpLine^[2]_512;HelpLine^[1]_513;HelpLine^[0]_514; END;DeletionsAllowed_FALSE;Error[];DeletionsAllowed_TRUE; GOTO Label20; END--:671--;KPlusOne_K+1; IF CurInput.LocField=KPlusOne THEN CurMod_Buffer^[K] ELSE BEGIN BEGIN IF INT[PoolPtr]+CurInput.LocField-K>MaxPoolPtr THEN BEGIN IF INT[PoolPtr]+CurInput.LocField-K>PoolSize THEN Overflow[129, PoolSize-InitPoolPtr];MaxPoolPtr_ INT[PoolPtr]+CurInput.LocField-K; END; END; DO BEGIN StrPool^[PoolPtr]_Buffer^[K];PoolPtr_PoolPtr+1; END; K_K+1; IF K=CurInput.LocField THEN EXIT; ENDLOOP;CurMod_MakeString[]; END; END; CurInput.LocField_ INT[CurInput.LocField]+1;CurCmd_39; GOTO Label10; END--:670 ;5,6,7,8 =>BEGIN K_ INT[CurInput.LocField]-1; GOTO Label40; END;20 =>--669: BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[133];Print[508]; END; BEGIN HelpPtr_2;HelpLine^[1]_509;HelpLine^[0]_510; END; DeletionsAllowed_FALSE;Error[];DeletionsAllowed_TRUE; GOTO Label20; END--:669 ; ENDCASE => NULL;K_ INT[CurInput.LocField]-1; WHILE CharClass^[Buffer^[CurInput.LocField]]=Class DO CurInput. LocField_ INT[CurInput.LocField]+1 ENDLOOP ; GOTO Label40;EXITS Label85 => NULL};--672:--N_C-48; WHILE CharClass^[Buffer^[CurInput.LocField]]=0 DO BEGIN IF N<4096 THEN N_10*N+Buffer^[CurInput.LocField]-48; CurInput.LocField_ INT[CurInput.LocField]+1; END ENDLOOP ; {IF Buffer^[CurInput.LocField]=46 THEN IF CharClass^[Buffer^[ INT[CurInput. LocField]+1]]=0 THEN GOTO Label30;F_0; GOTO Label87; EXITS Label30 => NULL};CurInput.LocField_ INT[CurInput.LocField]+1--:672--;EXITS Label86 => NULL};--673:--K_0; DO IF INT[K]<17 THEN BEGIN Dig^[K]_Buffer^[CurInput.LocField]-48;K_K+1; END;CurInput.LocField_ INT[CurInput.LocField]+1; IF CharClass^[Buffer^[CurInput.LocField]]#0 THEN EXIT; ENDLOOP;F_RoundDecimals[K]; IF F=65536 THEN BEGIN N_N+1;F_0; END--:673--;EXITS Label87 => NULL};--674: IF N<4096 THEN CurMod_N*65536+F ELSE BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[133];Print[515]; END;BEGIN HelpPtr_2;HelpLine^[1]_516; HelpLine^[0]_517; END;DeletionsAllowed_FALSE;Error[]; DeletionsAllowed_TRUE;CurMod_268435455; END;CurCmd_42; GOTO Label10--:674 ;EXITS Label40 => NULL};CurSym_IdLookup[K, INT[CurInput.LocField]-K];EXIT; EXITS Label25 => NULL} ENDLOOP; END--:668-- ELSE--675: IF INT[CurInput.LocField]>=HiMemMin THEN BEGIN CurSym_Mem[CurInput. LocField]^.Hh.Lh;CurInput.LocField_Mem[CurInput.LocField]^.Hh.Rh; IF INT[CurSym]>=2242 THEN IF INT[CurSym]>=2392 THEN--676: BEGIN IF INT[CurSym]>=2542 THEN CurSym_ INT[CurSym]-150; BeginTokenList[ParamStack^[ INT[CurInput.LimitField]+CurSym-(2392)],9]; GOTO Label20; END--:676-- ELSE BEGIN CurCmd_38; CurMod_ParamStack^[ INT[CurInput.LimitField]+CurSym-(2242)];CurSym_0; GOTO Label10; END; END ELSE IF INT[CurInput.LocField]>0 THEN--677: BEGIN IF Mem[CurInput.LocField]^.Hh.B1=12 THEN BEGIN CurMod_Mem[ INT[CurInput.LocField]+1]^.Int; IF Mem[CurInput.LocField]^.Hh.B0=16 THEN CurCmd_42 ELSE BEGIN CurCmd _39; BEGIN IF INT[StrRef^[CurMod]]<127 THEN StrRef^[CurMod]_StrRef^[CurMod]+1; END; END; END ELSE BEGIN CurMod_CurInput.LocField;CurCmd_38; END; CurInput.LocField_Mem[CurInput.LocField]^.Hh.Rh; GOTO Label10; END--:677 ELSE BEGIN EndTokenList[]; GOTO Label20; END--:675--;--667: CurCmd_Eqtb^[CurSym].Lh;CurMod_Eqtb^[CurSym].Rh; IF INT[CurCmd]>=83 THEN IF CheckOuterValidity [] THEN CurCmd_CurCmd-83 ELSE GOTO Label20--:667--;EXITS Label10 => NULL};EXIT; EXITS Label20 => NULL} ENDLOOP; END;--:666----681:-- FirmUpTheLine: PROCEDURE = BEGIN K:PascalInteger[0..BufSize]; CurInput.LimitField_Last; IF Internal^[31]>0 THEN IF INT[Interaction]>1 THEN BEGIN PrintLn[]; IF INT[CurInput.StartField]First THEN BEGIN FOR i:INT IN [ INT[First ].. INT[Last-1 ]] DO K _ i; Buffer^[ INT[K]+CurInput. StartField-First]_Buffer^[K] ENDLOOP; CurInput.LimitField_ INT[CurInput.StartField]+Last-First; END; END; END; --:681----684:-- ScanToks: PROCEDURE[Terminator: CommandCode, SubstList,TailEnd: Halfword,SuffixCount: SmallNumber] RETURNS[ScanToksResult: Halfword] = BEGIN P:Halfword;Q:Halfword;Balance:PascalInteger; P_49999; Balance_1;Mem[49999]^.Hh.Rh_0;{WHILE TRUE DO BEGIN GetNext[]; IF INT[CurSym]>0 THEN BEGIN--685:--BEGIN Q_SubstList; {WHILE Q#0 DO BEGIN IF Mem[Q]^.Hh.Lh=CurSym THEN BEGIN CurSym_Mem[ INT[Q]+1]^ .Int;CurCmd_7; GOTO Label40; END;Q_Mem[Q]^.Hh.Rh; END ENDLOOP ;EXITS Label40 => NULL}; END--:685--; IF CurCmd=Terminator THEN--686: IF CurMod>0 THEN Balance_Balance+1 ELSE BEGIN Balance_Balance-1; IF Balance=0 THEN GOTO Label30; END--:686-- ELSE IF CurCmd=61 THEN--689: BEGIN IF CurMod=0 THEN GetNext [] ELSE IF CurMod<=SuffixCount THEN CurSym_2391+CurMod; END--:689--; END;Mem[P]^.Hh.Rh_CurTok[]; P_Mem[P]^.Hh.Rh; END ENDLOOP ;EXITS Label30 => NULL};Mem[P]^.Hh.Rh_TailEnd; FlushNodeList[SubstList];ScanToksResult_Mem[49999]^.Hh.Rh; END;--:684----690: GetSymbol: PROCEDURE = BEGIN DO {--Label20:--GetNext[]; IF(CurSym=0)OR ( INT[CurSym]>2229) THEN BEGIN BEGIN IF Interaction=3 THEN NULL; PrintNl[133];Print[532]; END;BEGIN HelpPtr_3;HelpLine^[2]_533; HelpLine^[1]_534;HelpLine^[0]_535; END; IF INT[CurSym]>0 THEN HelpLine^[2]_536 ELSE 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;CurSym_2229; InsError[]; GOTO Label20; END;EXIT; EXITS Label20 => NULL} ENDLOOP; END;--:690----691:-- END.