DIRECTORY Basics, DABasics, Rope, RTBasic; RTBasicImpl: CEDAR PROGRAM EXPORTS RTBasic = BEGIN Error: PUBLIC ERROR[errorType: RTBasic.ErrorType _ callingError, explanation: Rope.ROPE _ NIL] = CODE; Signal: PUBLIC SIGNAL[signalType: RTBasic.ErrorType _ callingError, explanation: Rope.ROPE _ NIL] = CODE; 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: DABasics.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: DABasics.Position] 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: DABasics.Position] = { SELECT pDir FROM horizontal => pos _ [pqPos.p, pqPos.q]; vertical => pos _ [pqPos.q, pqPos.p]; ENDCASE}; Overlap: PUBLIC PROC [r1, r2: RTBasic.Range] RETURNS [overlap: RTBasic.Range] = { IF r2.l <= r1.l AND r1.l <= r2.r THEN overlap _ [r1.l, MIN[r1.r, r2.r]] ELSE IF r1.l <= r2.l AND r2.l <= r1.r THEN overlap _ [r2.l, MIN[r1.r, r2.r]] ELSE overlap _ [MAX[r1.r, r2.r], MIN[r1.r, r2.r]]}; Gap: PUBLIC PROC [r1, r2: RTBasic.Range] RETURNS [gap: RTBasic.Range] = { IF r2.r < r1.l THEN gap _ [r2.r, r1.l] ELSE IF r1.r < r2.l THEN gap _ [r1.r, r2.l] ELSE gap _ [MAX[r1.r, r2.r], MIN[r1.r, r2.r]]}; Span: PUBLIC PROC [r1, r2: RTBasic.Range] RETURNS [result: RTBasic.Range] = { result _ [MIN[r1.l, r2.l], MAX[r1.r, r2.r]]}; sideName: PUBLIC ARRAY RTBasic.Side OF Rope.ROPE _ ["bottom", "top", "left", "right"]; 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. ŠRTBasicImpl.mesa Copyright Σ 1986, 1987 by Xerox Corporation. All rights reserved. last edited by Bryan Preas April 19, 1987 4:08:10 pm PDT Signals and Errors Procedures PQ Procedures convert a position from x-y to p-q space. convert a position from p-q to x-y space. Range Procedures get the overlap of seg1, seg2 get the gap of seg1, seg2 determnie span of ranges 1 and 2 Variables Κ)˜šœ™IcodešœB™BJšœ:™:—J˜šΟk ˜ Jšœ ˜ J˜—šœ œ˜Jšœ ˜—head™Jš Οnœœœ@œœœ˜fJš žœœœAœœœ˜i—šœ ™ šž œœ˜0šœ˜Jšœ˜—J˜—šžœœ˜?šœ˜Jšœ#˜#—J˜—šž œœ%˜Dšœ˜"Jšœ%˜%—J˜—šž œœ$˜Cšœ ˜'J˜Jšœ œœ˜'Jšœœœ˜&Jšœ˜ ———L™ ˜šžœ œ3œ˜hJ™)J˜šœ˜Jšœ%˜%Jšœ#˜#Jšœ˜ —J™—šžœ œ1œ˜hJ™)J˜šœ˜Jšœ'˜'Jšœ œ˜%Jšœ˜ ———™šžœœœœ˜QKšœ™K˜šœœ˜%Kšœœ ˜!—šœœœ˜*Kšœœ ˜!—š˜Kšœ œœ˜.—K˜—šžœœœœ˜IKšœ™K˜šœ˜Kšœ˜—šœœ ˜Kšœ˜—Kšœœœ˜/K˜—šžœœœœ˜MK™ K˜Kšœ œœ˜-——™ Jšœ  œœœ&˜VJšœS˜SJšœœœ,˜VJšœ œœ+˜KJšœ˜J˜—J˜—…—Ψ ‹