-- file: PLtoTF5Impl.mesa
-- Pascal-to-Mesa translator output, translated at September 23, 1986 1:41:45 pm PDT


DIRECTORY
  PascalBasic,
  PascalWizardFiles,
  PLtoTFPrivate,
  PLtoTFExternals;

PLtoTF5Impl: PROGRAM IMPORTS PascalBasic, PascalWizardFiles, PLtoTFPrivate EXPORTS PLtoTFPrivate = PUBLIC
BEGIN OPEN PascalBasic, PascalWizardFiles, PLtoTFPrivate, PLtoTFExternals;
 NameEnter: PROCEDURE
 = 
BEGIN--47:-- Equiv↑[0]←0;NameLength←8;CurName↑[13]←67;CurName↑[14]←72;
CurName↑[15]←69;CurName↑[16]←67;CurName↑[17]←75;CurName↑[18]←83;
CurName↑[19]←85;CurName↑[20]←77;EnterName[1];NameLength←10;
CurName↑[11]←68;CurName↑[12]←69;CurName↑[13]←83;CurName↑[14]←73;
CurName↑[15]←71;CurName↑[16]←78;CurName↑[17]←83;CurName↑[18]←73;
CurName↑[19]←90;CurName↑[20]←69;EnterName[2];NameLength←11;
CurName↑[10]←68;CurName↑[11]←69;CurName↑[12]←83;CurName↑[13]←73;
CurName↑[14]←71;CurName↑[15]←78;CurName↑[16]←85;CurName↑[17]←78;
CurName↑[18]←73;CurName↑[19]←84;CurName↑[20]←83;EnterName[3];
NameLength←12;CurName↑[9]←67;CurName↑[10]←79;CurName↑[11]←68;
CurName↑[12]←73;CurName↑[13]←78;CurName↑[14]←71;CurName↑[15]←83;
CurName↑[16]←67;CurName↑[17]←72;CurName↑[18]←69;CurName↑[19]←77;
CurName↑[20]←69;EnterName[4];NameLength←6;CurName↑[15]←70;
CurName↑[16]←65;CurName↑[17]←77;CurName↑[18]←73;CurName↑[19]←76;
CurName↑[20]←89;EnterName[5];NameLength←4;CurName↑[17]←70;
CurName↑[18]←65;CurName↑[19]←67;CurName↑[20]←69;EnterName[6];
NameLength←16;CurName↑[5]←83;CurName↑[6]←69;CurName↑[7]←86;
CurName↑[8]←69;CurName↑[9]←78;CurName↑[10]←66;CurName↑[11]←73;
CurName↑[12]←84;CurName↑[13]←83;CurName↑[14]←65;CurName↑[15]←70;
CurName↑[16]←69;CurName↑[17]←70;CurName↑[18]←76;CurName↑[19]←65;
CurName↑[20]←71;EnterName[7];NameLength←6;CurName↑[15]←72;
CurName↑[16]←69;CurName↑[17]←65;CurName↑[18]←68;CurName↑[19]←69;
CurName↑[20]←82;EnterName[8];NameLength←9;CurName↑[12]←70;
CurName↑[13]←79;CurName↑[14]←78;CurName↑[15]←84;CurName↑[16]←68;
CurName↑[17]←73;CurName↑[18]←77;CurName↑[19]←69;CurName↑[20]←78;
EnterName[9];NameLength←8;CurName↑[13]←76;CurName↑[14]←73;
CurName↑[15]←71;CurName↑[16]←84;CurName↑[17]←65;CurName↑[18]←66;
CurName↑[19]←76;CurName↑[20]←69;EnterName[10];NameLength←9;
CurName↑[12]←67;CurName↑[13]←72;CurName↑[14]←65;CurName↑[15]←82;
CurName↑[16]←65;CurName↑[17]←67;CurName↑[18]←84;CurName↑[19]←69;
CurName↑[20]←82;EnterName[11];NameLength←9;CurName↑[12]←80;
CurName↑[13]←65;CurName↑[14]←82;CurName↑[15]←65;CurName↑[16]←77;
CurName↑[17]←69;CurName↑[18]←84;CurName↑[19]←69;CurName↑[20]←82;
EnterName[20];NameLength←6;CurName↑[15]←67;CurName↑[16]←72;
CurName↑[17]←65;CurName↑[18]←82;CurName↑[19]←87;CurName↑[20]←68;
EnterName[51];NameLength←6;CurName↑[15]←67;CurName↑[16]←72;
CurName↑[17]←65;CurName↑[18]←82;CurName↑[19]←72;CurName↑[20]←84;
EnterName[52];NameLength←6;CurName↑[15]←67;CurName↑[16]←72;
CurName↑[17]←65;CurName↑[18]←82;CurName↑[19]←68;CurName↑[20]←80;
EnterName[53];NameLength←6;CurName↑[15]←67;CurName↑[16]←72;
CurName↑[17]←65;CurName↑[18]←82;CurName↑[19]←73;CurName↑[20]←67;
EnterName[54];NameLength←10;CurName↑[11]←78;CurName↑[12]←69;
CurName↑[13]←88;CurName↑[14]←84;CurName↑[15]←76;CurName↑[16]←65;
CurName↑[17]←82;CurName↑[18]←71;CurName↑[19]←69;CurName↑[20]←82;
EnterName[55];NameLength←7;CurName↑[14]←86;CurName↑[15]←65;
CurName↑[16]←82;CurName↑[17]←67;CurName↑[18]←72;CurName↑[19]←65;
CurName↑[20]←82;EnterName[56];NameLength←3;CurName↑[18]←84;
CurName↑[19]←79;CurName↑[20]←80;EnterName[57];NameLength←3;
CurName↑[18]←77;CurName↑[19]←73;CurName↑[20]←68;EnterName[58];
NameLength←3;CurName↑[18]←66;CurName↑[19]←79;CurName↑[20]←84;
EnterName[59];NameLength←3;CurName↑[18]←82;CurName↑[19]←69;
CurName↑[20]←80;EnterName[60];NameLength←3;CurName↑[18]←69;
CurName↑[19]←88;CurName↑[20]←84;EnterName[60];NameLength←7;
CurName↑[14]←67;CurName↑[15]←79;CurName↑[16]←77;CurName↑[17]←77;
CurName↑[18]←69;CurName↑[19]←78;CurName↑[20]←84;EnterName[0];
NameLength←5;CurName↑[16]←76;CurName↑[17]←65;CurName↑[18]←66;
CurName↑[19]←69;CurName↑[20]←76;EnterName[70];NameLength←3;
CurName↑[18]←76;CurName↑[19]←73;CurName↑[20]←71;EnterName[71];
NameLength←3;CurName↑[18]←75;CurName↑[19]←82;CurName↑[20]←78;
EnterName[72];NameLength←4;CurName↑[17]←83;CurName↑[18]←84;
CurName↑[19]←79;CurName↑[20]←80;EnterName[73];--:47--ParamEnter[]; END;
 ReadLigKern: PROCEDURE = 
