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


DIRECTORY
  PascalBasic,
  PascalWizardFiles,
  TexTypes,
  TexInteraction,
  TexScan,
  TexSymbols,
  TexRest,
  TexSysdep;

TexInteractionImpl: PROGRAM IMPORTS PascalBasic, PascalWizardFiles, TexTypes, TexScan, TexSymbols, TexRest, TexSysdep EXPORTS TexInteraction = PUBLIC
BEGIN OPEN PascalBasic, PascalWizardFiles, TexTypes, TexInteraction, TexScan, TexSymbols, TexRest, TexSysdep;
--:13----20:
Xord: LONG POINTER TO ARRAY PascalChar OF AsciiCode ← PascalStaticZone.NEW[ARRAY PascalChar OF AsciiCode];
Xchr: LONG POINTER TO ARRAY AsciiCode OF PascalChar ← PascalStaticZone.NEW[ARRAY AsciiCode OF PascalChar];
--:20----26:
NameOfFile: LONG POINTER TO PACKED ARRAY PascalInteger[1..127] OF PascalChar ← PascalStaticZone.NEW[PACKED ARRAY PascalInteger[1..127] OF PascalChar];


NameLength: PascalInteger[0..FileNameSize];
--:26----30:
Buffer: LONG POINTER TO ARRAY PascalInteger[0..7500] OF AsciiCode ← PascalStaticZone.NEW[ARRAY PascalInteger[0..7500] OF AsciiCode];

First: PascalInteger[0..BufSize];


Last: PascalInteger[0..BufSize];

MaxBufStack: PascalInteger[0..BufSize];
--:30----32:--
TermIn: AlphaFile;


TermOut: AlphaFile;
--:32----39:
StrPool: LONG POINTER TO PACKED ARRAY PoolPointer OF AsciiCode ← PascalStaticZone.NEW[PACKED ARRAY PoolPointer OF AsciiCode];

StrStart: LONG POINTER TO ARRAY StrNumber OF PoolPointer ← PascalStaticZone.NEW[ARRAY StrNumber OF PoolPointer];

PoolPtr: PoolPointer;


StrPtr: StrNumber;

--:39----50:--
PoolFile: AlphaFile;
--:50----54:--
LogFile: AlphaFile;


Selector: PascalInteger[0..21];
Dig: LONG POINTER TO ARRAY PascalInteger[0..22] OF PascalInteger[0..15] ← PascalStaticZone.NEW[ARRAY PascalInteger[0..22] OF PascalInteger[0..15]];

Tally: PascalInteger;


TermOffset: PascalInteger[0..MaxPrintLine];

FileOffset: PascalInteger[0..MaxPrintLine];

TrickBuf: LONG POINTER TO ARRAY PascalInteger[0..64] OF AsciiCode ← PascalStaticZone.NEW[ARRAY PascalInteger[0..64] OF AsciiCode];

TrickCount: PascalInteger;


FirstCount: PascalInteger;
--:54----73:--
Interaction: PascalInteger[0..3];
--:73----76:

DeletionsAllowed: PascalBoolean;

ErrorCount: PascalInteger[-1..100];
--:76----79:
HelpLine: LONG POINTER TO ARRAY PascalInteger[0..5] OF StrNumber ← PascalStaticZone.NEW[ARRAY PascalInteger[0..5] OF StrNumber];

HelpPtr: PascalInteger[0..6];

--:79----96:--
Interrupt: PascalInteger;

OkToInterrupt: PascalBoolean;
--:96----104:

ArithError: PascalBoolean;

Remainder: Scaled;
--:104----115:--
TempPtr: Halfword;
--:513----514:--
TexArea: StrNumber;


TexFontArea: StrNumber;
 PrintLn: PROCEDURE
 = 
BEGIN SELECT Selector FROM 19 =>BEGIN PascalWriteLn[file: @TermOut];PascalWriteLn[file: @LogFile];
TermOffset←0;FileOffset←0; END;18 =>BEGIN PascalWriteLn[file: @LogFile];
FileOffset←0; END;17 =>BEGIN PascalWriteLn[file: @TermOut];TermOffset←0; END;
16,20,21 => NULL; ENDCASE =>PascalWriteLn[file: @WriteFile↑[Selector]]; END;--:57----58:
 PrintChar: PROCEDURE[S: AsciiCode] = 
