-- file: PLtoTF1Impl.mesa
-- Pascal-to-Mesa translator output, translated at October 23, 1985 11:00:04 am PDT


DIRECTORY
  PascalBasic,
  PascalWizardFiles,
  PLtoTFPrivate,
  PLtoTFExternals;

PLtoTF1Impl: PROGRAM IMPORTS PascalBasic, PascalWizardFiles, PLtoTFPrivate, PLtoTFExternals EXPORTS PLtoTFPrivate = PUBLIC
BEGIN OPEN PascalBasic, PascalWizardFiles, PLtoTFPrivate, PLtoTFExternals;
--:136-- Initialize: PROCEDURE = 
BEGIN--19:--K:PascalInteger[0..127];--:19----40:--H:PascalInteger[0..100];--:40
--69:--D:HeaderIndex;--:69----73:--C:Byte;--:73
 {PascalWriteLongString[file: @Output, item: "This is PLtoTF 2.3 for Cedar 6.0"]; PascalWriteLn[file: @Output]};--6:
FileReset[@PlFile,Alfa['p, 'l, ' , ' , ' , ' , ' , ' , ' , ' ]];--:6----16:
ByteFileRewrite[@TfmFile,Alfa['t, 'f, 'm, ' , ' , ' , ' , ' , ' , ' ]];--:16----20:
FOR i:INT    IN [ INT[0 ].. INT[127 ]] DO  K ← i; Xord↑[PascalCHR[K]]←127 ENDLOOP;Xord↑[' ]←32;Xord↑['!]←33;
Xord↑['"]←34;Xord↑['#]←35;Xord↑['$]←36;Xord↑['%]←37;Xord↑['&]←38;
Xord↑['']←39;Xord↑['(]←40;Xord↑[')]←41;Xord↑['*]←42;Xord↑['+]←43;
Xord↑[',]←44;Xord↑['-]←45;Xord↑['.]←46;Xord↑['/]←47;Xord↑['0]←48;
Xord↑['1]←49;Xord↑['2]←50;Xord↑['3]←51;Xord↑['4]←52;Xord↑['5]←53;
Xord↑['6]←54;Xord↑['7]←55;Xord↑['8]←56;Xord↑['9]←57;Xord↑[':]←58;
Xord↑[';]←59;Xord↑['<]←60;Xord↑['=]←61;Xord↑['>]←62;Xord↑['?]←63;
Xord↑['@]←64;Xord↑['A]←65;Xord↑['B]←66;Xord↑['C]←67;Xord↑['D]←68;
Xord↑['E]←69;Xord↑['F]←70;Xord↑['G]←71;Xord↑['H]←72;Xord↑['I]←73;
Xord↑['J]←74;Xord↑['K]←75;Xord↑['L]←76;Xord↑['M]←77;Xord↑['N]←78;
Xord↑['O]←79;Xord↑['P]←80;Xord↑['Q]←81;Xord↑['R]←82;Xord↑['S]←83;
Xord↑['T]←84;Xord↑['U]←85;Xord↑['V]←86;Xord↑['W]←87;Xord↑['X]←88;
Xord↑['Y]←89;Xord↑['Z]←90;Xord↑['[]←91;Xord↑['\\]←92;Xord↑[']]←93;
Xord↑['↑]←94;Xord↑['←]←95;Xord↑['`]←96;Xord↑['a]←97;Xord↑['b]←98;
Xord↑['c]←99;Xord↑['d]←100;Xord↑['e]←101;Xord↑['f]←102;
Xord↑['g]←103;Xord↑['h]←104;Xord↑['i]←105;Xord↑['j]←106;
Xord↑['k]←107;Xord↑['l]←108;Xord↑['m]←109;Xord↑['n]←110;
Xord↑['o]←111;Xord↑['p]←112;Xord↑['q]←113;Xord↑['r]←114;
Xord↑['s]←115;Xord↑['t]←116;Xord↑['u]←117;Xord↑['v]←118;
Xord↑['w]←119;Xord↑['x]←120;Xord↑['y]←121;Xord↑['z]←122;
Xord↑['{]←123;Xord↑['|]←124;Xord↑['}]←125;Xord↑['~]←126;--:20----22:
Line←0;GoodIndent←0;Indent←0;Level←0;--:22----24:--Limit←0;Loc←0;
LeftLn←TRUE;RightLn←TRUE;InputHasEnded←FALSE;--:24----26:
CharsOnLine←0;--:26----37:--StartPtr←1;Start↑[1]←0;DictPtr←0;--:37
--41:--FOR i:INT    IN [ INT[0 ].. INT[100 ]] DO  H ← i; Hash↑[H]←0 ENDLOOP;--:41----70:--CheckSumSpecified←FALSE;
FOR i:INT    IN [ INT[0 ].. INT[18*4-1 ]] DO  D ← i; HeaderBytes↑[D]←0 ENDLOOP;HeaderBytes↑[8]←11;
HeaderBytes↑[9]←85;HeaderBytes↑[10]←78;HeaderBytes↑[11]←83;
HeaderBytes↑[12]←80;HeaderBytes↑[13]←69;HeaderBytes↑[14]←67;
HeaderBytes↑[15]←73;HeaderBytes↑[16]←70;HeaderBytes↑[17]←73;
HeaderBytes↑[18]←69;HeaderBytes↑[19]←68;
FOR i:INT    IN [ INT[48 ].. INT[59 ]] DO  D ← i; HeaderBytes↑[D]←HeaderBytes↑[D-40] ENDLOOP;
DesignSize←10*1048576;DesignUnits←1048576;
SevenBitSafeFlag←FALSE;HeaderPtr←18*4;Nl←0;UnusedLabel←FALSE;
Nk←0;Ne←0;Np←0;--:70----74:--FOR i:INT    IN [ INT[0 ].. INT[255 ]] DO  C ← i;  CharWd↑[C]←0;
CharHt↑[C]←0;CharDp↑[C]←0;CharIc↑[C]←0;CharTag↑[C]←0;
CharRemainder↑[C]←0; ENDLOOP;Memory↑[0]←2147483647;Memory↑[1]←0;Link↑[1]←0;
Memory↑[2]←0;Link↑[2]←0;Memory↑[3]←0;Link↑[3]←0;Memory↑[4]←0;Link↑[4]←0;
MemPtr←4;--:74-- END;--:2----27:-- ShowErrorContext: PROCEDURE
 = 
BEGIN K:PascalInteger[0..BufSize]; {PascalWriteLongString[file: @Output, item: " (line "]; PascalWriteInteger[file: @Output, item: Line, fieldMinLength: 1]; PascalWriteLongString[file: @Output, item: ")."]; PascalWriteLn[file: @Output]};
IF  NOT LeftLn  THEN PascalWriteLongString[file: @Output, item: "..."];FOR i:INT    IN [ INT[1 ].. INT[Loc ]] DO  K ← i; PascalWriteChar[file: @Output, item: Buffer↑[K]] ENDLOOP;
{PascalWriteLongString[file: @Output, item: " "]; PascalWriteLn[file: @Output]};IF  NOT LeftLn  THEN PascalWriteLongString[file: @Output, item: "   "];
FOR i:INT    IN [ INT[1 ].. INT[Loc ]] DO  K ← i; PascalWriteLongString[file: @Output, item: " "] ENDLOOP;FOR i:INT    IN [ INT[Loc+1 ].. INT[Limit ]] DO  K ← i; PascalWriteChar[file: @Output, item: Buffer↑[K]] ENDLOOP;
IF RightLn  THEN {PascalWriteLongString[file: @Output, item: " "]; PascalWriteLn[file: @Output]} ELSE {PascalWriteLongString[file: @Output, item: "..."]; PascalWriteLn[file: @Output]};CharsOnLine←0; END;
--:27----28:-- FillBuffer: PROCEDURE = 
BEGIN LeftLn←RightLn;Limit←0;Loc←0;
IF LeftLn  THEN BEGIN IF Line>0  THEN PascalReadLn[file: @PlFile];Line←Line+1; END;
IF PascalTextEOF[file: @PlFile] THEN BEGIN Limit←1;Buffer↑[1]←');RightLn←FALSE;
InputHasEnded←TRUE;
 END  ELSE BEGIN WHILE( INT[Limit]<BufSize-1)AND ( NOT PascalTextEOLN[file: @PlFile])DO BEGIN
Limit←Limit+1;Buffer↑[Limit]←PascalReadChar[file: @PlFile]; END ENDLOOP ;Buffer↑[Limit+1]←' ;
RightLn←PascalTextEOLN[file: @PlFile];IF LeftLn  THEN--29:
BEGIN WHILE( INT[Loc]<Limit)AND (Buffer↑[Loc+1]=' )DO Loc←Loc+1 ENDLOOP ;
IF  INT[Loc]<Limit  THEN BEGIN IF Level=0  THEN IF Loc=0  THEN GoodIndent←
GoodIndent+1  ELSE BEGIN IF GoodIndent>=10  THEN BEGIN IF 
 INT[CharsOnLine]>0  THEN {PascalWriteLongString[file: @Output, item: " "]; PascalWriteLn[file: @Output]};
PascalWriteLongString[file: @Output, item: "Warning: Indented line occurred at level zero"];
ShowErrorContext[]; END;GoodIndent←0;Indent←0;
 END  ELSE IF Indent=0  THEN IF( Loc /Level)*Level=Loc  THEN BEGIN Indent
← Loc /Level;GoodIndent←1;
 END  ELSE GoodIndent←0  ELSE IF Indent*Level=Loc  THEN GoodIndent←
GoodIndent+1  ELSE BEGIN IF GoodIndent>=10  THEN BEGIN IF 
 INT[CharsOnLine]>0  THEN {PascalWriteLongString[file: @Output, item: " "]; PascalWriteLn[file: @Output]};{PascalWriteLongString[file: @Output, item: "Warning: Inconsistent indentation; "]
; PascalWriteLongString[file: @Output, item: "you are at parenthesis level "]; PascalWriteInteger[file: @Output, item: Level, fieldMinLength: 1]};ShowErrorContext[]; END;
GoodIndent←0;Indent←0; END; END; END--:29--; END; END;--:28----31:
 GetLetterOrDigit: PROCEDURE
 = 
BEGIN WHILE(Loc=Limit)AND ( NOT RightLn)DO FillBuffer[] ENDLOOP ;
IF Loc=Limit  THEN CurChar←32  ELSE BEGIN CurChar←Xord↑[Buffer↑[Loc+1]];
IF  INT[CurChar]>=97  THEN CurChar←CurChar-32;
IF(( INT[CurChar]>=48)AND ( INT[CurChar]<=57))OR (( INT[CurChar]>=65)AND ( INT[CurChar]<=90))
 THEN Loc←Loc+1  ELSE CurChar←32; END; END;--:31----32:-- GetNext: PROCEDURE
 = 
BEGIN WHILE Loc=Limit DO FillBuffer[] ENDLOOP ;Loc←Loc+1;
CurChar←Xord↑[Buffer↑[Loc]];
IF  INT[CurChar]>=97  THEN IF  INT[CurChar]<=122  THEN CurChar←CurChar-32  ELSE
BEGIN IF CurChar=127  THEN BEGIN BEGIN IF  INT[CharsOnLine]>0  THEN {
PascalWriteLongString[file: @Output, item: " "]; PascalWriteLn[file: @Output]};PascalWriteLongString[file: @Output, item: "Illegal character in the file"];ShowErrorContext[]; END;
CurChar←63; END;
 END  ELSE IF( INT[CurChar]<=41)AND ( INT[CurChar]>=40) THEN Loc←Loc-1; END;--:32----33:

END.