(FILECREATED "12-Mar-85 18:46:21" {PHYLUM}<NOTECARDS>RELEASE1.2>LIBRARY>NCFILESUBSTANCE.;3 15041  

      changes to:  (FNS NC.AddFileSubstanceType)

      previous date: "12-Feb-85 23:48:23" {PHYLUM}<NOTECARDS>RELEASE1.2>LIBRARY>NCFILESUBSTANCE.;2)


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

(PRETTYCOMPRINT NCFILESUBSTANCECOMS)

(RPAQQ NCFILESUBSTANCECOMS ((* * Globalvars from elsewhere)
			    (GLOBALVARS NC.DefaultFont PSA.Database NC.DeletedLinkImageObject 
					NC.NoDeleteImageFns NC.AnnoFlg TEDIT.DEFAULT.MENU)
			    (* * Substance functions)
			    (FNS NC.CreateFileSubstance NC.EditFileSubstance NC.FileCopySubstance 
				 NC.FileSubstanceDirtyP NC.GetFileSubstance NC.MarkFileSubstanceDirty 
				 NC.PutFileSubstance NC.QuitFileSubstance NC.FileCardPutFile)
			    (* * Utilities)
			    (FNS NC.FileCardFileVersionNumber NC.FileCardLeftButtonMenu 
				 NC.FileCardMiddleButtonMenu NC.FileCardTitle NC.FetchTextStream 
				 NC.SetTextStream)
			    (* * Add file substance type to SubstanceTypes list)
			    (FNS NC.AddFileSubstanceType)
			    (P (NC.AddFileSubstanceType))))
(* * Globalvars from elsewhere)

(DECLARE: DOEVAL@COMPILE DONTCOPY

(GLOBALVARS NC.DefaultFont PSA.Database NC.DeletedLinkImageObject NC.NoDeleteImageFns NC.AnnoFlg 
	    TEDIT.DEFAULT.MENU)
)
(* * Substance functions)

