(FILECREATED "31-Jul-86 20:39:20" {QV}<NOTECARDS>1.3K>RHTPATCH082.;2 25019  

      changes to:  (FNS NC.DumpExportableCardToDoc NC.MakeDocument NC.DumpFileBoxToDoc 
			NC.DumpNoteCardToDoc)
		   (VARS RHTPATCH082COMS)

      previous date: "31-Jul-86 20:22:29" {QV}<NOTECARDS>1.3K>RHTPATCH082.;1)


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

(PRETTYCOMPRINT RHTPATCH082COMS)

(RPAQQ RHTPATCH082COMS ((* * Changes to NCDOCUMENTCARD to handle inserting user defined card types 
			     into a document.)
			  (* * New function for NCDOCUMENTCARD)
			  (FNS NC.DumpExportableCardToDoc)
			  (* * Changes to NCDOCUMENTCARD)
			  (FNS NC.MakeDocument NC.DumpFileBoxToDoc NC.DumpNoteCardToDoc)
			  (* * PLEASE REMOVE NC.DumpGraphOrSketchCardToDoc from NCDOCUMENTCARD. It is 
			     no longer called.)))
(* * Changes to NCDOCUMENTCARD to handle inserting user defined card types into a document.)

(* * New function for NCDOCUMENTCARD)

