CDPrivate.mesa (part of ChipNDale)
Copyright © 1983, 1987 by Xerox Corporation. All rights reserved.
Created by Christian Jacobi, November 21, 1983 4:02 pm
Last Edited by: Christian Jacobi, February 26, 1987 1:17:47 pm PST
CDPrivate: CEDAR DEFINITIONS =
BEGIN
-- Layers and technologies
LayerRef: TYPE = REF LayerRec;
LayerRec:
TYPE =
RECORD [
technology: CD.Technology ← NIL,
uniqueKey: ATOM ← NIL, -- unique per technology
properties: CD.PropRef,
globalUniqueKey: REF ← NIL, --use as CDValue key reserved by CDDefaults
number: CD.Layer
];
layers: READONLY REF ARRAY CD.Layer OF LayerRef;
ConvertLayer:
PROC [technology:
CD.Technology, uniqueKey:
ATOM, into:
CD.Layer];
--To enable input of no more supported layers
--To be used by technology implementors only
ConvertTechnologyKey:
PROC [technology:
CD.Technology, oldKey:
ATOM];
--To register an alternative key for a technology
--To be used by technology implementors only
-- Designs
DesignEnumerator: TYPE = PROC [design: CD.Design] RETURNS [quit: BOOL←FALSE];
EnumDesigns:
PROC [p: DesignEnumerator]
RETURNS [
BOOL];
--only subset of designs will be enumerated
--Enumerator does NOT have a lock on design: design is readonly unless locked explicitely
InstallDesignEnumerator:
PRIVATE PROC [
PROC [p: DesignEnumerator]
RETURNS [
BOOL]];
--Designs are also used for private purposes, therefore, enumeration must only return those
--designs which are protected with the mutability flag or where public access is intended,
--e.g. designs with viewers or control panels.
-- Grid
GetGrid:
PROC [design:
CD.Design, hint:
REF←
NIL]
RETURNS [
CD.Number];
--Returns a grid number
--Interesting, because it returns a grid without explicitely importing viewer modules
InstallGetGrid:
PRIVATE PROC [
PROC [design:
CD.Design, hint:
REF←
NIL]
RETURNS [
CD.Number]];
--Used by viewer modules to set up GetGrid
-- Handy procedures for object generators...
Hash:
PROC [x:
REF]
RETURNS [h:
CARDINAL];
--assumes x of type CD.Object
--generates hash code using size, layer and class
Equal:
PROC [x, y:
REF]
RETURNS [
BOOL];
--assumes x, y of type CD.Object
--checks class, layer, bbox and ir
MinBBox:
PROC [s:
CD.Position]
RETURNS [
CD.Rect] =
INLINE {
RETURN [[x1: 0, y1: 0, x2: MAX[s.x, 1], y2: MAX[s.y, 1]]]
};
END.