<> <> <> <> DIRECTORY CD, CDDirectory, Rope; CDExtras: CEDAR DEFINITIONS = BEGIN CreateDummyObject: PROC[design: CD.Design] RETURNS [CD.ObPtr]; <<--create a dummy cell object which contains the whole design.>> <<--On future changes of the design, the dummy object may or may not>> <<--get obsolete.>> <<--the cell object is NOT put into any cell library>> EnumerateChildrenObjects: PROC [me: CD.ObPtr, p: CDDirectory.EnumerateObjectsProc, x: REF]; <<--enumerate me and its children objects>> EnumerateDesignObjects: PROC [design: CD.Design, p: CDDirectory.EnumerateObjectsProc, x: REF]; BoundingBox: PROC [design: CD.Design] RETURNS [CD.DesignRect]; PushedCellName: PROC [design: CD.Design] RETURNS [Rope.ROPE]; RemoveProperties: PROC [design: CD.Design, key: REF]; <<--tries to remove the propertiy "key" from all objects of "design";>> <<--may be delayed or incomplete>> <<--(only from objects, not applications...)>> ToLambda: PROC [n: CD.Number] RETURNS [Rope.ROPE]; PopToTopLevel: PROC [design: CD.Design]; <<--if "design" is pushed in, it will be popped out, either by flushing, >> <<--replacing cells or creating new cells>> Cellize: PROC [design: CD.Design, name: Rope.ROPE_NIL] RETURNS [cell: CD.ObPtr_NIL, pos: CD.DesignPosition]; <<--makes a single "cell" of of the "design", removes all applications; >> <<--pos: if "cell" is included at position "pos" in an empty design we would get "design" again>> <<--if "design" is pushed in, it will be popped out, either by flushing, >> <<--replacing cells or creating new cells>> MergeIn: PROC [design: CD.Design, from: CD.Design, name: Rope.ROPE_NIL, fullDirectory: BOOL_TRUE] RETURNS [ob: CD.ObPtr, pos: CD.DesignPosition]; <<--"from" is transfered to an object, and is included (transitive) to "design"'s directory>> <<--"from" then may be resetted (preserving the rule: any object is in at most one directory)>> <<--the caller is assumed to have the locks of both designs>> <<--if "from" is pushed in, it's merged copy will be popped out, either by flushing, >> <<--replacing or creating new cells>> <<--"name" replaces "from"'s design name for the new created object, but it is a hint only>> <<--"pos": if "ob" is included at position "pos" in an empty design we would get "from" again>> <<--"fullDirectory": whether all objects of "from"'s directory are merged to design,>> <<--or only those used by "from"'s top level>> <<--the "from"'s object's may change name to avoid conflicts with "design"'s directory>> <<--ob gets nil if "from" is empty>> <<--technologies must be compatible>> <<>> MergeInObjects: PROC [design: CD.Design, from: CD.Design, objects: LIST OF CD.ObPtr]; <<--"objects" which are in "from"'s directory are transferrerd (transitive) to "design"'s directory>> <<--"from" then may be resetted (preserving the rule: any object is in at most one directory)>> <<--the caller is assumed to have the locks of both designs>> <<--the object's may change name to avoid conflicts with "design"'s directory>> <<--technologies must be compatible>> <<>> END. <> <> <> <> <> <>