CDUtil.mesa
Copyright © 1985, 1986 by Xerox Corporation. All rights reserved.
Created by Christian Jacobi, June 7, 1985 5:16:21 pm PDT
Last edited by: Christian Jacobi, November 17, 1986 11:38:57 am PST
DIRECTORY
CD, Rope;
CDUtil: CEDAR DEFINITIONS =
BEGIN
Handy procedures for creating designs from programs.
Direction: TYPE = {right, up, left, down, none};
InstRec: TYPE = RECORD [
ob: CD.Object,
name: Rope.ROPENIL, --instance Name
orient: CD.Orientation ← original,
dX: CD.Number𡤀,
dY: CD.Number𡤀,
properties: CD.PropList←NIL --for the instance
];
CreateSimpleCell: PROC [
design: CD.Design,
contents: LIST OF InstRec,
cellName: Rope.ROPENIL,
direction: Direction ← right,
alignHigh: BOOLFALSE]
RETURNS [CD.Object];
--Creates a cell by basically abutting the instances (interest rects)
--design: cell is included into design; all instances must be in design too
--contents: list of descriptions of instances
--  the first is placed at an origin,
--  all others are placed abutting their predecessor in direction "direction"
--  (if direction is none: dX, dY is absolute)
--cellName: name given to cell
--direction: direction of abutting
--alignHigh:
--  FALSE: put the edges with smaller coordinate values into a line
--  TRUE: put the edges with larger coordinate values into a line
-- dX, dY: the instance is displaced by this amount before including;
--  not defaulting this causes to create not really abutting instances
PartialCopy: PROC [ob: CD.Object, design: CD.Design, instances: LIST OF Rope.ROPENIL, remove: BOOLTRUE, prop: ATOM ← $InstanceName, name: Rope.ROPENIL] RETURNS [CD.Object];
--Copy the object; creates a cell
--remove TRUE:
-- all the instances with property prop are and a value in instances are removed
--remove FALSE:
-- only the instances with property prop are and a value in instances are copied
--interest rect:
-- if explicit, it will be copied,
-- if defaulted, a new one will be defaulted
--the origin will be inherited
InstPredicate: TYPE = PROC [inst: CD.Instance] RETURNS [BOOL];
Flatten: PROC [ob: CD.Object, design: CD.Design, flattenInst: InstPredicate←NIL] RETURNS [new: CD.Object];
--Flattens the content of an object. Works all the way down (not just the top level).
--For each instance checks whether this instance should be flattened by calling InstPredicate.
--The default flattenInst flattens only subobjects in the directory and stops flattening
--subobjects with a non-nil $DontFlatten property.
END.