-- file: GFTypeImpl1.mesa
-- Pascal-to-Mesa translator output, translated at October 18, 1985 11:15:21 am PDT


DIRECTORY
  PascalBasic,
  PascalWizardFiles,
  GFTypePrivate;

GFTypeImpl1: PROGRAM IMPORTS PascalBasic, PascalWizardFiles, GFTypePrivate EXPORTS GFTypePrivate = PUBLIC
BEGIN OPEN PascalBasic, PascalWizardFiles, GFTypePrivate;
 --3:-- --4:----:4----:36----10:
Xord: LONG POINTER TO ARRAY PascalChar OF AsciiCode ← PascalStaticZone.NEW[ARRAY PascalChar OF AsciiCode];
Xchr: LONG POINTER TO ARRAY PascalInteger[0..255] OF PascalChar ← PascalStaticZone.NEW[ARRAY PascalInteger[0..255] OF PascalChar];
--:10----21:

GfFile: ByteFile;
--:21----23:--
CurLoc: PascalInteger;
--:23----25:

WantsMnemonics: PascalBoolean;

WantsPixels: PascalBoolean;
--:25----27:
Buffer: LONG POINTER TO ARRAY PascalInteger[0..150] OF AsciiCode ← PascalStaticZone.NEW[ARRAY PascalInteger[0..150] OF AsciiCode];

TermIn: TextFile;


TermOut: TextFile;
--:27----35:--
M: PascalInteger;

N: PascalInteger;

PaintSwitch: Pixel;
--:35----37:
ImageArray: LONG POINTER TO PACKED ARRAY PascalInteger[0..79] OF PACKED ARRAY PascalInteger[0..79] OF Pixel ← PascalStaticZone.NEW[PACKED ARRAY PascalInteger[0..79] OF PACKED ARRAY PascalInteger[0..79] OF Pixel];
--:37----39:

MaxSubrow: PascalInteger;

MaxSubcol: PascalInteger;
--:39----41:

MinMStated: PascalInteger;

MaxMStated: PascalInteger;

MinNStated: PascalInteger;

MaxNStated: PascalInteger;


MaxMObserved: PascalInteger;

MaxNObserved: PascalInteger;


MinMOverall: PascalInteger;

MaxMOverall: PascalInteger;

MinNOverall: PascalInteger;

MaxNOverall: PascalInteger;
--:41
--46:--
TotalChars: PascalInteger;
CharPtr: LONG POINTER TO ARRAY PascalInteger[0..255] OF PascalInteger ← PascalStaticZone.NEW[ARRAY PascalInteger[0..255] OF PascalInteger];


GfPrevPtr: PascalInteger;

CharacterCode: PascalInteger;
--:46----54:--
BadChar: PascalBoolean;

--:54----62:--
DesignSize: PascalInteger;

CheckSum: PascalInteger;

Hppp: PascalInteger;

Vppp: PascalInteger;


PostLoc: PascalInteger;

PixRatio: PascalReal;
--:62----67:--
A: PascalInteger;


B: PascalInteger;

C: PascalInteger;

L: PascalInteger;

O: PascalInteger;

P: PascalInteger;

Q: PascalInteger;

R: PascalInteger;
--:67----74:--
Output: TextFile;
--:73
 Initialize: PROCEDURE = 
BEGIN I:PascalInteger;
 {PascalWriteLongString[file: @Output, item: "This is GFType 2.2 for Cedar 6.0"]; PascalWriteLn[file: @Output]};--11:
