CDConditions.mesa (part of ChipNDale)
Copyright © 1984 by Xerox Corporation. All rights reserved.
by Christian Jacobi, May 4, 1984
last edited by Christian Jacobi, May 10, 1984 11:10:29 am PDT
DIRECTORY
CD USING [Object, Instance, Design, DrawRef],
Rope USING [ROPE];
CDConditions: CEDAR DEFINITIONS =
BEGIN
--vanilla stuff for designers and implementors of ConditionProc's
ConditionProc: TYPE = PROC [me: CD.Instance, environment: CD.DrawRef] RETURNS [drawMe: BOOLTRUE];
-- condition procedures better have no arbitrary side effects; they are evaluated
-- in unspecified order, or sometimes not at all.
-- me.ob.specificRef is defined and of type CondPtr.
--ChipNDale internal and client stuff
IsCondition: PROC [ob: CD.Object] RETURNS [BOOL] = INLINE {
RETURN [ISTYPE[ob.specificRef, CondPtr]]
};
CondPtr: TYPE = REF CondRec;
CondRec: TYPE = RECORD [
inst: CD.Instance,
condition: ConditionProc←NIL,
data: REFNIL,
cache: REFNIL, -- speed up for condition's internal usage;
--may be modified at runtime as controlled side effect
fileName: Rope.ROPENIL,
procName: Rope.ROPENIL, -- actually moduleName.procName
myData: PRIVATE REF←NIL
];
CreateCondition: PROC [design: CD.Design, ob: CD.Object, condition: ConditionProc←NIL, data: REFNIL] RETURNS [CD.Object];
--there are restrictions on the type of data; (because of IO!)
ChangeCondition: PROC [design: CD.Design, ob: CD.Object, fileName, procName: Rope.ROPENIL, data: REFNIL, condition: ConditionProc←NIL] RETURNS [done: BOOL];
--ob must already be a conditional object.
--if condition is nil, tries to evaluate fileName, procName.
--procName can be prefixed by a modulename.
--redraws the complete design.
--there are restrictions on the type of data.
--done means condition evaluated according parameters.
--the fileName and procName fields are set independently of the "done" return.
UpdateConditions: PROC [design: CD.Design, doAll: BOOLTRUE] RETURNS [done: BOOL];
--checks if any conditions have been recompiled and reloads them
--doAll TRUE: checks all, including already loded conditions
--doAll FALSE: checks the conditions which are not already loded
END.