<> <> <> <> DIRECTORY Basics, CD, CDCells, DABasics, PW, Rope; RTBasic: CEDAR DEFINITIONS IMPORTS CD, CDCells, PW = { <> SideOrNone: TYPE = DABasics.SideOrNone; Side: TYPE = DABasics.Side; LRSide: TYPE = DABasics.LRSide; TBSide: TYPE = DABasics.TBSide; Direction: TYPE = DABasics.Direction; AboveOrBelow: TYPE = {above, below}; sideName: ARRAY Side OF Rope.ROPE; <> Error: ERROR [errorType: ErrorType _ callingError, explanation: Rope.ROPE _ NIL]; Signal: SIGNAL [signalType: ErrorType _ callingError, explanation: Rope.ROPE _ NIL]; ErrorType: TYPE = {programmingError, callingError, noResource, designRuleViolation, other}; <> OtherSide: PROCEDURE [side: Side] RETURNS [Side]; OtherDirection: PROCEDURE [direction: Direction] RETURNS [Direction]; OtherRelation: PROCEDURE [aboveOrBelow: AboveOrBelow] RETURNS [AboveOrBelow]; SimpleCompare: PROCEDURE [result1, result2: DABasics.Number] RETURNS [result: Basics.Comparison]; <<>> IRSize: PROC [obj: CD.Object] RETURNS [CD.Position] ~ INLINE{ RETURN[CD.InterestSize[obj]]}; SetCDCellName: PROC [obj: CD.Object, name: Rope.ROPE] ~ INLINE{ PW.SetName[obj, name]}; GetCDCellName: PROC [obj: CD.Object] RETURNS [Rope.ROPE]~ INLINE{ RETURN[PW.Name[obj]]}; CDCellIsEmpty: PROC [obj: CD.Object] RETURNS [BOOLEAN] ~ INLINE{ RETURN[CDCells.IsEmpty[obj]]}; RepositionCell: PROC [obj: CD.Object] ~ INLINE{ IF ~CDCellIsEmpty[obj] THEN [] _ CDCells.ResizeCell[NIL, obj]}; <> Range: TYPE = RECORD [ l, r: DABasics.Number]; RangeList: TYPE = LIST OF Range; RefRange: TYPE = REF Range; <<>> Overlap: PROC [r1, r2: Range] RETURNS [overlap: Range]; <> Overlaps: PUBLIC PROC [r1, r2: Range] RETURNS [BOOL] = INLINE {RETURN [(r1.l<=r2.r) AND (r2.l<=r1.r)]}; Equal: PUBLIC PROC [r1, r2: Range] RETURNS [BOOL] = INLINE {RETURN [(r1.l=r2.l) AND (r1.r=r2.r)]}; Gap: PROC [r1, r2: Range] RETURNS [gap: Range]; <> Span: PROC [r1, r2: Range] RETURNS [result: Range]; <> <> PQPos: TYPE = RECORD[ p: DABasics.Number, q: DABasics.Number]; PQRectRef: TYPE = REF PQRect; PQRect: TYPE = RECORD[ c1, c2: PQPos]; PQRectList: TYPE = LIST OF PQRect; XYToPQ: PROC [pDir: Direction, pos: DABasics.Position] RETURNS [pqPos: PQPos]; <> <<>> PQToXY: PROC [pDir: Direction, pqPos: PQPos] RETURNS [pos: DABasics.Position]; <> <<>> AddPoints: PROC [p, s: RTBasic.PQPos] RETURNS [RTBasic.PQPos] = <<--p displaced by d>> INLINE {RETURN [RTBasic.PQPos[p: p.p+s.p, q: p.q+s.q]]}; SubPoints: PROC [pos, neg: RTBasic.PQPos] RETURNS [RTBasic.PQPos] = <<--pos displaced by -neg>> INLINE {RETURN [RTBasic.PQPos[p: pos.p-neg.p, q: pos.q-neg.q]]}; }.