BEGIN  {IF--244:
S=Eqtb↑[4816].Int--:244-- THEN IF  INT[Selector]<20  THEN BEGIN PrintLn[]; GOTO Label10;
 END;SELECT Selector FROM 19 =>BEGIN PascalWriteChar[file: @TermOut, item: Xchr↑[S]];
PascalWriteChar[file: @LogFile, item: Xchr↑[S]];TermOffset←TermOffset+1;
FileOffset←FileOffset+1;
IF TermOffset=MaxPrintLine  THEN BEGIN PascalWriteLn[file: @TermOut];
TermOffset←0; END;
IF FileOffset=MaxPrintLine  THEN BEGIN PascalWriteLn[file: @LogFile];
FileOffset←0; END; END;18 =>BEGIN PascalWriteChar[file: @LogFile, item: Xchr↑[S]];
FileOffset←FileOffset+1;IF FileOffset=MaxPrintLine  THEN PrintLn[];
 END;17 =>BEGIN PascalWriteChar[file: @TermOut, item: Xchr↑[S]];TermOffset←TermOffset+1;
IF TermOffset=MaxPrintLine  THEN PrintLn[]; END;16 => NULL;
20 =>IF Tally<TrickCount  THEN TrickBuf↑[ PascalMODPower2Mask[Tally ,63]]←S;
21 =>BEGIN IF  INT[PoolPtr]<PoolSize  THEN BEGIN StrPool↑[PoolPtr]←S;
PoolPtr←PoolPtr+1; END; END;
 ENDCASE =>PascalWriteChar[file: @WriteFile↑[Selector], item: Xchr↑[S]];Tally←Tally+1;EXITS Label10 => NULL}; END;
--:58----59:-- Print: PROCEDURE[S: PascalInteger] = 
BEGIN  J:PoolPointer;
 {IF S>=StrPtr  THEN S←131  ELSE IF S<128  THEN IF S<0  THEN S←131
 ELSE IF(--244:--S=Eqtb↑[4816].Int--:244
) THEN IF  INT[Selector]<20  THEN BEGIN PrintLn[]; GOTO Label10; END;J←StrStart↑[S];
WHILE  INT[J]<StrStart↑[S+1]DO BEGIN PrintChar[StrPool↑[J]];J←J+1; END ENDLOOP ;
EXITS Label10 => NULL}; END;--:59----60:-- SlowPrint: PROCEDURE[S: PascalInteger] = 
BEGIN 
 J:PoolPointer;
 {IF S>=StrPtr  THEN S←131  ELSE IF S<128  THEN IF S<0  THEN S←131
 ELSE IF(--244:--S=Eqtb↑[4816].Int--:244
) THEN IF  INT[Selector]<20  THEN BEGIN PrintLn[]; GOTO Label10; END;J←StrStart↑[S];
WHILE  INT[J]<StrStart↑[S+1]DO BEGIN Print[StrPool↑[J]];J←J+1; END ENDLOOP ;EXITS Label10 => NULL}; END;
--:60----62:-- PrintNl: PROCEDURE[S: StrNumber]
 = 
BEGIN IF(( INT[TermOffset]>0)AND (PascalODD[Selector]))OR (( INT[FileOffset]>0)AND (
 INT[Selector]>=18)) THEN PrintLn[];Print[S]; END;--:62----63:
 PrintEsc: PROCEDURE[S: StrNumber] = 
BEGIN C:PascalInteger;--243:
C←Eqtb↑[4812].Int--:243--;IF C>=0  THEN IF C<128  THEN Print[C];Print[S];
 END;--:63----64:-- PrintDigs: PROCEDURE[K: EightBits]
 = 
BEGIN WHILE  INT[K]>0 DO BEGIN K←K-1;
IF  INT[Dig↑[K]]<10  THEN PrintChar[48+Dig↑[K]] ELSE PrintChar[55+Dig↑[K]]; END ENDLOOP ;
 END;--:64----65:-- PrintInt: PROCEDURE[N: PascalInteger] = 
BEGIN K:PascalInteger[0..23];M:PascalInteger;
 K←0;IF N<0  THEN BEGIN PrintChar[45];