FOR i:INT    IN [ INT[0 ].. INT[31 ]] DO  I ← i; Xchr↑[I]←'? ENDLOOP;Xchr↑[32]←' ;Xchr↑[33]←'!;
Xchr↑[34]←'";Xchr↑[35]←'#;Xchr↑[36]←'$;Xchr↑[37]←'%;Xchr↑[38]←'&;
Xchr↑[39]←'';Xchr↑[40]←'(;Xchr↑[41]←');Xchr↑[42]←'*;Xchr↑[43]←'+;
Xchr↑[44]←',;Xchr↑[45]←'-;Xchr↑[46]←'.;Xchr↑[47]←'/;Xchr↑[48]←'0;
Xchr↑[49]←'1;Xchr↑[50]←'2;Xchr↑[51]←'3;Xchr↑[52]←'4;Xchr↑[53]←'5;
Xchr↑[54]←'6;Xchr↑[55]←'7;Xchr↑[56]←'8;Xchr↑[57]←'9;Xchr↑[58]←':;
Xchr↑[59]←';;Xchr↑[60]←'<;Xchr↑[61]←'=;Xchr↑[62]←'>;Xchr↑[63]←'?;
Xchr↑[64]←'@;Xchr↑[65]←'A;Xchr↑[66]←'B;Xchr↑[67]←'C;Xchr↑[68]←'D;
Xchr↑[69]←'E;Xchr↑[70]←'F;Xchr↑[71]←'G;Xchr↑[72]←'H;Xchr↑[73]←'I;
Xchr↑[74]←'J;Xchr↑[75]←'K;Xchr↑[76]←'L;Xchr↑[77]←'M;Xchr↑[78]←'N;
Xchr↑[79]←'O;Xchr↑[80]←'P;Xchr↑[81]←'Q;Xchr↑[82]←'R;Xchr↑[83]←'S;
Xchr↑[84]←'T;Xchr↑[85]←'U;Xchr↑[86]←'V;Xchr↑[87]←'W;Xchr↑[88]←'X;
Xchr↑[89]←'Y;Xchr↑[90]←'Z;Xchr↑[91]←'[;Xchr↑[92]←'\\;Xchr↑[93]←'];
Xchr↑[94]←'↑;Xchr↑[95]←'←;Xchr↑[96]←'`;Xchr↑[97]←'a;Xchr↑[98]←'b;
Xchr↑[99]←'c;Xchr↑[100]←'d;Xchr↑[101]←'e;Xchr↑[102]←'f;
Xchr↑[103]←'g;Xchr↑[104]←'h;Xchr↑[105]←'i;Xchr↑[106]←'j;
Xchr↑[107]←'k;Xchr↑[108]←'l;Xchr↑[109]←'m;Xchr↑[110]←'n;
Xchr↑[111]←'o;Xchr↑[112]←'p;Xchr↑[113]←'q;Xchr↑[114]←'r;
Xchr↑[115]←'s;Xchr↑[116]←'t;Xchr↑[117]←'u;Xchr↑[118]←'v;
Xchr↑[119]←'w;Xchr↑[120]←'x;Xchr↑[121]←'y;Xchr↑[122]←'z;
Xchr↑[123]←'{;Xchr↑[124]←'|;Xchr↑[125]←'};Xchr↑[126]←'~;
FOR i:INT    IN [ INT[127 ].. INT[255 ]] DO  I ← i; Xchr↑[I]←'? ENDLOOP;--:11----12:
FOR i:INT    IN [ INT[0 ].. INT[255 ]] DO  I ← i; Xord↑[PascalCHR[I]]←32 ENDLOOP;
FOR i:INT    IN [ INT[32 ].. INT[126 ]] DO  I ← i; Xord↑[Xchr↑[I]]←I ENDLOOP;--:12----26:--WantsMnemonics←TRUE;
WantsPixels←TRUE;--:26----47:--FOR i:INT    IN [ INT[0 ].. INT[255 ]] DO  I ← i; CharPtr↑[I]←-1 ENDLOOP;
TotalChars←0;--:47----63:--MinMOverall←Maxint;MaxMOverall←-Maxint;
MinNOverall←Maxint;MaxNOverall←-Maxint;--:63-- END;--:3----7:
 JumpOut: PROCEDURE = 
BEGIN  ERROR Error9999; END;--:7----22:-- InputLn: PROCEDURE
 = 
BEGIN K:PascalInteger[0..TerminalLineLength]; PascalTextBREAK[file: @TermOut];TtyReset[@TermIn];
IF PascalTextEOLN[file: @TermIn] THEN PascalReadLn[file: @TermIn];K←0;
WHILE  ( INT[K]<TerminalLineLength)AND NOT PascalTextEOLN[file: @TermIn]DO BEGIN Buffer↑[K]←
Xord↑[PascalTextElement[file: @TermIn]];K←K+1;PascalTextGET[file: @TermIn]; END ENDLOOP ;Buffer↑[K]←32; END;--:29----30:
 LowerCasify: PROCEDURE[C: AsciiCode] RETURNS[LowerCasifyResult: AsciiCode]
 = 
