(FILECREATED "30-Jul-86 19:25:12" {QV}<NOTECARDS>1.3K>FGHPATCH096.;2 8692
changes to: (VARS FGHPATCH096COMS)
(FNS NC.RobustReadCardPart NC.BuildBadCardsList)
previous date: "30-Jul-86 19:07:12" {QV}<NOTECARDS>1.3K>FGHPATCH096.;1)
(* Copyright (c) 1986 by Xerox Corporation. All rights reserved.)
(PRETTYCOMPRINT FGHPATCH096COMS)
(RPAQQ FGHPATCH096COMS ((* * Fix to remove errant calls to NCP.ValidCardType)
(FNS NC.RobustReadCardPart NC.BuildBadCardsList)))
(* * Fix to remove errant calls to NCP.ValidCardType)
(DEFINEQ
(NC.RobustReadCardPart
(LAMBDA (NoteFile ReadSubstancesFlg MessageWin EndPtr) (* fgh: "30-Jul-86 19:10")
(* * Assume stream is positioned at start of a card part. Try to read one and modify scavenger array according to
what we find.)
(* * rht 9/17/85: Now returns ID rather than litatom SUCCESS is wins.)
(* * rht 12/1/85: Updated to handle new notefile and card object formats.)
(* * rht 3/22/86: substance ptrs for bad card types are no longer put on card type's prop list.
Now they're stored in an assoc list hung off a WINDOWPROP.)
(* * fgh 5/1/86 Fixed bug in previous fix. Code was bombing the first time it tried to put something on a
nonexistent assoc list. Put in a COND to create the assoc list if it isn't already created.)
(* * fgh 7/30/86 Replaced call to NCP.ValidCardType with call to NCP.CardTypeP)
(LET ((Stream (fetch (NoteFile Stream) of NoteFile))
IdentifierAndVersionNum IdentifierAtom Date UID Card Title ToLinks FromLinks GlobalLinks
PropList Type SubstanceLength CardPartLength CurPtr UnknownCardTypesSubstancePtrs)
(OR EndPtr (SETQ EndPtr (GETEOFPTR Stream)))
(SETQ CurPtr (GETFILEPTR Stream))
(if (AND (SETQ CardPartLength (NC.ReadPtr Stream 3))
(LEQ (PLUS CurPtr CardPartLength)
EndPtr)
(SETQ IdentifierAndVersionNum (NC.RobustReadItemIdentifier Stream))
(if (GEQ (CDR IdentifierAndVersionNum)
1)
then (SETQ Date (NC.RobustReadDate Stream))
else T)
(SETQ UID (NC.RobustReadUID Stream))
(SETQ Card (OR (NC.CardFromUID UID NoteFile)
(NC.GetNewCard NoteFile NIL UID))))
then (SETQ Date (CAR Date))
(SETQ IdentifierAtom (CAR IdentifierAndVersionNum))
(if (COND
((EQ IdentifierAtom NC.TitlesIdentifier)
(* Hoping to get a healthy title.)
(if (AND (SETQ Title (NC.RobustReadString Stream))
(NC.AtEndOfItemP Stream EndPtr))
then (NC.SetScavengerTitleInfo Card
(CONS (LIST CurPtr Date
Title)
(
NC.FetchScavengerTitleInfo
Card)))))
((EQ IdentifierAtom NC.PropsIdentifier)
(* Hoping to get a healthy prop list.)
(if (AND (SETQ PropList (NC.RobustReadList Stream))
(NC.AtEndOfItemP Stream))
then (NC.SetScavengerPropListInfo
Card
(CONS (LIST CurPtr Date (LENGTH (CAR PropList)))
(NC.FetchScavengerPropListInfo Card)))))
((EQ IdentifierAtom NC.LinksIdentifier)
(* Hoping to get healthy links.
Try to read three lists: ToLinks, FromLinks, and
Global links.)
(if (AND (SETQ ToLinks (NC.RobustReadLinks Stream NoteFile))
(SETQ FromLinks (NC.RobustReadLinks Stream NoteFile))
(SETQ GlobalLinks (NC.RobustReadLinks Stream NoteFile))
(NC.AtEndOfItemP Stream EndPtr))
then (NC.SetScavengerLinksInfo
Card
(CONS (LIST CurPtr Date (LIST (LENGTH
(CAR ToLinks))
(LENGTH
(CAR FromLinks))
(LENGTH
(CAR GlobalLinks)))
)
(NC.FetchScavengerLinksInfo Card)))))
((EQ IdentifierAtom NC.ItemIdentifier)
(* Hoping to get healthy substance.)
(if (AND (SETQ Type (CAR (NC.RobustReadAtom Stream)))
(NC.RobustReadRegion Stream EndPtr)
(SETQ SubstanceLength (NC.CheckForValidSubstance
Stream EndPtr Card Type ReadSubstancesFlg))
(NC.AtEndOfItemP Stream))
then (if (NOT (NCP.CardTypeP Type))
then (* Code for this card part type has not been loaded.)
(WINDOWADDPROP MessageWin (QUOTE
UNKNOWNCARDTYPESLIST)
Type)
(* Save the pointer to the substance card part on an
assoc list)
(COND
((SETQ UnknownCardTypesSubstancePtrs
(WINDOWPROP MessageWin (QUOTE
UNKNOWNCARDTYPESSUBSTANCEPTRS)))
(LISTPUT UnknownCardTypesSubstancePtrs Type
(CONS CurPtr (LISTGET
UnknownCardTypesSubstancePtrs
Type))))
(T (WINDOWPROP MessageWin (QUOTE
UNKNOWNCARDTYPESSUBSTANCEPTRS)
(LIST Type (LIST CurPtr))))
))
(NC.SetScavengerMainDataInfo
Card
(CONS (LIST CurPtr Date Type (OR SubstanceLength
(QUOTE
UNKNOWNCARDTYPE)))
(NC.FetchScavengerMainDataInfo Card))))))
then Card)))))
(NC.BuildBadCardsList
(LAMBDA (NoteFile MessageWin FirstTimeFlg InterestedWindow)
(* fgh: "30-Jul-86 19:10")
(* * Returns a list of all IDs with illegal index pointers, i.e. pointers not to valid data areas recorded in
ScavengerArray. Also record those IDs with pointers beyond checkpoint ptr.)
(* * rht 9/17/85: Now takes MessageWin argument so can extract the MaxIDNum off its props.)
(* * rht 12/7/85: Modified to reflect new card and notefile object formats.)
(* * fgh 2/4/86 Fixed minor bug where UNKNOWNCARDTYPE apeeared in a singleton list.)
(* * rht 7/16/86: Added InterestedWindow arg.)
(* * fgh 7/30/86 Replaced call to NCP.ValidCardType with call to NCP.CardTypeP)
(LET ((CardTotal (SUB1 (fetch (NoteFile NextIndexNum) of NoteFile)))
(CheckptPtr (fetch (NoteFile CheckptPtr) of NoteFile))
(Num 0)
Results)
(NC.PrintMsg InterestedWindow T "Building bad cards list ..." (CHARACTER 13)
"Processing item number " 1 " out of " CardTotal ".")
(NC.MapCards NoteFile
(FUNCTION (LAMBDA (Card)
(LET (Problems)
(SETQ Num (ADD1 Num))
(if (ZEROP (IREMAINDER Num 100))
then (NC.PrintMsg InterestedWindow T
"Building bad cards list ..."
(CHARACTER 13)
"Processing item number " Num " out of "
CardTotal "."))
(* If card is not worthless, has reasonable status,
and at least one problem, then make a bad card entry
for it.)
(if (AND (NOT (NC.WorthlessCardP Card))
(FMEMB (NC.FetchStatus Card)
(QUOTE (ACTIVE DELETED SPECIAL BADPOINTER
NIL)))
(SETQ Problems
(LET ((IndexLocsProblems (NC.CheckIndexLocs Card
MessageWin
CheckptPtr
FirstTimeFlg))
(Type (NC.FetchTypeFromScavengerInfo Card)))
(if (AND Type (NOT (NCP.CardTypeP Type)))
then (CONS (QUOTE UNKNOWNCARDTYPE)
IndexLocsProblems)
else IndexLocsProblems))))
then (push Results (BQUOTE (, Card , (NC.FetchStatus
Card)
,
(NC.EncodeCardProblems
Problems)
,@ Problems))))))))
(NC.ClearMsg InterestedWindow T)
Results)))
)
(PUTPROPS FGHPATCH096 COPYRIGHT ("Xerox Corporation" 1986))
(DECLARE: DONTCOPY
(FILEMAP (NIL (560 8610 (NC.RobustReadCardPart 570 . 5935) (NC.BuildBadCardsList 5937 . 8608)))))
STOP