IF N>-100000000  THEN N←-N  ELSE BEGIN M←-1-N;N← M /10;
M←( M MOD 10)+1;K←1;IF M<10  THEN Dig↑[0]←M  ELSE BEGIN Dig↑[0]←0;N←N+1;
 END; END; END;DO Dig↑[K]← N MOD 10;N← N /10;K←K+1; IF N=0 THEN EXIT; ENDLOOP;
PrintDigs[K]; END;--:65----262:----:78----81:-- JumpOut: PROCEDURE
 = 
BEGIN  ERROR Error9998; END;--:81----82:-- Error: PROCEDURE = 
BEGIN 
 C:AsciiCode;S1, S2, S3, S4:PascalInteger; IF  INT[History]<2  THEN History←2;
PrintChar[46];ShowContext[];
{IF Interaction=3  THEN BEGIN SetNormalPriority[];--83:
WHILE TRUE DO BEGIN DO {--Label22:--ClearForErrorPrompt[];BEGIN Print[136];
TermInput[]; END;IF Last=First  THEN  GOTO Label10;C←Buffer↑[First];
IF  INT[C]>=97  THEN C←C-32;--84:
SELECT C FROM 48,49,50,51,52,53,54,55,56,57 =>IF DeletionsAllowed  THEN--88:
BEGIN S1←CurTok;S2←CurCmd;S3←CurChr;S4←AlignState;
AlignState←1000000;OkToInterrupt←FALSE;
IF( INT[Last]>First+1)AND ( INT[Buffer↑[First+1]]>=48)AND ( INT[Buffer↑[First+1]]<=57) THEN C←
C*10+Buffer↑[First+1]-48*11  ELSE C←C-48;WHILE  INT[C]>0 DO BEGIN GetToken[];
C←C-1; END ENDLOOP ;CurTok←S1;CurCmd←S2;CurChr←S3;AlignState←S4;
OkToInterrupt←TRUE;BEGIN HelpPtr←2;HelpLine↑[1]←151;
HelpLine↑[0]←152; END;ShowContext[]; GOTO Label22; END--:88--;68 =>BEGIN DebugHelp[];
 GOTO Label22; END;69 =>IF  INT[BasePtr]>0  THEN BEGIN PrintNl[137];
Print[InputStack↑[BasePtr].NameField];Print[138];PrintInt[Line];
Interaction←2;JumpOut[]; END;72 =>--89:
BEGIN IF UseErrHelp  THEN BEGIN GiveErrHelp[];UseErrHelp←FALSE;
 END  ELSE BEGIN IF HelpPtr=0  THEN BEGIN HelpPtr←2;HelpLine↑[1]←153;
HelpLine↑[0]←154; END;DO HelpPtr←HelpPtr-1;
Print[HelpLine↑[HelpPtr]];PrintLn[]; IF HelpPtr=0 THEN EXIT; ENDLOOP; END;
BEGIN HelpPtr←4;HelpLine↑[3]←155;HelpLine↑[2]←154;HelpLine↑[1]←156;
HelpLine↑[0]←157; END; GOTO Label22; END--:89--;73 =>--87:--BEGIN BeginFileReading[];
IF  INT[Last]>First+1  THEN BEGIN CurInput.LocField←First+1;
Buffer↑[First]←32; END  ELSE BEGIN BEGIN Print[150];TermInput[]; END;
CurInput.LocField←First; END;First←Last;
CurInput.LimitField←Last-1; GOTO Label10; END--:87--;81,82,83 =>--86:
BEGIN ErrorCount←0;Interaction←0+C-81;Print[145];
SELECT C FROM 81 =>BEGIN PrintEsc[146];Selector←Selector-1; END;
82 =>PrintEsc[147];83 =>PrintEsc[148]; ENDCASE;Print[149];PrintLn[];
PascalTextBREAK[file: @TermOut]; GOTO Label10; END--:86--;88 =>BEGIN Interaction←2;JumpOut[]; END;
 ENDCASE => NULL;--85:--BEGIN Print[139];PrintNl[140];PrintNl[141];
IF  INT[BasePtr]>0  THEN Print[142];IF DeletionsAllowed  THEN PrintNl[143];
PrintNl[144]; END--:85----:84--;EXIT; EXITS Label22 => NULL} ENDLOOP; END--:83-- ENDLOOP ; END;ErrorCount←ErrorCount+1;
IF ErrorCount=100  THEN BEGIN PrintNl[135];History←3;JumpOut[]; END;
--90:--IF  INT[Interaction]>0  THEN Selector←Selector-1;
IF UseErrHelp  THEN BEGIN PrintLn[];GiveErrHelp[];
 END  ELSE WHILE  INT[HelpPtr]>0 DO BEGIN HelpPtr←HelpPtr-1;
PrintNl[HelpLine↑[HelpPtr]]; END ENDLOOP ;PrintLn[];
IF  INT[Interaction]>0  THEN Selector←Selector+1;PrintLn--:90--[];
EXITS Label10 => NULL};SetBackgroundPriority[]; END;--:82----93:
 FatalError: PROCEDURE[S: StrNumber] = 