BEGIN KrnPtr:PascalInteger[0..256];C:Byte;--94:
BEGIN WHILE Level=1 DO BEGIN WHILE CurChar=32 DO GetNext[] ENDLOOP ;
IF CurChar=40  THEN--95:--BEGIN GetName[];
IF CurCode=0  THEN SkipToEndOfItem [] ELSE IF( INT[CurCode]<70)OR (
 INT[CurCode]>73) THEN BEGIN BEGIN IF  INT[CharsOnLine]>0  THEN {PascalWriteLongString[file: @Output, item: " "]; PascalWriteLn[file: @Output]};
PascalWriteLongString[file: @Output, item: "This property name doesn't belong in a LIGTABLE list"];
ShowErrorContext[]; END;SkipToEndOfItem[];
 END  ELSE BEGIN SELECT CurCode FROM 70 =>--97:--BEGIN C←GetByte[];CheckTag[C];
IF  INT[Nl]>255  THEN BEGIN IF  INT[CharsOnLine]>0  THEN {PascalWriteLongString[file: @Output, item: " "]; PascalWriteLn[file: @Output]};
PascalWriteLongString[file: @Output, item: "LIGTABLE with more than 255 commands cannot have further labels"]
;ShowErrorContext[]; END  ELSE BEGIN CharTag↑[C]←1;CharRemainder↑[C]←Nl;
UnusedLabel←TRUE; END; END--:97--;71 =>--98:--BEGIN LigKern↑[Nl].B0←0;
LigKern↑[Nl].B1←GetByte[];LigKern↑[Nl].B2←0;LigKern↑[Nl].B3←GetByte[];
IF Nl=511  THEN BEGIN IF  INT[CharsOnLine]>0  THEN {PascalWriteLongString[file: @Output, item: " "]; PascalWriteLn[file: @Output]};
PascalWriteLongString[file: @Output, item: "LIGTABLE should never exceed 511 LIG/KRN commands"];
ShowErrorContext[]; END  ELSE Nl←Nl+1;UnusedLabel←FALSE; END--:98--;
72 =>--100:--BEGIN LigKern↑[Nl].B0←0;LigKern↑[Nl].B1←GetByte[];
LigKern↑[Nl].B2←128;Kern↑[Nk]←GetFix[];KrnPtr←0;
WHILE Kern↑[KrnPtr]#Kern↑[Nk]DO KrnPtr←KrnPtr+1 ENDLOOP ;
IF KrnPtr=Nk  THEN BEGIN IF  INT[Nk]<256  THEN Nk←Nk+1  ELSE BEGIN BEGIN IF
 INT[CharsOnLine]>0  THEN {PascalWriteLongString[file: @Output, item: " "]; PascalWriteLn[file: @Output]};
