<> <> <> <> <> DIRECTORY IO, Rope; Core: CEDAR DEFINITIONS = BEGIN <> <> <> ROPE: TYPE = Rope.ROPE; Properties: TYPE = REF PropertyRec; PropertyRec: TYPE; StructureError: SIGNAL [type: StructureErrorType, message: ROPE, data: REF ANY _ NIL] RETURNS [newData: REF ANY _ NIL]; StructureErrorType: TYPE = {DuplicateName, InvariantFailed, MissingParameter, NoSuchName}; <> Design: TYPE = REF DesignRec; DesignRec: TYPE = RECORD [ name: ROPE _ NIL, data: DesignData _ NIL, properties: Properties _ NIL]; DesignData: TYPE = REF DesignDataRec; DesignDataRec: TYPE; <> Wire: TYPE = REF WireRec; WireRec: TYPE = RECORD [ name: ROPE _ NIL, significance: WireSignificance _ internal, structure: WireStructure _ atom, elements: WireSequence _ NIL, properties: Properties _ NIL]; WireSignificance: TYPE = { public, --part of a cell type's public wire, but not internal internal, --part of a cell type's internal wire, but not public publicInternal, --a public part of a cell type's internal wire actual --part of the actual wire of some cell instance, but not part of parent's internal wire }; WireStructure: TYPE = {sequence, record, atom}; WireSequence: TYPE = REF WireSequenceRec; WireSequenceRec: TYPE = RECORD [c: SEQUENCE size: NAT OF Wire]; <> CellClass: TYPE = REF CellClassRec; CellClassRec: TYPE = RECORD [ name: ROPE, expand: ExpandProc, write: WriteProc, read: ReadProc, properties: Properties _ NIL]; <> ExpandProc: TYPE = PROC [design: Design, me: CellType] RETURNS [new: CellType]; <> WriteProc: TYPE = PROC [design: Design, out: IO.STREAM, me: CellType]; ReadProc: TYPE = PROC [design: Design, in: IO.STREAM] RETURNS [me: CellType]; <> CellType: TYPE = REF CellTypeRec; CellTypeRec: TYPE = RECORD [ name: ROPE, class: CellClass, publicWire: Wire, data: REF ANY _ NIL, properties: Properties _ NIL]; <> END.