BEGIN NormalizeSelector[];
BEGIN IF Interaction=3  THEN NULL;PrintNl[134];Print[159]; END;
BEGIN HelpPtr←1;HelpLine↑[0]←S; END;
BEGIN IF Interaction=3  THEN Interaction←2;Error[];
IF  INT[Interaction]>0  THEN DebugHelp[];History←3;JumpOut[]; END; END;--:93----94:
 Overflow: PROCEDURE[S: StrNumber,N: PascalInteger] = 
BEGIN NormalizeSelector[];
BEGIN IF Interaction=3  THEN NULL;PrintNl[134];Print[160]; END;Print[S];
PrintChar[61];PrintInt[N];PrintChar[93];BEGIN HelpPtr←2;
HelpLine↑[1]←161;HelpLine↑[0]←162; END;
BEGIN IF Interaction=3  THEN Interaction←2;Error[];
IF  INT[Interaction]>0  THEN DebugHelp[];History←3;JumpOut[]; END; END;--:94----95:
 Confusion: PROCEDURE[S: StrNumber] = 
BEGIN NormalizeSelector[];
IF  INT[History]<2  THEN BEGIN BEGIN IF Interaction=3  THEN NULL;PrintNl[134];
Print[163]; END;Print[S];PrintChar[41];BEGIN HelpPtr←1;
HelpLine↑[0]←164; END; END  ELSE BEGIN BEGIN IF Interaction=3  THEN NULL;
PrintNl[134];Print[165]; END;BEGIN HelpPtr←2;HelpLine↑[1]←166;
HelpLine↑[0]←167; END; END;BEGIN IF Interaction=3  THEN Interaction←2;
Error[];IF  INT[Interaction]>0  THEN DebugHelp[];History←3;JumpOut[]; END; END;--:95
--:28----31:
 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;--:31----37:----:37----43:-- MakeString: PROCEDURE RETURNS[MakeStringResult: StrNumber]
 = 
BEGIN IF StrPtr=MaxStrings  THEN Overflow[130,MaxStrings-InitStrPtr]
;StrPtr←StrPtr+1;StrStart↑[StrPtr]←PoolPtr;MakeStringResult←StrPtr-1;
 END;--:43----45:-- StrEqBuf: PROCEDURE[S: StrNumber,K: PascalInteger] RETURNS[StrEqBufResult: PascalBoolean]
 = 
BEGIN  J:PoolPointer;Result:PascalBoolean; J←StrStart↑[S];
{WHILE  INT[J]<StrStart↑[S+1]DO BEGIN IF StrPool↑[J]#Buffer↑[K] THEN BEGIN
Result←FALSE; GOTO Label45; END;J←J+1;K←K+1; END ENDLOOP ;Result←TRUE;
EXITS Label45 => NULL};StrEqBufResult←Result; END;--:45----46:
 StrEqStr: PROCEDURE[S,T: StrNumber] RETURNS[StrEqStrResult: PascalBoolean] = 
BEGIN 
 J, K:PoolPointer;Result:PascalBoolean; Result←FALSE;
{IF( INT[StrStart↑[S+1]]-StrStart↑[S])#( INT[StrStart↑[T+1]]-StrStart↑[T]) THEN 
GOTO Label45;J←StrStart↑[S];K←StrStart↑[T];
WHILE  INT[J]<StrStart↑[S+1]DO BEGIN IF StrPool↑[J]#StrPool↑[K] THEN  GOTO Label45;
J←J+1;K←K+1; END ENDLOOP ;Result←TRUE;EXITS Label45 => NULL};StrEqStrResult←Result; END;--:46----47:
 PrintTwo: PROCEDURE[N: PascalInteger] = 