BEGIN IF( INT[C]>=65)AND ( INT[C]<=90) THEN LowerCasifyResult←C+32  ELSE LowerCasifyResult←C;
 END;--:30----31:-- Dialog: PROCEDURE = 
BEGIN  TtyRewrite[@TermOut];
{PascalWriteLongString[file: @TermOut, item: "This is GFType 2.2 for Cedar 6.0"]; PascalWriteLn[file: @TermOut]};--32:
DO {--Label1:--PascalWriteLongString[file: @TermOut, item: "Mnemonic output? (default=yes, ? for help): "];
InputLn[];Buffer↑[0]←LowerCasify[Buffer↑[0]];
IF Buffer↑[0]#63  THEN WantsMnemonics←
(Buffer↑[0]=121)OR (Buffer↑[0]=49)OR (Buffer↑[0]=116)OR (Buffer↑[0]=32) ELSE BEGIN 
PascalWriteLongString[file: @TermOut, item: "Type Y for complete listing,"];
{PascalWriteLongString[file: @TermOut, item: " N for errors/images only."]; PascalWriteLn[file: @TermOut]}; GOTO Label1; END--:32--;--33:
DO {--Label2:--PascalWriteLongString[file: @TermOut, item: "Pixel output? (default=yes, ? for help): "];InputLn[];
Buffer↑[0]←LowerCasify[Buffer↑[0]];
IF Buffer↑[0]#63  THEN WantsPixels←(Buffer↑[0]=121)OR (Buffer↑[0]=49)OR (
Buffer↑[0]=116)OR (Buffer↑[0]=32) ELSE BEGIN 
PascalWriteLongString[file: @TermOut, item: "Type Y to list characters pictorially"];
{PascalWriteLongString[file: @TermOut, item: " with *'s, N to omit this option."]; PascalWriteLn[file: @TermOut]}; GOTO Label2; END--:33--;
--34:--PascalWriteLongString[file: @Output, item: "Options selected: Mnemonic output = "];
IF WantsMnemonics  THEN PascalWriteLongString[file: @Output, item: "true"] ELSE PascalWriteLongString[file: @Output, item: "false"];
PascalWriteLongString[file: @Output, item: "; pixel output = "];
IF WantsPixels  THEN PascalWriteLongString[file: @Output, item: "true"] ELSE PascalWriteLongString[file: @Output, item: "false"];{PascalWriteLongString[file: @Output, item: "."]--:34--; PascalWriteLn[file: @Output]};
EXIT; EXITS Label2 => NULL} ENDLOOP;EXIT; EXITS Label1 => NULL} ENDLOOP; END;--:31----45:-- PrintScaled: PROCEDURE[S: PascalInteger] = 
BEGIN Delta:PascalInteger;
 IF S<0  THEN BEGIN PascalWriteLongString[file: @Output, item: "-"];S←-S; END; PascalWriteInteger[file: @Output, item: PascalDIVPower2[S ,16], fieldMinLength: 1];
