-- file: TexScan5Impl.mesa -- Pascal-to-Mesa translator output, translated at September 27, 1985 10:21:37 am PDT DIRECTORY PascalBasic, PascalWizardFiles, TexSysdep, TexTypes, TexInteraction, TexBuildPage, TexMemory, TexSymbols, TexScan, TexOps, TexRest, TexSysdepInline; TexScan5Impl: PROGRAM IMPORTS PascalBasic, TexSysdep, TexTypes, TexInteraction, TexMemory, TexSymbols, TexScan, TexOps, TexRest, TexSysdepInline EXPORTS TexScan = PUBLIC BEGIN OPEN PascalBasic, PascalWizardFiles, TexSysdep, TexTypes, TexInteraction, TexBuildPage, TexMemory, TexSymbols, TexScan, TexOps, TexRest, TexSysdepInline; Expand: PROCEDURE = BEGIN T:Halfword;P, Q, R:Halfword;J:PascalInteger[0..BufSize]; CvBackup:PascalInteger;CvlBackup, RadixBackup:SmallNumber; BackupBackup:Halfword;SaveScannerStatus:SmallNumber; CvBackup_CurVal;CvlBackup_CurValLevel;RadixBackup_Radix; BackupBackup_Mem[64987]^.Hh.Rh;IF INT[CurCmd]<110 THEN--367: BEGIN IF Eqtb^[4803].Int>1 THEN ShowCurCmdChr[]; SELECT CurCmd FROM 109 =>--386: BEGIN IF CurMark^[CurChr]#0 THEN BeginTokenList[CurMark^[CurChr],14 ]; END--:386--;101 =>--368:--BEGIN GetToken[];T_CurTok;GetToken[]; IF INT[CurCmd]>99 THEN Expand [] ELSE BackInput[];CurTok_T;BackInput[]; END--:368--;102 =>--369:--BEGIN SaveScannerStatus_ScannerStatus; ScannerStatus_0;GetToken[];ScannerStatus_SaveScannerStatus; T_CurTok;BackInput[];IF INT[T]>=4096 THEN BEGIN P_GetAvail[]; Mem[P]^.Hh.Lh_6863;Mem[P]^.Hh.Rh_CurInput.LocField; CurInput.StartField_P;CurInput.LocField_P; END; END--:369--;106 =>--372: BEGIN R_GetAvail[];P_R;DO GetXToken[]; IF CurCs=0 THEN BEGIN Q_GetAvail[];Mem[P]^.Hh.Rh_Q; Mem[Q]^.Hh.Lh_CurTok;P_Q; END; IF CurCs#0 THEN EXIT; ENDLOOP;IF CurCmd#66 THEN--373: BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[134];Print[486]; END; PrintEsc[367];Print[487];BEGIN HelpPtr_2;HelpLine^[1]_488; HelpLine^[0]_489; END;BackError[]; END--:373--;--374:--J_First; P_Mem[R]^.Hh.Rh; WHILE P#0 DO BEGIN IF INT[J]>=MaxBufStack THEN BEGIN MaxBufStack_J+1; IF MaxBufStack=BufSize THEN Overflow[128,BufSize]; END; Buffer^[J]_ PascalMODPower2Mask[Mem[P]^.Hh.Lh ,255];J_J+1;P_Mem[P]^.Hh.Rh; END ENDLOOP ; IF INT[J]>First+1 THEN BEGIN NoNewControlSequence_FALSE; CurCs_IdLookup[First,J-First];NoNewControlSequence_TRUE; END ELSE IF J=First THEN CurCs_257 ELSE CurCs_129+Buffer^[First]--:374 -- --;FlushList[R]; IF Eqtb^[CurCs].Hh.B0=100 THEN BEGIN Eqtb^[CurCs]_Eqtb^[2765]; END; CurTok_ INT[CurCs]+4096;BackInput[]; END--:372--;107 =>ConvToks[]; 108 =>InsTheToks[];104 =>Conditional[];105 =>--510: IF INT[CurChr]>IfLimit THEN IF IfLimit=1 THEN InsertRelax [] ELSE BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[134];Print[636]; END; PrintCmdChr[105,CurChr];BEGIN HelpPtr_1;HelpLine^[0]_637; END; Error[]; END ELSE BEGIN WHILE CurChr#2 DO PassText[] ENDLOOP ;--496: BEGIN P_CondPtr;IfLine_Mem[P+1]^.Int;CurIf_Mem[P]^.Hh.B1; IfLimit_Mem[P]^.Hh.B0;CondPtr_Mem[P]^.Hh.Rh;FreeNode[P,2]; END--:496--; END--:510--;103 =>--378: IF INT[CurChr]>0 THEN ForceEof_TRUE ELSE IF NameInProgress THEN InsertRelax [] ELSE StartInput--:378--[]; ENDCASE =>--370: BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[134];Print[480]; END; BEGIN HelpPtr_5;HelpLine^[4]_481;HelpLine^[3]_482;HelpLine^[2]_483; HelpLine^[1]_484;HelpLine^[0]_485; END;Error[]; END--:370--; END--:367 ELSE IF INT[CurCmd]<114 THEN MacroCall [] ELSE--375:--BEGIN CurTok_6860; BackInput[]; END--:375--;CurVal_CvBackup;CurValLevel_CvlBackup; Radix_RadixBackup;Mem[64987]^.Hh.Rh_BackupBackup; END;--:366----380: TheToks: PROCEDURE RETURNS[TheToksResult: Halfword] = BEGIN OldSetting:PascalInteger[0..21];P, Q, R:Halfword; GetXToken[];ScanSomethingInternal[5,FALSE]; IF INT[CurValLevel]>=4 THEN--466:--BEGIN P_64997;Mem[P]^.Hh.Rh_0; IF CurValLevel=4 THEN BEGIN Q_GetAvail[];Mem[P]^.Hh.Rh_Q; Mem[Q]^.Hh.Lh_4096+CurVal;P_Q; END ELSE IF CurVal#0 THEN BEGIN R_Mem[CurVal]^.Hh.Rh; WHILE R#0 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_Mem[R]^.Hh.Lh; P_Q; END;R_Mem[R]^.Hh.Rh; END ENDLOOP ; END;TheToksResult_P; END--:466 ELSE BEGIN OldSetting_Selector;Selector_21; SELECT CurValLevel FROM 0 =>PrintInt[CurVal]; 1 =>BEGIN PrintScaled[CurVal];Print[265]; END; 2 =>BEGIN PrintSpec[CurVal,265];DeleteGlueRef[CurVal]; END; 3 =>BEGIN PrintSpec[CurVal,209];DeleteGlueRef[CurVal]; END; ENDCASE; Selector_OldSetting;TheToksResult_StrToks[]; END; END;--:465----467: InsTheToks: PROCEDURE = BEGIN Mem[64988]^.Hh.Rh_TheToks[]; BeginTokenList[Mem[64997]^.Hh.Rh,4]; END;--:467----470: ConvToks: PROCEDURE = BEGIN OldSetting:PascalInteger[0..21];C:PascalInteger[0..5]; SaveScannerStatus:SmallNumber; C_CurChr;--471: SELECT C FROM 0,1 =>ScanInt[];2,3 =>BEGIN SaveScannerStatus_ScannerStatus; ScannerStatus_0;GetToken[];ScannerStatus_SaveScannerStatus; END; 4 =>ScanFontIdent[];5 =>IF JobName=0 THEN OpenLogFile[]; ENDCASE--:471--; OldSetting_Selector;Selector_21;--472:--SELECT C FROM 0 =>PrintInt[CurVal]; 1 =>PrintRomanInt[CurVal]; 2 =>IF CurCs#0 THEN SprintCs[CurCs] ELSE PrintChar[CurChr]; 3 =>PrintMeaning[];4 =>BEGIN Print[FontName^[CurVal]]; IF FontSize^[CurVal]#FontDsize^[CurVal] THEN BEGIN Print[601]; PrintScaled[FontSize^[CurVal]];Print[265]; END; END;5 =>Print[JobName]; ENDCASE--:472--;Selector_OldSetting;Mem[64988]^.Hh.Rh_StrToks[]; BeginTokenList[Mem[64997]^.Hh.Rh,4]; END;--:470----473: ScanToks: PROCEDURE[MacroDef,Xpand: PascalBoolean] RETURNS[ScanToksResult: Halfword] = BEGIN T:Halfword;S:Halfword;P:Halfword;Q:Halfword;Unbalance:Halfword; HashBrace:Halfword; IF MacroDef THEN ScannerStatus_2 ELSE ScannerStatus_5; WarningIndex_CurCs;DefRef_GetAvail[];Mem[DefRef]^.Hh.Lh_0; P_DefRef;HashBrace_0;T_3120;{IF MacroDef THEN--474: BEGIN {{WHILE TRUE DO BEGIN GetToken[];IF INT[CurTok]<768 THEN GOTO Label31; IF CurCmd=6 THEN--476:--BEGIN S_ INT[3328]+CurChr;GetToken[]; IF CurCmd=1 THEN BEGIN HashBrace_CurTok;BEGIN Q_GetAvail[]; Mem[P]^.Hh.Rh_Q;Mem[Q]^.Hh.Lh_CurTok;P_Q; END;BEGIN Q_GetAvail[]; Mem[P]^.Hh.Rh_Q;Mem[Q]^.Hh.Lh_3584;P_Q; END; GOTO Label30; END; IF T=3129 THEN BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[134]; Print[604]; END;BEGIN HelpPtr_1;HelpLine^[0]_605; END;Error[]; END ELSE BEGIN T_T+1; IF CurTok#T THEN BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[134]; Print[606]; END;BEGIN HelpPtr_2;HelpLine^[1]_607;HelpLine^[0]_608; END;BackError[]; END;CurTok_S; END; END--:476--;BEGIN Q_GetAvail[]; Mem[P]^.Hh.Rh_Q;Mem[Q]^.Hh.Lh_CurTok;P_Q; END; END ENDLOOP ; EXITS Label31 => NULL};BEGIN Q_GetAvail[];Mem[P]^.Hh.Rh_Q;Mem[Q]^.Hh.Lh_3584;P_Q; END; IF CurCmd=2 THEN--475:--BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[134]; Print[518]; END;AlignState_AlignState+1;BEGIN HelpPtr_2; HelpLine^[1]_602;HelpLine^[0]_603; END;Error[]; GOTO Label40; END--:475--; EXITS Label30 => NULL}; END--:474-- ELSE ScanLeftBrace[];--477:--Unbalance_1; WHILE TRUE DO BEGIN IF Xpand THEN--478: BEGIN {WHILE TRUE DO BEGIN GetNext[];IF CurCmd#108 THEN GOTO Label32; Q_TheToks[]; IF Mem[64997]^.Hh.Rh#0 THEN BEGIN Mem[P]^.Hh.Rh_Mem[64997]^.Hh.Rh;P_Q; END; END ENDLOOP ;EXITS Label32 => NULL};XToken []; END--:478-- ELSE GetToken[]; IF INT[CurTok]<768 THEN IF INT[CurCmd]<2 THEN Unbalance_Unbalance+1 ELSE BEGIN Unbalance_ INT[Unbalance]-1;IF Unbalance=0 THEN GOTO Label40; END ELSE IF CurCmd=6 THEN IF MacroDef THEN--479:--BEGIN S_CurTok; IF Xpand THEN GetXToken [] ELSE GetToken[]; IF CurCmd#6 THEN IF( INT[CurTok]<=3120)OR ( INT[CurTok]>T) THEN BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[134];Print[609]; END; SprintCs[WarningIndex];BEGIN HelpPtr_3;HelpLine^[2]_610; HelpLine^[1]_611;HelpLine^[0]_612; END;BackError[];CurTok_S; END ELSE CurTok_ INT[1232]+CurChr; END--:479--;BEGIN Q_GetAvail[]; Mem[P]^.Hh.Rh_Q;Mem[Q]^.Hh.Lh_CurTok;P_Q; END; END--:477-- ENDLOOP ; EXITS Label40 => NULL};ScannerStatus_0;IF HashBrace#0 THEN BEGIN Q_GetAvail[]; Mem[P]^.Hh.Rh_Q;Mem[Q]^.Hh.Lh_HashBrace;P_Q; END;ScanToksResult_P; END; --:473----482:-- ReadToks: PROCEDURE[N: PascalInteger,R: Halfword] = BEGIN P:Halfword;Q:Halfword;S:PascalInteger;M:SmallNumber; ScannerStatus_2;WarningIndex_R;DefRef_GetAvail[]; Mem[DefRef]^.Hh.Lh_0;P_DefRef;BEGIN Q_GetAvail[];Mem[P]^.Hh.Rh_Q; Mem[Q]^.Hh.Lh_3584;P_Q; END;IF(N<0)OR (N>15) THEN M_16 ELSE M_N; S_AlignState;AlignState_1000000;DO--483:--BeginFileReading[]; CurInput.NameField_M+1;IF ReadOpen^[M]=2 THEN--484: IF INT[Interaction]>1 THEN IF N<0 THEN BEGIN Print[210];TermInput[]; END ELSE BEGIN PrintLn[];SprintCs[R];BEGIN Print[61];TermInput[]; END; N_-1; END ELSE FatalError[613]--:484-- ELSE IF ReadOpen^[M]=1 THEN--485: IF InputLn[@ReadFile^[M],FALSE] THEN ReadOpen^[M]_0 ELSE BEGIN AClose[ @ReadFile^[M]];ReadOpen^[M]_2; END--:485-- ELSE--486: BEGIN IF NOT InputLn[@ReadFile^[M],TRUE] THEN BEGIN AClose[@ReadFile^[M]] ;ReadOpen^[M]_2;IF AlignState#1000000 THEN BEGIN Runaway[]; BEGIN IF Interaction=3 THEN NULL;PrintNl[134];Print[614]; END;PrintEsc[395]; BEGIN HelpPtr_1;HelpLine^[0]_615; END;AlignState_1000000;Error[]; END; END; END--:486--;CurInput.LimitField_Last; IF(Eqtb^[4815].Int<0)OR (Eqtb^[4815].Int>127) THEN CurInput.LimitField_ INT[CurInput.LimitField]-1 ELSE Buffer^[CurInput.LimitField]_Eqtb^[4815]. Int;First_CurInput.LimitField+1; CurInput.LocField_CurInput.StartField;CurInput.StateField_33; {WHILE TRUE DO BEGIN GetToken[];IF CurTok=0 THEN GOTO Label30; BEGIN Q_GetAvail[];Mem[P]^.Hh.Rh_Q;Mem[Q]^.Hh.Lh_CurTok;P_Q; END; END ENDLOOP ; EXITS Label30 => NULL};EndFileReading--:483--[]; IF AlignState=1000000 THEN EXIT; ENDLOOP;CurVal_DefRef; ScannerStatus_0;AlignState_S; END;--:482----494:-- PassText: PROCEDURE = BEGIN L:PascalInteger;SaveScannerStatus:SmallNumber; SaveScannerStatus_ScannerStatus;ScannerStatus_1;L_0; SkipLine_Line;{WHILE TRUE DO BEGIN GetNext[]; IF CurCmd=105 THEN BEGIN IF L=0 THEN GOTO Label30;IF CurChr=2 THEN L_L-1; END ELSE IF CurCmd=104 THEN L_L+1; END ENDLOOP ; EXITS Label30 => NULL};ScannerStatus_SaveScannerStatus; END;--:494----497: 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[616]; 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;--:497----498:-- Conditional: PROCEDURE = BEGIN B:PascalBoolean;R:PascalInteger[60..62];M, N:PascalInteger;P, Q:Halfword; SaveScannerStatus:SmallNumber;SaveCondPtr:Halfword; ThisIf:SmallNumber;--495:--BEGIN P_GetNode[2]; Mem[P]^.Hh.Rh_CondPtr;Mem[P]^.Hh.B0_IfLimit;Mem[P]^.Hh.B1_CurIf; Mem[P+1]^.Int_IfLine;CondPtr_P;CurIf_CurChr;IfLimit_1; IfLine_Line; END--:495--;SaveCondPtr_CondPtr;ThisIf_CurChr;--501: {{SELECT ThisIf FROM 0,1 =>--506:--BEGIN BEGIN GetXToken[]; IF CurCmd=0 THEN IF CurChr=257 THEN BEGIN CurCmd_13; CurChr_ INT[CurTok]-4097; END; END; IF( INT[CurCmd]>13)OR ( INT[CurChr]>127) THEN BEGIN M_0;N_256; END ELSE BEGIN M_CurCmd;N_CurChr; END;BEGIN GetXToken[]; IF CurCmd=0 THEN IF CurChr=257 THEN BEGIN CurCmd_13; CurChr_ INT[CurTok]-4097; END; END; IF( INT[CurCmd]>13)OR ( INT[CurChr]>127) THEN BEGIN CurCmd_0;CurChr_256; END; IF ThisIf=0 THEN B_(N=CurChr) ELSE B_(M=CurCmd); END--:506--;2,3 =>--503: BEGIN IF ThisIf=2 THEN ScanInt [] ELSE ScanDimen[FALSE,FALSE,FALSE]; N_CurVal;--406:--DO GetXToken[]; IF CurCmd#10--:406-- THEN EXIT; ENDLOOP; IF( INT[CurTok]>=3132)AND ( INT[CurTok]<=3134) THEN R_ INT[CurTok]-3072 ELSE BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[134];Print[640]; END; PrintCmdChr[104,ThisIf];BEGIN HelpPtr_1;HelpLine^[0]_641; END; BackError[];R_61; END; IF ThisIf=2 THEN ScanInt [] ELSE ScanDimen[FALSE,FALSE,FALSE]; SELECT R FROM 60 =>B_(NB_(N=CurVal);62 =>B_(N>CurVal); ENDCASE; END--:503--;4 =>--504:--BEGIN ScanInt[];B_PascalODD[CurVal]; END--:504--; 5 =>B_(ABS[CurList.ModeField]=1);6 =>B_(ABS[CurList.ModeField]=101); 7 =>B_(ABS[CurList.ModeField]=201);8 =>B_( INT[CurList.ModeField]<0); 9,10,11 =>--505:--BEGIN ScanEightBitInt[];P_Eqtb^[3822+CurVal].Hh.Rh; IF ThisIf=9 THEN B_(P=0) ELSE IF P=0 THEN B_FALSE ELSE IF ThisIf=10 THEN B_(Mem[P]^.Hh.B0=0) ELSE B_(Mem[P]^.Hh.B0=1); END--:505--;12 =>--507: BEGIN SaveScannerStatus_ScannerStatus;ScannerStatus_0;GetNext[]; N_CurCs;P_CurCmd;Q_CurChr;GetNext[]; IF CurCmd#P THEN B_FALSE ELSE IF INT[CurCmd]<110 THEN B_(CurChr=Q) ELSE-- -- 508:--BEGIN P_Mem[CurChr]^.Hh.Rh;Q_Mem[Eqtb^[N].Hh.Rh]^.Hh.Rh; WHILE(P#0)AND (Q#0)DO IF Mem[P]^.Hh.Lh#Mem[Q]^.Hh.Lh THEN P_0 ELSE BEGIN P_Mem[P]^.Hh.Rh;Q_Mem[Q]^.Hh.Rh; END ENDLOOP ;B_((P=0)AND (Q=0)); END--:508--; ScannerStatus_SaveScannerStatus; END--:507--; 13 =>BEGIN ScanFourBitInt[];B_(ReadOpen^[CurVal]=2); END;14 =>B_TRUE; 15 =>B_FALSE;16 =>--509:--BEGIN ScanInt[];N_CurVal; IF Eqtb^[4803].Int>1 THEN BEGIN BeginDiagnostic[];Print[642];PrintInt[N]; PrintChar[125];EndDiagnostic[FALSE]; END;WHILE N#0 DO BEGIN PassText[]; IF CondPtr=SaveCondPtr THEN IF CurChr=4 THEN N_N-1 ELSE GOTO Label50 ELSE IF CurChr=2 THEN--496:--BEGIN P_CondPtr;IfLine_Mem[P+1]^.Int; CurIf_Mem[P]^.Hh.B1;IfLimit_Mem[P]^.Hh.B0;CondPtr_Mem[P]^.Hh.Rh; FreeNode[P,2]; END--:496--; END ENDLOOP ;ChangeIfLimit[4,SaveCondPtr]; GOTO Label10; END--:509--; ENDCASE--:501--;IF Eqtb^[4803].Int>1 THEN--502: BEGIN BeginDiagnostic[];IF B THEN Print[638] ELSE Print[639]; EndDiagnostic[FALSE]; END--:502--; IF B THEN BEGIN ChangeIfLimit[3,SaveCondPtr]; GOTO Label10; END;--500: WHILE TRUE DO BEGIN PassText[]; IF CondPtr=SaveCondPtr THEN BEGIN IF CurChr#4 THEN GOTO Label50; BEGIN IF Interaction=3 THEN NULL;PrintNl[134];Print[636]; END;PrintEsc[634]; BEGIN HelpPtr_1;HelpLine^[0]_637; END;Error[]; END ELSE IF CurChr=2 THEN--496:--BEGIN P_CondPtr;IfLine_Mem[P+1]^.Int; CurIf_Mem[P]^.Hh.B1;IfLimit_Mem[P]^.Hh.B0;CondPtr_Mem[P]^.Hh.Rh; FreeNode[P,2]; END--:496--; END--:500-- ENDLOOP ;EXITS Label50 => NULL};IF CurChr=2 THEN--496: BEGIN P_CondPtr;IfLine_Mem[P+1]^.Int;CurIf_Mem[P]^.Hh.B1; IfLimit_Mem[P]^.Hh.B0;CondPtr_Mem[P]^.Hh.Rh;FreeNode[P,2]; END--:496 ELSE IfLimit_2;EXITS Label10 => NULL}; END;--:498----515:-- BeginName: PROCEDURE = BEGIN AreaDelimiter_0;ExtDelimiter_0; END;--:515----516: END.