BEGIN N← ABS[N]MOD 100;
PrintChar[48+( N /10)];PrintChar[48+( N MOD 10)]; END;--:66----67:
 PrintHex: PROCEDURE[N: PascalInteger] = 
BEGIN K:PascalInteger[0..22]; K←0;PrintChar[34];
DO Dig↑[K]← PascalMODPower2Mask[N ,15];N← PascalDIVPower2[N ,4];K←K+1; IF N=0 THEN EXIT; ENDLOOP;PrintDigs[K]; END;
--:67----68:-- PrintAscii: PROCEDURE[C: PascalInteger]
 = 
BEGIN IF(C>=0)AND (C<=127) THEN Print[C] ELSE BEGIN PrintChar[91];
IF C<0  THEN PrintInt[C] ELSE PrintHex[C];PrintChar[93]; END; END;--:68
--69:-- PrintRomanInt: PROCEDURE[N: PascalInteger] = 
BEGIN  J, K:PoolPointer;
U, V:NonnegativeInteger; J←StrStart↑[132];V←1000;
{WHILE TRUE DO BEGIN WHILE N>=V DO BEGIN PrintChar[StrPool↑[J]];N←N-V;
 END ENDLOOP ;IF N<=0  THEN  GOTO Label10;K←J+2;U←V /(StrPool↑[ INT[K]-1]-48);
IF StrPool↑[ INT[K]-1]=50  THEN BEGIN K←K+2;U←U /(StrPool↑[ INT[K]-1]-48); END;
IF N+U>=V  THEN BEGIN PrintChar[StrPool↑[K]];N←N+U;
 END  ELSE BEGIN J←J+2;V←V /(StrPool↑[ INT[J]-1]-48); END; END ENDLOOP ;EXITS Label10 => NULL}; END;--:69
--70:-- PrintCurrentString: PROCEDURE = 
BEGIN J:PoolPointer;
 J←StrStart↑[StrPtr];
WHILE  INT[J]<PoolPtr DO BEGIN PrintChar[StrPool↑[J]];J←J+1; END ENDLOOP ; END;--:70
--71:-- 
 TermInput: PROCEDURE = 
BEGIN K:PascalInteger[0..BufSize]; PascalTextBREAK[file: @TermOut];
IF  NOT InputLn[@TermIn,TRUE] THEN FatalError[133];TermOffset←0;
Selector←Selector-1;
IF Last#First  THEN FOR i:INT    IN [ INT[First ].. INT[Last-1 ]] DO  K ← i; Print[Buffer↑[K]] ENDLOOP;PrintLn[];
Selector←Selector+1; END;--:71----91:-- IntError: PROCEDURE[N: PascalInteger]
 = 
BEGIN Print[158];PrintInt[N];PrintChar[41];Error[]; END;--:91----92:
 PauseForInstructions: PROCEDURE
 = 
BEGIN IF OkToInterrupt  THEN BEGIN Interaction←3;
IF(Selector=18)OR (Selector=16) THEN Selector←Selector+1;
BEGIN IF Interaction=3  THEN NULL;PrintNl[134];Print[168]; END;
BEGIN HelpPtr←3;HelpLine↑[2]←169;HelpLine↑[1]←170;HelpLine↑[0]←171;
 END;DeletionsAllowed←FALSE;Error[];DeletionsAllowed←TRUE;Interrupt←0;
 END; END;--:98----100:-- Half: PROCEDURE[X: PascalInteger] RETURNS[HalfResult: PascalInteger]
 = 
BEGIN IF PascalODD[X] THEN HalfResult← PascalDIVPower2[(X+1),1] ELSE HalfResult← PascalDIVPower2[X ,1]; END;--:100----102:
 RoundDecimals: PROCEDURE[K: SmallNumber] RETURNS[RoundDecimalsResult: Scaled] = 
BEGIN A:PascalInteger; A←0;
WHILE  INT[K]>0 DO BEGIN K←K-1;A← (A+Dig↑[K]*131072)/10; END ENDLOOP ;
RoundDecimalsResult← PascalDIVPower2[(A+1),1]; END;--:102----103:
 PrintScaled: PROCEDURE[S: Scaled] = 
BEGIN Delta:Scaled;
 IF S<0  THEN BEGIN PrintChar[45];S←-S; END;PrintInt[ PascalDIVPower2[S ,16]];
