-- 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]=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 B0 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 MinMStatedMaxMOverall THEN MaxMOverall_MaxMObserved; IF NMaxNOverall 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 NULL};FileClose[@Output];ByteFileClose[@GfFile];--:66 END; PascalRegister["GFType", GFTypeRun]; END.