(DEFINEQ

(NC.DumpExportableCardToDoc
  (LAMBDA (Card DocCard DocStream SectionNum BoxNum HeadingsFromFileboxes TitlesFromNoteCards 
		BuildBackLinks CopyEmbeddedLinks ExpandEmbeddedLinks CardType)
                                                             (* rht: "31-Jul-86 20:38")

          (* * Dump the CardID sketch or graph card to the document card DocStream.)



          (* * rht 9/16/85: Now handles cr's around titles using para leading.)



          (* * fgh 11/17/85 Updated to handle card objects and removal of SubstanceTypes.)



          (* * rht 7/31/86: Now can handle other card types than Graph or Sketch based ones, but they must have an 
	  appropriate fn on the ExportSubstanceFn property of the atom. That fn should return either an imageobj or a 
	  textstream.)


    (PROG ((CardStream (NC.FetchSubstance Card))
	     (DocObj (TEXTOBJ DocStream))
	     OldLoc ThingToInsert)
	    (NC.AddCRIfNeeded DocStream)
	    (SETQ OldLoc (fetch (TEXTOBJ TEXTLEN) of DocObj))
	    (AND (NEQ TitlesFromNoteCards (QUOTE NONE))
		   (NC.AppendStringToStream DocStream (CONCAT (NC.RetrieveTitle Card))
					      (EQ TitlesFromNoteCards (QUOTE Bold))))
	    (AND (FMEMB BuildBackLinks (QUOTE (ToCards ToCardsBoxes)))
		   (NCP.LocalGlobalLink NC.DocBackPtrLinkLabel DocCard Card (QUOTE END)
					  (create LINKDISPLAYMODE
						    ATTACHBITMAPFLG ← T)))
	    (COND
	      ((GREATERP (fetch (TEXTOBJ TEXTLEN) of DocObj)
			   OldLoc)
		(NC.AddCRIfNeeded DocStream)
		(NC.ChangeParaLeading DocStream)))
	    (COND
	      ((NC.FetchUserDataProp Card (QUOTE SeenBefore))
		(NC.PrintMsg NIL NIL (NC.RetrieveTitle Card)
			       " only expanded once in this cycle."
			       (CHARACTER 13))
		(RETURN)))
	    (NC.SetUserDataProp DocCard (QUOTE SeenCards)
				  (CONS Card (NC.FetchUserDataProp DocCard (QUOTE SeenCards))))
	    (NC.SetUserDataProp Card (QUOTE SeenBefore)
				  T)

          (* * Stick an imageobj made from the card into the document. Also might be a textstream computed by the card type's
	  ExportSubstanceFn.)


	    (SETQ ThingToInsert (COND
		((NCP.GraphBasedP CardType)
		  (GRAPHEROBJ CardStream))
		((NC.SketchBasedP CardType)
		  (MAKE.IMAGE.OBJECT.OF.SKETCH CardStream (NC.FetchRegionViewed Card)
						 (NC.FetchScale Card)))
		((LET ((ExportSubstanceFn (GETPROP CardType (QUOTE ExportSubstanceFn))))
		      (AND ExportSubstanceFn (APPLY* ExportSubstanceFn CardStream))))))
	    (AND CardStream (COND
		     ((IMAGEOBJP ThingToInsert)
		       (TEDIT.INSERT.OBJECT ThingToInsert DocStream))
		     ((TEXTSTREAMP ThingToInsert)
		       (TEDIT.INCLUDE DocStream ThingToInsert))))

          (* * Step through list of notecard imageobjs in the card we're working on and either expand or copy or ignore each 
	  according to values of ExpandEmbeddedLinks and CopyEmbeddedLinks.)


	    (for Link in (CAR (NC.CollectReferences Card NIL NIL NIL))
	       bind LinkLabel ToCard ToCardType ActiveFlg ExpandFlg CopyFlg AlreadyExpanded
	       eachtime (BLOCK)
	       do (SETQ LinkLabel (fetch (Link Label) of Link))
		    (SETQ CopyFlg (OR (EQ CopyEmbeddedLinks (QUOTE ALL))
					  (AND (LISTP CopyEmbeddedLinks)
						 (FMEMB LinkLabel CopyEmbeddedLinks))))
		    (SETQ ExpandFlg (OR (EQ ExpandEmbeddedLinks (QUOTE ALL))
					    (AND (LISTP ExpandEmbeddedLinks)
						   (FMEMB LinkLabel ExpandEmbeddedLinks))))
		    (COND
		      ((AND (SETQ AlreadyExpanded (NC.FetchUserDataProp (SETQ ToCard
										(fetch
										  (Link 
										  DestinationCard)
										   of Link))
									      (QUOTE SeenBefore)))
			      ExpandFlg)
			(NC.PrintMsg NIL NIL (NC.RetrieveTitle ToCard)
				       " only expanded once in this cycle."
				       (CHARACTER 13))))
		    (COND
		      ((OR CopyFlg (AND ExpandFlg AlreadyExpanded))
                                                             (* Copy this link.)
			(NCP.LocalGlobalLink LinkLabel DocCard ToCard (QUOTE END))))
		    (COND
		      ((AND ExpandFlg (NOT AlreadyExpanded))
                                                             (* Expand this link. Check type and make recursive 
							     call.)
			(SETQ ActiveFlg (NC.ActiveCardP ToCard))
			(SETQ ToCardType (NC.RetrieveType ToCard))
			(COND
			  ((EQ ToCardType (QUOTE FileBox))
			    (OR ActiveFlg (NC.GetNoteCard ToCard))
			    (NC.DumpFileBoxToDoc ToCard DocCard DocStream
						   (COND
						     ((EQUAL SectionNum "")
						       (CONCAT BoxNum))
						     (T (CONCAT SectionNum "." BoxNum)))
						   HeadingsFromFileboxes TitlesFromNoteCards 
						   BuildBackLinks CopyEmbeddedLinks 
						   ExpandEmbeddedLinks)
			    (SETQ BoxNum (ADD1 BoxNum))
			    (OR ActiveFlg (NC.DeactivateCard ToCard)))
			  (T (COND
			       ((NC.TEditBasedP ToCardType)
				 (OR ActiveFlg (NC.GetNoteCard ToCard))
				 (SETQ BoxNum
				   (NC.DumpNoteCardToDoc ToCard DocCard DocStream SectionNum BoxNum 
							   HeadingsFromFileboxes TitlesFromNoteCards 
							   BuildBackLinks CopyEmbeddedLinks 
							   ExpandEmbeddedLinks))
				 (OR ActiveFlg (NC.DeactivateCard DocCard)))
			       ((OR (NC.SketchBasedP ToCardType)
				      (NCP.GraphBasedP ToCardType)
				      (GETPROP ToCardType (QUOTE ExportSubstanceFn)))
				 (OR ActiveFlg (NC.GetNoteCard ToCard))
				 (SETQ BoxNum
				   (NC.DumpExportableCardToDoc ToCard DocCard DocStream SectionNum 
								 BoxNum HeadingsFromFileboxes 
								 TitlesFromNoteCards BuildBackLinks 
								 CopyEmbeddedLinks 
								 ExpandEmbeddedLinks ToCardType))
				 (OR ActiveFlg (NC.DeactivateCard ToCard)))
			       (T (NC.PrintMsg NIL NIL "Ignoring non-exportable card "
						 (NC.RetrieveTitle ToCard)
						 (CHARACTER 13))))))))
	       finally (TEDIT.SETSEL DocStream (ADD1 (fetch TEXTLEN of DocObj))
					 0
					 (QUOTE RIGHT)))
	    (NC.SetUserDataProp Card (QUOTE SeenBefore)
				  NIL)
	    (RETURN BoxNum))))
)
(* * Changes to NCDOCUMENTCARD)

(DEFINEQ

(NC.MakeDocument
  (LAMBDA (Card Title NoDisplayFlg CardIdentifier)           (* rht: "31-Jul-86 20:30")

          (* * Called from a filebox's title bar. Makes a document by smashing all the descendant cards's text together.
	  Ask user if wants numbered section headings and titles. The former are made from FileBox titles, the latter from 
	  notecard titles. Delete embedded links at the end if the user desires.)



          (* * rht 10/22/84: Hacked to be callable from Programmer's interface.)



          (* * rht 11/17/84: Checks for cancel when choosing rootID and also when setting parameters.)



          (* * rht 8/25/85: Now dumps sketch and graph cards as well as text cards.)



          (* * rht 9/16/85: Now handles cr's around titles using para leading.)



          (* * fgh 11/178/85 Updated to handle Card and NoteFile objects.)



          (* * kirk 27Jun86 Moved NC.RetrieveTitle call so does not break when user Cancels)



          (* * rht 7/31/86: Now checks for card types having ExportSubstanceFn prop.)


    (PROG (RootCard RootTitle DocWindow DocCard DocWindowOrCard DocStream HeadingsFromFileboxes 
		      TitlesFromNoteCards BuildBackLinks CopyEmbeddedLinks ExpandEmbeddedLinks 
		      InspectWin WasActive RootType RootSubstanceType)
	    (OR NoDisplayFlg (SPAWN.MOUSE))
	    (SETQ DocWindowOrCard (NC.MakeNoteCard (QUOTE Text)
						       NoteFile "Document" NoDisplayFlg NIL Card))
	    (COND
	      (NoDisplayFlg (SETQ DocWindow NIL)
			    (SETQ DocCard DocWindowOrCard))
	      (T (SETQ DocWindow DocWindowOrCard)
		 (SETQ DocCard (NC.CoerceToCard DocWindow))))
                                                             (* NC.MakeNoteCard either returned an Card or a window
							     depending on NoDisplayFlg.)
	    (SETQ RootCard (COND
		((NC.CoerceToCard CardIdentifier))
		(T (PROGN (NC.SelectNoteCards T NIL NC.SelectingCardMenu DocWindow NIL 
			"Please select the Note Card or File Box the document should start from.")))))
	    (COND
	      ((NOT RootCard)
		(NC.DeleteNoteCards Card T)
		(RETURN NIL)))
	    (SETQ RootTitle (NC.RetrieveTitle RootCard))
	    (NC.SetTitle DocCard (CONCAT "Document from %"" RootTitle "%""))
	    (AND DocWindow (WINDOWPROP DocWindow (QUOTE TITLE)
					   (NC.RetrieveTitle DocCard)))
	    (SETQ DocStream (NC.FetchSubstance DocCard))

          (* * Get MakeDocument parameters from user via inspector window.)


	    (COND
	      ((NOT NoDisplayFlg)
		(SETQ InspectWin (NC.BuildMakeDocInspector DocWindow))
		(TOTOPW InspectWin)
		(for while (OPENWP InspectWin) do (BLOCK))))
	    (COND
	      ((EQ (GETPROP (QUOTE NC.MakeDocParameters)
				(QUOTE --DONE--))
		     (QUOTE QUIT))
		(PUTPROP (QUOTE NC.MakeDocParameters)
			   (QUOTE --DONE--)
			   (QUOTE --CANCEL--))
		(NC.DeleteNoteCards Card T)
		(RETURN NIL)))
	    (SETQ HeadingsFromFileboxes (GETPROP (QUOTE NC.MakeDocParameters)
						     (QUOTE HeadingsFromFileboxes)))
	    (SETQ TitlesFromNoteCards (GETPROP (QUOTE NC.MakeDocParameters)
						   (QUOTE TitlesFromNoteCards)))
	    (SETQ BuildBackLinks (GETPROP (QUOTE NC.MakeDocParameters)
					      (QUOTE BuildBackLinks)))
	    (SETQ CopyEmbeddedLinks (GETPROP (QUOTE NC.MakeDocParameters)
						 (QUOTE CopyEmbeddedLinks)))
	    (SETQ ExpandEmbeddedLinks (GETPROP (QUOTE NC.MakeDocParameters)
						   (QUOTE ExpandEmbeddedLinks)))

          (* * Call recursive routine to dump filebox.)


	    (RESETLST (RESETSAVE (CURSOR WAITINGCURSOR))
			(NC.PrintMsg DocWindow NIL "Collecting text from descendant cards ... ")

          (* * Clean up the SeenBefore markers placed on the cards and boxes just copied.)


			(RESETSAVE NIL (QUOTE (PROGN (for Card in (NC.FetchUserDataProp
									      DocCard
									      (QUOTE SeenCards))
							      do (NC.SetUserDataProp
								     Card
								     (QUOTE SeenBefore)
								     NIL))
							   (NC.SetUserDataProp DocCard
										 (QUOTE SeenCards)
										 NIL))))

          (* * Unbelievably kludgy hack to get around Intermezzo TEdit bug. Just insert and delete a CR.)


			(TEDIT.INSERT DocStream NC.CRString 1)
			(TEDIT.DELETE DocStream 1 1)
			(OR (SETQ WasActive (NC.ActiveCardP RootCard))
			      (NC.GetNoteCard RootCard))
			(SETQ RootType (NC.RetrieveType RootCard))
			(COND
			  ((EQ RootType (QUOTE FileBox))
			    (NC.DumpFileBoxToDoc RootCard DocCard DocStream "" 
						   HeadingsFromFileboxes TitlesFromNoteCards 
						   BuildBackLinks CopyEmbeddedLinks 
						   ExpandEmbeddedLinks))
			  (T (COND
			       ((NC.TEditBasedP RootType)
				 (NC.DumpNoteCardToDoc RootCard DocCard DocStream "" 1 
							 HeadingsFromFileboxes TitlesFromNoteCards 
							 BuildBackLinks CopyEmbeddedLinks 
							 ExpandEmbeddedLinks))
			       ((OR (NC.SketchBasedP RootType)
				      (NCP.GraphBasedP RootType)
				      (GETPROP RootType (QUOTE ExportSubstanceFn)))
				 (NC.DumpExportableCardToDoc RootCard DocCard DocStream "" 1 
							       HeadingsFromFileboxes 
							       TitlesFromNoteCards BuildBackLinks 
							       CopyEmbeddedLinks ExpandEmbeddedLinks 
							       RootType))
			       (T (NC.PrintMsg NIL NIL 
						 "Can't make document from non-exportable card "
						 (NC.RetrieveTitle RootCard)
						 (CHARACTER 13))))))
			(OR WasActive (NC.DeactivateCard RootCard))
			(NC.PrintMsg DocWindow NIL "Done!"))
	    (COND
	      ((NOT NoDisplayFlg)
		(BLOCK 250)
		(NC.ClearMsg DocWindow T)))
	    (RETURN DocWindowOrCard))))

(NC.DumpFileBoxToDoc
  (LAMBDA (FileBoxCard DocCard DocStream CurSection HeadingsFromFileboxes TitlesFromNoteCards 
		       BuildBackLinks CopyEmbeddedLinks ExpandEmbeddedLinks)
                                                             (* rht: "31-Jul-86 20:37")

          (* * Dump the contents of FileboxID to DocStream by recursively dumping all of its children.
	  Keep track of the section numbers in case HeadingsFromFileboxes = Numbered. Insert back pointers to the source 
	  cards and/or boxes depending on value of BuildBackpointers. Embedded links (or some subset of them) may be copied 
	  or expanded depending on the values of CopyEmbeddedLinks and ExpandEmbeddedLinks.)



          (* * rht 8/25/85: Fixed to handle sketch and graph cards.)



          (* * rht 9/16/85: Now handles cr's around titles using para leading.)



          (* * fgh 11/178/85 Updated to handle Card and NoteFile objects.)



          (* * rht 7/31/86: Now checks for card types having ExportSubstanceFn prop.)


    (PROG ((DocObject (TEXTOBJ DocStream))
	     OldLoc)
	    (NC.AddCRIfNeeded DocStream)
	    (SETQ OldLoc (fetch (TEXTOBJ TEXTLEN) of DocObject))
	    (COND
	      ((AND (EQ HeadingsFromFileboxes (QUOTE NumberedBold))
		      (NOT (ZEROP (NCHARS CurSection))))
		(NC.AppendStringToStream DocStream (CONCAT CurSection " ")
					   T)))
	    (AND (NEQ HeadingsFromFileboxes (QUOTE NONE))
		   (NC.AppendStringToStream DocStream (CONCAT (NC.RetrieveTitle FileBoxCard))
					      T))
	    (AND (FMEMB BuildBackLinks (QUOTE (ToBoxes ToCardsBoxes)))
		   (NCP.LocalGlobalLink NC.DocBackPtrLinkLabel DocCard FileBoxCard (QUOTE END)
					  (QUOTE Icon)))
	    (COND
	      ((GREATERP (fetch (TEXTOBJ TEXTLEN) of DocObject)
			   OldLoc)
		(NC.AddCRIfNeeded DocStream)
		(NC.ChangeParaLeading DocStream)))
	    (COND
	      ((NC.FetchUserDataProp FileBoxCard (QUOTE SeenBefore))
		(NC.PrintMsg NIL NIL (NC.RetrieveTitle FileBoxCard)
			       " only expanded once in this cycle.")
		(RETURN)))
	    (NC.SetUserDataProp DocCard (QUOTE SeenCards)
				  (CONS FileBoxCard (NC.FetchUserDataProp DocCard (QUOTE 
											SeenCards))))
	    (NC.SetUserDataProp FileBoxCard (QUOTE SeenBefore)
				  T)
	    (for Link in (NC.FetchToLinksInOrder FileBoxCard) bind ChildCard ActiveP Type
									   (SubSectionNum ← 1)
	       eachtime (BLOCK) when (FMEMB (fetch (Link Label) of Link)
						    (BQUOTE (, NC.FiledCardLinkLabel , 
								 NC.SubBoxLinkLabel)))
	       do (SETQ ChildCard (fetch (Link DestinationCard) of Link))
		    (SETQ ActiveP (NC.ActiveCardP ChildCard))
		    (COND
		      ((EQ (SETQ Type (NC.RetrieveType ChildCard))
			     (QUOTE FileBox))
			(OR ActiveP (NC.GetNoteCard ChildCard))
			(NC.DumpFileBoxToDoc ChildCard DocCard DocStream
					       (COND
						 ((EQUAL "" CurSection)
						   (CONCAT SubSectionNum))
						 (T (CONCAT CurSection "." SubSectionNum)))
					       HeadingsFromFileboxes TitlesFromNoteCards 
					       BuildBackLinks CopyEmbeddedLinks ExpandEmbeddedLinks)
			(SETQ SubSectionNum (ADD1 SubSectionNum))
			(OR ActiveP (NC.DeactivateCard ChildCard)))
		      (T (COND
			   ((NC.TEditBasedP Type)
			     (OR ActiveP (NC.GetNoteCard ChildCard))
			     (SETQ SubSectionNum
			       (NC.DumpNoteCardToDoc ChildCard DocCard DocStream CurSection 
						       SubSectionNum HeadingsFromFileboxes 
						       TitlesFromNoteCards BuildBackLinks 
						       CopyEmbeddedLinks ExpandEmbeddedLinks))
			     (OR ActiveP (NC.DeactivateCard ChildCard)))
			   ((OR (NC.SketchBasedP Type)
				  (NCP.GraphBasedP Type)
				  (GETPROP Type (QUOTE ExportSubstanceFn)))
			     (OR ActiveP (NC.GetNoteCard ChildCard))
			     (SETQ SubSectionNum
			       (NC.DumpExportableCardToDoc ChildCard DocCard DocStream CurSection 
							     SubSectionNum HeadingsFromFileboxes 
							     TitlesFromNoteCards BuildBackLinks 
							     CopyEmbeddedLinks ExpandEmbeddedLinks 
							     Type))
			     (OR ActiveP (NC.DeactivateCard ChildCard)))
			   (T (NC.PrintMsg NIL NIL "Ignoring non-exportable card " (
					       NC.RetrieveTitle ChildCard)
					     (CHARACTER 13)))))))
	    (NC.SetUserDataProp FileBoxCard (QUOTE SeenBefore)
				  NIL))))

(NC.DumpNoteCardToDoc
  (LAMBDA (Card DocCard DocStream SectionNum BoxNum HeadingsFromFileboxes TitlesFromNoteCards 
		BuildBackLinks CopyEmbeddedLinks ExpandEmbeddedLinks)
                                                             (* rht: "31-Jul-86 20:37")

          (* * Dump the CardID notecard to the document card DocStream.)



          (* * rht 8/25/85: Fixed to handle sketch and graph cards.)



          (* * rht 9/16/85: Now handles cr's around titles using para leading.)



          (* * fgh 11/178/85 Updated to handle Card and NoteFile objects.)



          (* * rht 7/31/86: Now checks for card types having ExportSubstanceFn prop.)


    (PROG ((CardStream (NC.FetchSubstance Card))
	     (DocObj (TEXTOBJ DocStream))
	     CardObj OldLoc)
	    (SETQ CardObj (TEXTOBJ CardStream))
	    (NC.AddCRIfNeeded DocStream)
	    (SETQ OldLoc (fetch (TEXTOBJ TEXTLEN) of DocObj))
	    (AND (NEQ TitlesFromNoteCards (QUOTE NONE))
		   (NC.AppendStringToStream DocStream (CONCAT (NC.RetrieveTitle Card))
					      (EQ TitlesFromNoteCards (QUOTE Bold))))
	    (AND (FMEMB BuildBackLinks (QUOTE (ToCards ToCardsBoxes)))
		   (NCP.LocalGlobalLink NC.DocBackPtrLinkLabel DocCard Card (QUOTE END)
					  (QUOTE Icon)))
	    (COND
	      ((GREATERP (fetch (TEXTOBJ TEXTLEN) of DocObj)
			   OldLoc)
		(NC.AddCRIfNeeded DocStream)
		(NC.ChangeParaLeading DocStream)))
	    (COND
	      ((NC.FetchUserDataProp Card (QUOTE SeenBefore))
		(NC.PrintMsg NIL NIL (NC.RetrieveTitle Card)
			       " only expanded once in this cycle."
			       (CHARACTER 13))
		(RETURN)))
	    (NC.SetUserDataProp DocCard (QUOTE SeenCards)
				  (CONS Card (NC.FetchUserDataProp DocCard (QUOTE SeenCards))))
	    (NC.SetUserDataProp Card (QUOTE SeenBefore)
				  T)

          (* * Step through list of notecard imageobjs in the card we're working on and either expand or copy or ignore each 
	  according to values of ExpandEmbeddedLinks and CopyEmbeddedLinks.)


	    (for Object in (TEDIT.LIST.OF.OBJECTS CardObj (FUNCTION NC.LinkIconImageObjP))
	       bind LinkSpec LinkLabel ToCard ToCardType (LastLoc ← 1)
		      (CurLoc ← 0)
		      ActiveP ExpandP CopyP AlreadyExpanded
	       eachtime (BLOCK)
	       do ((SETQ LinkSpec (NC.FetchLinkFromLinkIcon (CAR Object)))
		     (SETQ LinkLabel (fetch (Link Label) of LinkSpec))
		     (SETQ CurLoc (CADR Object))         (* Copy over any text between this obj and the last.)
		     (COND
		       ((ILESSP LastLoc CurLoc)
			 (TEDIT.COPY (TEDIT.SETSEL CardStream LastLoc (IDIFFERENCE CurLoc 
											 LastLoc))
				       (TEDIT.SETSEL DocStream (fetch TEXTLEN of DocObj)
						       1
						       (QUOTE RIGHT)))))
		     (SETQ LastLoc (ADD1 CurLoc))
		     (SETQ CopyP (OR (EQ CopyEmbeddedLinks (QUOTE ALL))
					 (AND (LISTP CopyEmbeddedLinks)
						(FMEMB LinkLabel CopyEmbeddedLinks))))
		     (SETQ ExpandP (OR (EQ ExpandEmbeddedLinks (QUOTE ALL))
					   (AND (LISTP ExpandEmbeddedLinks)
						  (FMEMB LinkLabel ExpandEmbeddedLinks))))
		     (COND
		       ((AND (SETQ AlreadyExpanded (NC.FetchUserDataProp (SETQ ToCard
										 (fetch
										   (Link 
										  DestinationCard)
										    of LinkSpec))
									       (QUOTE SeenBefore)))
			       ExpandP)
			 (NC.PrintMsg NIL NIL (NC.RetrieveTitle ToCard)
					" only expanded once in this cycle."
					(CHARACTER 13))))
		     (COND
		       ((OR CopyP (AND ExpandP AlreadyExpanded))
                                                             (* Copy this link.)
			 (TEDIT.COPY (TEDIT.SETSEL CardStream CurLoc 1)
				       (TEDIT.SETSEL DocStream (ADD1 (fetch TEXTLEN
									    of DocObj))
						       0
						       (QUOTE RIGHT)))))
		     (COND
		       ((AND ExpandP (NOT AlreadyExpanded))
                                                             (* Expand this link. Check type and make recursive 
							     call.)
			 (SETQ ActiveP (NC.ActiveCardP ToCard))
			 (SETQ ToCardType (NC.RetrieveType ToCard))
			 (COND
			   ((EQ ToCardType (QUOTE FileBox))
			     (OR ActiveP (NC.GetNoteCard ToCard))
			     (NC.DumpFileBoxToDoc ToCard DocCard DocStream
						    (COND
						      ((EQUAL SectionNum "")
							(CONCAT BoxNum))
						      (T (CONCAT SectionNum "." BoxNum)))
						    HeadingsFromFileboxes TitlesFromNoteCards 
						    BuildBackLinks CopyEmbeddedLinks 
						    ExpandEmbeddedLinks)
			     (SETQ BoxNum (ADD1 BoxNum))
			     (OR ActiveP (NC.DeactivateCard ToCard)))
			   (T (COND
				((NC.TEditBasedP ToCardType)
				  (OR ActiveP (NC.GetNoteCard ToCard))
				  (SETQ BoxNum
				    (NC.DumpNoteCardToDoc ToCard DocCard DocStream SectionNum 
							    BoxNum HeadingsFromFileboxes 
							    TitlesFromNoteCards BuildBackLinks 
							    CopyEmbeddedLinks ExpandEmbeddedLinks))
				  (OR ActiveP (NC.DeactivateCard ToCard)))
				((OR (NC.SketchBasedP ToCardType)
				       (NCP.GraphBasedP ToCardType)
				       (GETPROP ToCardType (QUOTE ExportSubstanceFn)))
				  (OR ActiveP (NC.GetNoteCard ToCard))
				  (SETQ BoxNum
				    (NC.DumpExportableCardToDoc ToCard DocCard DocStream SectionNum 
								  BoxNum HeadingsFromFileboxes 
								  TitlesFromNoteCards BuildBackLinks 
								  CopyEmbeddedLinks 
								  ExpandEmbeddedLinks ToCardType))
				  (OR ActiveP (NC.DeactivateCard ToCard)))
				(T (NC.PrintMsg NIL NIL "Ignoring non-exportable card "
						  (NC.RetrieveTitle ToCard)
						  (CHARACTER 13)))))))))
	       finally (COND
			   ((ILESSP CurLoc (fetch TEXTLEN of CardObj))
			     (TEDIT.COPY (TEDIT.SETSEL CardStream LastLoc
							   (IDIFFERENCE (fetch TEXTLEN
									     of CardObj)
									  CurLoc))
					   (TEDIT.SETSEL DocStream (ADD1 (fetch TEXTLEN
										of DocObj))
							   0
							   (QUOTE RIGHT)))))
			 (TEDIT.SETSEL DocStream (ADD1 (fetch TEXTLEN of DocObj))
					 0
					 (QUOTE RIGHT)))
	    (NC.SetUserDataProp Card (QUOTE SeenBefore)
				  NIL)
	    (RETURN BoxNum))))
)
(* * PLEASE REMOVE NC.DumpGraphOrSketchCardToDoc from NCDOCUMENTCARD. It is no longer called.)

(PUTPROPS RHTPATCH082 COPYRIGHT ("Xerox Corporation" 1986))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (977 7493 (NC.DumpExportableCardToDoc 987 . 7491)) (7532 24836 (NC.MakeDocument 7542 . 
13539) (NC.DumpFileBoxToDoc 13541 . 18199) (NC.DumpNoteCardToDoc 18201 . 24834)))))
STOP