PascalWriteLongString[file: @Output, item: "At most 256 different kerns are allowed"];ShowErrorContext[]; END;
KrnPtr←255; END; END;LigKern↑[Nl].B3←KrnPtr;
IF Nl=511  THEN BEGIN IF  INT[CharsOnLine]>0  THEN {PascalWriteLongString[file: @Output, item: " "]; PascalWriteLn[file: @Output]};
PascalWriteLongString[file: @Output, item: "LIGTABLE should never exceed 511 LIG/KRN commands"];
ShowErrorContext[]; END  ELSE Nl←Nl+1;UnusedLabel←FALSE; END--:100--;
73 =>--101:--BEGIN IF Nl=0  THEN BEGIN IF  INT[CharsOnLine]>0  THEN {PascalWriteLongString[file: @Output, item: " "]; PascalWriteLn[file: @Output]};
PascalWriteLongString[file: @Output, item: "Why STOP? You haven't started"];ShowErrorContext[];
 END  ELSE BEGIN IF UnusedLabel  THEN BEGIN BEGIN IF  INT[CharsOnLine]>0  THEN
{PascalWriteLongString[file: @Output, item: " "]; PascalWriteLn[file: @Output]};PascalWriteLongString[file: @Output, item: "STOP after LABEL invalidates the label"];
ShowErrorContext[]; END;
FOR i:INT    IN [ INT[0 ].. INT[255 ]] DO  C ← i; IF(CharTag↑[C]=1)AND (CharRemainder↑[C]=Nl) THEN
CharTag↑[C]←0 ENDLOOP;UnusedLabel←FALSE; END;LigKern↑[Nl-1].B0←128; END;
 END--:101--; ENDCASE;FinishTheProperty[]; END; END--:95
 ELSE IF CurChar=41  THEN SkipToEndOfItem [] ELSE JunkError[]; END ENDLOOP ;
BEGIN Loc←Loc-1;Level←Level+1;CurChar←41; END; END--:94--; END;
 ReadCharInfo: PROCEDURE = 
BEGIN--102:--BEGIN C←GetByte[];--107:
BEGIN IF CharsOnLine=8  THEN BEGIN {PascalWriteLongString[file: @Output, item: " "]; PascalWriteLn[file: @Output]};CharsOnLine←1;
 END  ELSE BEGIN IF  INT[CharsOnLine]>0  THEN PascalWriteLongString[file: @Output, item: " "];
CharsOnLine←CharsOnLine+1; END;PrintOctal[C]; END--:107--;
WHILE Level=1 DO BEGIN WHILE CurChar=32 DO GetNext[] ENDLOOP ;
IF CurChar=40  THEN--103:--BEGIN GetName[];
IF CurCode=0  THEN SkipToEndOfItem [] ELSE IF( INT[CurCode]<51)OR (
 INT[CurCode]>56) THEN BEGIN BEGIN IF  INT[CharsOnLine]>0  THEN {PascalWriteLongString[file: @Output, item: " "]; PascalWriteLn[file: @Output]};
PascalWriteLongString[file: @Output, item: "This property name doesn't belong in a CHARACTER list"];
ShowErrorContext[]; END;SkipToEndOfItem[];
 END  ELSE BEGIN SELECT CurCode FROM 51 =>CharWd↑[C]←SortIn[1,GetFix[]];
52 =>CharHt↑[C]←SortIn[2,GetFix[]];53 =>CharDp↑[C]←SortIn[3,GetFix[]];
54 =>CharIc↑[C]←SortIn[4,GetFix[]];55 =>BEGIN CheckTag[C];CharTag↑[C]←2;
CharRemainder↑[C]←GetByte[]; END;56 =>--104:
BEGIN IF Ne=256  THEN BEGIN IF  INT[CharsOnLine]>0  THEN {PascalWriteLongString[file: @Output, item: " "]; PascalWriteLn[file: @Output]};
PascalWriteLongString[file: @Output, item: "At most 256 VARCHAR specs are allowed"];ShowErrorContext[];
 END  ELSE BEGIN CheckTag[C];CharTag↑[C]←3;CharRemainder↑[C]←Ne;
