(FILECREATED "10-Sep-85 21:29:38" {QV}<NOTECARDS>RELEASE1.2I>NCGRAPHSUBSTANCE.;11 26277  

      changes to:  (FNS NC.GraphNodeLinkIconUpdate)
		   (VARS NCGRAPHSUBSTANCECOMS)

      previous date: "23-Aug-85 21:03:53" {QV}<NOTECARDS>RELEASE1.2I>NCGRAPHSUBSTANCE.;10)


(* Copyright (c) 1985 by Xerox Corporation. All rights reserved.)

(PRETTYCOMPRINT NCGRAPHSUBSTANCECOMS)

(RPAQQ NCGRAPHSUBSTANCECOMS ((E (SETQ NC.SystemDate (DATE))
				(UNMARKASCHANGED (QUOTE NC.SystemDate)
						 (QUOTE VARS)))
			     (VARS NC.SystemDate)
			     (P (UNMARKASCHANGED (QUOTE NC.SystemDate)
						 (QUOTE VARS)))
			     (FILES NCTYPESMECH)
			     (GLOBALVARS NC.GraphTitleBarMenu NC.GraphTitleBarMiddleButtonMenu 
					 NC.ShrunkenGraphIconBM NC.ShrunkenGraphIconMask 
					 NC.ShrunkenGraphIconTemplate)
			     (FNS NC.BringUpGraphCard NC.RelayoutGraphCard 
				  NC.CollectReferencesInGraph NC.GraphCardCloseFn 
				  NC.GraphCardLeftButtonFn NC.GraphCardMiddleButtonFn 
				  NC.GraphCopySubstance NC.MarkGraphDirty NC.GraphDirtyP 
				  NC.GrapherBasedP NC.GraphNodeLinkIconUpdate)
			     (* * Hooks into Grapher for NoteCards applications)
			     (FNS NC.GraphAddNodeFn NC.GraphDeleteNodeFn NC.GraphAddLinkFn 
				  NC.GraphDeleteLinkFn NC.GraphMoveNodeFn NC.GraphFontChangeFn)
			     (* * This stuff supports the "push-copy" method of copying links in NC)
			     (FNS NC.TranslateWindowPositionToGraphPosition NC.InsertLinkInGraph)
			     (* * Add graph substance)
			     (FNS NC.AddGraphSubstance)
			     (* * Stuff for shrinking graphs and browsers.)
			     (FNS NC.GraphCardShrinkFn)
			     (BITMAPS NC.ShrunkenGraphIconBM NC.ShrunkenGraphIconMask)
			     (VARS (NC.ShrunkenGraphIconTemplate (create TITLEDICON ICON ← 
									 NC.ShrunkenGraphIconBM MASK 
									 ← NC.ShrunkenGraphIconMask 
									 TITLEREG ←
									 (QUOTE (16 4 64 77)))))
			     (* * Stuff for making copies of graphs for making imageobj's.)
			     (FNS NC.NoteCardsGraphP NC.MakeExternalGraphCopy)
			     (P (NC.AddGraphSubstance))))

(RPAQQ NC.SystemDate "10-Sep-85 21:29:41")
(UNMARKASCHANGED (QUOTE NC.SystemDate)
		 (QUOTE VARS))
(FILESLOAD NCTYPESMECH)
(DECLARE: DOEVAL@COMPILE DONTCOPY

(GLOBALVARS NC.GraphTitleBarMenu NC.GraphTitleBarMiddleButtonMenu NC.ShrunkenGraphIconBM 
	    NC.ShrunkenGraphIconMask NC.ShrunkenGraphIconTemplate)
)
(DEFINEQ

(NC.BringUpGraphCard
  (LAMBDA (ID Substance Region/Position)                     (* rht: " 1-Aug-85 21:24")

          (* * Given a graph (or browser) Substance, open a grapher (browser) window and set it up to be a NoteCard with ID.)


    (PROG (Region Title GraphWindow IconWindow)
          (COND
	    ((SETQ GraphWindow (NC.FetchWindow ID))
	      (AND (WINDOWP (WINDOWPROP GraphWindow (QUOTE ICONFOR)))
		   (SETQ GraphWindow (EXPANDW GraphWindow)))
	      (TOTOPW GraphWindow)
	      (RPTQ 2 (FLASHW GraphWindow))
	      (RETURN GraphWindow)))
          (SETQ GraphWindow (SHOWGRAPH Substance (CREATEW (NC.DetermineDisplayRegion ID 
										  Region/Position)
							  (GETPROP ID (QUOTE NoteCardTitle)))
				       (FUNCTION NC.GraphCardLeftButtonFn)
				       (FUNCTION NC.GraphCardMiddleButtonFn)
				       NIL T))
          (WINDOWADDPROP GraphWindow (QUOTE SHRINKFN)
			 (FUNCTION NC.GraphCardShrinkFn))
          (NC.SetupTitleBarMenu GraphWindow ID)
          (RETURN GraphWindow))))

(NC.RelayoutGraphCard
  (LAMBDA (Win)                                              (* rht: " 7-Aug-85 14:53")

          (* * Relayout the graph by making roots out of all nodes without FROMNODES.)


    (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)
	       (OR (EQ (WINDOWPROP Win (QUOTE BUTTONEVENTFN))
		       (FUNCTION NC.TitleBarButtonEventFn))
		   (WINDOWPROP Win (QUOTE OLDBUTTONEVENTFN)
			       (WINDOWPROP Win (QUOTE BUTTONEVENTFN)
					   (FUNCTION NC.TitleBarButtonEventFn))))))))

