(FILECREATED "14-Nov-86 22:31:05" {QV}<NOTECARDS>1.3K>NEXT>RHTPATCH154.;1 7154
changes to: (VARS RHTPATCH154COMS)
(FNS NC.SmartDeleteLinks))
(* Copyright (c) 1986 by Xerox Corporation. All rights reserved.)
(PRETTYCOMPRINT RHTPATCH154COMS)
(RPAQQ RHTPATCH154COMS ((* * Yet another fix to make card deletion not try to read card substance)
(* * Change to NCLINKS)
(FNS NC.SmartDeleteLinks)))
(* * Yet another fix to make card deletion not try to read card substance)
(* * Change to NCLINKS)
(DEFINEQ
(NC.SmartDeleteLinks
(LAMBDA (ListOfLinks QuietFlg InterestedWindow Don'tPutToBeDeletedCardsFlg)
(* rht: "14-Nov-86 22:28")
(* * Delete a bunch of links efficiently. Sort so that links with same source bunch together.
This way, only read and write each source card once. If a card has the AboutToBeDeletedFlg UID prop set and
Don'tPutToBeDeletedCardsFlg is non-nil, then don't put it down to the file even if changes were made.
Just throw away its cache.)
(* * rht 10/17/86: Now passes non-nil NoOrphanHookFlg to NC.DeleteLink unless destination card is marked as about
to be deleted.)
(* * rht 11/4/86: Now takes Don'tCreateDeletedImageObjFlg arg.)
(* * rht 11/13/86: Undid change of 11/4/86. Now passes non-nil Don'tDelLinkIconFlg to NC.DeleteLink instead like it
used to.)
(* * rht 11/14/86: Avoids call to NC.GetNoteCard for cards about to be deleted.)
(LET (DestCardsw/oLinksCached NumLinksToDelete)
(* * For each destination card, make sure its links are cached. At the same time, collect these cards for future
uncaching.)
(SETQ DestCardsw/oLinksCached (for Link in ListOfLinks bind DestCard
when (NOT (NC.LinksCachedP (SETQ DestCard
(fetch (Link
DestinationCard)
of Link))))
collect (NC.GetLinks DestCard)
DestCard))
(* * Sort the List of links so that links with same source cards bunch together.)
(OR QuietFlg (NC.PrintMsg InterestedWindow T "Sorting " (SETQ NumLinksToDelete
(LENGTH ListOfLinks))
" links prior to deletion."))
(SORT ListOfLinks (FUNCTION (LAMBDA (Link1 Link2)
(LESSP (fetch (Card IndexLoc) of (fetch (Link SourceCard) of Link1))
(fetch (Card IndexLoc) of (fetch (Link SourceCard) of Link2)))))
)
(* * Now bring up source cards one at a time and do the delete of the links.)
(OR QuietFlg (NC.PrintMsg InterestedWindow T "Deleting links: 1 out of "
NumLinksToDelete " ..."))
(for Link in ListOfLinks as i from 1 bind PreviousSourceCard WasNotActiveFlg
SavedFromLinks HadLinksCachedFlg
eachtime (BLOCK) when (NC.ValidLinkP Link)
do (OR QuietFlg (if (ZEROP (REMAINDER i 10))
then (NC.PrintMsg InterestedWindow T "Deleting links: " i
" out of "
NumLinksToDelete " ...")))
(LET ((SourceCard (fetch (Link SourceCard) of Link)))
(if (NOT (NC.SameCardP SourceCard PreviousSourceCard))
then (* Write down changes to previous card's substance.)
(if WasNotActiveFlg
then (* Have to call NC.CardSaveFn first and then
NC.QuitCard with Don'tSaveFlg to avoid
insureProperFiling check.)
(if (AND Don'tPutToBeDeletedCardsFlg
(NC.UIDGetProp (fetch (Card UID)
of PreviousSourceCard)
(QUOTE
AboutToBeDeletedFlg)))
then (* Throw away cache if card about to be deleted.)
(NC.DeactivateCard PreviousSourceCard)
else (NC.CardSaveFn PreviousSourceCard T)
(NC.QuitCard PreviousSourceCard NIL T NIL NIL
NIL NIL T))
(* Recache links for previous card if they were cached
before.)
(if HadLinksCachedFlg
then (NC.GetLinks PreviousSourceCard)))
(* Cache card and overwrite from links with previously
cached ones.)
(if (AND (SETQ WasNotActiveFlg (NOT (NC.ActiveCardP
SourceCard)))
(NOT (NC.UIDGetProp (fetch (Card UID)
of SourceCard)
(QUOTE AboutToBeDeletedFlg))))
then (* Save cached from links for this card.)
(SETQ SavedFromLinks (if (SETQ HadLinksCachedFlg
(NC.LinksCachedP
SourceCard))
then (NC.FetchFromLinks
SourceCard)))
(NC.GetNoteCard SourceCard)
(if HadLinksCachedFlg
then (NC.SetFromLinks SourceCard SavedFromLinks)))
)
(NC.DeleteLink Link (NC.UIDGetProp (fetch (Card UID)
of (fetch (Link DestinationCard)
of Link))
(QUOTE AboutToBeDeletedFlg))
(NC.UIDGetProp (fetch (Card UID)
of (fetch (Link SourceCard)
of Link))
(QUOTE AboutToBeDeletedFlg)))
(SETQ PreviousSourceCard SourceCard))
finally (if (AND WasNotActiveFlg (NC.ValidCardP PreviousSourceCard))
then (* Have to call NC.CardSaveFn first and then
NC.QuitCard with Don'tSaveFlg to avoid
insureProperFiling check.)
(if (AND Don'tPutToBeDeletedCardsFlg (NC.UIDGetProp
(fetch (Card UID) of PreviousSourceCard)
(QUOTE AboutToBeDeletedFlg)))
then (* Throw away cache if card about to be deleted.)
(NC.DeactivateCard PreviousSourceCard)
else (NC.CardSaveFn PreviousSourceCard T)
(NC.QuitCard PreviousSourceCard NIL T NIL NIL NIL NIL T))
(* Recache links for previous card if they were cached
before.)
(if HadLinksCachedFlg
then (NC.GetLinks PreviousSourceCard))))
(* * Finally, write down links for cards whose links have changed and whose links weren't cached when this function
was called.)
(for DestCard in DestCardsw/oLinksCached eachtime (BLOCK) when (
NC.FetchLinksDirtyFlg
DestCard)
do (NC.PutLinks DestCard))
(OR QuietFlg (NC.ClearMsg InterestedWindow T)))))
)
(PUTPROPS RHTPATCH154 COPYRIGHT ("Xerox Corporation" 1986))
(DECLARE: DONTCOPY
(FILEMAP (NIL (542 7072 (NC.SmartDeleteLinks 552 . 7070)))))
STOP