(DEFINEQ

(NC.CreateFileSubstance
  (LAMBDA (Window DontClearPromptFlg FirstTry)               (* fgh: " 9-Feb-85 18:24")

          (* * Create a file designator)


    (PROG (FileName FullFileName)
          (SETQ FileName (NC.AskUser "Enter file name" ":  " FirstTry (NULL DontClearPromptFlg)
				     Window T NIL))
          (RETURN (PROG1 (COND
			   ((SETQ FullFileName (INFILEP FileName))
			     (PACKFILENAME (QUOTE VERSION)
					   NIL
					   (QUOTE BODY)
					   FullFileName))
			   ((NULL (SETQ FullFileName (FULLNAME FileName (QUOTE NEW))))
			     (NC.PrintMsg Window T FileName " is not a legal file name."
					  (CHARACTER 13)
					  "Please try again."
					  (CHARACTER 13))
			     (NC.CreateFileSubstance Window T))
			   ((NC.YesP (NC.AskUser (CONCAT "Do you want me to create " FullFileName)
						 " ? " "Yes" T Window NIL NIL))
			     (PACKFILENAME (QUOTE VERSION)
					   NIL
					   (QUOTE BODY)
					   (CLOSEF (PROG1 (SETQ FileName (OPENSTREAM FileName
										     (QUOTE OUTPUT)
										     (QUOTE NEW)))
							  (BOUT FileName 32)))))
			   (T NIL))
			 (AND Window (REMOVEPROMPTWINDOW Window)))))))

(NC.EditFileSubstance
  (LAMBDA (ID FileDesignator Region/Position)                (* fgh: "12-Feb-85 23:43")

          (* * Bring up a TEdit window for Card ID whose substance is specified by file designator in Region specified by 
	  Region/Position or by the user.)


    (PROG (Region TEditWindow TEditProcess Title)
          (COND
	    ((AND (SETQ TEditWindow (NC.FetchWindow ID))
		  (SETQ TEditProcess (WINDOWPROP TEditWindow (QUOTE PROCESS))))
	      (TOTOPW TEditWindow)
	      (RPTQ 2 (FLASHW TEditWindow))
	      (TTY.PROCESS TEditProcess)
	      (RETURN TEditWindow)))
          (SETQ Region (NC.DetermineDisplayRegion ID Region/Position))
          (SETQ Title (NC.FetchTitle ID))
          (SETQ TEditWindow (CREATEW Region Title NIL NIL))
          (WINDOWPROP TEditWindow (QUOTE SHRINKFN)
		      (FUNCTION NC.ShrinkFn))
          (WINDOWPROP TEditWindow (QUOTE NoteCardsLeftButtonMenu)
		      (NC.FileCardLeftButtonMenu))
          (WINDOWPROP TEditWindow (QUOTE NoteCardsMiddleButtonMenu)
		      (NC.FileCardMiddleButtonMenu))
          (COND
	    ((NULL (INFILEP FileDesignator))
	      (NC.PrintMsg TEditWindow T FileDesignator " is no longer a file." (CHARACTER 13))
	      (COND
		((NC.YesP (NC.AskUser "Do you want to create the file?" " -- " "Yes" NIL TEditWindow 
				      NIL NIL))
		  (CLOSEF (PROG1 (SETQ FileDesignator (OPENSTREAM FileDesignator (QUOTE OUTPUT)
								  (QUOTE NEW)))
				 (BOUT FileDesignator 32))))
		(T (CLOSEW TEditWindow)
		   (RETURN NIL)))))
          (TEDIT FileDesignator TEditWindow NIL (LIST (QUOTE FONT)
						      NC.DefaultFont
						      (QUOTE TITLEMENUFN)
						      (FUNCTION NC.TEditMenuFn)))
          (NC.SetTextStream ID (WINDOWPROP TEditWindow (QUOTE TEXTSTREAM)))
          (NC.PutProp ID (QUOTE FileVersion)
		      (NC.FileCardFileVersionNumber ID))
          (RETURN TEditWindow))))

(NC.FileCopySubstance
  (LAMBDA (ID FromStream ToStream)                           (* fgh: " 8-Feb-85 03:01")

          (* * Copy file substance from FromStream to ToStream)


    (PROG (EndPtr EndPtrLoc FromStartPtr FromEndPtr)

          (* * Get the FromStream start/end ptrs)


          (SETQ FromStartPtr (NC.GetPtr FromStream))
          (SETQ FromEndPtr (NC.GetPtr FromStream))

          (* * Set up the ToStream start/end ptrs)


          (NC.PutPtr ToStream (IPLUS 6 (GETFILEPTR ToStream)))
          (SETQ EndPtrLoc (GETFILEPTR ToStream))
          (NC.PutPtr ToStream 0)

          (* * Copy the bytes)


          (COPYBYTES FromStream ToStream FromStartPtr FromEndPtr)

          (* * Fix up the ToStream end ptr)


          (SETQ EndPtr (GETFILEPTR ToStream))
          (SETFILEPTR ToStream EndPtrLoc)
          (NC.PutPtr ToStream EndPtr)
          (RETURN T))))

(NC.FileSubstanceDirtyP
  (LAMBDA (ID)                                               (* fgh: "12-Feb-85 23:37")

          (* * Return T is TextSubstance has been changed.)


    (PROG (TextStream)
          (RETURN (AND (SETQ TextStream (NC.FetchTextStream ID))
		       (TEDIT.STREAMCHANGEDP TextStream))))))

(NC.GetFileSubstance
  (LAMBDA (DatabaseStream)                                   (* fgh: "24-Jan-85 19:07")

          (* * Read the File designator from DatabaseStream)



          (* * Skip the start/end ptrs)


    (NC.GetPtr DatabaseStream 6)

          (* * Read the file name)


    (READ DatabaseStream)))

(NC.MarkFileSubstanceDirty
  (LAMBDA (ID ResetFlg)                                      (* fgh: "29-Jan-85 12:34")

          (* * Mark or unmark TextStream of File being changed.)


    (PROG (TextObj (Window (NC.FetchWindow ID)))
          (AND Window (SETQ TextObj (WINDOWPROP Window (QUOTE TEXTOBJ)))
	       (replace (TEXTOBJ \DIRTY) of TextObj with (COND
							   (ResetFlg NIL)
							   (T T)))))))

(NC.PutFileSubstance
  (LAMBDA (ID DatabaseStream)                                (* fgh: "12-Feb-85 23:34")

          (* * Put a file designator onto DatabaseStream)


    (PROG (StartPtr EndPtr EndPtrLoc)

          (* * Save the file for this file card)


          (NC.FileCardPutFile ID DatabaseStream)

          (* * Save the file card stuff in the NoteFile)


          (SETQ StartPtr (IPLUS (GETFILEPTR DatabaseStream)
				6))
          (NC.PutPtr DatabaseStream StartPtr)
          (SETQ EndPtrLoc (GETFILEPTR DatabaseStream))
          (NC.PutPtr DatabaseStream 0)
          (PRINT (NC.FetchSubstance ID)
		 DatabaseStream)
          (SETQ EndPtr (GETFILEPTR DatabaseStream))
          (SETFILEPTR DatabaseStream EndPtrLoc)
          (NC.PutPtr DatabaseStream EndPtr))))

(NC.QuitFileSubstance
  (LAMBDA (WindowOrTextStreamOrID)                           (* fgh: "12-Feb-85 23:46")
    (PROG (Window PromptWindow TextStream TextStreamChanged (ID (NC.CoerceToID WindowOrTextStreamOrID)
								))
          (SETQ TextStream (NC.FetchTextStream ID))
          (SETQ Window (NC.FetchWindow ID))
          (COND
	    (Window (WINDOWDELPROP Window (QUOTE CLOSEFN)
				   (FUNCTION NC.QuitCard))
		    (TEDIT.QUIT TextStream)
		    (AND (SETQ PromptWindow (fetch (TEXTOBJ PROMPTWINDOW) of (TEXTOBJ TextStream)))
			 (CLOSEW PromptWindow))))
          (NC.SetTextStream ID NIL)
          (NC.DeactivateCard ID))))

(NC.FileCardPutFile
  (LAMBDA (WindowOrID DatabaseStream QuittingFlg)            (* fgh: "12-Feb-85 23:36")

          (* * Do the work to save a file card. That is you must put the file if its changed as well as write thee notecard 
	  info to the NoteFile)


    (PROG (Window TextStream (ID (NC.CoerceToID WindowOrID)))
          (SETQ TextStream (NC.FetchTextStream ID))
          (COND
	    ((TEDIT.STREAMCHANGEDP TextStream)
	      (TEDIT.PUT TextStream (NC.FetchSubstance ID))
	      (AND (SETQ Window (NC.FetchWindow ID))
		   (WINDOWPROP Window (QUOTE TITLE)
			       (NC.FileCardTitle ID)))))
          (NC.PutProp ID (QUOTE FileVersion)
		      (NC.FileCardFileVersionNumber ID)))))
)
(* * Utilities)

