-- 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.