DIRECTORY Basics, D2Basic, RTBasic; RTBasicImpl: CEDAR PROGRAM EXPORTS RTBasic = BEGIN OtherSide: PUBLIC PROCEDURE [side: RTBasic.Side] RETURNS [RTBasic.Side] = { RETURN[otherSide[side]]}; OtherDirection: PUBLIC PROCEDURE [direction: RTBasic.Direction] RETURNS [RTBasic.Direction] = { RETURN[otherDirection[direction]]}; OtherRelation: PUBLIC PROCEDURE [aboveOrBelow: RTBasic.AboveOrBelow] RETURNS [RTBasic.AboveOrBelow] = { RETURN[otherRelation[aboveOrBelow]]}; SimpleCompare: PUBLIC PROCEDURE [result1, result2: D2Basic.Number] RETURNS [result: Basics.Comparison] = { result _ IF result1 < result2 THEN less ELSE IF result1 > result2 THEN greater ELSE equal}; XYToPQ: PUBLIC PROC [pDir: RTBasic.Direction, pos: D2Basic.Pos] RETURNS [pqPos: RTBasic.PQPos] = { SELECT pDir FROM horizontal => pqPos _ [pos.x, pos.y]; vertical => pqPos _ [pos.y, pos.x]; ENDCASE}; PQToXY: PUBLIC PROC [pDir: RTBasic.Direction, pqPos: RTBasic.PQPos] RETURNS [pos: D2Basic.Pos] = { SELECT pDir FROM horizontal => pos _ [pqPos.p, pqPos.q]; vertical => pos _ [pqPos.q, pqPos.p]; ENDCASE}; otherRelation: ARRAY RTBasic.AboveOrBelow OF RTBasic.AboveOrBelow _ [below, above]; otherDirection: ARRAY RTBasic.Direction OF RTBasic.Direction _ [vertical, horizontal]; otherSide: ARRAY RTBasic.Side OF RTBasic.Side _ [top, bottom, right, left]; END. ~file ///StdCell/RTBasicImpl.mesa convert a position from x-y to p-q space. convert a position from p-q to x-y space. ÊÀ˜Jšœ ™ J˜šÏk ˜ J˜Jšœ˜Jšœ˜J˜—šœ œ˜Jšœ ˜Jš˜šÏn œœ˜0šœ˜Jšœ˜——J˜šžœœ˜?šœ˜Jšœ#˜#—J˜—šž œœ%˜Dšœ˜"Jšœ%˜%—J˜—šž œœ#˜Bšœ ˜'J˜Jšœ œœ˜'Jšœœœ˜&Jšœ˜ ——J™šžœ œ-œ˜bJ™)J˜šœ˜Jšœ%˜%Jšœ#˜#Jšœ˜ —J™—šžœ œ1œ˜bJ™)J˜šœ˜Jšœ'˜'Jšœ œ˜%Jšœ˜ ——J˜JšœS˜SJšœœœ,˜VJšœ œœ+˜KJšœ˜—J˜J˜—…—2p