Exten↑[Ne].B0←0;Exten↑[Ne].B1←0;Exten↑[Ne].B2←0;Exten↑[Ne].B3←0;
WHILE Level=2 DO BEGIN WHILE CurChar=32 DO GetNext[] ENDLOOP ;
IF CurChar=40  THEN--105:--BEGIN GetName[];
IF CurCode=0  THEN SkipToEndOfItem [] ELSE IF( INT[CurCode]<57)OR (
 INT[CurCode]>60) THEN BEGIN BEGIN IF  INT[CharsOnLine]>0  THEN {PascalWriteLongString[file: @Output, item: " "]; PascalWriteLn[file: @Output]};
PascalWriteLongString[file: @Output, item: "This property name doesn't belong in a VARCHAR list"];
ShowErrorContext[]; END;SkipToEndOfItem[];
 END  ELSE BEGIN SELECT CurCode-(57)FROM 0 =>Exten↑[Ne].B0←GetByte[];
1 =>Exten↑[Ne].B1←GetByte[];2 =>Exten↑[Ne].B2←GetByte[];
3 =>Exten↑[Ne].B3←GetByte[]; ENDCASE;FinishTheProperty[]; END; END--:105
 ELSE IF CurChar=41  THEN SkipToEndOfItem [] ELSE JunkError[]; END ENDLOOP ;
Ne←Ne+1;BEGIN Loc←Loc-1;Level←Level+1;CurChar←41; END; END; END--:104--;
 ENDCASE;FinishTheProperty[]; END; END--:103
 ELSE IF CurChar=41  THEN SkipToEndOfItem [] ELSE JunkError[]; END ENDLOOP ;
IF CharWd↑[C]=0  THEN CharWd↑[C]←SortIn[1,0];BEGIN Loc←Loc-1;
Level←Level+1;CurChar←41; END; END--:102--; END; ReadInput: PROCEDURE
 = 
BEGIN--82:--CurChar←32;DO WHILE CurChar=32 DO GetNext[] ENDLOOP ;
IF CurChar=40  THEN--84:--BEGIN GetName[];
IF CurCode=0  THEN SkipToEndOfItem [] ELSE IF  INT[CurCode]>11  THEN BEGIN
BEGIN IF  INT[CharsOnLine]>0  THEN {PascalWriteLongString[file: @Output, item: " "]; PascalWriteLn[file: @Output]};
PascalWriteLongString[file: @Output, item: "This property name doesn't belong on the outer level"];
ShowErrorContext[]; END;SkipToEndOfItem[]; END  ELSE BEGIN--85:
SELECT CurCode FROM 1 =>BEGIN CheckSumSpecified←TRUE;ReadFourBytes[0];
 END;2 =>--88:--BEGIN NextD←GetFix[];
IF(NextD<1048576)OR (NextD>=1073741824) THEN BEGIN IF  INT[CharsOnLine]>0
 THEN {PascalWriteLongString[file: @Output, item: " "]; PascalWriteLn[file: @Output]};PascalWriteLongString[file: @Output, item: "The design size must be between 1 and 1024"];
ShowErrorContext[]; END  ELSE DesignSize←NextD; END--:88--;3 =>--89:
BEGIN NextD←GetFix[];
IF NextD<=0  THEN BEGIN IF  INT[CharsOnLine]>0  THEN {PascalWriteLongString[file: @Output, item: " "]; PascalWriteLn[file: @Output]};
PascalWriteLongString[file: @Output, item: "The number of units per design size must be positive"];
ShowErrorContext[]; END  ELSE DesignUnits←NextD; END--:89--;
4 =>ReadBcpl[8,40];5 =>ReadBcpl[48,20];6 =>HeaderBytes↑[71]←GetByte[];
7 =>--90:--BEGIN WHILE CurChar=32 DO GetNext[] ENDLOOP ;
IF CurChar=84  THEN SevenBitSafeFlag←TRUE  ELSE IF CurChar=70  THEN
SevenBitSafeFlag←FALSE  ELSE BEGIN IF  INT[CharsOnLine]>0  THEN {
PascalWriteLongString[file: @Output, item: " "]; PascalWriteLn[file: @Output]};PascalWriteLongString[file: @Output, item: "The flag value should be \"TRUE\" or \"FALSE\""];
ShowErrorContext[]; END;
DO GetNext []; IF(CurChar=40)OR (CurChar=41) THEN EXIT; ENDLOOP; END--:90--;8 =>--91:
BEGIN C←GetByte[];
IF  INT[C]<18  THEN BEGIN BEGIN IF  INT[CharsOnLine]>0  THEN {PascalWriteLongString[file: @Output, item: " "]; PascalWriteLn[file: @Output]};
PascalWriteLongString[file: @Output, item: "HEADER indices should be 18 or more"];ShowErrorContext[]; END;
DO GetNext []; IF(CurChar=40)OR (CurChar=41) THEN EXIT; ENDLOOP;
 END  ELSE IF  INT[4*C+4]>MaxHeaderBytes  THEN BEGIN BEGIN IF  INT[CharsOnLine]>0
 THEN {PascalWriteLongString[file: @Output, item: " "]; PascalWriteLn[file: @Output]};
