-- File SIFControl.mesa -- Device independent Output module for CIF 2.0 Parser -- Written by Martin Newell, August 1980. -- Last updated: June 5, 1981 2:55 PM DIRECTORY CIFOutputDefs: FROM "CIFOutputDefs" USING [OutputSymbolName, OutputNamedPoint], IcarusInputDefs: FROM "IcarusInputDefs", IntDefs: FROM "IntDefs" USING [IDefineStart, IDefineEnd, IComment, ILayer, IBox, ICallSymbol, IEnd], IODefs: FROM "IODefs" USING [SP, WriteChar, WriteDecimal], ParserErrorDefs: FROM "ParserErrorDefs" USING [Report], ParserTypeDefs: FROM "ParserTypeDefs" USING [TList, AllocateTList, AppendTList, FreeTList], SifGutsDefs: FROM "SifGutsDefs" USING [Point, IcToCif], SifOutputDefs: FROM "SifOutputDefs"; SIFControl: PROGRAM IMPORTS CIFOutputDefs, IntDefs, IODefs, ParserErrorDefs, ParserTypeDefs, SifGutsDefs EXPORTS IcarusInputDefs, SifOutputDefs = BEGIN OPEN CIFOutputDefs, IntDefs, IODefs, ParserErrorDefs, ParserTypeDefs, SifGutsDefs; ParseIcarus: PUBLIC PROCEDURE [fileName: STRING, mul,div: LONG INTEGER, StartDefNumber: INTEGER] RETURNS [ok: BOOLEAN, nDefs: INTEGER] = BEGIN error: BOOLEAN; NComs _ 0; NComs100 _ 100; [error,nDefs] _ IcToCif[fileName, mul, div, StartDefNumber]; RETURN[~error, nDefs]; END; PutDefStart: PUBLIC PROCEDURE [num: INTEGER, xScale,yScale:LONG INTEGER, name: STRING] = BEGIN Count[]; IDefineStart[num, xScale,yScale]; IF name.length#0 THEN OutputSymbolName[name]; END; PutDefFinish: PUBLIC PROCEDURE = BEGIN Count[]; IDefineEnd[]; END; PutComment: PUBLIC PROCEDURE[s: STRING] = BEGIN Count[]; IComment[s]; END; PutLayer: PUBLIC PROCEDURE[l: STRING] = BEGIN Count[]; ILayer[l]; END; PutBox: PUBLIC PROCEDURE [len,wid: LONG INTEGER, center: Point, angle: Point] = BEGIN Count[]; IBox[len, wid, [center.x,center.y], angle.x, angle.y]; END; PutCall: PUBLIC PROCEDURE [def: INTEGER, mirx,miry: BOOLEAN, rot:Point, trans:Point] = BEGIN list: ParserTypeDefs.TList _ AllocateTList[]; Count[]; IF mirx THEN AppendTList[list, [Mirror[X]]]; IF miry THEN AppendTList[list, [Mirror[Y]]]; IF rot.x<0 OR rot.y#0 THEN AppendTList[list, [Rotate[rot.x,rot.y]]]; IF trans.x#0 OR trans.y#0 THEN AppendTList[list, [Translate[trans.x,trans.y]]]; ICallSymbol[def, list]; FreeTList[list]; END; PutName: PUBLIC PROCEDURE [x,y: LONG INTEGER, s: STRING] = BEGIN Count[]; OutputNamedPoint[s, x,y]; END; PutEnd: PUBLIC PROCEDURE = BEGIN Count[]; IEnd[]; END; PutError: PUBLIC PROCEDURE[msg: STRING] = BEGIN Report[msg, Advisory]; END; Count: PROCEDURE = BEGIN NComs100 _ NComs100 - 1; IF NComs100=0 THEN { NComs _ NComs+100; NComs100 _ 100; WriteDecimal[NComs]; WriteChar[SP]; }; END; NComs: INTEGER; NComs100: INTEGER; END. (635)\161b9B527b10B227b11B272b11B184b12B60b10B70b8B68b6B154b7B440b7B103b6B54b8B72b5B