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


DIRECTORY
  PascalBasic,
  PascalWizardFiles,
  GFTypePrivate;

GFTypeImpl2: PROGRAM IMPORTS PascalBasic, PascalWizardFiles, GFTypePrivate EXPORTS GFTypePrivate = PUBLIC
BEGIN OPEN PascalBasic, PascalWizardFiles, GFTypePrivate;
 OpenGfFile: PROCEDURE
 = 
BEGIN ByteFileReset[@GfFile,Alfa['g, 'f, ' , ' , ' , ' , ' , ' , ' , ' ]];CurLoc←0; END;--:22----24:
 GetByte: PROCEDURE RETURNS[GetByteResult: PascalInteger] = 
BEGIN B:EightBits;
 IF PascalEOF[file: @GfFile.baseFile] THEN GetByteResult←0  ELSE BEGIN PascalReadLong[file: @GfFile.baseFile, length: SIZE[EightBits, 2], element: @GfFile.element, item: @B];
CurLoc←CurLoc+1;GetByteResult←B; END; END; GetTwoBytes: PROCEDURE RETURNS[GetTwoBytesResult: PascalInteger]
 = 
BEGIN A, B:EightBits; PascalReadLong[file: @GfFile.baseFile, length: SIZE[EightBits, 2], element: @GfFile.element, item: @A];PascalReadLong[file: @GfFile.baseFile, length: SIZE[EightBits, 2], element: @GfFile.element, item: @B];
CurLoc←CurLoc+2;GetTwoBytesResult←A*256+B; END;
 GetThreeBytes: PROCEDURE RETURNS[GetThreeBytesResult: PascalInteger] = 
BEGIN A, B, C:EightBits;
 PascalReadLong[file: @GfFile.baseFile, length: SIZE[EightBits, 2], element: @GfFile.element, item: @A];PascalReadLong[file: @GfFile.baseFile, length: SIZE[EightBits, 2], element: @GfFile.element, item: @B];PascalReadLong[file: @GfFile.baseFile, length: SIZE[EightBits, 2], element: @GfFile.element, item: @C];
CurLoc←CurLoc+3;GetThreeBytesResult← INT[(A*256+B)]*256+C; END;
 SignedQuad: PROCEDURE RETURNS[SignedQuadResult: PascalInteger] = 
BEGIN A, B, C, D:EightBits;
 PascalReadLong[file: @GfFile.baseFile, length: SIZE[EightBits, 2], element: @GfFile.element, item: @A];PascalReadLong[file: @GfFile.baseFile, length: SIZE[EightBits, 2], element: @GfFile.element, item: @B];PascalReadLong[file: @GfFile.baseFile, length: SIZE[EightBits, 2], element: @GfFile.element, item: @C];PascalReadLong[file: @GfFile.baseFile, length: SIZE[EightBits, 2], element: @GfFile.element, item: @D];