PascalWriteLongString[file: @Output, item: "This HEADER index is too big for my present table size"];
ShowErrorContext[]; END;
DO GetNext []; IF(CurChar=40)OR (CurChar=41) THEN EXIT; ENDLOOP;
 END  ELSE BEGIN WHILE  INT[HeaderPtr]<4*C DO BEGIN HeaderBytes↑[HeaderPtr]←0
;HeaderPtr←HeaderPtr+1; END ENDLOOP ;ReadFourBytes[4*C];HeaderPtr←4*C+4;
 END; END--:91--;9 =>--92:
BEGIN WHILE Level=1 DO BEGIN WHILE CurChar=32 DO GetNext[] ENDLOOP ;
IF CurChar=40  THEN--93:--BEGIN GetName[];
IF CurCode=0  THEN SkipToEndOfItem [] ELSE IF( INT[CurCode]<20)OR (
 INT[CurCode]>=51) THEN BEGIN BEGIN IF  INT[CharsOnLine]>0  THEN {PascalWriteLongString[file: @Output, item: " "]; PascalWriteLn[file: @Output]};
PascalWriteLongString[file: @Output, item: "This property name doesn't belong in a FONTDIMEN list"];
ShowErrorContext[]; END;SkipToEndOfItem[];
 END  ELSE BEGIN IF CurCode=20  THEN C←GetByte [] ELSE C←CurCode-20;
IF C=0  THEN BEGIN BEGIN IF  INT[CharsOnLine]>0  THEN {PascalWriteLongString[file: @Output, item: " "]; PascalWriteLn[file: @Output]};
PascalWriteLongString[file: @Output, item: "PARAMETER index must not be zero"];ShowErrorContext[]; END;
SkipToEndOfItem[];
 END  ELSE IF  INT[C]>MaxParamWords  THEN BEGIN BEGIN IF  INT[CharsOnLine]>0  THEN
{PascalWriteLongString[file: @Output, item: " "]; PascalWriteLn[file: @Output]};
PascalWriteLongString[file: @Output, item: "This PARAMETER index is too big for my present table size"];
ShowErrorContext[]; END;SkipToEndOfItem[];
 END  ELSE BEGIN WHILE  INT[Np]<C DO BEGIN Np←Np+1;Param↑[Np]←0; END ENDLOOP ;
Param↑[C]←GetFix[];FinishTheProperty[]; END; END; END--:93
 ELSE IF CurChar=41  THEN SkipToEndOfItem [] ELSE JunkError[]; END ENDLOOP ;
BEGIN Loc←Loc-1;Level←Level+1;CurChar←41; END; END--:92--;
10 =>ReadLigKern[];11 =>ReadCharInfo[]; ENDCASE--:85--;FinishTheProperty[]; END;
 END--:84-- ELSE IF  (CurChar=41)AND NOT InputHasEnded  THEN BEGIN BEGIN IF
 INT[CharsOnLine]>0  THEN {PascalWriteLongString[file: @Output, item: " "]; PascalWriteLn[file: @Output]};PascalWriteLongString[file: @Output, item: "Extra right parenthesis"];
ShowErrorContext[]; END;Loc←Loc+1;CurChar←32;
 END  ELSE IF  NOT InputHasEnded  THEN JunkError[];
 IF InputHasEnded--:82-- THEN EXIT; ENDLOOP; END; CorrAndCheck: PROCEDURE = 