(DEFINEQ

(NC.FileCardFileVersionNumber
  (LAMBDA (ID)                                               (* fgh: "12-Feb-85 23:39")

          (* * Return the current version number of the file reffered to by the file card ID)


    (FILENAMEFIELD (FULLNAME (fetch (TEXTOBJ TXTFILE) of (TEXTOBJ (NC.FetchTextStream ID))))
		   (QUOTE VERSION))))

(NC.FileCardLeftButtonMenu
  (LAMBDA NIL                                                (* fgh: " 9-Feb-85 20:26")

          (* * Create left button menu for a file card)


    (\TEDIT.CREATEMENU (QUOTE ((Show/Edit% Properties (FUNCTION NC.EditProperties)
						      
					"Brings up an editor for the property list of this card."
						      (SUBITEMS (Edit% Property% List
								  (FUNCTION NC.EditProperties)
								  
					"Brings up an editor for the property list of this card.")
								(Show% Links (FUNCTION 
									       NC.ShowPointers)
									     
					   "Brings up a list of the links to and from this card.")))
				(Title/Sources/FileBoxes (FUNCTION (LAMBDA (TextStream)
							     (NC.AssignTitle TextStream)
							     (NC.AssignSources TextStream)
							     (NC.FileNoteCard TextStream)))
							 
		       "Do all of the operations necessary to file this note card in a file box."
							 (SUBITEMS (Assign% Title
								     (FUNCTION NC.AssignTitle)
								     
						       "Assigns a (new) title to this note card.")
								   (Designate% Sources
								     (FUNCTION NC.AssignSources)
								     
				       "Designate the source(s) of the information in this card.")
								   (File% in% FileBoxes
								     (FUNCTION NC.AddParents)
								     
						 "File this note card in one or more file boxes.")
								   (Unfile% from% FileBoxes
								     (FUNCTION NC.UnfileNoteCard)
								     
					   "Remove this card from one or more of its file boxes.")
								   (Delete% Source
								     (FUNCTION NC.DeleteSource)
								     
							"Delete one of the sources of this card.")))
				(Close% and% Save (FUNCTION NC.QuitCard)
						  
					  "Close this note card after saving it in the NoteFile."
						  (SUBITEMS (Close% and% Save (FUNCTION NC.QuitCard)
									      
					  "Close this note card after saving it in the NoteFile.")
							    (Close% w/o% Saving
							      (FUNCTION NC.QuitWithoutSaving)
							      
		      "Close this note card without saving any changes made since the last Save.")
							    (Save% in% NoteFile
							      (FUNCTION NC.CardSaveFn)
							      
				       "Save this card in the NoteFile but don't close the card.")
							    (Delete% Card (FUNCTION 
									    NC.DeleteNoteCards)
									  
						"Permenantly delete this card from the NoteFile.")))))
		       )))

(NC.FileCardMiddleButtonMenu
  (LAMBDA NIL                                                (* fgh: " 8-Feb-85 21:08")

          (* * Make the Middle Button Menu fort a File card.)


    (\TEDIT.CREATEMENU (DREMOVE NIL (BQUOTE ((Restart% Editor (FUNCTION NC.ResetTEdit)
							      
					      "Resets and restarts the editor for this Card/Box.")
					     ,
					     (AND NC.AnnoFlg (for Item in (fetch (MENU ITEMS)
									     of TEDIT.DEFAULT.MENU)
								when (EQ (CAR Item)
									 (QUOTE Annotate))
								do (RETURN Item)))
					     (Advanced% Editing% Menu (FUNCTION \TEDIT.EXPANDED.MENU)
								      
					  "Brings up the menu for the advanced editing commands.")
					     (Change% Font (FUNCTION NC.\TEDIT.LOOKS)
							   "Changes the font of the selected text.")
					     (Hardcopy (FUNCTION TEDIT.HARDCOPY)
						       "Send a copy to the default printer.")))))))

(NC.FileCardTitle
  (LAMBDA (ID)                                               (* fgh: " 8-Feb-85 22:07")

          (* * Determine the title for file card ID)


    (PROG ((FileName (NC.FetchSubstance ID)))
          (RETURN (CONCAT (FILENAMEFIELD FileName (QUOTE NAME))
			  "."
			  (OR (FILENAMEFIELD FileName (QUOTE EXTENSION))
			      ""))))))

(NC.FetchTextStream
  (LAMBDA (ID)                                               (* fgh: "12-Feb-85 23:36")
    (GETPROP ID (QUOTE NoteCardTextStream))))

(NC.SetTextStream
  (LAMBDA (ID TextStream)                                    (* fgh: "12-Feb-85 23:45")
    (COND
      (TextStream (PUTPROP ID (QUOTE NoteCardTextStream)
			   TextStream))
      (T (REMPROP ID (QUOTE NoteCardTextStream))))))
)
(* * Add file substance type to SubstanceTypes list)