(NC.CollectReferencesInGraph
  (LAMBDA (ID CheckAndDeleteFlg DatabaseStream ReturnLinkIconsFlg ReturnLocationsFlg)
                                                             (* fgh: "23-Oct-84 16:18")

          (* * Return a list of all links or link icons in graph substance Substance. If CheckAndDeleteFlg, then delete any 
	  links found that are not valid links.)


    (PROG ((Substance (NC.FetchSubstance ID))
	   ActualLink DirtyFlg Links LinkIcon CollectItem)
          (SETQ Links (for GraphNode in (fetch (GRAPH GRAPHNODES) of Substance)
			 when (COND
				((NC.LinkIconImageObjP (SETQ LinkIcon (fetch (GRAPHNODE NODELABEL)
									 of GraphNode)))
				  (SETQ ActualLink (NC.FetchLinkFromLinkIcon LinkIcon))
				  (COND
				    ((NULL CheckAndDeleteFlg))
				    ((AND (LISTP CheckAndDeleteFlg)
					  (FMEMB (fetch (NOTECARDLINK DESTINATIONID) of ActualLink)
						 CheckAndDeleteFlg)))
				    ((NC.ValidLinkP ActualLink DatabaseStream))
				    (T (replace (GRAPHNODE NODELABEL) of GraphNode with 
									NC.DeletedLinkImageObject)
				       (SETQ DirtyFlg T)
				       NIL)))
				(T NIL))
			 collect (PROGN (SETQ CollectItem (COND
					    (ReturnLinkIconsFlg LinkIcon)
					    (T ActualLink)))
					(COND
					  ((NULL ReturnLocationsFlg)
					    CollectItem)
					  (T (CONS CollectItem (fetch (GRAPHNODE NODELABEL)
								  of GraphNode)))))))
          (RETURN (CONS Links DirtyFlg)))))

(NC.GraphCardCloseFn
  (LAMBDA (WindowOrID)                                       (* rht: " 9-Feb-85 21:50")
                                                             (* Called when a grapher-based note card is being 
							     closed. Writes graph to database and does other clean 
							     up functions)
    (PROG (Window (ID (NC.CoerceToID WindowOrID)))
          (SETQ Window (NC.FetchWindow ID))
          (AND Window (for AttachedWindow in (ALLATTACHEDWINDOWS Window)
			 do (DETACHWINDOW AttachedWindow)
			    (CLOSEW AttachedWindow)))
          (AND Window (REMOVEPROMPTWINDOW Window))
          (NC.DeactivateCard ID))))