S←10*( PascalMODPower2Mask[S ,65535])+5;IF S#5  THEN BEGIN Delta←10;PascalWriteLongString[file: @Output, item: "."];
DO IF Delta>65536  THEN S←S+32768-( PascalDIVPower2[Delta ,1]);
PascalWriteChar[file: @Output, item: PascalCHR[PascalORD['0]+( PascalDIVPower2[S ,16])]];S←10*( PascalMODPower2Mask[S ,65535]);Delta←Delta*10;
 IF S<=Delta THEN EXIT; ENDLOOP; END; END;--:45----48:
 FirstPar: PROCEDURE[O: EightBits] RETURNS[FirstParResult: PascalInteger]
 = 
BEGIN SELECT O FROM 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,
22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,
46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63 =>FirstParResult←O-0;
64,71,245,246,239 =>FirstParResult←GetByte[];
65,72,240 =>FirstParResult←GetTwoBytes[];66,73,241 =>FirstParResult←GetThreeBytes[];
242,243 =>FirstParResult←SignedQuad[];
67,68,69,70,244,247,248,249,250,251,252,253,254,255 =>FirstParResult←0;
74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,
98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,
116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,
134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,
152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,
170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,
188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,
206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
224,225,226,227,228,229,230,231,232,233,234,235,236,237,238 =>FirstParResult←O
-74; ENDCASE; END;--:48----49:----:61----66:--
Error9999: ERROR = CODE;
 GFTypeRun: UnsafeCommandProc = BEGIN 
--69:--  {ENABLE Error9999 => GOTO Label9999;FileRewrite[@Output,Alfa['t, 'y, 'p, ' , ' , ' , ' , ' , ' , ' ]];Initialize[];Dialog[];
--68:--OpenGfFile[];O←GetByte[];
IF O#247  THEN BEGIN {PascalWriteLongString[file: @Output, item: " "]; PascalWriteLongString[file: @Output, item: "Bad GF file: "]
; PascalWriteLongString[file: @Output, item: "First byte isn't start of preamble!"]; PascalWriteLongString[file: @Output, item: "!"]};JumpOut[]; END;O←GetByte[];
IF O#131  THEN BEGIN {PascalWriteLongString[file: @Output, item: " "]; PascalWriteLongString[file: @Output, item: "Bad GF file: "]
; PascalWriteLongString[file: @Output, item: "identification byte should be "]; PascalWriteInteger[file: @Output, item: 131, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: " not "]; PascalWriteInteger[file: @Output, item: O, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: "!"]};JumpOut[]; END;
O←GetByte[];PascalWriteLongString[file: @Output, item: "'"];WHILE O>0 DO BEGIN O←O-1;PascalWriteChar[file: @Output, item: Xchr↑[GetByte[]]];
 END ENDLOOP ;{PascalWriteLongString[file: @Output, item: "'"]; PascalWriteLn[file: @Output]};--:68--DO 
 GfPrevPtr←CurLoc;--70:
DO A←CurLoc;O←GetByte[];P←FirstPar[O];
IF PascalEOF[file: @GfFile.baseFile] THEN BEGIN {PascalWriteLongString[file: @Output, item: " "]; PascalWriteLongString[file: @Output, item: "Bad GF file: "]
; PascalWriteLongString[file: @Output, item: "the file ended prematurely"]; PascalWriteLongString[file: @Output, item: "!"]};JumpOut[]; END;IF O=243  THEN BEGIN--55:
BEGIN IF WantsMnemonics  THEN BEGIN PascalWriteLn[file: @Output];
{PascalWriteInteger[file: @Output, item: A, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ": "]; PascalWriteLongString[file: @Output, item: "yyy "]; PascalWriteInteger[file: @Output, item: P, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: " ("]}; END;
IF WantsMnemonics  THEN BEGIN PrintScaled[P];PascalWriteLongString[file: @Output, item: ")"]; END; END--:55--;
O←244; END  ELSE IF(O>=239)AND (O<=242) THEN BEGIN--53:
BEGIN IF WantsMnemonics  THEN BEGIN PascalWriteLn[file: @Output];{PascalWriteInteger[file: @Output, item: A, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ": "]; PascalWriteLongString[file: @Output, item: "xxx '"]};
 END;BadChar←FALSE;B←16;IF P<0  THEN BEGIN PascalWriteLn[file: @Output];
{PascalWriteInteger[file: @Output, item: A, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ": "]; PascalWriteLongString[file: @Output, item: "! "]; PascalWriteLongString[file: @Output, item: "string of negative length!"]};PascalWriteLn[file: @Output]; END;
WHILE P>0 DO BEGIN Q←GetByte[];IF(Q<32)OR (Q>126) THEN BadChar←TRUE;
IF WantsMnemonics  THEN BEGIN PascalWriteChar[file: @Output, item: Xchr↑[Q]];
IF B<LineLength  THEN B←B+1  ELSE BEGIN PascalWriteLn[file: @Output];B←2; END; END;P←P-1; END ENDLOOP ;
IF WantsMnemonics  THEN PascalWriteLongString[file: @Output, item: "'"];IF BadChar  THEN BEGIN PascalWriteLn[file: @Output];
{PascalWriteInteger[file: @Output, item: A, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ": "]; PascalWriteLongString[file: @Output, item: "! "]; PascalWriteLongString[file: @Output, item: "non-ASCII character in xxx command!"]};PascalWriteLn[file: @Output]; END;
 END--:53--;O←244;
 END  ELSE IF O=244  THEN IF WantsMnemonics  THEN BEGIN PascalWriteLn[file: @Output];
{PascalWriteInteger[file: @Output, item: A, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ": "]; PascalWriteLongString[file: @Output, item: "no op"]}; END; IF O#244 THEN EXIT; ENDLOOP;--:70--IF O#248  THEN BEGIN 
 IF O#67  THEN IF O#68  THEN BEGIN {PascalWriteLongString[file: @Output, item: " "]
; PascalWriteLongString[file: @Output, item: "Bad GF file: "]; PascalWriteLongString[file: @Output, item: "byte "]; PascalWriteInteger[file: @Output, item: CurLoc-1, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: " is not boc ("]; PascalWriteInteger[file: @Output, item: O, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ")"]; PascalWriteLongString[file: @Output, item: "!"]};
JumpOut[]; END;PascalWriteLn[file: @Output];{PascalWriteInteger[file: @Output, item: CurLoc-1, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ": beginning of char "]};--71:
A←CurLoc-1;TotalChars←TotalChars+1;
IF O=67  THEN BEGIN CharacterCode←SignedQuad[];P←SignedQuad[];
C← PascalMODPower2Mask[CharacterCode ,255];IF C<0  THEN C←C+256;
MinMStated←SignedQuad[];MaxMStated←SignedQuad[];
MinNStated←SignedQuad[];MaxNStated←SignedQuad[];
 END  ELSE BEGIN CharacterCode←GetByte[];P←-1;C←CharacterCode;
Q←GetByte[];MaxMStated←GetByte[];MinMStated←MaxMStated-Q;
Q←GetByte[];MaxNStated←GetByte[];MinNStated←MaxNStated-Q; END;
PascalWriteInteger[file: @Output, item: C, fieldMinLength: 1];
IF CharacterCode#C  THEN {PascalWriteLongString[file: @Output, item: " with extension "]
; PascalWriteInteger[file: @Output, item: PascalDIVPower2[(CharacterCode-C),8], fieldMinLength: 1]};
IF WantsMnemonics  THEN {PascalWriteLongString[file: @Output, item: ": "]; PascalWriteInteger[file: @Output, item: MinMStated, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: "<=m<="]; PascalWriteInteger[file: @Output, item: MaxMStated
, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: " "]; PascalWriteInteger[file: @Output, item: MinNStated, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: "<=n<="]; PascalWriteInteger[file: @Output, item: MaxNStated, fieldMinLength: 1]; PascalWriteLn[file: @Output]};MaxMObserved←-1;
IF CharPtr↑[C]#P  THEN BEGIN {PascalWriteInteger[file: @Output, item: A, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ": "]; PascalWriteLongString[file: @Output, item: "! "]
; PascalWriteLongString[file: @Output, item: "previous character pointer should be "]; PascalWriteInteger[file: @Output, item: CharPtr↑[C], fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ", not "]; PascalWriteInteger[file: @Output, item: P, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: "!"]};
PascalWriteLn[file: @Output]; END  ELSE IF P>0  THEN IF WantsMnemonics  THEN {
PascalWriteLongString[file: @Output, item: "(previous character with the same code started at byte "]; PascalWriteInteger[file: @Output, item: P, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ")"]; PascalWriteLn[file: @Output]};
CharPtr↑[C]←GfPrevPtr;
IF WantsMnemonics  THEN {PascalWriteLongString[file: @Output, item: "(initially n="]; PascalWriteInteger[file: @Output, item: MaxNStated, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ")"]};
IF WantsPixels  THEN--38:--BEGIN MaxSubcol←MaxMStated-MinMStated-1;
IF MaxSubcol>79  THEN MaxSubcol←79;
MaxSubrow←MaxNStated-MinNStated;
IF MaxSubrow>79  THEN MaxSubrow←79;N←0;
WHILE N<=MaxSubrow DO BEGIN M←0;
WHILE M<=MaxSubcol DO BEGIN ImageArray↑[M][N]←0;M←M+1; END ENDLOOP ;N←N+1; END ENDLOOP ;
 END--:38--;M←0;N←0;PaintSwitch←0;--:71--IF  NOT DoChar [] THEN BEGIN {PascalWriteLongString[file: @Output, item: " "]; PascalWriteLongString[file: @Output, item: "Bad GF file: "]
; PascalWriteLongString[file: @Output, item: "char ended unexpectedly"]; PascalWriteLongString[file: @Output, item: "!"]};JumpOut[]; END;MaxNObserved←N;
IF WantsPixels  THEN--40:--BEGIN--42:

 IF(MaxMObserved>79)OR (MaxNObserved>79) THEN {
PascalWriteLongString[file: @Output, item: "(The character is too large to be displayed in full.)"]; PascalWriteLn[file: @Output]};
IF MaxSubcol>MaxMObserved  THEN MaxSubcol←MaxMObserved;
IF MaxSubrow>MaxNObserved  THEN MaxSubrow←MaxNObserved;--:42--IF MaxSubcol>=0  THEN--43:
BEGIN {PascalWriteLongString[file: @Output, item: ".<--This pixel's lower left corner is at ("]; PascalWriteInteger[file: @Output, item: MinMStated
, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ","]; PascalWriteInteger[file: @Output, item: MaxNStated+1, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ") in METAFONT coordinates"]; PascalWriteLn[file: @Output]};N←0;
WHILE N<=MaxSubrow DO BEGIN M←0;B←0;
WHILE M<=MaxSubcol DO BEGIN IF ImageArray↑[M][N]=0  THEN B←B+1  ELSE
BEGIN WHILE B>0 DO BEGIN PascalWriteLongString[file: @Output, item: " "];B←B-1; END ENDLOOP ;PascalWriteLongString[file: @Output, item: "*"]; END;M←M+1;
 END ENDLOOP ;PascalWriteLn[file: @Output];N←N+1; END ENDLOOP ;
{PascalWriteLongString[file: @Output, item: ".<--This pixel's upper left corner is at ("]; PascalWriteInteger[file: @Output, item: MinMStated, fieldMinLength: 1]
; PascalWriteLongString[file: @Output, item: ","]; PascalWriteInteger[file: @Output, item: MaxNStated-MaxSubrow, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ") in METAFONT coordinates"]; PascalWriteLn[file: @Output]}; END--:43
 ELSE {PascalWriteLongString[file: @Output, item: "(The character is entirely blank.)"]; PascalWriteLn[file: @Output]}; END--:40--;--72:
