CDSimpleRules.mesa (part of ChipNDale)
Copyright © 1985 by Xerox Corporation.  All rights reserved.
by Christian Jacobi, July 5, 1985 4:58:37 pm PDT
Last Edited by Christian Jacobi, July 5, 1985 6:06:14 pm PDT
 
DIRECTORY 
CD, Rope, SymTab;
 
CDSimpleRules: CEDAR DEFINITIONS =   
BEGIN 
--This module is used to hide the actual technology used from otherwise quite 
--technology independent routing software.  Not all technologies do support this 
--module; If used for a technology which does not support this module, procedures 
--will raise NotKnown.
NotKnown: ERROR;
MinWidth: 
PROC [layer: 
CD.Layer] 
RETURNS [
CD.Number];
-- Minimum width of conductors.
-- Might return 0 if nothing specified.
-- (Width of interrest rect).
 
MinDist: 
PROC [l1, l2: 
CD.Layer] 
RETURNS [
CD.Number];
-- Minimum distance between unrelated conductors.
-- 0 if no interaction.
-- Error if l1 and l2 from different technologies. 
-- Raises NotKnown if distance (or technology) is not known. 
-- (Distance of interrest rects).
 
GetLayer: 
PROC [technology, layer: 
REF] 
RETURNS [
CD.Layer];
-- Tries to figure out a layer, given names. 
-- Use only to get technology specific names. 
-- A little bit more forgiving than CD.FetchLayer...
-- Raises NotKnown if not known.
 
Rect: 
PROC [size: 
CD.Position, layer: 
CD.Layer] 
RETURNS [
CD.Object];
-- size: interest rect
-- For conveniance only, duplicate of CDRects...
 
Contact: 
PROC [l1, l2: 
CD.Layer] 
RETURNS [
CD.Object];
-- nil if any complication or no contact possible...
-- use CD.InterestRect to get size
-- Error if l1 and l2 from different technologies. 
 
Implement
Technology: 
PROC [technology: 
CD.Technology, 
minWidth: PROC [layer: CD.Layer] RETURNS [CD.Number],
minDist: PROC [l1, l2: CD.Layer] RETURNS [CD.Number],
contact: PROC [l1, l2: CD.Layer] RETURNS [CD.Object],
layerTable: SymTab.Ref←NIL,
technologyNames: LIST OF Rope.ROPE ← NIL
];
 
END.