(NC.GraphCardLeftButtonFn
  (LAMBDA (GraphNode GraphWindow)                            (* fgh: "16-Feb-85 00:18")

          (* * If this is a node containing a link icon, then do: IF Selection in progress, then pressing a node gets its 
	  destination ID if its actually a note card node. Otherwise, bring up the note card pointed to by the node.)


    (PROG (ID (LinkIcon (fetch (GRAPHNODE NODELABEL) of GraphNode)))
          (AND (NC.LinkIconImageObjP LinkIcon)
	       (COND
		 (NC.SelectionInProgress (AND (SETQ ID (fetch (NOTECARDLINK DESTINATIONID)
							  of (NC.FetchLinkFromLinkIcon LinkIcon)))
					      (NOT (FMEMB ID NC.SelectedCards))
					      (SETQ NC.SelectedCards (CONS ID NC.SelectedCards))))
		 ((KEYDOWNP (QUOTE LSHIFT))
		   (NC.PushCopyLinkIcon LinkIcon GraphWindow)
		   (RETURN NIL))
		 (T (NC.EditNoteCard (fetch (NOTECARDLINK DESTINATIONID) of (NC.FetchLinkFromLinkIcon
									      LinkIcon)))))))))

(NC.GraphCardMiddleButtonFn
  (LAMBDA (GraphNode GraphWindow)                            (* fgh: " 2-Oct-84 18:25")

          (* IF Selection in progress, then pressing a node gets its destination ID if its actually a note card node.
	  Otherwise, jump to normal button processing for an link icon)


    (PROG (ID (LinkIcon (fetch (GRAPHNODE NODELABEL) of GraphNode)))
          (AND (NC.LinkIconImageObjP LinkIcon)
	       (COND
		 (NC.SelectionInProgress (AND (SETQ ID (fetch (NOTECARDLINK DESTINATIONID)
							  of (NC.FetchLinkFromLinkIcon LinkIcon)))
					      (NOT (FMEMB ID NC.SelectedCards))
					      (SETQ NC.SelectedCards (CONS ID NC.SelectedCards))))
		 ((AND NC.SpecialBrowserMiddleButtonFn (EQ (NC.FetchType (NC.IDFromWindow GraphWindow)
									 )
							   (QUOTE BROWSER)))
		   (APPLY* NC.SpecialBrowserMiddleButtonFn GraphNode GraphWindow))
		 (T (NC.LinkIconMiddleButtonFn LinkIcon GraphWindow)))))))

(NC.GraphCopySubstance
  (LAMBDA (ID FromStream ToStream)                           (* fgh: "23-Oct-84 11:43")

          (* * Copy a graph substance from FromStream to ToStream.)


    (PROG (FromStartPtr FromEndPtr ToEndPtrLoc ToEndPtr ToStartPtr)

          (* * Set up start/end pointers on ToStream)


          (SETQ ToStartPtr (IPLUS (GETFILEPTR ToStream)
				  6))
          (NC.PutPtr ToStream ToStartPtr)
          (SETQ ToEndPtrLoc (GETFILEPTR ToStream))
          (NC.PutPtr ToStream 0)

          (* * Get FromStream start/end pointers)


          (SETQ FromStartPtr (NC.GetPtr FromStream 3))
          (SETQ FromEndPtr (NC.GetPtr FromStream 3))

          (* * Copy the bytes)


          (COPYBYTES FromStream ToStream FromStartPtr FromEndPtr)

          (* * Set up the ned ptr on the ToStream)


          (SETQ ToEndPtr (GETFILEPTR ToStream))
          (SETFILEPTR ToStream ToEndPtrLoc)
          (NC.PutPtr ToStream ToEndPtr)
          (RETURN T))))

(NC.MarkGraphDirty
  (LAMBDA (ID ResetFlg)                                      (* fgh: "24-Oct-84 18:33")

          (* * Mark or unmark graph as having been changed -- Sorry no can do!!!)


    NIL))

