-- File: DJExtTypes.mesa
-- Global types used by disjoint extractor program
-- Written by Martin Newell/Dan Fitzpatrick June 1981
-- Last edited: July 31, 1981 2:48 PM

DJExtTypes
: DEFINITIONS =
BEGIN

Edge: TYPE = LONG POINTER TO EdgeRecord;
EdgeRecord: TYPE = RECORD [
next: Edge,
count: CARDINAL,
bx, by, tx, ty: REAL,
segment: Segment
];

NodeNumber: TYPE = LONG UNSPECIFIED;
Node: TYPE = LONG POINTER TO NodeRecord;
NodeRecord: TYPE = RECORD [
next: Node,
back: Node,
node: NodeNumber,
type: NodeType,
var: SELECT OVERLAID * FROM
cap => [
cperim: ARRAY CapLayer OF REAL,
carea: ARRAY CapLayer OF REAL
],
trans => [
poly: NodeNumber,
diff: Diffusion,
x,y: REAL, -- location
area: REAL, -- area of gate region
perim: REAL, -- perimeter of gate region
ion: BOOLEAN, -- set if any part of gate is in implant
nion: BOOLEAN -- set if any part of gate is not in implant
]
ENDCASE
];
NodeType: TYPE = {Transistor, Capacitor, Unknown};
CapLayer: TYPE = {Poly, Diff, Metal};


Diffusion: TYPE = LONG POINTER TO DiffusionRecord;
DiffusionRecord: TYPE = RECORD [
next: Diffusion,
node: NodeNumber,
length: REAL
];

Position: TYPE = {Left,Bottom,Right,Top};

Segment: TYPE = LONG POINTER TO SegmentRecord;
SegmentRecord: TYPE = RECORD [
next: Segment,
layer: INTEGER,
node: NodeNumber,
pos: Position,
bx, by, tx, ty: REAL
];

Box: TYPE = LONG POINTER TO BoxRecord;
BoxRecord: TYPE = RECORD [
next: Box,
layer: INTEGER,
node: NodeNumber,
l,b,r,t: REAL
];

Side: TYPE = LONG POINTER TO SideRecord;
SideRecord: TYPE = RECORD [
next: Side,
layer: INTEGER,
node: NodeNumber,
pos: Position,
x,b,t: REAL
];

NodeSegment: TYPE = LONG POINTER TO NodeSegmentRecord;
NodeSegmentRecord: TYPE = RECORD [
next: NodeSegment,
layer: INTEGER,
node: NodeNumber,
left: REAL,
right: REAL
];

ActualParameter: TYPE = LONG POINTER TO ActualParameterRecord;
ActualParameterRecord: TYPE = RECORD [
next: ActualParameter,
count: CARDINAL,
node: ARRAY [0..APLimit) OF NodeNumber
];
APLimit: CARDINAL = 16;

NodeLocation: TYPE = LONG POINTER TO NodeLocationRecord;
NodeLocationRecord: TYPE = RECORD [
next: NodeLocation,
node: NodeNumber,
x,y: REAL
];

implant: CARDINAL = 0;
diff: CARDINAL = 1;
poly: CARDINAL = 2;
cut: CARDINAL = 3;
metal: CARDINAL = 4;
buried: CARDINAL = 5;
glass: CARDINAL = 6;
gate: CARDINAL = 9;

END.