CurLoc←CurLoc+4;
IF  INT[A]<128  THEN SignedQuadResult←( INT[(A*256+B)]*256+C)*256+D  ELSE SignedQuadResult←(( INT[(
A-256)]*256+B)*256+C)*256+D; END;--:24----29:-- DoChar: PROCEDURE RETURNS[DoCharResult: PascalBoolean] = 
BEGIN 
 O:EightBits;P, Q:PascalInteger;Aok:PascalBoolean; Aok←TRUE;
{{WHILE TRUE DO--50:--BEGIN 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;--51:--IF  INT[O]<=67  THEN--56:
BEGIN IF WantsMnemonics  THEN PascalWriteLongString[file: @Output, item: " paint "];DO--57:
IF WantsMnemonics  THEN IF PaintSwitch=0  THEN {PascalWriteLongString[file: @Output, item: "("]; PascalWriteInteger[file: @Output, item: P, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ")"]} ELSE
PascalWriteInteger[file: @Output, item: P, fieldMinLength: 1];M←M+P;IF M>MaxMObserved  THEN MaxMObserved←M-1;
IF WantsPixels  THEN--58:
IF PaintSwitch=1  THEN IF N<=MaxSubrow  THEN BEGIN L←M-P;R←M-1;
IF R>MaxSubcol  THEN R←MaxSubcol;M←L;
WHILE M<=R DO BEGIN ImageArray↑[M][N]←1;M←M+1; END ENDLOOP ;M←L+P; END--:58--;
PaintSwitch←1-PaintSwitch--:57--;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  INT[O]>67 THEN EXIT; ENDLOOP; END--:56--;
SELECT O FROM 70,71,72,73 =>--60:--BEGIN IF WantsMnemonics  THEN BEGIN PascalWriteLn[file: @Output];
{PascalWriteInteger[file: @Output, item: A, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ": "]; PascalWriteLongString[file: @Output, item: "skip"] ; PascalWriteInteger[file: @Output, item: PascalMODPower2Mask[(O-70),3], fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: " "]; PascalWriteInteger[file: @Output, item: P, fieldMinLength: 1]}; END;N←N+P+1;M←0;
PaintSwitch←0;
IF WantsMnemonics  THEN {PascalWriteLongString[file: @Output, item: " (n="]; PascalWriteInteger[file: @Output, item: MaxNStated-N, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ")"]}; END--:60--;
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 =>--59:
BEGIN IF WantsMnemonics  THEN BEGIN PascalWriteLn[file: @Output];
{PascalWriteInteger[file: @Output, item: A, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ": "]; PascalWriteLongString[file: @Output, item: "newrow "]; PascalWriteInteger[file: @Output, item: P, fieldMinLength: 1]}; END;N←N+1;M←P;PaintSwitch←1;
IF WantsMnemonics  THEN {PascalWriteLongString[file: @Output, item: " (n="]; PascalWriteInteger[file: @Output, item: MaxNStated-N, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ")"]}; END--:59--;
--52:--244 =>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;247 =>BEGIN BEGIN {PascalWriteInteger[file: @Output, item: A, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ": "]; PascalWriteLongString[file: @Output, item: "! "]
; PascalWriteLongString[file: @Output, item: "preamble command within a character!"]};PascalWriteLn[file: @Output]; END; GOTO Label9998; END;
248,249 =>BEGIN BEGIN {PascalWriteInteger[file: @Output, item: A, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ": "]; PascalWriteLongString[file: @Output, item: "! "]
; PascalWriteLongString[file: @Output, item: "postamble command within a character!"]};PascalWriteLn[file: @Output]; END; GOTO Label9998; END;
67,68 =>BEGIN BEGIN {PascalWriteInteger[file: @Output, item: A, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ": "]; PascalWriteLongString[file: @Output, item: "! "]; PascalWriteLongString[file: @Output, item: "boc occurred before eoc!"]};
PascalWriteLn[file: @Output]; END; GOTO Label9998; END;
69 =>BEGIN IF WantsMnemonics  THEN BEGIN PascalWriteLn[file: @Output];{PascalWriteInteger[file: @Output, item: A, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ": "]; PascalWriteLongString[file: @Output, item: "eoc"]};
 END;PascalWriteLn[file: @Output]; GOTO Label9999; END;--:52--239,240,241,242 =>--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--;243 =>--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--;
 ENDCASE =>BEGIN {PascalWriteInteger[file: @Output, item: A, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ": "]; PascalWriteLongString[file: @Output, item: "! "]; PascalWriteLongString[file: @Output, item: "undefined command "]; PascalWriteInteger[file: @Output, item: O, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: "!"]};PascalWriteLn[file: @Output];
 END --:51--; END--:50-- ENDLOOP ;EXITS Label9998 => NULL};{PascalWriteLongString[file: @Output, item: "!"]; PascalWriteLn[file: @Output]};Aok←FALSE;EXITS Label9999 => NULL};DoCharResult←Aok;
 END;--:49----61:-- ReadPostamble: PROCEDURE = 