(NC.GraphDirtyP
  (LAMBDA (Graph)                                            (* rht: " 1-Feb-85 15:39")

          (* * A graph is always considered to be dirty since we can't tell whether its changed or not.)



          (* * rht 2/1/85: For now we can't tell by looking at graph substance whether we're dirty or not.
	  Leave it up to the SubstanceDirtyFlg on the card.)


    NIL))

(NC.GrapherBasedP
  (LAMBDA (NoteCardType)                                     (* fgh: "20-Aug-84 01:56")

          (* * Returns T if NoteCardType is a note card type that is based on Grapher or else an ID of such a note card.
	  NIL otherise.)


    (PROG ((GrapherType (QUOTE (GRAPH BROWSER))))
          (RETURN (OR (FMEMB NoteCardType GrapherType)
		      (AND (NC.IDP NoteCardType)
			   (FMEMB (NC.FetchType NoteCardType)
				  GrapherType)))))))

(NC.GraphNodeLinkIconUpdate
  (LAMBDA (Window GraphNode)                                 (* rht: "10-Sep-85 21:13")

          (* * Check whether the image box size agrees with graphnode size. If not, update graph node.
	  REDISPLAYW should eventually happen to the graph after calling this.)


    (LET ((LinkIcon (fetch (GRAPHNODE NODELABEL) of GraphNode))
       ImageBox XSize YSize)
      (if (NC.LinkIconImageObjP LinkIcon)
	  then (SETQ ImageBox (NC.LinkIconImageBoxFn LinkIcon (WINDOWPROP Window (QUOTE DSP))))
	       (SETQ XSize (fetch (IMAGEBOX XSIZE) of ImageBox))
	       (SETQ YSize (fetch (IMAGEBOX YSIZE) of ImageBox))
	       (if (NOT (EQUAL XSize (fetch (GRAPHNODE NODEWIDTH) of GraphNode)))
		   then (replace (GRAPHNODE NODEWIDTH) of GraphNode with XSize))
	       (if (NOT (EQUAL YSize (fetch (GRAPHNODE NODEHEIGHT) of GraphNode)))
		   then (replace (GRAPHNODE NODEHEIGHT) of GraphNode with YSize))))))
)
(* * Hooks into Grapher for NoteCards applications)

(DEFINEQ

(NC.GraphAddNodeFn
  (LAMBDA (Graph Window)                                     (* fgh: "15-Feb-85 22:40")

          (* * Add a node, normal or link, to a graph)



          (* * rht 11/9/84: Now checks result of NC.MakeLink before building link.)


    (PROG (LinkLabel Link (GraphID (NC.IDFromWindow Window)))
          (RETURN (COND
		    ((NULL (SETQ Link (WINDOWPROP Window (QUOTE NoteCardInsertingLink)
						  NIL)))
		      (NC.MarkCardDirty GraphID)
		      (DEFAULT.ADDNODEFN Graph Window))
		    ((OR (type? NOTECARDLINK Link)
			 (AND (SETQ LinkLabel (NC.AskLinkLabel Window NIL NIL T T))
			      (SETQ Link (NC.MakeLink Window LinkLabel))))
		      (NC.MarkCardDirty GraphID)
		      (NODECREATE (for bind NodeID unless (FASSOC (SETQ NodeID (GENSYM))
								  (fetch (GRAPH GRAPHNODES)
								     of Graph))
				     do (RETURN NodeID))
				  (NC.MakeLinkIcon Link)
				  (CURSORPOSITION NIL Window))))))))

(NC.GraphDeleteNodeFn
  (LAMBDA (Node Graph Window)                                (* rht: " 3-Feb-85 23:49")

          (* * Just mark the card as dirty.)


    (PROG ((GraphID (NC.IDFromWindow Window)))
          (NC.MarkCardDirty GraphID))))

(NC.GraphAddLinkFn
  (LAMBDA (From To Graph Window)                             (* rht: " 3-Feb-85 23:49")

          (* * Just mark the card as dirty.)


    (PROG ((GraphID (NC.IDFromWindow Window)))
          (NC.MarkCardDirty GraphID))))

(NC.GraphDeleteLinkFn
  (LAMBDA (From To Graph Window)                             (* rht: " 3-Feb-85 23:50")

          (* * Just mark the card as dirty.)


    (PROG ((GraphID (NC.IDFromWindow Window)))
          (NC.MarkCardDirty GraphID))))

(NC.GraphMoveNodeFn
  (LAMBDA (Node Newpos Graph Window)                         (* rht: " 3-Feb-85 23:45")

          (* * Just mark the card as dirty.)


    (PROG ((GraphID (NC.IDFromWindow Window)))
          (NC.MarkCardDirty GraphID))))

(NC.GraphFontChangeFn
  (LAMBDA (How Node Graph Window)                            (* rht: " 3-Feb-85 23:50")

          (* * Just mark the card as dirty.)


    (PROG ((GraphID (NC.IDFromWindow Window)))
          (NC.MarkCardDirty GraphID))))
)
(* * This stuff supports the "push-copy" method of copying links in NC)

