(FILECREATED " 2-Nov-86 01:12:54" {QV}<NOTECARDS>1.3K>NEXT>RHTPATCH133.;2 58227 changes to: (FNS NC.UpdateBrowserCard NC.RelayoutBrowserCard NC.ConnectNodesInBrowser NC.UnconnectNodesInBrowser NC.ExpandBrowserNode NC.ChangeBrowserSpecs NC.MakeBrowserOverviewWin NC.AskBrowserOverviewSpecs NC.RelayoutGraphCard NC.RecomputeLinkIndex NC.ChangeLinkIndexSpecs) (VARS RHTPATCH133COMS) previous date: " 2-Nov-86 01:06:53" {QV}<NOTECARDS>1.3K>NEXT>RHTPATCH133.;1) (* Copyright (c) 1986 by Xerox Corporation. All rights reserved.) (PRETTYCOMPRINT RHTPATCH133COMS) (RPAQQ RHTPATCH133COMS ((* * Fix to bug #256: wrap browser operations with NC.ProtectedCardOperation so can't close card while they're going on.) (* * Changes to NCBROWSERCARD) (FNS NC.UpdateBrowserCard NC.RelayoutBrowserCard NC.ConnectNodesInBrowser NC.UnconnectNodesInBrowser NC.ExpandBrowserNode NC.ChangeBrowserSpecs NC.MakeBrowserOverviewWin NC.AskBrowserOverviewSpecs) (* * Change to NCCARDS) (FNS NC.QuitCard) (* * Change to NCGRAPHCARD) (FNS NC.AddLinkToGraphCard NC.RelayoutGraphCard) (* * Change to NCLINKINDEXCARD) (FNS NC.RecomputeLinkIndex NC.ChangeLinkIndexSpecs))) (* * Fix to bug #256: wrap browser operations with NC.ProtectedCardOperation so can't close card while they're going on.) (* * Changes to NCBROWSERCARD) (DEFINEQ (NC.UpdateBrowserCard (LAMBDA (Window DontCheckOpInProgressFlg) (* rht: " 2-Nov-86 01:10") (* * rht 10/14/84: Added call to DETACHALLWINDOWS to close any existing links legend window and prompt window. Also added call to NC.MakeLinksLegend to make a new attached legend menu.) (* * rht 1/15/85: Put hooks for AddNode, AddLink, etc. so editing graph edits underlying structure.) (* * rht 2/14/85: Added ability to respecify roots and link labels before recomputing graph.) (* * rht 3/8/85: Modified to use new browser props stored on card's proplist as of release 1.2.) (* * rht 3/17/85: Now takes OnlyLayoutFlg argument. If set, then don't recompute lattice or ask about root nodes.) (* * rht 11/17/85: updated to handle new card and notefile objects.) (* * kirk 23Jan86 Changed to use NC.AskYesOrNo) (* * rht 2/7/86: Now gets and sets browser format, etc. via fetch/set fns.) (* * rht 3/7/86: Now only closes the Links legend menu attached window.) (* * rht 6/10/86: Moved code to delete links legend menu and code to make new browser hash array to after questioning user about respecifying roots.) (* * rht 11/1/86: Added NC.ProtectedCardOperation wrapper and check for ops in progress.) (LET ((Card (NC.CoerceToCard Window)) OperationInProgress) (* * if in the middle of some other operation, get out of here.) (if (AND (NULL DontCheckOpInProgressFlg) (SETQ OperationInProgress (NC.OperationInProgress Card))) then (NC.PrintOperationInProgressMsg Window (QUOTE Recompute% Browser% Card) OperationInProgress) NIL else (NC.ProtectedCardOperation Card Recompute% Browser% Card (PROG (LinkLabels RootCards RootNodes Lattice LinkIcon Graph GraphNodes NodeLabel BrowserSpecs BrowserFormat DropVirtualNodesFlg Depth SpecialBrowserSpecs OldLabelNodes OldRootCards) (SETQ RootCards (NC.FetchBrowserRoots Card)) (SETQ LinkLabels (NC.FetchBrowserLinkLabels Card)) (SETQ BrowserFormat (OR (NC.FetchBrowserFormat Card) (QUOTE (LATTICE)))) (* If user wants *GRAPH* format, i.e. virtual nodes eliminated, then set the flag) (if (FMEMB NC.*Graph*BrowserFormat BrowserFormat) then (SETQ DropVirtualNodesFlg T)) (SETQ Depth (OR (NC.FetchBrowserDepth Card) 999999)) (SETQ SpecialBrowserSpecs (OR (NC.FetchSpecialBrowserSpecs Card) (create SPECIALBROWSERSPECS))) (SETQ GraphNodes (fetch (GRAPH GRAPHNODES) of (SETQ Graph (WINDOWPROP Window (QUOTE GRAPH))))) (* Get new roots.) (if (OR (NULL RootCards) (NC.AskYesOrNo "Want to respecify roots? " "--" "No" T Window T NIL)) then (NC.BrowserFlipRoots Window Card GraphNodes (SETQ OldRootCards RootCards)) (SETQ RootCards (NC.SelectNoteCards NIL NIL NC.SelectingBrowserSourceMenu Window NIL (CONCAT "Please select the Cards and/or Boxes the browser should start from." (CHARACTER 13) "(Current roots are highlighted.)") T)) (NC.BrowserFlipRoots Window Card GraphNodes OldRootCards) (COND ((EQ RootCards (QUOTE CANCELLED)) (RETURN)))) (* Get rid of the links legend menu attached window.) (for Win in (ATTACHEDWINDOWS Window) when (WINDOWPROP Win (QUOTE LINKSLEGENDWINP)) do (DETACHWINDOW Win) (CLOSEW Win)) (* Smash the current hash array, putting a fresh one in its place.) (NC.GetBrowserHashArray Card) (NC.PrintMsg Window T (CHARACTER 13) "Computing browser graph. Please wait. ...") (* Compute lattice breadth-first from the roots.) (SETQ Lattice (NC.GrowLinkLattice RootCards NIL LinkLabels Card Depth) ) (SETQ RootNodes (for RootCard in RootCards collect ( NC.GetBrowserNodeID Card RootCard))) (NC.SetPropListDirtyFlg Card T) (* Remove all links that are in the old browser graph but not in the new one) (for Node in GraphNodes bind NodeID Link eachtime (BLOCK) (SETQ NodeID (fetch (GRAPHNODE NODEID) of Node)) unless (FASSOC (OR (CAR NodeID) NodeID) Lattice) do (if (NC.LinkIconImageObjP (SETQ LinkIcon (fetch (GRAPHNODE NODELABEL) of Node))) then (NC.DeleteLink (NC.FetchLinkFromLinkIcon LinkIcon) T T) else (* Collect the label nodes from the old browser.) (SETQ OldLabelNodes (CONS Node OldLabelNodes)))) (* Create Links for all nodes in the new browser graph but not in the old one.) (for Node in Lattice bind NodeID OldNode eachtime (BLOCK) do (SETQ NodeID (fetch (GRAPHNODE NODEID) of Node)) (COND ((SETQ OldNode (FASSOC NodeID GraphNodes)) (replace (GRAPHNODE NODELABEL) of Node with (fetch (GRAPHNODE NODELABEL) of OldNode))) (T (replace (GRAPHNODE NODELABEL) of Node with (NC.MakeLinkIcon (NC.MakeLink Window NC.BrowserContentsLinkLabel (fetch (GRAPHNODE NODELABEL) of Node) Card))))) (* Untouch each graph node so that next Recompute will put fresh values on proplist.) (NC.GraphNodeIDRemProp NodeID (QUOTE TouchedFlg)) (NC.GraphNodeIDRemProp NodeID (QUOTE VisitedFlg))) (* Throw in the label nodes from the old browser.) (SETQ Lattice (NCONC Lattice OldLabelNodes)) (* For each old label node, take away nonexistent fromnodes and save the label nodes that no longer have any from nodes.) (for OldLabelNode in OldLabelNodes eachtime (BLOCK) do (replace (GRAPHNODE FROMNODES) of OldLabelNode with (for FromNodeID in (fetch (GRAPHNODE FROMNODES) of OldLabelNode) bind FromNode eachtime (BLOCK) when (SETQ FromNode (FASSOC FromNodeID Lattice) ) collect (* If the From node isn't a label node, then add to its Tonode list.) (if (NC.LinkIconImageObjP (fetch (GRAPHNODE NODELABEL) of FromNode)) then (replace (GRAPHNODE TONODES) of FromNode with (CONS (fetch (GRAPHNODE NODEID) of OldLabelNode) (fetch (GRAPHNODE TONODES) of FromNode)))) FromNodeID)) (* For the old label node's ToNodes, just need to remove any for ToNodes that no longer exist.) (replace (GRAPHNODE TONODES) of OldLabelNode with (for ToNodeID in (fetch (GRAPHNODE TONODES) of OldLabelNode) bind ToNode eachtime (BLOCK) when (SETQ ToNode (FASSOC ToNodeID Lattice)) collect (* If the To node isn't a label node, then add to its FromNode list.) (if (NC.LinkIconImageObjP (fetch (GRAPHNODE NODELABEL) of ToNode)) then (replace (GRAPHNODE FROMNODES) of ToNode with (CONS (fetch (GRAPHNODE NODEID) of OldLabelNode) (fetch (GRAPHNODE FROMNODES) of ToNode)))) ToNodeID))) (* Layout graph, including as roots any non-virtual nodes with no from nodes to avoid disconnected graphs.) (SETQ Graph (if (AND Lattice RootNodes) then (LAYOUTGRAPH Lattice (for Node in Lattice bind NodeID eachtime (BLOCK) (SETQ NodeID (OR (NC.CoerceToGraphNodeID Node) (fetch (GRAPHNODE NODEID) of Node))) when (OR (FMEMB NodeID RootNodes) (NULL (fetch (GRAPHNODE FROMNODES) of Node))) collect NodeID) (SUBST (QUOTE LATTICE) NC.*Graph*BrowserFormat BrowserFormat) (fetch (SPECIALBROWSERSPECS Font) of SpecialBrowserSpecs) (fetch (SPECIALBROWSERSPECS MotherD) of SpecialBrowserSpecs) (fetch (SPECIALBROWSERSPECS PersonalD) of SpecialBrowserSpecs) (fetch (SPECIALBROWSERSPECS FamilyD) of SpecialBrowserSpecs)) else (create GRAPH))) (* Build links legend and fix up TONODES in the graph.) (NC.SetBrowserLinksLegend Card (NC.MakeLinksLegend Graph Window DropVirtualNodesFlg)) (NC.SetBrowserRoots Card RootCards) (NC.SetBrowserDepth Card Depth) (WINDOWPROP Window (QUOTE GRAPH) Graph) (NC.RelayoutBrowserCard Window T))))))) (NC.RelayoutBrowserCard (LAMBDA (Window DontCheckOpInProgressFlg) (* rht: " 2-Nov-86 01:10") (* * Called from the middle button of a browser or structeditbrowser card. This lays out and displays the browser, but does not recompute the nodes.) (* * rht 11/17/85: updated to handle new notefile and card objects.) (* * rht 2/7/86: Now gets browser format, etc. via fetch/set fns.) (* * rht 2/28/86: Added WINDOWPROP for SCROLLFN and RESHAPEFN.) (* * rht 5/8/86: Added calls to rig title bar properly.) (* * fgh 6/30/86 Added NC.GRAPHERCOPYBUTTONEVENTFN to SHOWGRAPH call) (* * rht 11/1/86: Added NC.ProtectedCardOperation wrapper and check for ops in progress.) (LET ((Card (NC.CoerceToCard Window)) OperationInProgress) (* * if in the middle of some other operation, get out of here.) (if (AND (NULL DontCheckOpInProgressFlg) (SETQ OperationInProgress (NC.OperationInProgress Card))) then (NC.PrintOperationInProgressMsg Window (QUOTE Relayout% Browser% Card) OperationInProgress) NIL else (NC.ProtectedCardOperation Card Relayout% Browser% Card (PROG (RootCards RootNodeIDs OldToNodePairs Graph GraphNodes BrowserFormat DropVirtualNodesFlg SpecialBrowserSpecs) (NC.PrintMsg Window T "Laying out graph ...") (SETQ RootCards (NC.FetchBrowserRoots Card)) (SETQ BrowserFormat (OR (NC.FetchBrowserFormat Card) (QUOTE (LATTICE)))) (* If user wants *GRAPH* format, i.e. virtual nodes eliminated, then set the flag) (if (FMEMB NC.*Graph*BrowserFormat BrowserFormat) then (SETQ DropVirtualNodesFlg T)) (SETQ SpecialBrowserSpecs (OR (CAR (NC.FetchSpecialBrowserSpecs Card)) (create SPECIALBROWSERSPECS))) (SETQ GraphNodes (fetch (GRAPH GRAPHNODES) of (SETQ Graph (WINDOWPROP Window (QUOTE GRAPH))))) (* Create hash array if haven't already.) (NC.GetBrowserHashArray Card Graph) (* check graph node size against image box size.) (NC.GraphLinkIconUpdateCheck Card Window Graph NIL) (* Save the TONODES values of the nodes so can replace later after LAYOUTGRAPH call. At the same time, throw away all the link params info in TONODES field.) (SETQ OldToNodePairs (for Node in GraphNodes bind ToNodes eachtime (BLOCK) collect (PROG1 (CONS (fetch (GRAPHNODE NODEID) of Node) (APPEND (SETQ ToNodes (fetch (GRAPHNODE TONODES) of Node)))) (replace (GRAPHNODE TONODES) of Node with (for ToNode in ToNodes collect (if (EQ (CAR ToNode) LINKPARAMS) then (CADR ToNode) else ToNode)))))) (SETQ RootNodeIDs (for RootCard in RootCards collect (NC.GetBrowserNodeID Card RootCard))) (NC.SetPropListDirtyFlg Card T) (* Layout graph, including as roots any non-virtual nodes with no from nodes to avoid disconnected graphs.) (SETQ Graph (if GraphNodes then (LAYOUTGRAPH GraphNodes (for Node in GraphNodes bind NodeID eachtime (BLOCK) (SETQ NodeID (fetch (GRAPHNODE NODEID) of Node)) when (OR (AND (NULL (fetch (GRAPHNODE FROMNODES) of Node)) (NOT (LISTP NodeID))) (FMEMB NodeID RootNodeIDs)) collect NodeID) (SUBST (QUOTE LATTICE) NC.*Graph*BrowserFormat BrowserFormat) (fetch (SPECIALBROWSERSPECS Font) of SpecialBrowserSpecs) (fetch (SPECIALBROWSERSPECS MotherD) of SpecialBrowserSpecs) (fetch (SPECIALBROWSERSPECS PersonalD) of SpecialBrowserSpecs) (fetch (SPECIALBROWSERSPECS FamilyD) of SpecialBrowserSpecs)) else (create GRAPH))) (* Replace the TONODES fields of the Graph nodes by their pre-LAYOUTGRAPH values. Also throw away any nodes that didn't appear in the old graph.) (if Graph then (replace (GRAPH GRAPHNODES) of Graph with (for Node in (fetch (GRAPH GRAPHNODES) of Graph) bind AssocPair eachtime (BLOCK) when (SETQ AssocPair (FASSOC (fetch (GRAPHNODE NODEID) of Node) OldToNodePairs)) collect (replace (GRAPHNODE TONODES) of Node with (CDR AssocPair)) (if DropVirtualNodesFlg then (replace (GRAPHNODE NODEBORDER) of Node with NIL)) (* Throw away LINKPARAMS junk from the FromNodes that LAYOUTGRAPH stuck in.) (replace (GRAPHNODE FROMNODES) of Node with (for FromNode in (fetch (GRAPHNODE FROMNODES) of Node) eachtime (BLOCK) collect (if (EQ (CAR FromNode) LINKPARAMS) then (CADR FromNode) else FromNode))) Node))) (SHOWGRAPH Graph Window (FUNCTION NC.GraphCardLeftButtonFn) (FUNCTION NC.GraphCardMiddleButtonFn) NIL T (FUNCTION NC.GRAPHERCOPYBUTTONEVENTFN)) (* * Have to reset windowprops since SHOWGRAPH messes with them.) (* Disable the old-style right button grapher editor menu.) (WINDOWPROP Window (QUOTE RIGHTBUTTONFN) (FUNCTION NC.BrowserRightButtonFn)) (WINDOWADDPROP Window (QUOTE REPAINTFN) (FUNCTION NC.BrowserRepaintFn) T) (WINDOWPROP Window (QUOTE SCROLLFN) (FUNCTION NC.BrowserScrollFn)) (WINDOWPROP Window (QUOTE RESHAPEFN) (FUNCTION NC.BrowserReshapeFn)) (NC.SetSubstance Card (WINDOWPROP Window (QUOTE GRAPH))) (NC.MarkCardDirty Card) (NC.InstallTitleBarButtonEventFn Window (FUNCTION NC.GraphTitleBarButtonEventFn)) (NC.ClearMsg Window T))))))) (NC.ConnectNodesInBrowser (LAMBDA (Window DontCheckOpInProgressFlg) (* rht: " 2-Nov-86 01:11") (* * Draw any links, from the current link set, between any pairs of nodes currently being shown in the browser.) (* * rht 2/7/86: Now gets and sets browser format, etc. via fetch/set fns. Also fixed one last old call to GETPROPLIST on a NodeID.) (* * rht 3/2/86: Added WINDOWPROP for SCROLLFN and RESHAPEFN.) (* * fgh 5/21/86 Updated reinstallation of title bar menus after SHOWGRAPH to use new title bar menu mechanism.) (* * rht 6/10/86: Now calls NC.ShowBrowserGraph.) (* * rht 11/1/86: Added NC.ProtectedCardOperation wrapper and check for ops in progress.) (LET ((Card (NC.CoerceToCard Window)) OperationInProgress) (* * if in the middle of some other operation, get out of here.) (if (AND (NULL DontCheckOpInProgressFlg) (SETQ OperationInProgress (NC.OperationInProgress Card))) then (NC.PrintOperationInProgressMsg Window (QUOTE Reconnect% Browser% Card) OperationInProgress) NIL else (NC.ProtectedCardOperation Card Reconnect% Browser% Card (PROG (LinkLabels Graph GraphNodes BrowserFormat DropVirtualNodesFlg NodeIDs) (SETQ LinkLabels (NC.FetchBrowserLinkLabels Card)) (SETQ BrowserFormat (NC.FetchBrowserFormat Card)) (* If user wants *GRAPH* format, i.e. virtual nodes eliminated, then set the flag) (if (FMEMB NC.*Graph*BrowserFormat BrowserFormat) then (SETQ DropVirtualNodesFlg T)) (SETQ GraphNodes (fetch (GRAPH GRAPHNODES) of (SETQ Graph (WINDOWPROP Window (QUOTE GRAPH))))) (* Create hash array if haven't already.) (NC.GetBrowserHashArray Card Graph) (* check graph node size against image box size.) (NC.GraphLinkIconUpdateCheck Card Window Graph NIL) (* These are the workhorse loops that rebuild the TONODES of each nonvirtual node.) (* First smash all the nodeID's proplists and accumulate nodeIDs.) (SETQ NodeIDs (for Node in GraphNodes bind NodeID eachtime (BLOCK) when (NC.LinkIconImageObjP (fetch (GRAPHNODE NODELABEL) of Node)) collect (NC.SmashGraphNodeIDProps (SETQ NodeID ( NC.CoerceToGraphNodeID Node))) NodeID)) (* Throw away duplicates obtained from virtual nodes.) (SETQ NodeIDs (INTERSECTION NodeIDs NodeIDs)) (* Next accumulate all linktypes on the from node's proplist using the To node's graphnodeID as prop name. We do the analogous thing for backward links, but notice that we ignore backward linktypes that also appear in the list in their forward version.) (for NodeID in NodeIDs bind RealCard do (for Link in (NC.RetrieveToLinks (SETQ RealCard ( NC.CardFromBrowserNodeID NodeID))) bind DestNodeID eachtime (BLOCK) when (NC.LinkLabelP Link LinkLabels) when (FMEMB (SETQ DestNodeID (NC.GetBrowserNodeID Card (fetch (Link DestinationCard) of Link))) NodeIDs) do (NC.UIDAddProp NodeID DestNodeID (fetch (Link Label) of Link) T)) (for Link in (NC.RetrieveFromLinks RealCard) bind SourceNodeID eachtime (BLOCK) when (AND (NC.ReverseLinkLabelP Link LinkLabels) (NOT (NC.LinkLabelP Link LinkLabels))) when (FMEMB (SETQ SourceNodeID (NC.GetBrowserNodeID Card (fetch (Link SourceCard) of Link))) NodeIDs) do (NC.UIDAddProp SourceNodeID NodeID (fetch (Link Label) of Link) T))) (for Node in GraphNodes bind NodeID OldToNodeIDs eachtime (BLOCK) unless (LISTP (SETQ NodeID (fetch (GRAPHNODE NODEID) of Node))) when (NC.LinkIconImageObjP (fetch (GRAPHNODE NODELABEL) of Node)) do (* Accumulate the old NodeIDs, possibly virtual, from the TONODES list.) (SETQ OldToNodeIDs (for ToNode in (fetch (GRAPHNODE TONODES) of Node) collect (if (EQ (CAR ToNode) LINKPARAMS) then (CADR ToNode) else ToNode))) (* The trick here is to use a virtual node for this ToNode if one was used before, otherwise just the ToNodeID. Also throw in the label nodes that were in the TONODES list before.) (replace (GRAPHNODE TONODES) of Node with (NCONC (for ToNodeID on ( NC.ComputeBrowserSavedLinkingInfoForNode NodeID) by (CDDR ToNodeID) eachtime (BLOCK) collect (OR (for OldToNodeID in OldToNodeIDs thereis (AND (LISTP OldToNodeID) (EQ (CAR ToNodeID) (CAR OldToNodeID)) OldToNodeID)) (CAR ToNodeID))) (for ToNodeID in OldToNodeIDs eachtime (BLOCK) unless (NC.SameCardP Card ( NC.CardFromBrowserNodeID ( NC.CoerceToGraphNodeID ToNodeID))) collect ToNodeID)))) (NC.RebuildFromNodesInGraph GraphNodes) (NC.SetBrowserLinksLegend Card (NC.MakeLinksLegend Graph Window DropVirtualNodesFlg)) (* Display the graph.) (NC.ShowBrowserGraph Graph Window) (NC.SetSubstance Card (WINDOWPROP Window (QUOTE GRAPH))) (NC.MarkCardDirty Card) (NC.ClearMsg Window T))))))) (NC.UnconnectNodesInBrowser (LAMBDA (Window DontCheckOpInProgressFlg) (* rht: " 2-Nov-86 01:11") (* * Remove all the links in the browser.) (* * rht 11/17/85: Now handles new card and notefile objects.) (* * rht 2/7/86: Now gets and sets browser format, etc. via fetch/set fns.) (* * fgh 5/21/86 Updated reinstallation of title bar menus after SHOWGRAPH to use new title bar menu mechanism.) (* * rht 6/10/86: Now calls NC.ShowBrowserGraph.) (* * rht 11/1/86: Added NC.ProtectedCardOperation wrapper and check for ops in progress.) (LET ((Card (NC.CoerceToCard Window)) OperationInProgress) (* * if in the middle of some other operation, get out of here.) (if (AND (NULL DontCheckOpInProgressFlg) (SETQ OperationInProgress (NC.OperationInProgress Card))) then (NC.PrintOperationInProgressMsg Window (QUOTE Unconnect% Browser% Card) OperationInProgress) NIL else (NC.ProtectedCardOperation Card Unconnect% Browser% Card (PROG (Graph GraphNodes BrowserFormat DropVirtualNodesFlg) (SETQ BrowserFormat (NC.FetchBrowserFormat Card)) (* If user wants *GRAPH* format, i.e. virtual nodes eliminated, then set the flag) (if (FMEMB NC.*Graph*BrowserFormat BrowserFormat) then (SETQ DropVirtualNodesFlg T)) (SETQ GraphNodes (fetch (GRAPH GRAPHNODES) of (SETQ Graph (WINDOWPROP Window (QUOTE GRAPH))))) (* smash all the nodeID's proplists and TONODES fields.) (for Node in GraphNodes bind NodeID unless (PROGN (BLOCK) (LISTP (SETQ NodeID (fetch (GRAPHNODE NODEID) of Node)))) do (NC.SmashGraphNodeIDProps NodeID) (replace (GRAPHNODE TONODES) of Node with NIL) (replace (GRAPHNODE FROMNODES) of Node with NIL)) (NC.MakeLinksLegend Graph Window DropVirtualNodesFlg) (* Display the graph.) (NC.ShowBrowserGraph Graph Window) (NC.SetSubstance Card (WINDOWPROP Window (QUOTE GRAPH))) (NC.MarkCardDirty Card) (NC.SetBrowserLinksLegend Card NIL) (NC.ClearMsg Window T))))))) (NC.ExpandBrowserNode (LAMBDA (Window DontCheckOpInProgressFlg) (* rht: " 2-Nov-86 01:11") (* * Ask user to choose a node in the browser and recompute the part of the lattice under that node to the given depth. And relayout the graph. The code is just a modification of the NC.UpdateBrowserCard code.) (* * rht 2/7/86: Now gets and sets browser format, etc. via fetch/set fns.) (* * rht 6/10/86: No longer does relayout after expand. Uses NC.LayoutNewBrowserNodes to compute proper locations of new nodes. Also calls NC.ShowBrowserGraph.) (* * rht 11/1/86: Added NC.ProtectedCardOperation wrapper and check for ops in progress.) (LET ((Card (NC.CoerceToCard Window)) OperationInProgress) (* * if in the middle of some other operation, get out of here.) (if (AND (NULL DontCheckOpInProgressFlg) (SETQ OperationInProgress (NC.OperationInProgress Card))) then (NC.PrintOperationInProgressMsg Window (QUOTE Expand% Node% of% Browser% Card) OperationInProgress) NIL else (NC.ProtectedCardOperation Card Expand% Node% of% Browser% Card (PROG (NodeToExpand LinkLabels RootCards RootNodes Lattice LinkIcon OldToNodePairs Graph GraphNodes NodeLabel OldNode Link BrowserSpecs BrowserFormat DropVirtualNodesFlg Depth SpecialBrowserSpecs SavedLabelNodes NewNodes) (SETQ RootCards (NC.FetchBrowserRoots Card)) (SETQ LinkLabels (NC.FetchBrowserLinkLabels Card)) (SETQ BrowserFormat (NC.FetchBrowserFormat Card)) (* If user wants *GRAPH* format, i.e. virtual nodes eliminated, then set the flag) (if (FMEMB NC.*Graph*BrowserFormat BrowserFormat) then (SETQ DropVirtualNodesFlg T)) (SETQ SpecialBrowserSpecs (OR (NC.FetchSpecialBrowserSpecs Card) (create SPECIALBROWSERSPECS))) (SETQ GraphNodes (fetch (GRAPH GRAPHNODES) of (SETQ Graph (WINDOWPROP Window (QUOTE GRAPH))))) (* If there aren't any nodes in graph, then get out pronto.) (if (NULL GraphNodes) then (NC.PrintMsg Window T "No nodes to expand.") (DISMISS 1000) (NC.ClearMsg Window T) (RETURN NIL)) (* Create hash array if haven't already.) (NC.GetBrowserHashArray Card Graph) (NC.PrintMsg Window T "Pick node to expand." (CHARACTER 13)) (* Note call to the grapher function READ/NODE to select a graph node.) (SETQ NodeToExpand (READ/NODE GraphNodes Window)) (* Can't expand a label node.) (if (NOT (NC.LinkIconImageObjP (fetch (GRAPHNODE NODELABEL) of NodeToExpand))) then (NC.PrintMsg NIL T "Sorry, can't expand a label node.") (FLASHW PROMPTWINDOW) (NC.ClearMsg Window T) (RETURN)) (SETQ Depth (MKATOM (NC.AskUser "Depth to expand (type integer or INF): " "--" 1 T Window NIL NIL T))) (COND ((EQ Depth (QUOTE INF)) (SETQ Depth MAX.FIXP)) ((NOT (AND (FIXP Depth) (GREATERP Depth 0))) (NC.PrintMsg Window T "Depth must be an integer greater than 0 or INF.") (RETURN))) (NC.PrintMsg Window T (CHARACTER 13) "Augmenting browser graph. Please wait. ...") (* Save the nodes pointed to by the chosen node that are label nodes. GrowLinkLattice will trash those, so we restore afterwards.) (SETQ SavedLabelNodes (for ToNode in (fetch (GRAPHNODE TONODES) of NodeToExpand) eachtime (BLOCK) when (AND (NOT (EQ (CAR ToNode) LINKPARAMS)) (NOT (NC.LinkIconImageObjP ToNode))) collect ToNode)) (* Increase link lattice from chosen node to given depth.) (SETQ Lattice (NC.GrowLinkLattice (LIST (NC.CardFromBrowserNodeID (fetch (GRAPHNODE NODEID) of NodeToExpand))) (APPEND GraphNodes) LinkLabels Card Depth)) (AND SavedLabelNodes (replace (GRAPHNODE TONODES) of NodeToExpand with (APPEND SavedLabelNodes (fetch (GRAPHNODE TONODES) of NodeToExpand)))) (SETQ RootNodes (for RootCard in RootCards collect ( NC.GetBrowserNodeID Card RootCard))) (NC.SetPropListDirtyFlg Card T) (* Create Links for all nodes in the new browser graph but not in the old one.) (for Node in Lattice bind NodeID do (COND ((SETQ OldNode (FASSOC (SETQ NodeID (OR (NC.CoerceToGraphNodeID Node) (fetch (GRAPHNODE NODEID) of Node))) GraphNodes)) (replace (GRAPHNODE NODELABEL) of Node with (fetch (GRAPHNODE NODELABEL) of OldNode))) (T (replace (GRAPHNODE NODELABEL) of Node with (NC.MakeLinkIcon (NC.MakeLink Window NC.BrowserContentsLinkLabel (fetch (GRAPHNODE NODELABEL) of Node) Card))) (* Make a list of all new nodes.) (push NewNodes Node))) (* Throw away virtual node info.) (AND NodeID (replace (GRAPHNODE NODEID) of Node with NodeID)) (* Untouch each graph node so that next Recompute will put fresh values on proplist.) (NC.GraphNodeIDRemProp NodeID (QUOTE TouchedFlg)) (NC.GraphNodeIDRemProp NodeID (QUOTE VisitedFlg)) (* Smash all the unnecessary junk off existing nodes, letting LAYOUTGRAPH and NC.MakeLinksLegend recompute.) (replace (GRAPHNODE TONODES) of Node with (for ToNode in (fetch (GRAPHNODE TONODES) of Node) bind ToNodeID eachtime (BLOCK) collect (if (SETQ ToNodeID ( NC.CoerceToGraphNodeID ToNode)) then (* Throw away link parameterlist info.) (* Throw away link dashing info.) (NC.GraphNodeIDPutProp NodeID ToNodeID (for LabelPair in (NC.GraphNodeIDGetProp NodeID ToNodeID) collect (OR (CAR LabelPair) LabelPair))) (NC.GraphNodeIDPutProp ToNodeID NodeID (for LabelPair in (NC.GraphNodeIDGetProp ToNodeID NodeID) collect (OR (CAR LabelPair) LabelPair))) ToNodeID else ToNode)))) (* LAYOUTGRAPH doesn't like duplicate nodes. These get created when virtual nodes are turned into regular nodes.) (SETQ Lattice (NC.RemoveDuplicateNodesFromGraph Lattice)) (NC.RebuildFromNodesInGraph Lattice) (AND NewNodes (NC.LayoutNewBrowserNodes NodeToExpand NewNodes BrowserFormat SpecialBrowserSpecs)) (replace (GRAPH GRAPHNODES) of Graph with Lattice) (* Build links legend and fix up TONODES in the graph.) (NC.SetBrowserLinksLegend Card (NC.MakeLinksLegend Graph Window DropVirtualNodesFlg)) (WINDOWPROP Window (QUOTE GRAPH) Graph) (* Display the graph.) (NC.ShowBrowserGraph Graph Window) (NC.SetSubstance Card Graph) (NC.MarkCardDirty Card) (NC.ClearMsg Window T))))))) (NC.ChangeBrowserSpecs (LAMBDA (Window DontCheckOpInProgressFlg) (* rht: " 2-Nov-86 01:11") (* * Change the values of the various browser specs including link types, browser format, search depth, etc.) (* * rht 11/17/85: Updated for new card and notefile objects.) (* * rht 2/7/86: Now sets and gets browser link labels, etc. via fetch/set fns.) (* * rht 11/1/86: Added NC.ProtectedCardOperation wrapper and check for ops in progress.) (LET ((Card (NC.CoerceToCard Window)) OperationInProgress) (* * if in the middle of some other operation, get out of here.) (if (AND (NULL DontCheckOpInProgressFlg) (SETQ OperationInProgress (NC.OperationInProgress Card))) then (NC.PrintOperationInProgressMsg Window (QUOTE Browser% Specs) OperationInProgress) NIL else (NC.ProtectedCardOperation Card Browser% Specs (PROG (LinkLabels RootNodes BrowserSpecs BrowserFormat Depth) (SETQ LinkLabels (NC.FetchBrowserLinkLabels Card)) (SETQ BrowserFormat (NC.FetchBrowserFormat Card)) (SETQ Depth (NC.FetchBrowserDepth Card)) (SETQ BrowserSpecs (NC.AskBrowserSpecs Window Card LinkLabels Depth BrowserFormat)) (SETQ LinkLabels (CAR BrowserSpecs)) (SETQ Depth (CADR BrowserSpecs)) (SETQ BrowserFormat (CADDR BrowserSpecs)) (NC.SetPropListDirtyFlg Card T) (NC.SetBrowserLinkLabels Card LinkLabels) (NC.SetBrowserFormat Card BrowserFormat) (NC.SetBrowserDepth Card Depth) (NC.ClearMsg Window T))))))) (NC.MakeBrowserOverviewWin (LAMBDA (BrowserWin Region DontCheckOpInProgressFlg) (* rht: " 2-Nov-86 01:11") (* * Make and attach a little window to contain a shrunken bitmap of the entire browser. If Region arg is passed then use that as size for overview win, else use defaults.) (* * rht 3/7/86: Now uses stylesheet to figure out where to attach.) (* * rht 11/1/86: Added NC.ProtectedCardOperation wrapper and check for ops in progress.) (LET ((Card (NC.CoerceToCard BrowserWin)) OperationInProgress) (* * if in the middle of some other operation, get out of here.) (if (AND (NULL DontCheckOpInProgressFlg) (SETQ OperationInProgress (NC.OperationInProgress Card))) then (NC.PrintOperationInProgressMsg BrowserWin (QUOTE Build% Browser% Overview) OperationInProgress) NIL else (NC.ProtectedCardOperation Card Build% Browser% Overview (LET ((OverviewWinWidth (if Region then (fetch (REGION WIDTH) of Region) else (OR (WINDOWPROP BrowserWin (QUOTE OverviewWinWidth)) NC.BrowserOverviewDefaultWidth))) (OverviewWinHeight (if Region then (fetch (REGION HEIGHT) of Region) else (OR (WINDOWPROP BrowserWin (QUOTE OverviewWinHeight)) NC.BrowserOverviewDefaultHeight))) (OverviewWin (OPENWP (WINDOWPROP BrowserWin (QUOTE BrowserOverviewWin)))) (WhereToAttach (OR (WINDOWPROP BrowserWin (QUOTE WHERETOATTACHOVERVIEWWIN)) NC.DefaultWhereToAttachOverviewWin))) (if OverviewWin else (* Make a new overview window.) (SETQ OverviewWin (CREATEW (CREATEREGION (fetch (POSITION XCOORD) of NC.OffScreenPosition) (fetch (POSITION YCOORD) of NC.OffScreenPosition) OverviewWinWidth OverviewWinHeight))) (WINDOWPROP BrowserWin (QUOTE BrowserOverviewWin) OverviewWin)) (NC.ReattachBrowserOverviewWin OverviewWin BrowserWin WhereToAttach) (NC.RedrawBrowserOverviewWin OverviewWin BrowserWin))))))) (NC.AskBrowserOverviewSpecs (LAMBDA (BrowserWin DontCheckOpInProgressFlg) (* rht: " 2-Nov-86 01:12") (* * Put up stylesheet to get mode and where to attach overview win.) (* * rht 11/1/86: Added NC.ProtectedCardOperation wrapper and check for ops in progress.) (LET ((Card (NC.CoerceToCard BrowserWin)) OperationInProgress) (* * if in the middle of some other operation, get out of here.) (if (AND (NULL DontCheckOpInProgressFlg) (SETQ OperationInProgress (NC.OperationInProgress Card))) then (NC.PrintOperationInProgressMsg BrowserWin (QUOTE Browser% Overview% Specs) OperationInProgress) NIL else (NC.ProtectedCardOperation Card Browser% Overview% Specs (LET ((WhereLastAttached (OR (WINDOWPROP BrowserWin (QUOTE WHERETOATTACHOVERVIEWWIN)) NC.DefaultWhereToAttachOverviewWin)) (LastMode (OR (WINDOWPROP BrowserWin (QUOTE OVERVIEWWINMODE)) NC.DefaultBrowserOverviewMode)) OverviewSpecsResults) (STYLE.PROP NC.BrowserOverviewSpecsStylesheet (QUOTE SELECTIONS) (LIST (CAR WhereLastAttached) (SELECTQ (CDR WhereLastAttached) ((TOP RIGHT) (QUOTE TOP/RIGHT)) ((LEFT BOTTOM) (QUOTE BOTTOM/LEFT)) (QUOTE CENTER)) LastMode)) (STYLE.PROP NC.BrowserOverviewSpecsStylesheet (QUOTE POSITION) (create POSITION XCOORD ←(fetch (REGION LEFT) of (WINDOWPROP BrowserWin (QUOTE REGION))) YCOORD ←(fetch (REGION TOP) of (WINDOWREGION BrowserWin)))) (if (SETQ OverviewSpecsResults (STYLESHEET NC.BrowserOverviewSpecsStylesheet)) then (WINDOWPROP BrowserWin (QUOTE WHERETOATTACHOVERVIEWWIN) (CONS (CAR OverviewSpecsResults) (CADR OverviewSpecsResults))) (WINDOWPROP BrowserWin (QUOTE OVERVIEWWINMODE) (CADDR OverviewSpecsResults)) else NIL))))))) ) (* * Change to NCCARDS) (DEFINEQ (NC.QuitCard (LAMBDA (CardIdentifier CallCloseWFlg DontSaveFlg DontRecacheFlg DontCheckOpInProgressFlg InterestedWindow OperationMsg QuietFlg Don'tDeactivateFlg) (* rht: " 2-Nov-86 00:34") (* * Force note card specified by ID to quit or stop) (* * rht 2/9/85: New arg DontSaveFlg prevents NC.CardSaveFn from being called. Used when aborting a card. This is NOT equivalent to NC.QuitWithoutSaving.) (* * rht 6/25/85: Now moves card off screen before saving if NC.CloseCardsOffScreenFlg is non-nil.) (* * rht 6/25/85: Brought the insure proper filing check back here from NC.CardSaveFn. Bails out if user cancelled operation inside of NC.InsureProperFiling) (* * fgh 11/11/85: Updated to handle CardID and CardInfo objects.) (* * fgh 1/16/86 Put in code to insure that if one of the TopLevelCards is quit then it is reactivated immedialtely to make sure it stays cached for fast access.) (* * fgh 2/5/86 Added call to NC.ApplyFn) (* * fgh 5/2/86 Added DontRecacheFlg arg) (* * fgh 6/9/86 Added code to check to make sure other operations are not in progress. And DontCheckOpInProgressFlg arg to match) (* * fgh 6/26/86 Added InterestedWindow & OperationMsg arg.) (* * rht 7/2/86: Now bails out if notefile is readonly, user confirms, but we're supposed to write down changes.) (* * rht 7/13/86: Now takes QuietFlg arg.) (* * rht 7/14/86: Call NC.DeactivateCard from here instead of in card type QuitFn. Take a Don'tDeactivateFlg as well.) (* * rht 10/7/86: Now removes DELETEME imageobj's from card substance.) (* * rht 11/2/86: Now returns DON'T if operation in progress.) (DECLARE (GLOBALVARS NC.RemoveDELETEMEImageObjsFromCardFlg)) (PROG ((Card (NC.CoerceToCard CardIdentifier)) Window OperationInProgress ReadOnlyCardFlg) (SETQ Window (NC.FetchWindow Card)) (OR InterestedWindow (SETQ InterestedWindow Window)) (SETQ ReadOnlyCardFlg (NC.ReadOnlyCardP Card)) (* The window not being open should mean that it's shrunken. If so, expand it.) (COND ((AND Window (NOT (OPENWP Window))) (EXPANDW Window))) (* * if in the middle of some other operation, get out of here.) (if (AND (NULL DontCheckOpInProgressFlg) (SETQ OperationInProgress (NC.OperationInProgress Card))) then (NC.PrintOperationInProgressMsg Window "Close Card" OperationInProgress) (RETURN (QUOTE DON'T))) (* * if proper filing says don't quit then get out) (OR DontSaveFlg ReadOnlyCardFlg (COND ((EQ (NC.InsureProperFiling Card) (QUOTE CANCELLED)) (RETURN (QUOTE DON'T))))) (* * If card is readonly but we've made changes that we're supposed to save, then get user confirmation and bail out.) (if (AND (NOT DontSaveFlg) (NOT Don'tDeactivateFlg) ReadOnlyCardFlg (NC.CardSomehowDirtyP Card) (NULL QuietFlg) (NOT (PROGN (NC.PrintMsg InterestedWindow T "Card has been changed, but notefile is readonly." (CHARACTER 13)) (NC.AskYesOrNo "Want to quit anyway, flushing changes? " NIL (QUOTE Yes) NIL InterestedWindow)))) then (RETURN (QUOTE DON'T))) (* * Otherwise go ahead and quit) (RETURN (NC.ProtectedCardOperation Card Close% Card (COND ((AND Window NC.CloseCardsOffScreenFlg) (COND ((NOT (NC.FetchSavedRegion Card)) (NC.SetSavedRegion Card (WINDOWPROP Window (QUOTE REGION))))) (MOVEW Window 1500 1500))) (OR DontSaveFlg (if ReadOnlyCardFlg then (NC.TurnOffDirtyFlgs Card) else (AND NC.RemoveDELETEMEImageObjsFromCardFlg ( NC.RemoveDELETEMEImageObjsFromCard Card (FUNCTION NC.DELETEMEImageObjP))) (NC.CardSaveFn Card (OR NC.CloseCardsOffScreenFlg QuietFlg) NIL InterestedWindow OperationMsg))) (AND Window (WINDOWDELPROP Window (QUOTE CLOSEFN) (FUNCTION NC.QuitCard))) (PROG1 (NC.ApplyFn QuitFn Card) (AND CallCloseWFlg Window (CLOSEW Window)) (OR Don'tDeactivateFlg ( NC.DeactivateCard Card)) (* * if this is one of the top level cards, then make sure it stays cached) (if (AND (NC.TopLevelCardP Card) (NULL DontRecacheFlg) (NULL Don'tDeactivateFlg)) then (NCP.ActivateCards Card)))))))) ) (* * Change to NCGRAPHCARD) (DEFINEQ (NC.AddLinkToGraphCard (LAMBDA (Window LinkOrLinkLabel DestinationCard) (* rht: " 2-Nov-86 00:41") (* Add a NOTECARD link to a graph card. Pass the fact that this is a link-add to NC.GraphAddNodeFn via the NoteCardInsertingLink window property) (* * rht 4/7/86: Now can handle insertion of multiple links by accepting label and/or destination card args. Either or both can be nil.) (* * rht 11/2/86: Now checks result of NC.MakeLink before proceeding.) (LET ((Link (if (type? Link LinkOrLinkLabel) then LinkOrLinkLabel else (NC.MakeLink Window LinkOrLinkLabel DestinationCard)))) (if Link then (WINDOWPROP Window (QUOTE NoteCardInsertingLink) Link) (EDITADDNODE Window))))) (NC.RelayoutGraphCard (LAMBDA (Win DontCheckOpInProgressFlg) (* rht: " 2-Nov-86 01:12") (* * Relayout the graph by making roots out of all nodes without FROMNODES.) (* * rht 8/15/86: Now uses proper COPYBUTTONEVENTFN in the SHOWGRAPH call.) (* * rht 11/1/86: Added NC.ProtectedCardOperation wrapper and check for ops in progress.) (LET ((Card (NC.CoerceToCard Win)) OperationInProgress) (* * if in the middle of some other operation, get out of here.) (if (AND (NULL DontCheckOpInProgressFlg) (SETQ OperationInProgress (NC.OperationInProgress Card))) then (NC.PrintOperationInProgressMsg Win (QUOTE Relayout% Graph% Card) OperationInProgress) NIL else (NC.ProtectedCardOperation Card Relayout% Graph% Card (LET ((Graph (WINDOWPROP Win (QUOTE GRAPH))) GraphNodes) (if (SETQ GraphNodes (fetch (GRAPH GRAPHNODES) of Graph)) then (SETQ Graph (LAYOUTGRAPH GraphNodes (OR (for Node in GraphNodes when (NULL (fetch (GRAPHNODE FROMNODES) of Node)) collect (fetch (GRAPHNODE NODEID) of Node)) (fetch (GRAPHNODE NODEID) of (CAR GraphNodes))) (QUOTE Lattice))) (replace (GRAPH GRAPH.ADDNODEFN) of Graph with (FUNCTION NC.GraphAddNodeFn)) (replace (GRAPH GRAPH.DELETENODEFN) of Graph with (FUNCTION NC.GraphDeleteNodeFn)) (replace (GRAPH GRAPH.ADDLINKFN) of Graph with (FUNCTION NC.GraphAddLinkFn)) (replace (GRAPH GRAPH.DELETELINKFN) of Graph with (FUNCTION NC.GraphDeleteLinkFn)) (replace (GRAPH GRAPH.MOVENODEFN) of Graph with (FUNCTION NC.GraphMoveNodeFn)) (replace (GRAPH GRAPH.FONTCHANGEFN) of Graph with (FUNCTION NC.GraphFontChangeFn)) (SHOWGRAPH Graph Win (FUNCTION NC.GraphCardLeftButtonFn) (FUNCTION NC.GraphCardMiddleButtonFn) NIL T (FUNCTION NC.GRAPHERCOPYBUTTONEVENTFN)) (NC.InstallTitleBarButtonEventFn Win (FUNCTION NC.GraphTitleBarButtonEventFn))))) )))) ) (* * Change to NCLINKINDEXCARD) (DEFINEQ (NC.RecomputeLinkIndex (LAMBDA (WindowOrTextStream DontCheckOpInProgressFlg) (* rht: " 2-Nov-86 01:12") (* * Recompute the contents of the link index card. Modeled after NC.UpdateBrowserCard.) (* * fgh 11/17/85 Updated to handle Card object.) (* * rht 11/1/86: Added NC.ProtectedCardOperation wrapper and check for ops in progress.) (LET ((Card (NC.CoerceToCard WindowOrTextStream)) Window OperationInProgress) (SETQ Window (NC.FetchWindow Card)) (* * if in the middle of some other operation, get out of here.) (if (AND (NULL DontCheckOpInProgressFlg) (SETQ OperationInProgress (NC.OperationInProgress Card))) then (NC.PrintOperationInProgressMsg Window (QUOTE Recompute% LinkIndex) OperationInProgress) NIL else (NC.ProtectedCardOperation Card Recompute% LinkIndex (PROG (LinkLabels BackLinksFlg PropList BrowserSpecs TextStream) (SETQ TextStream (TEXTSTREAM WindowOrTextStream)) (SETQ PropList (NC.FetchPropList Card)) (SETQ LinkLabels (CAR (LISTGET PropList (QUOTE LinkIndexLinkLabels)))) (SETQ BackLinksFlg (LISTGET PropList (QUOTE LinkIndexBackLinksFlg))) (NC.PrintMsg Window T "Clearing old contents of link index ..." (CHARACTER 13)) (TEDIT.DELETE TextStream (TEDIT.SETSEL TextStream 1 (fetch (TEXTOBJ TEXTLEN) of (TEXTOBJ TextStream)) )) (NC.PrintMsg Window NIL "Done." (CHARACTER 13)) (NC.ComputeLinkIndex Card LinkLabels BackLinksFlg) (NC.ClearMsg Window T))))))) (NC.ChangeLinkIndexSpecs (LAMBDA (WindowOrTextStream DontCheckOpInProgressFlg) (* rht: " 2-Nov-86 01:12") (* * Change the values of the various link index specs including link types and back links flag.) (* * rht 9/19/86: Changed to pass Card rather than Window to NC.AskLinkIndexSpecs.) (* * rht 11/1/86: Added NC.ProtectedCardOperation wrapper and check for ops in progress.) (LET ((Card (NC.CoerceToCard WindowOrTextStream)) OperationInProgress) (* * if in the middle of some other operation, get out of here.) (if (AND (NULL DontCheckOpInProgressFlg) (SETQ OperationInProgress (NC.OperationInProgress Card))) then (NC.PrintOperationInProgressMsg (NC.FetchWindow Card) (QUOTE LinkIndex% Specs) OperationInProgress) NIL else (NC.ProtectedCardOperation Card LinkIndex% Specs (LET (LinkLabels BackLinksFlg PropList LinkIndexSpecs) (SETQ PropList (NC.FetchPropList Card)) (SETQ LinkLabels (CAR (LISTGET PropList (QUOTE LinkIndexLinkLabels)))) (SETQ BackLinksFlg (LISTGET PropList (QUOTE LinkIndexBackLinksFlg))) (SETQ LinkIndexSpecs (NC.AskLinkIndexSpecs Card LinkLabels BackLinksFlg)) (SETQ LinkLabels (CAR LinkIndexSpecs)) (SETQ BackLinksFlg (CADR LinkIndexSpecs)) (NC.SetPropListDirtyFlg Card T) (NC.PutProp Card (QUOTE LinkIndexLinkLabels) (LIST LinkLabels)) (NC.PutProp Card (QUOTE LinkIndexBackLinksFlg) BackLinksFlg) (NC.ClearMsg (NC.FetchWindow Card) T))))))) ) (PUTPROPS RHTPATCH133 COPYRIGHT ("Xerox Corporation" 1986)) (DECLARE: DONTCOPY (FILEMAP (NIL (1421 45464 (NC.UpdateBrowserCard 1431 . 12321) (NC.RelayoutBrowserCard 12323 . 19458) ( NC.ConnectNodesInBrowser 19460 . 26372) (NC.UnconnectNodesInBrowser 26374 . 29222) ( NC.ExpandBrowserNode 29224 . 38309) (NC.ChangeBrowserSpecs 38311 . 40169) (NC.MakeBrowserOverviewWin 40171 . 42874) (NC.AskBrowserOverviewSpecs 42876 . 45462)) (45495 50802 (NC.QuitCard 45505 . 50800)) ( 50837 54193 (NC.AddLinkToGraphCard 50847 . 51776) (NC.RelayoutGraphCard 51778 . 54191)) (54232 58145 ( NC.RecomputeLinkIndex 54242 . 56224) (NC.ChangeLinkIndexSpecs 56226 . 58143))))) STOP