MaxMObserved←MinMStated+MaxMObserved+1;
N←MaxNStated-MaxNObserved;
IF MinMStated<MinMOverall  THEN MinMOverall←MinMStated;
IF MaxMObserved>MaxMOverall  THEN MaxMOverall←MaxMObserved;
IF N<MinNOverall  THEN MinNOverall←N;
IF MaxNStated>MaxNOverall  THEN MaxNOverall←MaxNStated;
IF MaxMObserved>MaxMStated  THEN {
PascalWriteLongString[file: @Output, item: "The previous character should have had max m >= "]; PascalWriteInteger[file: @Output, item: MaxMObserved, fieldMinLength: 1]; PascalWriteLn[file: @Output]};
IF N<MinNStated  THEN {
PascalWriteLongString[file: @Output, item: "The previous character should have had min n <= "]; PascalWriteInteger[file: @Output, item: N, fieldMinLength: 1]--:72--; PascalWriteLn[file: @Output]}; END;
 IF O=248 THEN EXIT; ENDLOOP;--:69--PascalWriteLn[file: @Output];ReadPostamble[];
{PascalWriteLongString[file: @Output, item: "The file had "]; PascalWriteInteger[file: @Output, item: TotalChars, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: " character"]};
IF TotalChars#1  THEN PascalWriteLongString[file: @Output, item: "s"];PascalWriteLongString[file: @Output, item: " altogether."];
EXITS Label9999 => NULL};FileClose[@Output];ByteFileClose[@GfFile];--:66
 END;

PascalRegister["GFType", GFTypeRun];

END.