(DEFINEQ

(NC.TranslateWindowPositionToGraphPosition
  (LAMBDA (Window WindowPositionX WindowPositionY)           (* fgh: "15-Feb-85 22:01")
    (create POSITION
	    XCOORD ← WindowPositionX
	    YCOORD ← WindowPositionY)))

(NC.InsertLinkInGraph
  (LAMBDA (GraphWindow Link Position)                        (* fgh: "15-Feb-85 22:50")

          (* * Insert a Link in GraphWindow at Position)


    (PROG (Node (Graph (WINDOWPROP GraphWindow (QUOTE GRAPH))))
          (WINDOWPROP GraphWindow (QUOTE NoteCardInsertingLink)
		      Link)
          (OR (SETQ Node (GRAPHADDNODE Graph GraphWindow))
	      (RETURN))
          (replace (GRAPHNODE NODEPOSITION) of Node with Position)
          (MEASUREGRAPHNODE Node)
          (PRINTDISPLAYNODE Node (CONSTANT (create POSITION
						   XCOORD ← 0
						   YCOORD ← 0))
			    GraphWindow
			    (DSPCLIPPINGREGION NIL GraphWindow))
          (WINDOWPROP GraphWindow (QUOTE NoteCardInsertingLink)
		      NIL))))
)
(* * Add graph substance)

(DEFINEQ

(NC.AddGraphSubstance
  (LAMBDA NIL                                                (* fgh: "19-Jun-85 16:30")
    (NC.AddSubstanceType (QUOTE GRAPH)
			 (BQUOTE ((CreateSubstanceFn (FUNCTION NC.MakeGraphCard))
				  (EditSubstanceFn , (FUNCTION NC.BringUpGraphCard))
				  (QuitSubstanceFn , (FUNCTION NC.GraphCardCloseFn))
				  (GetSubstanceFn , (FUNCTION NC.GetGraphSubstance))
				  (PutSubstanceFn , (FUNCTION NC.PutGraphSubstance))
				  (CopySubstanceFn , (FUNCTION NC.GraphCopySubstance))
				  (MarkSubstanceDirtyFn , (FUNCTION NC.MarkGraphDirty))
				  (SubstanceDirtyPFn , (FUNCTION NC.GraphDirtyP))
				  (CollectLinksInSubstanceFn , (FUNCTION NC.CollectReferencesInGraph))
				  (DeleteLinksInSubstanceFn , (FUNCTION 
							      NC.DelReferencesToCardFromGraph))
				  (UpdateLinkIconsInSubstanceFn , (FUNCTION 
								  NC.UpdateLinkImagesInGraph))
				  (InsertLinkInSubstanceFn , (FUNCTION NC.InsertLinkInGraph))
				  (TranslateWindowPositionToSubstancePositionFn
				    ,
				    (FUNCTION NC.TranslateWindowPositionToGraphPosition))))
			 (QUOTE ((SubstanceDefaultWidth 300)
				  (SubstanceDefaultHeight 200)
				  (SubstanceLinkAnchorModesSupported T))))))
)
(* * Stuff for shrinking graphs and browsers.)

