(FILECREATED "29-Oct-87 19:02:42" {QV}<NOTECARDS>1.3KNEXT>RHTPATCH293.;1 3724   

      changes to:  (VARS RHTPATCH293COMS)
		   (FNS NCP.LinkDesc NCP.LinkAnchorDesc))


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

(PRETTYCOMPRINT RHTPATCH293COMS)

(RPAQQ RHTPATCH293COMS ((* * Fixes bug reported by John Tang whereby NCP.LinkDesc did dumb things 
			     when passed a cross file link. It now takes a FollowCrossFileLinkFlg 
			     similar to NCP.CollectCards and NCP.CardNeighbors.)
			  (* * Changes to NCPROGINT)
			  (FNS NCP.LinkDesc NCP.LinkAnchorDesc)))
(* * Fixes bug reported by John Tang whereby NCP.LinkDesc did dumb things when passed a cross 
file link. It now takes a FollowCrossFileLinkFlg similar to NCP.CollectCards and 
NCP.CardNeighbors.)

(* * Changes to NCPROGINT)

(DEFINEQ

(NCP.LinkDesc
  (LAMBDA (Link FollowCrossFileLinkFlg)                      (* rht: "29-Oct-87 18:59")

          (* * Return a list structure which describes Link. It consists of (label <fromdesc> <todesc>) where <fromdesc> and 
	  <todesc> describe the anchoring of the link at each end. They each have the form: (<anchormode> <ID> <loc>))



          (* * rht 11/16/86: Changed call to NCP.ReportError)



          (* * rht 10/29/87: Now takes FollowCrossFileLinkFlg arg.)


    (COND
      ((NCP.ValidLink Link)
	(LIST (fetch (Link Label) of Link)
		(NCP.LinkAnchorDesc Link NIL FollowCrossFileLinkFlg)
		(NCP.LinkAnchorDesc Link T FollowCrossFileLinkFlg)))
      (T (NCP.ReportError (QUOTE NCP.LinkDesc)
			    (CONCAT "No such link: " Link))))))

(NCP.LinkAnchorDesc
  (LAMBDA (Link ToFlg FollowCrossFileLinkFlg)                (* rht: "29-Oct-87 18:58")

          (* * Return a description of the anchoring of Link at one of its endpoints. The description has the form 
	  (<anchormode> <ID> <loc>) If ToFlg is non-nil, then look at the "To" end of the link, otherwise, its "From" end.)



          (* * rht 8/25/86: Now passes non-nil QuietFlg to NCP.UncacheCards.)



          (* * rht 10/29/87: Now takes FollowCrossFileLinkFlg arg.)


    (LET ((DestCard (fetch (Link DestinationCard) of Link))
	  (SrcCard (fetch (Link SourceCard) of Link))
	  Card WasActiveP RemoteCard RemoteCrossFileLinkCard)
         (SETQ Card (if ToFlg
			  then (if (AND FollowCrossFileLinkFlg (NC.CrossFileLinkCardP 
											 DestCard)
					      (SETQ RemoteCard (NC.GetCrossFileLinkDestCard
						  DestCard)))
				     then RemoteCard
				   else DestCard)
			else (if (AND FollowCrossFileLinkFlg (NC.CrossFileLinkCardP SrcCard)
					    (SETQ RemoteCard (NC.GetCrossFileLinkDestCard SrcCard)
					      )
					    (SETQ RemoteCrossFileLinkCard (
						NC.FetchRemoteCrossFileLinkCard SrcCard)))
				   then (PROG1 RemoteCard (SETQ Link (CAR (NCP.GetLinks
										    NIL 
									  RemoteCrossFileLinkCard))))
				 else SrcCard)))
         (if (OR (NC.GlobalLinkP Link)
		     ToFlg)
	     then (LIST (QUOTE GLOBAL)
			    Card NIL)
	   else (COND
		    ((NOT (SETQ WasActiveP (NCP.CardCachedP Card)))
		      (NCP.CacheCards Card)))
		  (for Obj in (CAR (NC.CollectReferences Card NIL NIL T))
		     when (NC.SameLinkP Link (CAR Obj))
		     do (COND
			    ((NOT WasActiveP)
			      (NCP.UncacheCards Card T)))
			  (RETURN (LIST (QUOTE LOCAL)
					    Card
					    (CDR Obj))))))))
)
(PUTPROPS RHTPATCH293 COPYRIGHT ("Xerox Corporation" 1987))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (831 3642 (NCP.LinkDesc 841 . 1657) (NCP.LinkAnchorDesc 1659 . 3640)))))
STOP