-- file: MFTFMImpl.mesa -- Pascal-to-Mesa translator output, translated at October 31, 1985 4:28:02 pm PST DIRECTORY PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFInteraction, MFMath, MFMemory, MFSymbols, MFTFM; MFTFMImpl: PROGRAM IMPORTS PascalBasic, PascalWizardFiles, MFProcArray, MFInteraction, MFMath, MFMemory, MFSymbols EXPORTS MFTFM = PUBLIC BEGIN OPEN PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFInteraction, MFMath, MFMemory, MFSymbols, MFTFM; --:1083----1086:-- TfmFile: ByteFile; MetricFileName: StrNumber; --:1086----1095:-- Bc: EightBits; Ec: EightBits; TfmWidth: LONG POINTER TO ARRAY EightBits OF Scaled _ PascalStaticZone.NEW[ARRAY EightBits OF Scaled]; TfmHeight: LONG POINTER TO ARRAY EightBits OF Scaled _ PascalStaticZone.NEW[ARRAY EightBits OF Scaled]; TfmDepth: LONG POINTER TO ARRAY EightBits OF Scaled _ PascalStaticZone.NEW[ARRAY EightBits OF Scaled]; TfmItalCorr: LONG POINTER TO ARRAY EightBits OF Scaled _ PascalStaticZone.NEW[ARRAY EightBits OF Scaled]; CharExists: LONG POINTER TO ARRAY EightBits OF PascalBoolean _ PascalStaticZone.NEW[ARRAY EightBits OF PascalBoolean]; CharTag: LONG POINTER TO ARRAY EightBits OF PascalInteger[0..3] _ PascalStaticZone.NEW[ARRAY EightBits OF PascalInteger[0..3]]; CharRemainder: LONG POINTER TO ARRAY EightBits OF EightBits _ PascalStaticZone.NEW[ARRAY EightBits OF EightBits]; HeaderByte: LONG POINTER TO ARRAY PascalInteger[1..100] OF PascalInteger[-1..255] _ PascalStaticZone.NEW[ARRAY PascalInteger[1..100] OF PascalInteger[-1..255]]; LigKern: LONG POINTER TO ARRAY PascalInteger[0..300] OF FourQuarters _ PascalStaticZone.NEW[ARRAY PascalInteger[0..300] OF FourQuarters]; Nl: PascalInteger[0..LigTableSize]; Kern: LONG POINTER TO ARRAY EightBits OF Scaled _ PascalStaticZone.NEW[ARRAY EightBits OF Scaled]; Nk: PascalInteger[0..256]; Exten: LONG POINTER TO ARRAY EightBits OF FourQuarters _ PascalStaticZone.NEW[ARRAY EightBits OF FourQuarters]; Ne: PascalInteger[0..256]; Param: LONG POINTER TO ARRAY PascalInteger[1..50] OF Scaled _ PascalStaticZone.NEW[ARRAY PascalInteger[1..50] OF Scaled]; Np: PascalInteger[0..MaxFontDimen]; Nw: PascalInteger[0..256]; Nh: PascalInteger[0..256]; Nd: PascalInteger[0..256]; Ni: PascalInteger[0..256]; --:1095----1118:-- Perturbation: Scaled; --:1118----1124: DimenHead: LONG POINTER TO ARRAY PascalInteger[1..4] OF Halfword _ PascalStaticZone.NEW[ARRAY PascalInteger[1..4] OF Halfword]; --:1124----1129:-- MaxTfmDimen: Scaled; TfmChanged: PascalInteger; SortIn: PROCEDURE[V: Scaled] RETURNS[SortInResult: Halfword] = BEGIN P, Q, R:Halfword; P_49999;{WHILE TRUE DO BEGIN Q_Mem[P]^.Hh.Rh; IF V<=Mem[ INT[Q]+1]^.Int THEN GOTO Label40;P_Q; END ENDLOOP ; EXITS Label40 => NULL};IF VL+D THEN EXIT; ENDLOOP; IF Mem[ INT[P]+1]^.Int-LM DO D_Perturbation ENDLOOP ;ThresholdResult_D; END; END;--:1119 --1120:-- Skimp: PROCEDURE[M: PascalInteger] RETURNS[SkimpResult: PascalInteger] = BEGIN D:Scaled;P, Q, R:Halfword; L:Scaled;V:Scaled; D_Threshold[M];Perturbation_0;Q_49999;M_0; P_Mem[49999]^.Hh.Rh;WHILE P#19 DO BEGIN M_M+1;L_Mem[ INT[P]+1]^.Int; Mem[P]^.Hh.Lh_M;IF Mem[ INT[Mem[P]^.Hh.Rh]+1]^.Int<=L+D THEN--1121: BEGIN DO P_Mem[P]^.Hh.Rh;Mem[P]^.Hh.Lh_M; IF Mem[ INT[Mem[P]^.Hh.Rh]+1]^.Int>L+D THEN EXIT; ENDLOOP;V_ PascalDIVPower2[(L+Mem[ INT[P]+1]^.Int),1]; IF Mem[ INT[P]+1]^.Int-V>Perturbation THEN Perturbation_Mem[ INT[P]+1]^.Int-V;R_Q; DO R_Mem[R]^.Hh.Rh;Mem[ INT[R]+1]^.Int_V; IF R=P THEN EXIT; ENDLOOP;Mem[Q]^.Hh.Rh_P; END--:1121--;Q_P;P_Mem[P]^.Hh.Rh; END ENDLOOP ;SkimpResult_M; END;--:1120----1122: TfmWarning: PROCEDURE[M: SmallNumber] = BEGIN PrintNl[898]; Print[IntName^[M]];Print[899];PrintScaled[Perturbation];Print[900]; END; --:1122----1127:-- FixDesignSize: PROCEDURE = BEGIN D:Scaled; D_Internal^[26]; IF(D<65536)OR (D>=134217728) THEN BEGIN IF D#0 THEN PrintNl[901]; D_8388608;Internal^[26]_D; END; IF INT[HeaderByte^[5]]<0 THEN IF INT[HeaderByte^[6]]<0 THEN IF INT[HeaderByte^[7]]<0 THEN IF INT[HeaderByte^[8]]<0 THEN BEGIN HeaderByte^[5]_ PascalDIVPower2[D ,20]; HeaderByte^[6]_ PascalMODPower2Mask[( PascalDIVPower2[D ,12]),255];HeaderByte^[7]_ PascalMODPower2Mask[( PascalDIVPower2[D ,4]),255]; HeaderByte^[8]_( PascalMODPower2Mask[D ,15])*16; END; MaxTfmDimen_ 16*Internal^[26]-PascalDIVPower2[Internal^[26],21]; IF MaxTfmDimen>=134217728 THEN MaxTfmDimen_134217727; END;--:1127 --1128:-- DimenOut: PROCEDURE[X: Scaled] RETURNS[DimenOutResult: PascalInteger] = BEGIN IF ABS[X]>MaxTfmDimen THEN BEGIN TfmChanged_TfmChanged+1; IF X>0 THEN X_16777215 ELSE X_-16777215; END ELSE X_MakeScaled[X*16,Internal^[26]];DimenOutResult_X; END;--:1128 --1130:-- FixCheckSum: PROCEDURE = BEGIN K:EightBits; B1, B2, B3, B4:EightBits;X:PascalInteger; {IF INT[HeaderByte^[1]]<0 THEN IF INT[HeaderByte^[2]]<0 THEN IF INT[HeaderByte^[3 ]]<0 THEN IF INT[HeaderByte^[4]]<0 THEN BEGIN--1131:--B1_Bc;B2_Ec;B3_Bc; B4_Ec;TfmChanged_0; FOR i:INT IN [ INT[Bc ].. INT[Ec ]] DO K _ i; IF CharExists^[K] THEN BEGIN X_DimenOut[Mem[ TfmWidth^[K]+1]^.Int]+(K+4)*4194304;B1_ (B1+B1+X)MOD 255; B2_ (B2+B2+X)MOD 253;B3_ (B3+B3+X)MOD 251;B4_ (B4+B4+X)MOD 247; END--:1131-- ENDLOOP;HeaderByte^[1]_B1;HeaderByte^[2]_B2;HeaderByte^[3]_B3; HeaderByte^[4]_B4; GOTO Label10; END; FOR i:INT IN [ INT[1 ].. INT[4 ]] DO K _ i; IF INT[HeaderByte^[K]]<0 THEN HeaderByte^[K]_0 ENDLOOP;EXITS Label10 => NULL}; END; --:1130----1132:-- TfmTwo: PROCEDURE[X: PascalInteger] = BEGIN {grossExprHack:EightBits _ PascalDIVPower2[X ,8]; PascalWriteLong[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element, item: @grossExprHack]}; {grossExprHack:EightBits _ PascalMODPower2Mask[X ,255]; PascalWriteLong[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element, item: @grossExprHack]}; END; TfmFour: PROCEDURE[X: PascalInteger] = BEGIN IF X>=0 THEN {grossExprHack:EightBits _ PascalDIVPower2[X ,24]; PascalWriteLong[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element, item: @grossExprHack]} ELSE BEGIN X_X +1073741824;X_X+1073741824;{grossExprHack:EightBits _ ( PascalDIVPower2[X ,24])+128; PascalWriteLong[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element, item: @grossExprHack]}; END; X_ PascalMODPower2Mask[X ,16777215]; {grossExprHack:EightBits _ PascalDIVPower2[X ,16]; PascalWriteLong[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element, item: @grossExprHack]};X_ PascalMODPower2Mask[X ,65535]; {grossExprHack:EightBits _ PascalDIVPower2[X ,8]; PascalWriteLong[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element, item: @grossExprHack]}; {grossExprHack:EightBits _ PascalMODPower2Mask[X ,255]; PascalWriteLong[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element, item: @grossExprHack]}; END; TfmQqqq: PROCEDURE[X: FourQuarters] = BEGIN {grossExprHack:EightBits _ X.B0; PascalWriteLong[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element, item: @grossExprHack]}; {grossExprHack:EightBits _ X.B1; PascalWriteLong[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element, item: @grossExprHack]};{grossExprHack:EightBits _ X.B2; PascalWriteLong[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element, item: @grossExprHack]};{grossExprHack:EightBits _ X.B3; PascalWriteLong[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element, item: @grossExprHack]}; END; END.