-- file: TexScan3Impl.mesa
-- Pascal-to-Mesa translator output, translated at September 27, 1985 10:21:37 am PDT


DIRECTORY
  PascalBasic,
  PascalWizardFiles,
  TexSysdep,
  TexTypes,
  TexInteraction,
  TexMemory,
  TexSymbols,
  TexScan,
  TexOps,
  TexRest,
  TexSysdepInline;

TexScan3Impl: PROGRAM IMPORTS PascalWizardFiles, TexSysdep, TexTypes, TexInteraction, TexMemory, TexSymbols, TexScan, TexOps, TexRest, TexSysdepInline EXPORTS TexScan = PUBLIC
BEGIN OPEN PascalBasic, PascalWizardFiles, TexSysdep, TexTypes, TexInteraction, TexMemory, TexSymbols, TexScan, TexOps, TexRest, TexSysdepInline;
--518:-- PrintFileName: PROCEDURE[N,A,E: PascalInteger] = 
BEGIN Print[A];Print[N];
Print[E]; END;--:518----699:-- 
 NormalizeSelector: PROCEDURE = 
BEGIN IF  INT[JobName]>0  THEN Selector←19  ELSE Selector←17;
IF Interaction=0  THEN Selector←Selector-1;
IF JobName=0  THEN OpenLogFile[]; END;--:92----98:
 ScanFontIdent: PROCEDURE = 
BEGIN F:InternalFontNumber;M:Halfword;
--406:--DO GetXToken[]; IF CurCmd#10--:406-- THEN EXIT; ENDLOOP;
IF CurCmd=87  THEN F←Eqtb↑[4078].Hh.Rh  ELSE IF CurCmd=86  THEN F←
CurChr  ELSE IF CurCmd=85  THEN BEGIN M←CurChr;ScanFourBitInt[];
F←Eqtb↑[M+CurVal].Hh.Rh; END  ELSE BEGIN BEGIN IF Interaction=3  THEN NULL;
PrintNl[134];Print[674]; END;BEGIN HelpPtr←2;HelpLine↑[1]←675;
HelpLine↑[0]←676; END;BackError[];F←0; END;CurVal←F; END;--:577----578:
 FindFontDimen: PROCEDURE[Writing: PascalBoolean] = 