(DEFINEQ

(NC.AddFileSubstanceType
  (LAMBDA NIL                                                (* fgh: "12-Mar-85 18:39")

          (* * Add the file substance type to the substance types list)


    (NC.AddSubstanceType (QUOTE FILE)
			 (BQUOTE ((CreateSubstanceFn , (FUNCTION NC.CreateFileSubstance))
				  (EditSubstanceFn , (FUNCTION NC.EditFileSubstance))
				  (QuitSubstanceFn , (FUNCTION NC.QuitFileSubstance))
				  (GetSubstanceFn , (FUNCTION NC.GetFileSubstance))
				  (PutSubstanceFn , (FUNCTION NC.PutFileSubstance))
				  (CopySubstanceFn , (FUNCTION NC.FileCopySubstance))
				  (MarkSubstanceDirtyFn , (FUNCTION NC.MarkFileSubstanceDirty))
				  (SubstanceDirtyPFn , (FUNCTION NC.FileSubstanceDirtyP))))
			 (BQUOTE ((SubstanceDefaultWidth 350)
				  (SubstanceDefaultHeight 500)
				  (SubstanceLinkAnchorModesSupported , (QUOTE Global)))))))
)
(NC.AddFileSubstanceType)
(PUTPROPS NCFILESUBSTANCE COPYRIGHT ("Xerox Corporation" 1985))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (1359 9232 (NC.CreateFileSubstance 1369 . 2652) (NC.EditFileSubstance 2654 . 4761) (
NC.FileCopySubstance 4763 . 5721) (NC.FileSubstanceDirtyP 5723 . 6069) (NC.GetFileSubstance 6071 . 
6409) (NC.MarkFileSubstanceDirty 6411 . 6874) (NC.PutFileSubstance 6876 . 7726) (NC.QuitFileSubstance 
7728 . 8450) (NC.FileCardPutFile 8452 . 9230)) (9255 13941 (NC.FileCardFileVersionNumber 9265 . 9640) 
(NC.FileCardLeftButtonMenu 9642 . 12114) (NC.FileCardMiddleButtonMenu 12116 . 13094) (NC.FileCardTitle
 13096 . 13494) (NC.FetchTextStream 13496 . 13665) (NC.SetTextStream 13667 . 13939)) (14001 14929 (
NC.AddFileSubstanceType 14011 . 14927)))))
STOP