DIRECTORY IO USING [STREAM], Rope USING [ROPE]; CIFParser: CEDAR DEFINITIONS ~ BEGIN Point: TYPE ~ RECORD[x, y: INT]; Path: TYPE ~ LIST OF Point; Transformation: TYPE ~ LIST OF TransformationRec; TransformationRec: TYPE ~ RECORD[t: TransfType, p: Point]; --never NIL TransfType: TYPE ~ {translation, rotation, xSym, ySym, error}; TMatrix: TYPE ~ RECORD[a11, a21, a31, a12, a22, a32, a33: REAL]; --IntTransDefs.mesa compatible TransfToMatrix: PROC [t: Transformation] RETURNS [m: TMatrix]; MatMult: PROC [m1, m2: TMatrix] RETURNS [mProd: TMatrix]; TransformPt: PROC [m: TMatrix, p: Point] RETURNS [newP: Point]; IsOrthogonalTransform: PROC [m: TMatrix] RETURNS [BOOL]; Registration: TYPE ~ REF RegistrationRec; RegistrationRec: TYPE ~ RECORD [ defDelete: PROC[i: CARD, data: REF ANY], defStart: PROC[i, a, b: CARD, data: REF ANY], defFinish: PROC[data: REF ANY], polygon: PROC[p: Path, data: REF ANY], box: PROC[l, w: CARD, c, d: Point, data: REF ANY], roundFlash: PROC[d: CARD, c: Point, data: REF ANY], wire: PROC[w: CARD, p: Path, data: REF ANY], layer: PROC[n: Rope.ROPE, data: REF ANY], call: PROC[s: CARD, t: Transformation, data: REF ANY], userExtension: PROC[u: CARD, t: Rope.ROPE, data: REF ANY], comment: PROC[c: Rope.ROPE, data: REF ANY], data: REF ANY -- user data ignored by the Parser ]; Parse: PROC [cifStream: IO.STREAM, reg: Registration]; Error: ERROR [msg: Rope.ROPE, cifFile: IO.STREAM]; ClientError: ERROR [clientMsg: Rope.ROPE]; END. ΊCIFParser.mesa Copyright Σ 1987 by Xerox Corporation. All rights reserved. written by Ch. Le Cocq, September 10, 1987 Christian Le Cocq, September 16, 1987 10:38:44 am PDT Parser of the CIF (Caltech Intermediate Form) format stream. CIF is a standard of chip layout description. See Mead & Conway pp 115-127. Transformations Simple Transformation handling package: The calling program provides one proc for each CIF command. calls the various registred procs with the relevant argument for each CIF command. syntax error Is mapped into Error[Rope.Cat["client error: ", clientMsg], cifFile]. Convenient way for the client registred procs to raise an error (for instance "unknown layer"). Κσ˜codešœ™Kšœ<™—Kšœ œœ$œŸ˜_K™'KšΟnœœœ˜>Kš œœœ˜9Kš  œœœ˜?š œœœœ˜8K˜—Kšœ/œ ™;šœœœ˜)šœœœ˜ Kš œ œœœœ˜)Kš œ œ œœœ˜.Kšœ œœœ˜ Kšœ œœœ˜'Kš œœœœœ˜3Kš œ œœœœ˜3Kš œœœœœ˜-Kš œœ œœœ˜*Kš œœœœœ˜7Kš œœœ œœœ˜:Kš œ œ œœœ˜,KšœœœŸ"˜1Kšœ˜K™——š œœ  œ˜6K™RK™—š  œœ œ œœ˜2K™ —š  œœœ˜*Kšœ₯™₯——Kšœ˜—…—Ύ k