(FILECREATED "29-Mar-85 16:47:47" {PHYLUM}<NOTECARDS>RELEASE1.2>NCTEXTSUBSTANCE.;6 22291 changes to: (FNS NC.MakeTEditLeftMenu) previous date: "27-Mar-85 01:42:34" {PHYLUM}<NOTECARDS>RELEASE1.2>NCTEXTSUBSTANCE.;5) (* Copyright (c) 1985 by Xerox Corporation. All rights reserved.) (PRETTYCOMPRINT NCTEXTSUBSTANCECOMS) (RPAQQ NCTEXTSUBSTANCECOMS ((E (SETQ NC.SystemDate (DATE)) (UNMARKASCHANGED (QUOTE NC.SystemDate) (QUOTE VARS))) (VARS NC.SystemDate) (P (UNMARKASCHANGED (QUOTE NC.SystemDate) (QUOTE VARS))) (FILES NCTYPESMECH) (GLOBALVARS TEDIT.DEFAULT.MENU) (FNS NC.BringUpTEditCard NC.CollectReferencesInText NC.MakeTEditLeftMenu NC.MakeTEditMiddleMenu NC.MarkTextDirty NC.ResetTEdit NC.ResetTEditProcess NC.TEditBasedP NC.TEditCloseFn NC.TEditMenuFn NC.TEditQuitFn NC.TextCopySubstance NC.TextDirtyP NC.\TEDIT.LOOKS NC.\TEDIT.QUIT) (VARS (TEDIT.DEFAULT.PROPS (CONS (QUOTE SLOWUPDATE) (CONS (QUOTE T) TEDIT.DEFAULT.PROPS)))) (* * This stuff supports the "push-copy" method of copying links in NC) (FNS NC.TranslateWindowPositionToTEditPosition NC.InsertLinkInTextWindow) (* * Add Text substance type to list) (FNS NC.AddTextSubstance) (P (NC.AddTextSubstance)))) (RPAQQ NC.SystemDate "29-Mar-85 16:47:49") (UNMARKASCHANGED (QUOTE NC.SystemDate) (QUOTE VARS)) (FILESLOAD NCTYPESMECH) (DECLARE: DOEVAL@COMPILE DONTCOPY (GLOBALVARS TEDIT.DEFAULT.MENU) ) (DEFINEQ (NC.BringUpTEditCard (LAMBDA (ID TextStream Region/Position) (* rht: " 8-Feb-85 10:47") (* Bring up a TEdit window for Card ID whose text stream is TextStream in Region specified by Region/Position or by the user.) (PROG (Region TEditWindow TEditProcess Title TextStreamDirtyFlg) (COND ((AND (SETQ TEditWindow (WINDOW.FROM.TEDIT.THING TextStream)) (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 T)) (WINDOWPROP TEditWindow (QUOTE SHRINKFN) (FUNCTION NC.ShrinkFn)) (WINDOWPROP TEditWindow (QUOTE NoteCardsLeftButtonMenu) (NC.MakeTEditLeftMenu (NC.FetchType ID))) (WINDOWPROP TEditWindow (QUOTE NoteCardsMiddleButtonMenu) (NC.MakeTEditMiddleMenu)) (SETQ TextStreamDirtyFlg (NC.CardDirtyP ID)) (TEDIT TextStream TEditWindow NIL (LIST (QUOTE FONT) NC.DefaultFont (QUOTE TITLEMENUFN) (FUNCTION NC.TEditMenuFn))) (AND TextStreamDirtyFlg (NC.MarkCardDirty ID)) (RETURN TEditWindow)))) (NC.CollectReferencesInText (LAMBDA (ID CheckAndDeleteFlg DatabaseStream ReturnLinkIconsFlg ReturnLocationsFlg) (* fgh: "23-Oct-84 11:56") (* * Return a list of all links or link icons in text substance Substance. If CheckAndDeleteFlg, then delete any links found that are not valid links.) (PROG (ActualLink DirtyFlg Links (Substance (NC.FetchSubstance ID))) (SETQ Links (for ImageObjectDecriptor in (TEDIT.LIST.OF.OBJECTS (TEXTOBJ Substance) (FUNCTION NC.LinkIconImageObjP)) when (PROG NIL (SETQ ActualLink (NC.FetchLinkFromLinkIcon (CAR ImageObjectDecriptor))) (COND ((NULL CheckAndDeleteFlg) (* No checking required) (RETURN T)) ((AND (LISTP CheckAndDeleteFlg) (FMEMB (fetch (NOTECARDLINK DESTINATIONID) of ActualLink) CheckAndDeleteFlg)) (* Already checked since ID cached on CheckAndDeleteFlg list) (RETURN T)) ((NC.ValidLinkP ActualLink DatabaseStream) (* Link is valid) (RETURN T)) (T (* Link is bad. Replace it with the DeletedLink image object.) (create IMAGEOBJ smashing (CAR ImageObjectDecriptor) OBJECTDATUM ←(fetch (IMAGEOBJ OBJECTDATUM) of NC.DeletedLinkImageObject) IMAGEOBJPLIST ←(fetch (IMAGEOBJ IMAGEOBJPLIST) of NC.DeletedLinkImageObject) IMAGEOBJFNS ←(fetch (IMAGEOBJ IMAGEOBJFNS) of NC.DeletedLinkImageObject)) (SETQ DirtyFlg T) (RETURN NIL)))) collect (COND ((AND ReturnLinkIconsFlg (NOT ReturnLocationsFlg)) (CAR ImageObjectDecriptor)) ((AND ReturnLinkIconsFlg ReturnLocationsFlg) (CONS (CAR ImageObjectDecriptor) (CADR ImageObjectDecriptor))) ((AND (NOT ReturnLinkIconsFlg) ReturnLocationsFlg) (CONS ActualLink (CADR ImageObjectDecriptor))) (T ActualLink)))) (RETURN (CONS Links DirtyFlg))))) (NC.MakeTEditLeftMenu (LAMBDA (NoteCardType) (* rht: "29-Mar-85 16:42") (* * Make the LeftButton TEdit menu appropriate for this type of text card. If menu doesn't exist, then make it.) (* * rht 8/1/84: Added a new menu item for the CONTENTS menu called Collect Children) (* * rht 9/17/84: (actually redoing earlier changes which got trashed) Added menu item for the CONTENTS menu called Make Document.) (* * rht 9/20/84: New menu item for TEXT menu called "Insert Spreadsheet".) (* * rht 9/25/84: Made MakeDocument also present in TEXT menu.) (* * rht 12/8/84: Now both fileboxes and notecards do filing via NC.AddParents. Also took out all the strange uses of NC.TEditMenus.) (\TEDIT.CREATEMENU (COND ((NEQ NoteCardType (QUOTE FileBox)) (QUOTE ((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."))) (Insert% Link (FUNCTION NC.AddLinkToTextCard) "Insert a link to another card at the currently selected point in the text." (SUBITEMS (Insert% Link (FUNCTION NC.AddLinkToTextCard) "Insert a link to another card at the currently selected point in the text.") (Insert% Links (FUNCTION NC.AddLinksToTextCard) "Insert links to other cards at the currently selected point in the text.") (Add% Global% Link (FUNCTION NC.AddGlobalLinkToCard) "Add a global link emanating from this card.") (Add% Global% Links (FUNCTION NC.AddGlobalLinksToCard) "Add global links emanating from 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."))))) ) (T (QUOTE ((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.") (Put% in% FileBox (FUNCTION NC.AddParents) "Put this FileBox in new parent FileBox(es).") (Assign% Title (FUNCTION NC.AssignTitle) "Assign a new title to this FileBox.") (Collect% Children (FUNCTION NC.FileBoxCollectChildren) "Collect new child cards and file boxes for this FileBox.") (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.") (Save% in% NoteFile (FUNCTION NC.CardSaveFn) "Save this card in the NoteFile but don't close the card.") (Delete% FileBox (FUNCTION NC.DeleteNoteCards) "Permenantly delete this FileBox from the NoteFile."))))) ))))) (NC.MakeTEditMiddleMenu (LAMBDA NIL (* fgh: "26-Mar-85 22:57") (* * Make the Middle Button Menu fort a Tedit 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.") , (for Item in (fetch (MENU ITEMS) of TEDIT.DEFAULT.MENU) when (EQ (CAR Item) (QUOTE Edit% Marks)) do (RETURN Item)))))))) (NC.MarkTextDirty (LAMBDA (ID ResetFlg) (* rht: " 1-Feb-85 15:45") (* * Mark or unmark TextStream as being changed.) (* * rht 2/1/85: Updated to use the documented function.) (TEDIT.STREAMCHANGEDP (TEXTSTREAM (NC.FetchSubstance ID)) ResetFlg))) (NC.ResetTEdit (LAMBDA (TextStream) (* NoteCards% User "17-Jun-84 01:58") (* * Kill the Tedit process running on TextStream and the restart a new one. Goal is to clean up display if TEdit goea awary.) (ADD.PROCESS (LIST (FUNCTION NC.ResetTEditProcess) TextStream) (QUOTE NAME) (QUOTE ResetTEdit)))) (NC.ResetTEditProcess (LAMBDA (TextStream) (* rht: " 5-Feb-85 22:45") (* * Added-process that actually does the works for NC.ResetTEdit. Kill the Tedit process running on TextStream and the restart a new one. Goal is to clean up display if TEdit goea awary.) (* * rht 2/1/85: Changed to calls to NC.MarkCardDirty and NC.CardDirtyP.) (PROG ((Window (WINDOW.FROM.TEDIT.THING TextStream)) (TextObj (TEXTOBJ TextStream)) DirtyFlg ID) (SETQ ID (NC.IDFromWindow Window)) (COND ((OR (NOT (WINDOWP Window)) (NULL ID)) (RETURN))) (SETQ DirtyFlg (NC.CardDirtyP ID)) (TEDIT.KILL TextStream) (TEDIT TextStream Window) (NC.MarkCardDirty ID (NOT DirtyFlg)) (WINDOWPROP Window (QUOTE TITLE) (NC.RetrieveTitle ID PSA.Database)) (RETURN)))) (NC.TEditBasedP (LAMBDA (Type) (* rht: " 8-Nov-84 12:03") (* * Returns T if Type is a note card type that is based on TEdit or else an ID of such a note card. NIL otherise.) (* * rht 11/8/84: Hacked to reflect notecards typing mechanism. Seems gross to have to search the types list to get the record.) (COND ((NC.IDP Type) (SETQ Type (NC.FetchType Type)))) (for CardType in NC.CardTypes when (EQ Type (fetch (NoteCardType TypeName) of CardType)) do (RETURN (EQ (QUOTE TEXT) (fetch (NoteCardType SubstanceType) of CardType)))))) (NC.TEditCloseFn (LAMBDA (WindowOrTextStreamOrID) (* rht: "13-Nov-84 09:55") (* Close this TEdit window by Quitting from TEdit) (* * rht 11/12/84: Changed call to TEXTSTREAM to a WINDOWPROP call.) (PROG (Window (ID (NC.CoerceToID WindowOrTextStreamOrID))) (SETQ Window (NC.FetchWindow ID)) (NC.TEditQuitFn ID) (COND (Window (WINDOWDELPROP Window (QUOTE CLOSEFN) (FUNCTION NC.QuitCard)) (TEDIT.QUIT (TEXTSTREAM Window))))))) (NC.TEditMenuFn (LAMBDA (Window) (* NoteCards% User "17-Jun-84 00:23") (* * Gets called from LEFT or MIDDLE button press in title bar of TEdit window. If LEFT press bring up the Notecards Manipulation Window. IF MIDDLE press bring up the TEdit specific NoteCard operations menu. Bring up menus using TEDIT.DEFAULT.MENUFN) (PROGN (COND ((LASTMOUSESTATE LEFT) (WINDOWPROP Window (QUOTE TEDIT.MENU) (WINDOWPROP Window (QUOTE NoteCardsLeftButtonMenu)))) (T (WINDOWPROP Window (QUOTE TEDIT.MENU) (WINDOWPROP Window (QUOTE NoteCardsMiddleButtonMenu))))) (TEDIT.DEFAULT.MENUFN Window)))) (NC.TEditQuitFn (LAMBDA (WindowOrID) (* rht: " 9-Feb-85 21:50") (* Called by TEdit when quitting out of a TEdit-based note card. Close up attached windows,) (PROG (TextStream Window PromptWindow (ID (NC.CoerceToID WindowOrID))) (SETQ Window (NC.FetchWindow ID)) (SETQ PromptWindow (CAR (WINDOWPROP Window (QUOTE PROMPTWINDOW)))) (AND Window (for AttachedWindow in (ALLATTACHEDWINDOWS Window) unless (EQ AttachedWindow PromptWindow) do (DETACHWINDOW AttachedWindow) (CLOSEW AttachedWindow) (until (NULL (OPENWP AttachedWindow)) do (BLOCK)))) (SETQ TextStream (NC.FetchSubstance ID)) (NC.DeactivateCard ID) (* MAke sure TEdit won't close the database file) (replace (TEXTOBJ TXTFILE) of (TEXTOBJ TextStream) with NIL) (TEDIT.MAPPIECES (TEXTOBJ TextStream) (FUNCTION (LAMBDA (CH# PC PC# OBL) (replace (PIECE PFILE) of PC with NIL)))) (* * Setting the PromptWindow PROCESS to NIL is to break a circularity caused by TEXTOBJ -> PROMPTWINDOW -> PROCESS -> TEXTSTREAM -> TEXTOBJ) (AND Window (SETQ PromptWindow (GETPROMPTWINDOW Window NIL NIL T)) (WINDOWPROP PromptWindow (QUOTE PROCESS) NIL) (REMOVEPROMPTWINDOW Window)) (RETURN T)))) (NC.TextCopySubstance (LAMBDA (ID FromStream ToStream) (* fgh: "23-Oct-84 11:42") (* * Copy a text substance from FromStream to ToStream.) (PROG (FromStartPtr FromEndPtr ToEndPtrLoc ToEndPtr ToStartPtr) (* * Set up start/end pointers on ToStream) (SETQ ToStartPtr (IPLUS (GETFILEPTR ToStream) 6)) (NC.PutPtr ToStream ToStartPtr) (SETQ ToEndPtrLoc (GETFILEPTR ToStream)) (NC.PutPtr ToStream 0) (* * Get FromStream start/end pointers) (SETQ FromStartPtr (NC.GetPtr FromStream 3)) (SETQ FromEndPtr (NC.GetPtr FromStream 3)) (* * Copy the bytes, fixing up the file absolute pointers on the way.) (COND ((IGREATERP (IDIFFERENCE FromEndPtr FromStartPtr) 2) (SETFILEPTR FromStream (IDIFFERENCE FromEndPtr 2)) (COND ((FMEMB (\WIN FromStream) (QUOTE (31415 31416))) (COPYBYTES FromStream ToStream FromStartPtr (IDIFFERENCE FromEndPtr 8)) (\DWOUT ToStream (IPLUS (IDIFFERENCE (\DWIN FromStream) FromStartPtr) ToStartPtr)) (RPTQ 2 (\WOUT ToStream (\WIN FromStream)))) (T (COPYBYTES FromStream ToStream FromStartPtr FromEndPtr)))) (T (COPYBYTES FromStream ToStream FromStartPtr FromEndPtr))) (* * Set up the ned ptr on the ToStream) (SETQ ToEndPtr (GETFILEPTR ToStream)) (SETFILEPTR ToStream ToEndPtrLoc) (NC.PutPtr ToStream ToEndPtr) (RETURN T)))) (NC.TextDirtyP (LAMBDA (ID) (* fgh: "23-Oct-84 12:34") (* * Return T is TextSubstance has been changed.) (TEDIT.STREAMCHANGEDP (TEXTSTREAM (NC.FetchSubstance ID))))) (NC.\TEDIT.LOOKS (LAMBDA (TextStream) (* fgh: "31-Mar-84 16:02") (\TEDIT.LOOKS (TEXTOBJ TextStream)))) (NC.\TEDIT.QUIT (LAMBDA (TextStream) (* fgh: "10-May-84 16:27") (PROG ((Window (WINDOW.FROM.TEDIT.THING TextStream))) (NC.TEditQuitFn Window) (\TEDIT.QUIT Window)))) ) (RPAQ TEDIT.DEFAULT.PROPS (CONS (QUOTE SLOWUPDATE) (CONS (QUOTE T) TEDIT.DEFAULT.PROPS))) (* * This stuff supports the "push-copy" method of copying links in NC) (DEFINEQ (NC.TranslateWindowPositionToTEditPosition (LAMBDA (Window WindowPositionX WindowPositionY) (* fgh: "15-Feb-85 19:42") (* * comment) (PROG (TextObj) (COND ((AND (WINDOWP Window) (type? TEXTOBJ (SETQ TextObj (WINDOWPROP Window (QUOTE TEXTOBJ))))) (RETURN (fetch (SELECTION CH#) of (TEDIT.SELECT WindowPositionX WindowPositionY TextObj (fetch (TEXTOBJ MOUSEREGION) of TextObj) NIL NIL Window)))))))) (NC.InsertLinkInTextWindow (LAMBDA (TextWindow LinkOrLinkLabel CharacterPosition) (* rht: "26-Mar-85 15:31") (* * Given a Window and a Link, insert the Link at CharacterPosition in the TextStream of Window) (PROG ((TextStream (WINDOWPROP TextWindow (QUOTE TEXTSTREAM)))) (RETURN (NC.InsertLinkInText TextStream LinkOrLinkLabel NIL NIL NIL CharacterPosition))))) ) (* * Add Text substance type to list) (DEFINEQ (NC.AddTextSubstance (LAMBDA NIL (* fgh: "16-Feb-85 00:02") (NC.AddSubstanceType (QUOTE TEXT) (BQUOTE ((CreateSubstanceFn , (FUNCTION OPENTEXTSTREAM)) (EditSubstanceFn , (FUNCTION NC.BringUpTEditCard)) (QuitSubstanceFn , (FUNCTION NC.TEditCloseFn)) (GetSubstanceFn , (FUNCTION NC.GetTextSubstance)) (PutSubstanceFn , (FUNCTION NC.PutTextSubstance)) (CopySubstanceFn , (FUNCTION NC.TextCopySubstance)) (MarkSubstanceDirtyFn , (FUNCTION NC.MarkTextDirty)) (SubstanceDirtyPFn , (FUNCTION NC.TextDirtyP)) (CollectLinksInSubstanceFn , (FUNCTION NC.CollectReferencesInText)) (DeleteLinksInSubstanceFn , (FUNCTION NC.DelReferencesToCardFromText)) (UpdateLinkIconsInSubstanceFn , (FUNCTION NC.UpdateLinkImagesInText) ) (InsertLinkInSubstanceFn , (FUNCTION NC.InsertLinkInTextWindow)) (TranslateWindowPositionToSubstancePositionFn , (FUNCTION NC.TranslateWindowPositionToTEditPosition)))) (QUOTE ((SubstanceDefaultWidth 300) (SubstanceDefaultHeight 200) (SubstanceLinkAnchorModesSupported T)))))) ) (NC.AddTextSubstance) (PUTPROPS NCTEXTSUBSTANCE COPYRIGHT ("Xerox Corporation" 1985)) (DECLARE: DONTCOPY (FILEMAP (NIL (1467 19693 (NC.BringUpTEditCard 1477 . 3090) (NC.CollectReferencesInText 3092 . 5588) ( NC.MakeTEditLeftMenu 5590 . 10633) (NC.MakeTEditMiddleMenu 10635 . 11810) (NC.MarkTextDirty 11812 . 12158) (NC.ResetTEdit 12160 . 12570) (NC.ResetTEditProcess 12572 . 13584) (NC.TEditBasedP 13586 . 14311) (NC.TEditCloseFn 14313 . 14950) (NC.TEditMenuFn 14952 . 15701) (NC.TEditQuitFn 15703 . 17355) ( NC.TextCopySubstance 17357 . 19016) (NC.TextDirtyP 19018 . 19272) (NC.\TEDIT.LOOKS 19274 . 19436) ( NC.\TEDIT.QUIT 19438 . 19691)) (19881 20880 (NC.TranslateWindowPositionToTEditPosition 19891 . 20450) (NC.InsertLinkInTextWindow 20452 . 20878)) (20925 22183 (NC.AddTextSubstance 20935 . 22181))))) STOP