PrintChar[46];S←10*( PascalMODPower2Mask[S ,65535])+5;Delta←10;
DO IF Delta>65536  THEN S←S+32768-( PascalDIVPower2[Delta ,1]);
PrintChar[48+( PascalDIVPower2[S ,16])];S←10*( PascalMODPower2Mask[S ,65535]);Delta←Delta*10;
 IF S<=Delta THEN EXIT; ENDLOOP; END;--:103----105:-- NxPlusY: PROCEDURE[N: PascalInteger,
X,Y: Scaled] RETURNS[NxPlusYResult: Scaled] = 
BEGIN IF N<0  THEN BEGIN X←-X;N←-N; END;
IF N=0  THEN NxPlusYResult←Y  ELSE IF(( X<=(1073741823-Y)/N)AND ( -X<=(
1073741823+Y)/N)) THEN NxPlusYResult←N*X+Y  ELSE BEGIN ArithError←TRUE;
NxPlusYResult←0; END; END;--:105----106:-- XOverN: PROCEDURE[X: Scaled,
N: PascalInteger] RETURNS[XOverNResult: Scaled] = 
BEGIN Negative:PascalBoolean; Negative←FALSE;
IF N=0  THEN BEGIN ArithError←TRUE;XOverNResult←0;Remainder←X;
 END  ELSE BEGIN IF N<0  THEN BEGIN X←-X;N←-N;Negative←TRUE; END;
IF X>=0  THEN BEGIN XOverNResult← X /N;Remainder← X MOD N;
 END  ELSE BEGIN XOverNResult←-( (-X)/N);Remainder←-( (-X)MOD N); END; END;
IF Negative  THEN Remainder←-Remainder; END;--:106----107:
 XnOverD: PROCEDURE[X: Scaled,N,D: PascalInteger] RETURNS[XnOverDResult: Scaled] = 
BEGIN Positive:PascalBoolean;
T, U, V:NonnegativeInteger;
 IF X>=0  THEN Positive←TRUE  ELSE BEGIN X←-X;Positive←FALSE; END;
T←( PascalMODPower2Mask[X ,32767])*N;U←( PascalDIVPower2[X ,15])*N+( PascalDIVPower2[T ,15]);
V←( U MOD D)*32768+( PascalMODPower2Mask[T ,32767]);
IF  U /D>=32768  THEN ArithError←TRUE  ELSE U←32768*( U /D)+(
V /D);IF Positive  THEN BEGIN XnOverDResult←U;Remainder← V MOD D;
 END  ELSE BEGIN XnOverDResult←-U;Remainder←-( V MOD D); END; END;--:107----108:
 Badness: PROCEDURE[T,S: Scaled] RETURNS[BadnessResult: Halfword] = 
BEGIN R:PascalInteger;
 IF T=0  THEN BadnessResult←0  ELSE IF S<=0  THEN BadnessResult←10000  ELSE BEGIN
IF T<=7230584  THEN R← (T*297)/S  ELSE IF S>=1663497  THEN R←T /( S
/297) ELSE R←T;
IF R>1290  THEN BadnessResult←10000  ELSE BadnessResult← PascalDIVPower2[(R*R*R+131072),18];
 END; END;--:108----114:-- PrintWord: PROCEDURE[W: MemoryWord]
 = 
BEGIN PrintInt[W.Int];PrintChar[32];PrintScaled[W.Int];
PrintChar[32];PrintScaled[PascalROUND[PascalFLOAT[65536]*W.Gr]];PrintLn[];
PrintInt[W.Hh.Lh];PrintChar[61];PrintInt[W.Hh.B0];PrintChar[58];
PrintInt[W.Hh.B1];PrintChar[59];PrintInt[W.Hh.Rh];PrintChar[32];
PrintInt[W.Qqqq.B0];PrintChar[58];PrintInt[W.Qqqq.B1];PrintChar[58];
PrintInt[W.Qqqq.B2];PrintChar[58];PrintInt[W.Qqqq.B3]; END;--:114
--:363----365:--  GetToken: PROCEDURE = 
BEGIN NoNewControlSequence←FALSE;
GetNext[];NoNewControlSequence←TRUE;
IF CurCs=0  THEN CurTok← INT[(CurCmd*256)]+CurChr  ELSE CurTok←
 INT[4096]+CurCs; END;--:365----366:----389:--
END.