(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP") (FILECREATED " 5-Aug-88 17:07:44" {QV}<NOTECARDS>1.3LNEXT>PMIPATCH102.;2 4235 changes to%: (VARS PMIPATCH102COMS) (FNS RECURSIVE.COLLECTDESCENDENTS COLLECTDESCENDENTS NC.MakeBrowserCard) previous date%: " 5-Aug-88 13:36:56" {QV}<NOTECARDS>1.3LNEXT>PMIPATCH102.;1) (* " Copyright (c) 1988 by Xerox Corporation. All rights reserved. ") (PRETTYCOMPRINT PMIPATCH102COMS) (RPAQQ PMIPATCH102COMS ( (* ;;; "New file") (DECLARE%: DONTCOPY (PROPS (PMIPATCH102 MAKEFILE-ENVIRONMENT) (PMIPATCH102 FILETYPE))) [DECLARE%: FIRST (P (NC.LoadFileFromDirectories 'GRAPHERPATCH] (* ;; "pmi 8/5/88: Fixes bug in PMIPATCH099. ") (* ;; "Changed in GRAPHERPATCH") (FNS RECURSIVE.COLLECTDESCENDENTS COLLECTDESCENDENTS))) (* ;;; "New file") (DECLARE%: DONTCOPY (PUTPROPS PMIPATCH102 MAKEFILE-ENVIRONMENT (:PACKAGE "INTERLISP" :READTABLE "INTERLISP")) (PUTPROPS PMIPATCH102 FILETYPE :BCOMPL) ) (DECLARE%: FIRST (NC.LoadFileFromDirectories 'GRAPHERPATCH) ) (* ;; "pmi 8/5/88: Fixes bug in PMIPATCH099. ") (* ;; "Changed in GRAPHERPATCH") (DEFINEQ (RECURSIVE.COLLECTDESCENDENTS [LAMBDA (Node Graph) (* ; "Edited 5-Aug-88 16:06 by pmi") (* ;; "Collect all descendents of Node in Graph.") (* ;; "pmi 8/2/88: Changed to break infinite recursion on circular graphs. Now marks nodes as visited.") (* ;; "pmi 8/5/88: FIxes bug introduced by previous fix.") (LET (NodeId) (* ;; "Node's NODEID may be a list if it is a virtual node. ") (if (LISTP (SETQ NodeId (fetch (GRAPHNODE NODEID) of Node))) then (SETQ NodeId (CAR NodeId))) (NC.GraphNodeIDPutProp NodeId 'Visited T) (for ChildNode in (COLLECT.CHILD.NODES Node Graph) bind ChildNodeID when [PROGN (SETQ ChildNodeID (fetch (GRAPHNODE NODEID) of ChildNode)) (* ;; "This node has not been visited, and it is not a virtual node.") (NOT (NC.GraphNodeIDGetProp (if (LISTP ChildNodeID) then (CAR ChildNodeID) else ChildNodeID) 'Visited] join (CONS ChildNode (RECURSIVE.COLLECTDESCENDENTS ChildNode Graph]) (COLLECTDESCENDENTS [LAMBDA (Node Graph) (* ; "Edited 5-Aug-88 15:40 by pmi") (* ;; "pmi 8/3/88: Created to wrap RESETLST around call to RECURSIVE.COLLECTDESCENDENTS. Prevents infinite looping on circular graph structures by marking where we have been.") (* ;; "Clean up the Visited markers placed on the nodes traversed.") (* ;; "pmi 8/5/88: Now also cleans up Visited marker on Node.") (LET (NodeID Descendents) (RESETLST [RESETSAVE NIL '(PROGN (for VisitedNode in (CONS Node Descendents) bind VisitedNodeID do (NC.GraphNodeIDPutProp (if (LISTP (SETQ VisitedNodeID (fetch (GRAPHNODE NODEID) of VisitedNode))) then (CAR VisitedNodeID) else VisitedNodeID) 'Visited NIL] (SETQ Descendents (RECURSIVE.COLLECTDESCENDENTS Node Graph]) ) (PUTPROPS PMIPATCH102 COPYRIGHT ("Xerox Corporation" 1988)) (DECLARE%: DONTCOPY (FILEMAP (NIL (1395 4152 (RECURSIVE.COLLECTDESCENDENTS 1405 . 2846) (COLLECTDESCENDENTS 2848 . 4150))) )) STOP