BEGIN C:Byte;
LigPtr:PascalInteger[0..511];G:Byte;--109:----110:
IF UnusedLabel  THEN BEGIN FOR i:INT    IN [ INT[0 ].. INT[255 ]] DO  C ← i; IF(CharTag↑[C]=1)AND (
CharRemainder↑[C]=Nl) THEN CharTag↑[C]←0 ENDLOOP;
{PascalWriteLongString[file: @Output, item: "Last LIGTABLE LABEL was not used."]; PascalWriteLn[file: @Output]}; END;
IF  INT[Nl]>0  THEN LigKern↑[Nl-1].B0←128--:110--;SevenUnsafe←FALSE;
FOR i:INT    IN [ INT[0 ].. INT[255 ]] DO  C ← i; IF CharWd↑[C]#0  THEN--111:--SELECT CharTag↑[C]FROM 0 => NULL;
1 =>--113:--BEGIN IF CharWd↑[C]=0  THEN BEGIN 
PascalWriteLongString[file: @Output, item: "There's a LABEL but no CHARACTER spec for "];PrintOctal[C];
{PascalWriteLongString[file: @Output, item: "."]; PascalWriteLn[file: @Output]};CharWd↑[C]←SortIn[1,0]; END;LigPtr←CharRemainder↑[C];
DO IF  INT[LigKern↑[LigPtr].B2]<128  THEN BEGIN BEGIN G←LigKern↑[LigPtr]
.B1;IF( INT[G]>=128)AND ( INT[C]<128) THEN SevenUnsafe←TRUE;
IF CharWd↑[G]=0  THEN BEGIN CharWd↑[G]←SortIn[1,0];
{PascalWriteLongString[file: @Output, item: "LIG character generated by"]; PascalWriteLongString[file: @Output, item: " "]};PrintOctal[C];
{PascalWriteLongString[file: @Output, item: " had no CHARACTER spec."]; PascalWriteLn[file: @Output]}; END; END;
BEGIN G←LigKern↑[LigPtr].B3;
IF( INT[G]>=128)AND ( INT[C]<128) THEN SevenUnsafe←TRUE;
IF CharWd↑[G]=0  THEN BEGIN CharWd↑[G]←SortIn[1,0];
{PascalWriteLongString[file: @Output, item: "LIG character generated by"]; PascalWriteLongString[file: @Output, item: " "]};PrintOctal[C];
{PascalWriteLongString[file: @Output, item: " had no CHARACTER spec."]; PascalWriteLn[file: @Output]}; END; END;
 END  ELSE BEGIN G←LigKern↑[LigPtr].B1;
IF( INT[G]>=128)AND ( INT[C]<128) THEN SevenUnsafe←TRUE;
IF CharWd↑[G]=0  THEN BEGIN CharWd↑[G]←SortIn[1,0];
{PascalWriteLongString[file: @Output, item: "KRN character generated by"]; PascalWriteLongString[file: @Output, item: " "]};PrintOctal[C];
{PascalWriteLongString[file: @Output, item: " had no CHARACTER spec."]; PascalWriteLn[file: @Output]}; END; END;LigPtr←LigPtr+1;
 IF LigKern↑[LigPtr-1].B0=128 THEN EXIT; ENDLOOP; END--:113--;2 =>BEGIN G←CharRemainder↑[C];
