-- file: MFGFImpl.mesa
-- Pascal-to-Mesa translator output, translated at October 31, 1985 4:28:02 pm PST
DIRECTORY
PascalBasic,
PascalWizardFiles,
MFTypes,
MFExternals,
MFInteraction,
MFMath,
MFSymbols,
MFFileNames,
MFGF,
MFOps;
MFGFImpl: PROGRAM IMPORTS PascalBasic, PascalWizardFiles, MFExternals, MFInteraction, MFMath, MFSymbols, MFFileNames, MFOps EXPORTS MFGF = PUBLIC
BEGIN OPEN PascalBasic, PascalWizardFiles, MFTypes, MFExternals, MFInteraction, MFMath, MFSymbols, MFFileNames, MFGF, MFOps;
--:781----784:--
GfExt: StrNumber;
--:1129----1148:
GfMinM: PascalInteger;
GfMaxM: PascalInteger;
GfMinN: PascalInteger;
GfMaxN: PascalInteger;
GfPrevPtr: PascalInteger;
TotalChars: PascalInteger;
CharPtr: LONG POINTER TO ARRAY EightBits OF PascalInteger ← PascalStaticZone.NEW[ARRAY EightBits OF PascalInteger];
GfDx: LONG POINTER TO ARRAY EightBits OF PascalInteger ← PascalStaticZone.NEW[ARRAY EightBits OF PascalInteger];
GfDy: LONG POINTER TO ARRAY EightBits OF PascalInteger ← PascalStaticZone.NEW[ARRAY EightBits OF PascalInteger];
--:1148----1151:
GfBuf: LONG POINTER TO ARRAY GfIndex OF EightBits ← PascalStaticZone.NEW[ARRAY GfIndex OF EightBits];
HalfBuf: GfIndex;
GfLimit: GfIndex;
GfPtr: GfIndex;
GfOffset: PascalInteger;
WriteGf: PROCEDURE[A,B: GfIndex]
=
BEGIN K:GfIndex; FOR i:INT IN [ INT[A ].. INT[B ]] DO K ← i; {grossExprHack:EightBits ← GfBuf↑[K]; PascalWriteLong[file: @GfFile.baseFile, length: SIZE[EightBits, 2], element: @GfFile.element, item: @grossExprHack]} ENDLOOP; END;
--:1153----1154:-- GfSwap: PROCEDURE
=
BEGIN IF GfLimit=GfBufSize THEN BEGIN WriteGf[0,HalfBuf-1];
GfLimit←HalfBuf;GfOffset←GfOffset+GfBufSize;GfPtr←0;
END ELSE BEGIN WriteGf[HalfBuf,GfBufSize-1];GfLimit←GfBufSize;
END; END;--:1154----1156:-- GfFour: PROCEDURE[X: PascalInteger]
=
BEGIN IF X>=0 THEN BEGIN GfBuf↑[GfPtr]← PascalDIVPower2[X ,24];
GfPtr←GfPtr+1;IF GfPtr=GfLimit THEN GfSwap[];
END ELSE BEGIN X←X+1073741824;X←X+1073741824;
BEGIN GfBuf↑[GfPtr]←( PascalDIVPower2[X ,24])+128;GfPtr←GfPtr+1;
IF GfPtr=GfLimit THEN GfSwap[]; END; END;X← PascalMODPower2Mask[X ,16777215];
BEGIN GfBuf↑[GfPtr]← PascalDIVPower2[X ,16];GfPtr←GfPtr+1;
IF GfPtr=GfLimit THEN GfSwap[]; END;X← PascalMODPower2Mask[X ,65535];
BEGIN GfBuf↑[GfPtr]← PascalDIVPower2[X ,8];GfPtr←GfPtr+1;
IF GfPtr=GfLimit THEN GfSwap[]; END;BEGIN GfBuf↑[GfPtr]← PascalMODPower2Mask[X ,255];
GfPtr←GfPtr+1;IF GfPtr=GfLimit THEN GfSwap[]; END; END;--:1156----1157:
GfTwo: PROCEDURE[X: PascalInteger] =
BEGIN BEGIN GfBuf↑[GfPtr]← PascalDIVPower2[X ,8];
GfPtr←GfPtr+1;IF GfPtr=GfLimit THEN GfSwap[]; END;
BEGIN GfBuf↑[GfPtr]← PascalMODPower2Mask[X ,255];GfPtr←GfPtr+1;
IF GfPtr=GfLimit THEN GfSwap[]; END; END; GfThree: PROCEDURE[X: PascalInteger]
=
BEGIN BEGIN GfBuf↑[GfPtr]← PascalDIVPower2[X ,16];GfPtr←GfPtr+1;
IF GfPtr=GfLimit THEN GfSwap[]; END;
BEGIN GfBuf↑[GfPtr]← PascalDIVPower2[( PascalMODPower2Mask[X ,65535]),8];GfPtr←GfPtr+1;
IF GfPtr=GfLimit THEN GfSwap[]; END;BEGIN GfBuf↑[GfPtr]← PascalMODPower2Mask[X ,255];
GfPtr←GfPtr+1;IF GfPtr=GfLimit THEN GfSwap[]; END; END;--:1157----1158:
GfPaint: PROCEDURE[D: PascalInteger]
=
BEGIN IF D<64 THEN BEGIN GfBuf↑[GfPtr]←0+D;GfPtr←GfPtr+1;
IF GfPtr=GfLimit THEN GfSwap[];
END ELSE IF D<256 THEN BEGIN BEGIN GfBuf↑[GfPtr]←64;GfPtr←GfPtr+1;
IF GfPtr=GfLimit THEN GfSwap[]; END;BEGIN GfBuf↑[GfPtr]←D;
GfPtr←GfPtr+1;IF GfPtr=GfLimit THEN GfSwap[]; END;
END ELSE BEGIN BEGIN GfBuf↑[GfPtr]←65;GfPtr←GfPtr+1;
IF GfPtr=GfLimit THEN GfSwap[]; END;GfTwo[D]; END; END;--:1158----1159:
GfString: PROCEDURE[S,T: StrNumber] =
BEGIN K:PoolPointer;L:PascalInteger;
IF S#0 THEN BEGIN L←(StrStart↑[S+1]-StrStart↑[S]);
IF T#0 THEN L←L+(StrStart↑[T+1]-StrStart↑[T]);
IF L<=255 THEN BEGIN BEGIN GfBuf↑[GfPtr]←239;GfPtr←GfPtr+1;
IF GfPtr=GfLimit THEN GfSwap[]; END;BEGIN GfBuf↑[GfPtr]←L;
GfPtr←GfPtr+1;IF GfPtr=GfLimit THEN GfSwap[]; END;
END ELSE BEGIN BEGIN GfBuf↑[GfPtr]←241;GfPtr←GfPtr+1;
IF GfPtr=GfLimit THEN GfSwap[]; END;GfThree[L]; END;
FOR i:INT IN [ INT[StrStart↑[S]].. INT[StrStart↑[S+1]-1 ]] DO K ← i; GfBuf↑[GfPtr]←StrPool
↑[K];GfPtr←GfPtr+1;IF GfPtr=GfLimit THEN GfSwap[]; ENDLOOP; END;
IF T#0 THEN FOR i:INT IN [ INT[StrStart↑[T]].. INT[StrStart↑[T+1]-1 ]] DO K ← i; GfBuf↑
[GfPtr]←StrPool↑[K];GfPtr←GfPtr+1;IF GfPtr=GfLimit THEN GfSwap[];
ENDLOOP; END;--:1159----1160:-- GfBoc: PROCEDURE[MinM,MaxM,MinN,MaxN: PascalInteger]
=
BEGIN IF MinM<GfMinM THEN GfMinM←MinM;
IF MaxN>GfMaxN THEN GfMaxN←MaxN;
{IF BocP=-1 THEN IF BocC>=0 THEN IF BocC<256 THEN IF MaxM-MinM>=0
THEN IF MaxM-MinM<256 THEN IF MaxM>=0 THEN IF MaxM<256 THEN IF MaxN
-MinN>=0 THEN IF MaxN-MinN<256 THEN IF MaxN>=0 THEN IF MaxN<256
THEN BEGIN BEGIN GfBuf↑[GfPtr]←68;GfPtr←GfPtr+1;
IF GfPtr=GfLimit THEN GfSwap[]; END;BEGIN GfBuf↑[GfPtr]←BocC;
GfPtr←GfPtr+1;IF GfPtr=GfLimit THEN GfSwap[]; END;
BEGIN GfBuf↑[GfPtr]←MaxM-MinM;GfPtr←GfPtr+1;
IF GfPtr=GfLimit THEN GfSwap[]; END;BEGIN GfBuf↑[GfPtr]←MaxM;
GfPtr←GfPtr+1;IF GfPtr=GfLimit THEN GfSwap[]; END;
BEGIN GfBuf↑[GfPtr]←MaxN-MinN;GfPtr←GfPtr+1;
IF GfPtr=GfLimit THEN GfSwap[]; END;BEGIN GfBuf↑[GfPtr]←MaxN;
GfPtr←GfPtr+1;IF GfPtr=GfLimit THEN GfSwap[]; END; GOTO Label10; END;
BEGIN GfBuf↑[GfPtr]←67;GfPtr←GfPtr+1;
IF GfPtr=GfLimit THEN GfSwap[]; END;GfFour[BocC];GfFour[BocP];
GfFour[MinM];GfFour[MaxM];GfFour[MinN];GfFour[MaxN];EXITS Label10 => NULL}; END;
--:1160----1162:-- InitGf: PROCEDURE =
BEGIN K:EightBits;T:PascalInteger;
GfMinM←4096;GfMaxM←-4096;GfMinN←4096;GfMaxN←-4096;
FOR i:INT IN [ INT[0 ].. INT[255 ]] DO K ← i; CharPtr↑[K]←-1 ENDLOOP;--1163:
IF Internal↑[27]<=0 THEN GfExt←909 ELSE BEGIN OldSetting←Selector;
Selector←5;PrintChar[46];
PrintInt[MakeScaled[Internal↑[27],59429463]];Print[910];
GfExt←MakeString[];Selector←OldSetting; END--:1163--;
BEGIN IF JobName=0 THEN OpenLogFile[];PackJobName[GfExt];
WHILE NOT BOpenOut[@GfFile]DO PromptFileName[621,GfExt] ENDLOOP ;
OutputFileName←BMakeNameString[@GfFile]; END;
BEGIN GfBuf↑[GfPtr]←247;GfPtr←GfPtr+1;
IF GfPtr=GfLimit THEN GfSwap[]; END;BEGIN GfBuf↑[GfPtr]←131;
GfPtr←GfPtr+1;IF GfPtr=GfLimit THEN GfSwap[]; END;
OldSetting←Selector;Selector←5;Print[908];
PrintInt[RoundUnscaled[Internal↑[14]]];PrintChar[46];
PrintDd[RoundUnscaled[Internal↑[15]]];PrintChar[46];
PrintDd[RoundUnscaled[Internal↑[16]]];PrintChar[58];
T←RoundUnscaled[Internal↑[17]];PrintDd[ T /60];PrintDd[ T MOD 60];
Selector←OldSetting;
BEGIN GfBuf↑[GfPtr]←(PoolPtr-StrStart↑[StrPtr]);GfPtr←GfPtr+1;
IF GfPtr=GfLimit THEN GfSwap[]; END;StrStart↑[StrPtr+1]←PoolPtr;
GfString[0,StrPtr];PoolPtr←StrStart↑[StrPtr];
GfPrevPtr←GfOffset+GfPtr; END;--:1162----1164:
END.