BEGIN K:PascalInteger;
P, Q, M, U, V, W, C:PascalInteger; --64:
  PostLoc←CurLoc-1;
{PascalWriteLongString[file: @Output, item: "Postamble starts at byte "]; PascalWriteInteger[file: @Output, item: PostLoc, fieldMinLength: 1]};
IF PostLoc=GfPrevPtr  THEN {PascalWriteLongString[file: @Output, item: "."]; PascalWriteLn[file: @Output]} ELSE {
PascalWriteLongString[file: @Output, item: ", after special info at byte "]; PascalWriteInteger[file: @Output, item: GfPrevPtr, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: "."]; PascalWriteLn[file: @Output]};P←SignedQuad[];
IF P#GfPrevPtr  THEN BEGIN {PascalWriteInteger[file: @Output, item: A, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ": "]; PascalWriteLongString[file: @Output, item: "! "]; PascalWriteLongString[file: @Output, item: "backpointer in byte "]
; PascalWriteInteger[file: @Output, item: CurLoc-4, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: " should be "]; PascalWriteInteger[file: @Output, item: GfPrevPtr, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: " not "]; PascalWriteInteger[file: @Output, item: P, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: "!"]};PascalWriteLn[file: @Output]; END;
DesignSize←SignedQuad[];CheckSum←SignedQuad[];
{PascalWriteLongString[file: @Output, item: "design size = "]; PascalWriteInteger[file: @Output, item: DesignSize, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: " ("]};
PrintScaled[ PascalDIVPower2[DesignSize ,4]];{PascalWriteLongString[file: @Output, item: "pt)"]; PascalWriteLn[file: @Output]};
{PascalWriteLongString[file: @Output, item: "check sum = "]; PascalWriteInteger[file: @Output, item: CheckSum, fieldMinLength: 1]; PascalWriteLn[file: @Output]};Hppp←SignedQuad[];Vppp←SignedQuad[];
{PascalWriteLongString[file: @Output, item: "hppp = "]; PascalWriteInteger[file: @Output, item: Hppp, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: " ("]};PrintScaled[Hppp];{PascalWriteLongString[file: @Output, item: ")"]; PascalWriteLn[file: @Output]};
{PascalWriteLongString[file: @Output, item: "vppp = "]; PascalWriteInteger[file: @Output, item: Vppp, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: " ("]};PrintScaled[Vppp];{PascalWriteLongString[file: @Output, item: ")"]; PascalWriteLn[file: @Output]};
PixRatio←(PascalFLOAT[DesignSize]/PascalFLOAT[1048576])*(PascalFLOAT[Hppp]/PascalFLOAT[1048576]);
MinMStated←SignedQuad[];MaxMStated←SignedQuad[];
MinNStated←SignedQuad[];MaxNStated←SignedQuad[];
{PascalWriteLongString[file: @Output, item: "min m = "]; PascalWriteInteger[file: @Output, item: MinMStated, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ", max m = "]; PascalWriteInteger[file: @Output, item: MaxMStated, fieldMinLength: 1]; PascalWriteLn[file: @Output]};
IF MinMStated>MinMOverall  THEN BEGIN {PascalWriteInteger[file: @Output, item: A, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ": "]; PascalWriteLongString[file: @Output, item: "! "]
; PascalWriteLongString[file: @Output, item: "min m should be <="]; PascalWriteInteger[file: @Output, item: MinMOverall, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: "!"]};PascalWriteLn[file: @Output]; END;
IF MaxMStated<MaxMOverall  THEN BEGIN {PascalWriteInteger[file: @Output, item: A, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ": "]; PascalWriteLongString[file: @Output, item: "! "]
; PascalWriteLongString[file: @Output, item: "max m should be >="]; PascalWriteInteger[file: @Output, item: MaxMOverall, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: "!"]};PascalWriteLn[file: @Output]; END;
{PascalWriteLongString[file: @Output, item: "min n = "]; PascalWriteInteger[file: @Output, item: MinNStated, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ", max n = "]; PascalWriteInteger[file: @Output, item: MaxNStated, fieldMinLength: 1]; PascalWriteLn[file: @Output]};
IF MinNStated>MinNOverall  THEN BEGIN {PascalWriteInteger[file: @Output, item: A, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ": "]; PascalWriteLongString[file: @Output, item: "! "]
; PascalWriteLongString[file: @Output, item: "min n should be <="]; PascalWriteInteger[file: @Output, item: MinNOverall, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: "!"]};PascalWriteLn[file: @Output]; END;
IF MaxNStated<MaxNOverall  THEN BEGIN {PascalWriteInteger[file: @Output, item: A, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ": "]; PascalWriteLongString[file: @Output, item: "! "]
; PascalWriteLongString[file: @Output, item: "max n should be >="]; PascalWriteInteger[file: @Output, item: MaxNOverall, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: "!"]};PascalWriteLn[file: @Output]; END;--65:
DO A←CurLoc;K←GetByte[];
IF(K=245)OR (K=246) THEN BEGIN C←FirstPar[K];
IF K=245  THEN BEGIN U←SignedQuad[];V←SignedQuad[];
 END  ELSE BEGIN U←GetByte[]*65536;V←0; END;W←SignedQuad[];P←SignedQuad[];
{PascalWriteLongString[file: @Output, item: "Character "]; PascalWriteInteger[file: @Output, item: C, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ": dx "]; PascalWriteInteger[file: @Output, item: U, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: " ("]};PrintScaled[U];
IF V#0  THEN BEGIN {PascalWriteLongString[file: @Output, item: "), dy "]; PascalWriteInteger[file: @Output, item: V, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: " ("]};PrintScaled[V]; END;
{PascalWriteLongString[file: @Output, item: "), width "]; PascalWriteInteger[file: @Output, item: W, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: " ("]};W←PascalROUND[PascalFLOAT[W]*PixRatio];PrintScaled[W];
{PascalWriteLongString[file: @Output, item: "), loc "]; PascalWriteInteger[file: @Output, item: P, fieldMinLength: 1]; PascalWriteLn[file: @Output]};IF P#CharPtr↑[C] THEN BEGIN {PascalWriteInteger[file: @Output, item: A, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ": "]; PascalWriteLongString[file: @Output, item: "! "]
; PascalWriteLongString[file: @Output, item: "character location should be "]; PascalWriteInteger[file: @Output, item: CharPtr↑[C], fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: "!"]};PascalWriteLn[file: @Output]; END;K←244;
 END; IF K#244 THEN EXIT; ENDLOOP;--:65--IF K#249  THEN BEGIN {PascalWriteInteger[file: @Output, item: A, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ": "]; PascalWriteLongString[file: @Output, item: "! "]; PascalWriteLongString[file: @Output, item: "should be postpost!"]};PascalWriteLn[file: @Output];
 END;Q←SignedQuad[];IF Q#PostLoc  THEN BEGIN {PascalWriteInteger[file: @Output, item: A, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ": "]; PascalWriteLongString[file: @Output, item: "! "]
