CDSomeImplementorsImpl.mesa (part of ChipNDale)
Copyright © 1984, 1985 by Xerox Corporation. All rights reserved.
by Ch. Jacobi, September 10, 1984 9:20:09 am PDT
last edited by Ch. Jacobi, September 23, 1985 4:23:31 pm PDT
DIRECTORY
CD,
CDBasics,
CDProperties,
CDSomeImplementors,
TokenIO;
CDSomeImplementorsImpl:
CEDAR
PROGRAM
IMPORTS CD, CDBasics, CDProperties, TokenIO
EXPORTS CDSomeImplementors =
BEGIN
SimpleSetOrigin:
PUBLIC
PROC[ob:
CD.Object, new:
CD.Position] =
BEGIN
--we handle the val of the originProperty property as readonly; and may share records
IF ~ob.class.inDirectory THEN ERROR;
CDProperties.PutPropOnObject[ob, originProperty, NEW[CD.Position←new]]
END;
SimpleGetOrigin:
PUBLIC
PROC[ob:
CD.Object]
RETURNS [
CD.Position] =
BEGIN
IF ob.class.inDirectory
THEN
WITH CDProperties.GetPropFromObject[ob, originProperty]
SELECT
FROM
pp: REF CD.Position => RETURN [pp^]
ENDCASE => NULL;
RETURN [ CDBasics.BaseOfRect[CD.InterestRect[ob]] ]
END;
InternalWriteProperty:
PROC [prop:
REF, val:
REF] =
BEGIN
p: REF CD.Position = NARROW[val];
TokenIO.WriteInt[p.x];
TokenIO.WriteInt[p.y];
END;
InternalReadProperty:
PROC [prop:
ATOM]
RETURNS [val:
REF] =
BEGIN
x: INT = TokenIO.ReadInt[];
y: INT = TokenIO.ReadInt[];
val ← NEW[CD.Position ← [x, y]]
END;
originProperty: ATOM = $simpleOrigin;
[] ← CDProperties.RegisterProperty[originProperty];
CDProperties.InstallProcs[prop: originProperty,
new: CDProperties.PropertyProcsRec[
makeCopy: CDProperties.CopyVal, --because we treat the coordinates readonly
internalWrite: InternalWriteProperty,
internalRead: InternalReadProperty,
exclusive: TRUE
]
];
END.