(DEFINEQ

(NC.GraphCardShrinkFn
  (LAMBDA (W)                                                (* rht: " 1-Aug-85 21:21")

          (* * Check to make sure that icon's title agrees with card title. If not, retitle the icon. If this is first shrink 
	  then create a new icon and fill in title.)


    (PROG ((OldIconTitle (WINDOWPROP W (QUOTE GRAPH.ICON.TITLE)))
	   (Icon (WINDOWPROP W (QUOTE ICON)))
	   (ID (NC.CoerceToID W))
	   IconTitle BM IconTemplate BMHeight BMHalfHeight TitleRegion)
          (SETQ IconTitle (CONCAT "NC: " (NC.FetchTitle ID)))
          (if (NOT Icon)
	      then (WINDOWPROP W (QUOTE ICON)
			       (SETQ Icon (TITLEDICONW NC.ShrunkenGraphIconTemplate IconTitle 
						       TEDIT.ICON.FONT NIL T))))
          (if (NOT (EQUAL OldIconTitle IconTitle))
	      then (WINDOWPROP W (QUOTE GRAPH.ICON.TITLE)
			       IconTitle)
		   (ICONTITLE IconTitle TitleRegion NIL Icon)))))
)

(RPAQ NC.ShrunkenGraphIconBM (READBITMAP))
(87 95
"AOOOOOOOOOOOOOOOOOOOOL@@"
"GOOOOOOOOOOOOOOOOOOOOL@@"
"OKMHOHNCHNCHNCHNCHNCHN@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"ONJJCLGALGALGALGALGALF@@"
"LOOOOOOOOOOOOOOOOOOOON@@"
"LCOJCLGALGALGALGALGALF@@"
"L@OOOOOOOOOOOOOOOOOOON@@"
"L@COOOOOOOOOOOOOOOOOON@@"
"L@@NGALGALGALGALGALGAL@@"
"L@@GOCLOCLOCLOCLOCLOCN@@"
"L@@ANAHFAHFAHFAHFAHFAN@@"
"LCH@L@@@@@@@@@@@@@@@@N@@"
"LCH@L@@@@@@@@@@@@@@@@N@@"
"LCH@L@@@@@@@@@@@@@@@@N@@"
"LCH@L@@@@@@@@@@@@@@@@N@@"
"LCH@L@@@@@@@@@@@@@@@@N@@"
"LCH@L@@@@@@@@@@@@@@@@N@@"
"LCH@L@@@@@@@@@@@@@@@@N@@"
"LCH@L@@@@@@@@@@@@@@@@N@@"
"LCH@L@@@@@@@@@@@@@@@@N@@"
"LCH@L@@@@@@@@@@@@@@@@N@@"
"LCH@L@@@@@@@@@@@@@@@@N@@"
"LCH@L@@@@@@@@@@@@@@@@N@@"
"LCH@L@@@@@@@@@@@@@@@@N@@"
"LCH@L@@@@@@@@@@@@@@@@N@@"
"LA@@L@@@@@@@@@@@@@@@@N@@"
"L@H@L@@@@@@@@@@@@@@@@N@@"
"L@D@L@@@@@@@@@@@@@@@@N@@"
"L@B@L@@@@@@@@@@@@@@@@N@@"
"L@B@L@@@@@@@@@@@@@@@@N@@"
"MLGHL@@@@@@@@@@@@@@@@N@@"
"MLGHL@@@@@@@@@@@@@@@@N@@"
"MLGHL@@@@@@@@@@@@@@@@N@@"
"MLGHL@@@@@@@@@@@@@@@@N@@"
"MLGHL@@@@@@@@@@@@@@@@N@@"
"MLGHL@@@@@@@@@@@@@@@@N@@"
"MLGHL@@@@@@@@@@@@@@@@N@@"
"MLGHL@@@@@@@@@@@@@@@@N@@"
"MLGHL@@@@@@@@@@@@@@@@N@@"
"MLGHL@@@@@@@@@@@@@@@@N@@"
"MLGHL@@@@@@@@@@@@@@@@N@@"
"MLGHL@@@@@@@@@@@@@@@@N@@"
"MLGHL@@@@@@@@@@@@@@@@N@@"
"MLGHL@@@@@@@@@@@@@@@@N@@"
"LHB@L@@@@@@@@@@@@@@@@N@@"
"LHB@L@@@@@@@@@@@@@@@@N@@"
"LDD@L@@@@@@@@@@@@@@@@N@@"
"LDD@L@@@@@@@@@@@@@@@@N@@"
"LBH@L@@@@@@@@@@@@@@@@N@@"
"LBH@L@@@@@@@@@@@@@@@@N@@"
"LA@@L@@@@@@@@@@@@@@@@N@@"
"LA@@L@@@@@@@@@@@@@@@@N@@"
"LGINL@@@@@@@@@@@@@@@@N@@"
"LGINL@@@@@@@@@@@@@@@@N@@"
"LGINL@@@@@@@@@@@@@@@@N@@"
"LGINL@@@@@@@@@@@@@@@@N@@"
"LGINL@@@@@@@@@@@@@@@@N@@"
"LGINL@@@@@@@@@@@@@@@@N@@"
"LGINL@@@@@@@@@@@@@@@@N@@"
"LGINL@@@@@@@@@@@@@@@@N@@"
"LGINL@@@@@@@@@@@@@@@@N@@"
"LGINL@@@@@@@@@@@@@@@@N@@"
"LGINL@@@@@@@@@@@@@@@@N@@"
"LGINL@@@@@@@@@@@@@@@@N@@"
"LGINL@@@@@@@@@@@@@@@@N@@"
"LGINL@@@@@@@@@@@@@@@@N@@"
"LB@DL@@@@@@@@@@@@@@@@N@@"
"LA@DL@@@@@@@@@@@@@@@@N@@"
"LA@HL@@@@@@@@@@@@@@@@N@@"
"L@HHL@@@@@@@@@@@@@@@@N@@"
"L@HHL@@@@@@@@@@@@@@@@N@@"
"L@E@L@@@@@@@@@@@@@@@@N@@"
"L@E@L@@@@@@@@@@@@@@@@N@@"
"L@B@L@@@@@@@@@@@@@@@@N@@"
"L@G@L@@@@@@@@@@@@@@@@N@@"
"L@G@L@@@@@@@@@@@@@@@@N@@"
"L@G@L@@@@@@@@@@@@@@@@N@@"
"L@G@L@@@@@@@@@@@@@@@@N@@"
"L@G@L@@@@@@@@@@@@@@@@N@@"
"L@G@L@@@@@@@@@@@@@@@@N@@"
"L@G@L@@@@@@@@@@@@@@@@N@@"
"L@G@L@@@@@@@@@@@@@@@@N@@"
"L@G@L@@@@@@@@@@@@@@@@N@@"
"N@G@L@@@@@@@@@@@@@@@@N@@"
"O@G@L@@@@@@@@@@@@@@@@N@@"
"GHG@L@@@@@@@@@@@@@@@@N@@"
"CLG@L@@@@@@@@@@@@@@@@N@@"
"AN@@L@@@@@@@@@@@@@@@@N@@"
"@O@@L@@@@@@@@@@@@@@@@N@@"
"@GH@L@@@@@@@@@@@@@@@@N@@"
"@CL@L@@@@@@@@@@@@@@@@N@@"
"@AN@OOOOOOOOOOOOOOOOON@@"
"@@OOOOOOOOOOOOOOOOOOON@@"
"@@COOOOOOOOOOOOOOOOOON@@")