; PascalWriteLongString[file: @Output, item: "postamble pointer should be "]; PascalWriteInteger[file: @Output, item: PostLoc, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: " not "]; PascalWriteInteger[file: @Output, item: Q, fieldMinLength: 1]};PascalWriteLn[file: @Output]; END;
M←GetByte[];IF M#131  THEN BEGIN {PascalWriteInteger[file: @Output, item: A, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ": "]; PascalWriteLongString[file: @Output, item: "! "]
; PascalWriteLongString[file: @Output, item: "identification byte should be "]; PascalWriteInteger[file: @Output, item: 131, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ", not "]; PascalWriteInteger[file: @Output, item: M, fieldMinLength: 1]};PascalWriteLn[file: @Output]; END;
K←CurLoc;M←223;WHILE  (M=223)AND NOT PascalEOF[file: @GfFile.baseFile]DO M←GetByte[] ENDLOOP ;
IF  NOT PascalEOF[file: @GfFile.baseFile] THEN BEGIN {PascalWriteLongString[file: @Output, item: " "]; PascalWriteLongString[file: @Output, item: "Bad GF file: "]
; PascalWriteLongString[file: @Output, item: "signature in byte "]; PascalWriteInteger[file: @Output, item: CurLoc-1, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: " should be 223"]; PascalWriteLongString[file: @Output, item: "!"]};JumpOut[];
 END  ELSE IF CurLoc<K+4  THEN BEGIN {PascalWriteInteger[file: @Output, item: A, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ": "]; PascalWriteLongString[file: @Output, item: "! "]
; PascalWriteLongString[file: @Output, item: "not enough signature bytes at end of file!"]};PascalWriteLn[file: @Output]; END;--:64-- END;

END.