BEGIN F:InternalFontNumber;
N:PascalInteger; ScanInt[];N←CurVal;ScanFontIdent[];F←CurVal;
IF N<=0  THEN CurVal←FmemPtr  ELSE BEGIN IF Writing AND (N<=4)AND (N>=2)
AND (FontGlue↑[F]#0) THEN BEGIN DeleteGlueRef[FontGlue↑[F]];
FontGlue↑[F]←0; END;
IF N>FontParams↑[F] THEN IF  INT[F]<FontPtr  THEN CurVal←FmemPtr  ELSE--580:
BEGIN DO IF FmemPtr=FontMemSize  THEN Overflow[681,FontMemSize];
FontInfo↑[FmemPtr].Int←0;FmemPtr←FmemPtr+1;
FontParams↑[F]←FontParams↑[F]+1; IF N=FontParams↑[F] THEN EXIT; ENDLOOP;
CurVal←FmemPtr-1; END--:580-- ELSE CurVal←N+ParamBase↑[F]; END;--579:
IF CurVal=FmemPtr  THEN BEGIN BEGIN IF Interaction=3  THEN NULL;
PrintNl[134];Print[659]; END;PrintEsc[Hash↑[2768+F].Rh];Print[677];
PrintInt[FontParams↑[F]];Print[678];BEGIN HelpPtr←2;
HelpLine↑[1]←679;HelpLine↑[0]←680; END;Error[]; END--:579--; END;--:578----:409
 MoreName: PROCEDURE[C: AsciiCode] RETURNS[MoreNameResult: PascalBoolean]
 = 
BEGIN IF C=32  THEN MoreNameResult←FALSE  ELSE BEGIN IF(C=62)OR (C=47)OR (C=93)
 THEN AreaDelimiter←PoolPtr  ELSE IF(C=46) THEN ExtDelimiter←PoolPtr;
BEGIN IF  INT[PoolPtr+1]>PoolSize  THEN Overflow[129,PoolSize-InitPoolPtr]
; END;BEGIN StrPool↑[PoolPtr]←C;PoolPtr←PoolPtr+1; END;
MoreNameResult←TRUE; END; END;--:516----517:-- EndName: PROCEDURE
 = 
BEGIN IF  INT[StrPtr+3]>MaxStrings  THEN Overflow[130,
MaxStrings-InitStrPtr];
IF AreaDelimiter=0  THEN CurArea←210  ELSE BEGIN CurArea←StrPtr;
StrPtr←StrPtr+1;StrStart↑[StrPtr]←AreaDelimiter+1; END;
IF ExtDelimiter=0  THEN BEGIN CurExt←210;CurName←MakeString[];
 END  ELSE BEGIN CurName←StrPtr;StrPtr←StrPtr+1;
StrStart↑[StrPtr]←ExtDelimiter;CurExt←MakeString[]; END; END;--:517
--519:-- PackFileName: PROCEDURE[N,A,E: StrNumber] = 
BEGIN K:PascalInteger;
C:AsciiCode;J:PoolPointer; K←0;
FOR i:INT    IN [ INT[StrStart↑[A]].. INT[ INT[StrStart↑[A+1]]-1 ]] DO  J ← i;  C←StrPool↑[J];K←K+1;
IF K<=FileNameSize  THEN NameOfFile↑[K]←Xchr↑[C]; ENDLOOP;
FOR i:INT    IN [ INT[StrStart↑[N]].. INT[ INT[StrStart↑[N+1]]-1 ]] DO  J ← i;  C←StrPool↑[J];K←K+1;
IF K<=FileNameSize  THEN NameOfFile↑[K]←Xchr↑[C]; ENDLOOP;
FOR i:INT    IN [ INT[StrStart↑[E]].. INT[ INT[StrStart↑[E+1]]-1 ]] DO  J ← i;  C←StrPool↑[J];K←K+1;
IF K<=FileNameSize  THEN NameOfFile↑[K]←Xchr↑[C]; ENDLOOP;
IF K<=FileNameSize  THEN NameLength←K  ELSE NameLength←
FileNameSize;
FOR i:INT    IN [ INT[NameLength+1 ].. INT[FileNameSize ]] DO  K ← i; NameOfFile↑[K]←'  ENDLOOP; END;
--:523----525:
 MakeNameString: PROCEDURE RETURNS[MakeNameStringResult: StrNumber] = 
BEGIN K:PascalInteger[1..FileNameSize];
 BEGIN IF  INT[PoolPtr+NameLength]>PoolSize  THEN Overflow[129,
PoolSize-InitPoolPtr]; END;
FOR i:INT    IN [ INT[1 ].. INT[NameLength ]] DO  K ← i;  StrPool↑[PoolPtr]←Xord↑[NameOfFile↑[K
]];PoolPtr←PoolPtr+1; ENDLOOP;MakeNameStringResult←MakeString[]; END;
--:525----526:
 ScanFileName: PROCEDURE = 
BEGIN  NameInProgress←TRUE;
BeginName[];--406:--DO GetXToken[]; IF CurCmd#10--:406-- THEN EXIT; ENDLOOP;
{WHILE TRUE DO BEGIN IF( INT[CurCmd]>12)OR ( INT[CurChr]>127) THEN BEGIN BackInput[];
 GOTO Label30; END;IF  NOT MoreName[CurChr] THEN  GOTO Label30;GetXToken[]; END ENDLOOP ;
EXITS Label30 => NULL};EndName[];NameInProgress←FALSE; END;--:526----529:
 PackJobName: PROCEDURE[S: StrNumber] = 
BEGIN CurArea←210;CurExt←S;
CurName←JobName;PackFileName[CurName,CurArea,CurExt]; END;--:529
--530:-- PromptFileName: PROCEDURE[S,E: StrNumber] = 
BEGIN 
 K:PascalInteger[0..BufSize];  IF Interaction=2  THEN NULL;
IF S=643  THEN BEGIN IF Interaction=3  THEN NULL;PrintNl[134];Print[644];
 END  ELSE BEGIN IF Interaction=3  THEN NULL;PrintNl[134];Print[645]; END;
PrintFileName[CurName,CurArea,CurExt];Print[646];
IF E=647  THEN ShowContext[];PrintNl[648];Print[S];
IF  INT[Interaction]<2  THEN FatalError[649];BEGIN Print[430];TermInput[]; END;
--531:--BEGIN BeginName[];K←First;WHILE(Buffer↑[K]=32)AND ( INT[K]<Last)DO K←K+1 ENDLOOP ;
{WHILE TRUE DO BEGIN IF K=Last  THEN  GOTO Label30;
IF  NOT MoreName[Buffer↑[K]] THEN  GOTO Label30;K←K+1; END ENDLOOP ;EXITS Label30 => NULL};EndName[]; END--:531
;IF CurExt=210  THEN CurExt←E;
PackFileName[CurName,CurArea,CurExt]; END;--:530----534:
  OpenLogFile: PROCEDURE = 
BEGIN OldSetting:PascalInteger[0..21];K:PascalInteger[0..BufSize];
L:PascalInteger[0..BufSize];Months: PACKED ARRAY PascalInteger[1..36] OF  PascalChar;
 OldSetting←Selector;IF JobName=0  THEN JobName←653;
PackJobName[654];WHILE  NOT AOpenOut[@LogFile]DO--535:
BEGIN IF  INT[Interaction]<2  THEN BEGIN BEGIN IF Interaction=3  THEN NULL;
PrintNl[134];Print[645]; END;PrintFileName[CurName,CurArea,CurExt];
Print[646];JobName←0;History←3;JumpOut[]; END;
PromptFileName[656,654]; END--:535-- ENDLOOP ;
LogName←AMakeNameString[@LogFile];Selector←18;--536:
BEGIN PascalWriteLongString[file: @LogFile, item: "This is TeX 1.3 for Cedar 6.0"];
Print[FormatIdent];Print[657];PrintInt[Eqtb↑[4788].Int];PrintChar[32];
Months←['J, 'A, 'N, 'F, 'E, 'B, 'M, 'A, 'R, 'A, 'P, 'R, 'M, 'A, 'Y, 'J, 'U, 'N, 'J, 'U, 'L, 'A, 'U, 'G, 'S, 'E, 'P, 'O, 'C, 'T, 'N, 'O, 'V, 'D, 'E, 'C];
FOR i:INT    IN [ INT[3*Eqtb↑[4789].Int-2 ].. INT[3*Eqtb↑[4789].Int ]] DO  K ← i; PascalWriteChar[file: @LogFile, item: Months[K
]] ENDLOOP;PrintChar[32];PrintInt[Eqtb↑[4790].Int];PrintChar[32];
PrintTwo[ Eqtb↑[4787].Int /60];PrintChar[58];
PrintTwo[ Eqtb↑[4787].Int MOD 60]; END--:536--;
InputStack↑[InputPtr]←CurInput;PrintNl[655];
L←InputStack↑[0].LimitField;IF Buffer↑[L]=Eqtb↑[4815].Int  THEN L←L-1;
FOR i:INT    IN [ INT[1 ].. INT[L ]] DO  K ← i; Print[Buffer↑[K]] ENDLOOP;PrintLn[];Selector←OldSetting+2; END;
--:534----537:--  StartInput: PROCEDURE = 
BEGIN  ScanFileName[];
IF CurExt=210  THEN CurExt←647;
PackFileName[CurName,CurArea,CurExt];
{WHILE TRUE DO BEGIN BeginFileReading[];
IF AOpenIn[@InputFile↑[CurInput.IndexField]] THEN  GOTO Label30;
PackFileName[CurName,TexArea,CurExt];
IF AOpenIn[@InputFile↑[CurInput.IndexField]] THEN  GOTO Label30;
EndFileReading[];PromptFileName[643,647]; END ENDLOOP ;
EXITS Label30 => NULL};CurInput.NameField←AMakeNameString[@InputFile↑[CurInput.
IndexField]];IF JobName=0  THEN BEGIN JobName←CurName;OpenLogFile[];
 END;
IF TermOffset+( INT[StrStart↑[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];CurInput.StateField←33;
IF CurInput.NameField=StrPtr-1  THEN BEGIN BEGIN StrPtr←StrPtr-1;
PoolPtr←StrStart↑[StrPtr]; END;CurInput.NameField←CurName; END;
--538:
BEGIN IF  NOT InputLn[@InputFile↑[CurInput.IndexField],FALSE] THEN NULL;
FirmUpTheLine[];
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;Line←1; END--:538--; END;--:537
 CharWarning: PROCEDURE[F: InternalFontNumber,C: EightBits]
 = 
BEGIN IF Eqtb↑[4802].Int>0  THEN BEGIN BeginDiagnostic[];PrintNl[682];
PrintAscii[C];Print[683];Print[FontName↑[F]];PrintChar[33];
EndDiagnostic[FALSE]; END; END;--:581----582:
 NewCharacter: PROCEDURE[F: InternalFontNumber,C: EightBits] RETURNS[NewCharacterResult: Halfword]
 = 
BEGIN  P:Halfword;
 {IF( INT[FontBc↑[F]]<=C)AND ( INT[FontEc↑[F]]>=C) THEN IF( INT[FontInfo↑[
CharBase↑[F]+C].Qqqq.B0]>0) THEN BEGIN P←GetAvail[];Mem[P]↑.Hh.B0←F;Mem[P]↑.Hh.B1←C;
NewCharacterResult←P; GOTO Label10; END;CharWarning[F,C];NewCharacterResult←0;EXITS Label10 => NULL}; END;
 OpenFmtFile: PROCEDURE RETURNS[OpenFmtFileResult: PascalBoolean] = 
BEGIN  J:PascalInteger[0..BufSize];
 {{IF Buffer↑[CurInput.LocField]=38  THEN BEGIN 
 CurInput.LocField←
CurInput.LocField+1;J←CurInput.LocField;Buffer↑[Last]←32;
WHILE Buffer↑[J]#32 DO J←J+1 ENDLOOP ;
PackBufferedName[CurInput.LocField,J-1];
IF WOpenIn[@FmtFile] THEN BEGIN CurInput.LocField←J; GOTO Label40; END;
PackDefaultArea[CurInput.LocField,J-1];
IF WOpenIn[@FmtFile] THEN BEGIN CurInput.LocField←J; GOTO Label40; END;{PascalWriteLongString[file: @TermOut, item: "Sorry, I can't find that format;"]
; PascalWriteLongString[file: @TermOut, item: " will try your default."]; PascalWriteLn[file: @TermOut]}; END;PackAllDefault[];
IF  NOT WOpenIn[@FmtFile] THEN BEGIN
 {PascalWriteLongString[file: @TermOut, item: "I can't find your default format file!"]; PascalWriteLn[file: @TermOut]};
OpenFmtFileResult←FALSE; GOTO Label10; END;EXITS Label40 => NULL};OpenFmtFileResult←TRUE;EXITS Label10 => NULL}; END;--:524

END.