IF( INT[G]>=128)AND ( INT[C]<128) THEN SevenUnsafe←TRUE;
IF CharWd↑[G]=0  THEN BEGIN CharWd↑[G]←SortIn[1,0];
{PascalWriteLongString[file: @Output, item: "The character NEXTLARGER than"]; PascalWriteLongString[file: @Output, item: " "]};PrintOctal[C];
{PascalWriteLongString[file: @Output, item: " had no CHARACTER spec."]; PascalWriteLn[file: @Output]}; END; END;3 =>--114:
BEGIN IF  INT[Exten↑[CharRemainder↑[C]].B0]>0  THEN BEGIN G←Exten↑
[CharRemainder↑[C]].B0;IF( INT[G]>=128)AND ( INT[C]<128) THEN SevenUnsafe←TRUE;
IF CharWd↑[G]=0  THEN BEGIN CharWd↑[G]←SortIn[1,0];
{PascalWriteLongString[file: @Output, item: "TOP piece of character"]; PascalWriteLongString[file: @Output, item: " "]};PrintOctal[C];
{PascalWriteLongString[file: @Output, item: " had no CHARACTER spec."]; PascalWriteLn[file: @Output]}; END; END;
IF  INT[Exten↑[CharRemainder↑[C]].B1]>0  THEN BEGIN G←Exten↑[CharRemainder↑[C]].
B1;IF( INT[G]>=128)AND ( INT[C]<128) THEN SevenUnsafe←TRUE;
IF CharWd↑[G]=0  THEN BEGIN CharWd↑[G]←SortIn[1,0];
{PascalWriteLongString[file: @Output, item: "MID piece of character"]; PascalWriteLongString[file: @Output, item: " "]};PrintOctal[C];
{PascalWriteLongString[file: @Output, item: " had no CHARACTER spec."]; PascalWriteLn[file: @Output]}; END; END;
IF  INT[Exten↑[CharRemainder↑[C]].B2]>0  THEN BEGIN G←Exten↑[CharRemainder↑[C]].
B2;IF( INT[G]>=128)AND ( INT[C]<128) THEN SevenUnsafe←TRUE;
IF CharWd↑[G]=0  THEN BEGIN CharWd↑[G]←SortIn[1,0];
{PascalWriteLongString[file: @Output, item: "BOT piece of character"]; PascalWriteLongString[file: @Output, item: " "]};PrintOctal[C];
{PascalWriteLongString[file: @Output, item: " had no CHARACTER spec."]; PascalWriteLn[file: @Output]}; END; END;
BEGIN G←Exten↑[CharRemainder↑[C]].B3;
IF( INT[G]>=128)AND ( INT[C]<128) THEN SevenUnsafe←TRUE;
IF CharWd↑[G]=0  THEN BEGIN CharWd↑[G]←SortIn[1,0];
{PascalWriteLongString[file: @Output, item: "REP piece of character"]; PascalWriteLongString[file: @Output, item: " "]};PrintOctal[C];
{PascalWriteLongString[file: @Output, item: " had no CHARACTER spec."]; PascalWriteLn[file: @Output]}; END; END; END--:114--; ENDCASE--:111-- ENDLOOP;
IF  SevenBitSafeFlag AND SevenUnsafe  THEN {
PascalWriteLongString[file: @Output, item: "The font is not really seven-bit-safe!"]; PascalWriteLn[file: @Output]};--115:
IF  INT[Nl]>0  THEN FOR i:INT    IN [ INT[0 ].. INT[Nl-1 ]] DO  LigPtr ← i; IF  INT[LigKern↑[LigPtr].B2]<128  THEN
BEGIN C←LigKern↑[LigPtr].B3;
IF CharWd↑[C]=0  THEN BEGIN LigKern↑[LigPtr].B3←0;
IF CharWd↑[0]=0  THEN CharWd↑[0]←SortIn[1,0];
{PascalWriteLongString[file: @Output, item: "Unused "]; PascalWriteLongString[file: @Output, item: "LIG step"]; PascalWriteLongString[file: @Output, item: " refers to nonexistent character "]};
PrintOctal[C];{PascalWriteLongString[file: @Output, item: "!"]; PascalWriteLn[file: @Output]}; END; END  ELSE BEGIN C←LigKern↑[LigPtr].B1;
IF CharWd↑[C]=0  THEN BEGIN LigKern↑[LigPtr].B1←0;
IF CharWd↑[0]=0  THEN CharWd↑[0]←SortIn[1,0];
{PascalWriteLongString[file: @Output, item: "Unused "]; PascalWriteLongString[file: @Output, item: "KRN step"]; PascalWriteLongString[file: @Output, item: " refers to nonexistent character "]};
PrintOctal[C];{PascalWriteLongString[file: @Output, item: "!"]; PascalWriteLn[file: @Output]}; END; END ENDLOOP;
IF  INT[Ne]>0  THEN FOR i:INT    IN [ INT[0 ].. INT[Ne-1 ]] DO  G ← i;  BEGIN C←Exten↑[G].B0;
IF  INT[C]>0  THEN IF CharWd↑[C]=0  THEN BEGIN Exten↑[G].B0←0;
IF CharWd↑[0]=0  THEN CharWd↑[0]←SortIn[1,0];
{PascalWriteLongString[file: @Output, item: "Unused "]; PascalWriteLongString[file: @Output, item: "VARCHAR TOP"]; PascalWriteLongString[file: @Output, item: " refers to nonexistent character "]};
PrintOctal[C];{PascalWriteLongString[file: @Output, item: "!"]; PascalWriteLn[file: @Output]}; END; END;BEGIN C←Exten↑[G].B1;
IF  INT[C]>0  THEN IF CharWd↑[C]=0  THEN BEGIN Exten↑[G].B1←0;
IF CharWd↑[0]=0  THEN CharWd↑[0]←SortIn[1,0];
{PascalWriteLongString[file: @Output, item: "Unused "]; PascalWriteLongString[file: @Output, item: "VARCHAR MID"]; PascalWriteLongString[file: @Output, item: " refers to nonexistent character "]};
PrintOctal[C];{PascalWriteLongString[file: @Output, item: "!"]; PascalWriteLn[file: @Output]}; END; END;BEGIN C←Exten↑[G].B2;
IF  INT[C]>0  THEN IF CharWd↑[C]=0  THEN BEGIN Exten↑[G].B2←0;
IF CharWd↑[0]=0  THEN CharWd↑[0]←SortIn[1,0];
{PascalWriteLongString[file: @Output, item: "Unused "]; PascalWriteLongString[file: @Output, item: "VARCHAR BOT"]; PascalWriteLongString[file: @Output, item: " refers to nonexistent character "]};
PrintOctal[C];{PascalWriteLongString[file: @Output, item: "!"]; PascalWriteLn[file: @Output]}; END; END;BEGIN C←Exten↑[G].B3;
IF CharWd↑[C]=0  THEN BEGIN Exten↑[G].B3←0;
IF CharWd↑[0]=0  THEN CharWd↑[0]←SortIn[1,0];
{PascalWriteLongString[file: @Output, item: "Unused "]; PascalWriteLongString[file: @Output, item: "VARCHAR REP"]; PascalWriteLongString[file: @Output, item: " refers to nonexistent character "]};
PrintOctal[C];{PascalWriteLongString[file: @Output, item: "!"]; PascalWriteLn[file: @Output]}; END; END;--:115-- ENDLOOP;FOR i:INT    IN [ INT[0 ].. INT[255 ]] DO --116:
C ← i; IF CharTag↑[C]=2  THEN BEGIN G←CharRemainder↑[C];
WHILE( INT[G]<C)AND (CharTag↑[G]=2)DO G←CharRemainder↑[G] ENDLOOP ;
IF G=C  THEN BEGIN CharTag↑[C]←0;
PascalWriteLongString[file: @Output, item: "A cycle of NEXTLARGER characters has been broken at "];
PrintOctal[C];{PascalWriteLongString[file: @Output, item: "."]; PascalWriteLn[file: @Output]}; END; END--:116-- ENDLOOP;--118:--Delta←Shorten[1,255];
SetIndices[1,Delta];
IF Delta>0  THEN {PascalWriteLongString[file: @Output, item: "I had to round some "]; PascalWriteLongString[file: @Output, item: "width"]; PascalWriteLongString[file: @Output, item: "s by"]; PascalWriteReal[file: @Output, item: (PascalFLOAT[( PascalDIVPower2[(Delta+1
),1])]/PascalFLOAT[1048576]), fieldMinLength: 1, fracLength: 7]; PascalWriteLongString[file: @Output, item: " units."]; PascalWriteLn[file: @Output]};Delta←Shorten[2,15];
SetIndices[2,Delta];
IF Delta>0  THEN {PascalWriteLongString[file: @Output, item: "I had to round some "]; PascalWriteLongString[file: @Output, item: "height"]; PascalWriteLongString[file: @Output, item: "s by"]; PascalWriteReal[file: @Output, item: (PascalFLOAT[( PascalDIVPower2[(Delta
+1),1])]/PascalFLOAT[1048576]), fieldMinLength: 1, fracLength: 7]; PascalWriteLongString[file: @Output, item: " units."]; PascalWriteLn[file: @Output]};Delta←Shorten[3,15];
SetIndices[3,Delta];
IF Delta>0  THEN {PascalWriteLongString[file: @Output, item: "I had to round some "]; PascalWriteLongString[file: @Output, item: "depth"]; PascalWriteLongString[file: @Output, item: "s by"]; PascalWriteReal[file: @Output, item: (PascalFLOAT[( PascalDIVPower2[(Delta+1
),1])]/PascalFLOAT[1048576]), fieldMinLength: 1, fracLength: 7]; PascalWriteLongString[file: @Output, item: " units."]; PascalWriteLn[file: @Output]};Delta←Shorten[4,63];
SetIndices[4,Delta];
IF Delta>0  THEN {PascalWriteLongString[file: @Output, item: "I had to round some "]; PascalWriteLongString[file: @Output, item: "italic correction"]
; PascalWriteLongString[file: @Output, item: "s by"]; PascalWriteReal[file: @Output, item: (PascalFLOAT[( PascalDIVPower2[(Delta+1),1])]/PascalFLOAT[1048576]), fieldMinLength: 1, fracLength: 7]; PascalWriteLongString[file: @Output, item: " units."]; PascalWriteLn[file: @Output]};--:118----:109-- END;--:134

END.