(RPAQ NC.ShrunkenGraphIconMask (READBITMAP))
(87 95
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"OOOOOOOOOOOOOOOOOOOOON@@"
"GOOOOOOOOOOOOOOOOOOOON@@"
"COOOOOOOOOOOOOOOOOOOON@@"
"AOOOOOOOOOOOOOOOOOOOON@@"
"@OOOOOOOOOOOOOOOOOOOON@@"
"@GOOOOOOOOOOOOOOOOOOON@@"
"@COOOOOOOOOOOOOOOOOOON@@"
"@AOOOOOOOOOOOOOOOOOOON@@"
"@@OOOOOOOOOOOOOOOOOOON@@"
"@@COOOOOOOOOOOOOOOOOON@@")

(RPAQ NC.ShrunkenGraphIconTemplate (create TITLEDICON ICON ← NC.ShrunkenGraphIconBM MASK ← 
					   NC.ShrunkenGraphIconMask TITLEREG ←
					   (QUOTE (16 4 64 77))))
(* * Stuff for making copies of graphs for making imageobj's.)

(DEFINEQ

(NC.NoteCardsGraphP
  (LAMBDA (Graph)                                            (* rht: "22-Aug-85 21:01")

          (* * Return non-nil if Graph was created by notecards. Now checks the MoveNodeFn. Is there a better way?)


    (EQ (fetch (GRAPH GRAPH.MOVENODEFN) of Graph)
	(QUOTE NC.GraphMoveNodeFn))))

(NC.MakeExternalGraphCopy
  (LAMBDA (Graph)                                            (* rht: "23-Aug-85 21:01")

          (* * Make a copy of Graph in which each link icon nodelabel has been replaced by a copy of itself and MoveNodeFn, 
	  etc. are replaced by NIL.)


    (create GRAPH
	    DIRECTEDFLG ←(fetch (GRAPH DIRECTEDFLG) of Graph)
	    SIDESFLG ←(fetch (GRAPH SIDESFLG) of Graph)
	    GRAPHNODES ←(for GraphNode in (fetch (GRAPH GRAPHNODES) of Graph) bind Box NewNode 
										   NodeLabel
			   collect (LET (NewLinkIcon)
				     (PROG1 (SETQ NewNode (create GRAPHNODE
							     copying
							      GraphNode NODELABEL ←(if
								(NC.LinkIconImageObjP
								  (SETQ NodeLabel
								    (fetch (GRAPHNODE NODELABEL)
								       of GraphNode)))
										       then
											(SETQ 
										      NewLinkIcon
											  (
NC.LinkIconCopyFn NodeLabel))
										     else
										      (COPY NodeLabel)
								)))
					    (if NewLinkIcon
						then (SETQ Box (NC.ExternalPutLinkIconImageBoxFn
							 NewLinkIcon NIL NIL NIL))
						     (replace (GRAPHNODE NODEHEIGHT) of NewNode
							with (fetch (IMAGEBOX YSIZE) of Box))
						     (replace (GRAPHNODE NODEWIDTH) of NewNode
							with (fetch (IMAGEBOX XSIZE) of Box)))))))))
)
(NC.AddGraphSubstance)
(PUTPROPS NCGRAPHSUBSTANCE COPYRIGHT ("Xerox Corporation" 1985))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (2353 12899 (NC.BringUpGraphCard 2363 . 3485) (NC.RelayoutGraphCard 3487 . 5256) (
NC.CollectReferencesInGraph 5258 . 6843) (NC.GraphCardCloseFn 6845 . 7559) (NC.GraphCardLeftButtonFn 
7561 . 8603) (NC.GraphCardMiddleButtonFn 8605 . 9635) (NC.GraphCopySubstance 9637 . 10686) (
NC.MarkGraphDirty 10688 . 10901) (NC.GraphDirtyP 10903 . 11308) (NC.GrapherBasedP 11310 . 11815) (
NC.GraphNodeLinkIconUpdate 11817 . 12897)) (12958 15380 (NC.GraphAddNodeFn 12968 . 14033) (
NC.GraphDeleteNodeFn 14035 . 14303) (NC.GraphAddLinkFn 14305 . 14570) (NC.GraphDeleteLinkFn 14572 . 
14840) (NC.GraphMoveNodeFn 14842 . 15108) (NC.GraphFontChangeFn 15110 . 15378)) (15459 16520 (
NC.TranslateWindowPositionToGraphPosition 15469 . 15695) (NC.InsertLinkInGraph 15697 . 16518)) (16553 
17822 (NC.AddGraphSubstance 16563 . 17820)) (17876 18892 (NC.GraphCardShrinkFn 17886 . 18890)) (24370 
26167 (NC.NoteCardsGraphP 24380 . 24715) (NC.MakeExternalGraphCopy 24717 . 26165)))))
STOP