<> <> <> DIRECTORY CD USING [ObPtr, ApplicationPtr, Design, DrawRef], Rope USING [ROPE]; CDConditions: CEDAR DEFINITIONS = BEGIN <<--vanilla stuff for designers and implementors of ConditionProc's>> ConditionProc: TYPE = PROC [me: CD.ApplicationPtr, environment: CD.DrawRef] RETURNS [drawMe: BOOL_TRUE]; <<-- 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.>> GetProp: PROC [environment: CD.DrawRef, prop: REF, skipInnerMost: NAT_0] RETURNS [REF]; GetIntProp: PROC[environment: CD.DrawRef, prop: REF, skipInnerMost: NAT_0, ifNotFound: INT_0] RETURNS [INT]; Index: PROC[environment: CD.DrawRef, skipInnerMost: NAT_0, ifNotFound: INT_0] RETURNS [INT]; <<>> <<--chipndale internal and client stuff>> CondPtr: TYPE = REF CondRec; CondRec: TYPE = RECORD [ app: CD.ApplicationPtr, condition: ConditionProc_NIL, data: REF_NIL, cache: REF_NIL, -- speed up for condition's internal usage; --may be modified at runtime as controlled side effect fileName: Rope.ROPE_NIL, procName: Rope.ROPE_NIL, -- actually moduleName.procName myData: PRIVATE REF_NIL ]; CreateCondition: PROC [design: CD.Design, ob: CD.ObPtr, condition: ConditionProc_NIL, data: REF_NIL] RETURNS [CD.ObPtr]; <<--there are restrictions on the type of data; (because of IO!)>> <<>> ChangeCondition: PROC [design: CD.Design, ob: CD.ObPtr, fileName, procName: Rope.ROPE_NIL, data: REF_NIL, 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: BOOL_TRUE] 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.