(FILECREATED " 1-May-86 01:11:13" {QV}<NOTECARDS>1.3K>FGHPATCH026.;1 5958   

      changes to:  (VARS FGHPATCH026COMS)
		   (FNS NC.RobustReadCardPart))


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

(PRETTYCOMPRINT FGHPATCH026COMS)

(RPAQQ FGHPATCH026COMS ((* * From NCREPAIR Fix to an earlier fix which was causing 
			     NC.RobustReadCardPart to bomb with Illegal NIL arg under LISTPUT)
			  (FNS NC.RobustReadCardPart)))
(* * From NCREPAIR Fix to an earlier fix which was causing NC.RobustReadCardPart to bomb with 
Illegal NIL arg under LISTPUT)

(DEFINEQ

(NC.RobustReadCardPart
  (LAMBDA (NoteFile ReadSubstancesFlg MessageWin EndPtr)     (* fgh: " 1-May-86 01:02")

          (* * 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.)


    (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.ValidCardType 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)))))
)
(PUTPROPS FGHPATCH026 COPYRIGHT ("Xerox Corporation" 1986))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (592 5876 (NC.RobustReadCardPart 602 . 5874)))))
STOP