<> <> <> <> DIRECTORY CD; CDCallSpecific: CEDAR DEFINITIONS = BEGIN CallProc: TYPE = PROC [design: CD.Design, aptr: CD.ApplicationPtr, x: REF] RETURNS [done: BOOL_TRUE, removeMe: BOOL_FALSE, include: CD.ApplicationList_NIL, repaintMe: BOOL_FALSE, repaintInclude: BOOL_FALSE]; <<--x: passed through>> <<--done: if not done, this call will not be counted >> <<--removeMe: aptr is removed from the design>> <<--include: this list is included into the design>> CallForThis: PROC [design: CD.Design, aptr: CD.ApplicationPtr, objectSpecific: REF_NIL, whatElse: CallProc_NIL, x: REF_NIL] RETURNS [NAT]; <<--aptr MUST be part of design>> CallForAll: PROC [design: CD.Design, objectSpecific: REF_NIL, whatElse: CallProc_NIL, x: REF_NIL] RETURNS [NAT]; CallForSelected: PROC [design: CD.Design, objectSpecific: REF_NIL, whatElse: CallProc_NIL, x: REF_NIL] RETURNS [NAT]; CallForOneSelected: PROC [design: CD.Design, objectSpecific: REF_NIL, whatElse: CallProc_NIL, x: REF_NIL] RETURNS [NAT]; CallIfOneSelected: PROC [design: CD.Design, objectSpecific: REF_NIL, whatElse: CallProc_NIL, x: REF_NIL] RETURNS [NAT]; CallForPointed: PROC [design: CD.Design, point: CD.DesignPosition, objectSpecific: REF_NIL, whatElse: CallProc_NIL, x: REF_NIL] RETURNS [NAT]; <<--the Call.. procedures loop over all applications of the most pushed in cell, or what >> <<--ever their name suggests and:>> <<--first check if the object has a objectSpecific furtherProc and calls it,>> <<--if there is no objectSpecific furtherProc, or it returns NOT done, it calls whatElse.>> <<--objectSpecific=NIL means no search>> <<--whatElse=NIL means nothing else to call.>> <<--using removeMe is a slow method for deleting>> <<--usually setting removeMe demands setting repaintMe to remove it from screen>> Register: PROC [key: REF, objectType: REF CD.ObjectProcs, proc: CallProc]; <<--registers proc to be called for an objectType, if key=objectSpecific>> <<--key must have been registered with CDObjectProcs.RegisterFurther>> <<--[internally uses CDObjectProcs.StoreFurther; this procedure is for conveniance only] >> END.