(DEFINE-FILE-INFO PACKAGE "IL" READTABLE "INTERLISP" BASE 10) (FILECREATED " 7-Nov-88 15:25:23" {QV}<NOTECARDS>1.3MNEXT>NCCROSSFILELINKS.;2 30570 changes to%: (FNS NC.GetCrossFileLinkDestCard) previous date%: "13-Oct-88 19:15:43" {QV}<NOTECARDS>1.3MNEXT>NCCROSSFILELINKS.;1) (* " Copyright (c) 1986, 1987, 1988 by Xerox Corporation. All rights reserved. ") (PRETTYCOMPRINT NCCROSSFILELINKSCOMS) (RPAQQ NCCROSSFILELINKSCOMS [(PROP (MAKEFILE-ENVIRONMENT FILETYPE) NCCROSSFILELINKS) (FNS NCAddStub.CrossFileLink) (* ;; "This file defines a card type called CrossFileLink that is a stand-in for really being able to link across notefiles.") (* ;; "A programmer can customize the icon which will appear on the right side of the link icon for cross-file links. The main hook is the property 'AttachedBitMapFn' which should be placed on the card type's atom; which in this case is CrossFileLink. This function will be called in the display code by NC.FetchCrossFileLinkIconAttachedBitMap when a cross-file link is encountered. An example of such a function may be found in NC.CrossFileLinkAttachedBitMapFn in this file, and you would install it or your own function by doing (PUTPROP 'CrossFileLink 'AttachedBitMapFn (FUNCTION NC.CrossFileLinkAttachedBitMapFn)).") (GLOBALVARS NC.CopyCrossFileLinksMode NC.CrossFileLinkIcon NC.MakeCrossFileLinkIconStandIn NC.NewCrossFileLinksMode) (INITVARS (NC.NewCrossFileLinksMode 'ASK)) (BITMAPS NC.CrossFileLinkIcon) (INITVARS (NC.NewCrossFileLinksTwoWayFlg T) (NC.CopyCrossFileLinksMode NIL)) (FNS NC.AskCrossFileLinkMode NC.DeleteCrossFileLinkCard NC.FetchRemoteCrossFileLinkCard NC.CheckCrossFileLinkCardTitle NC.CheckCrossFileLinkType NC.MakeCrossFileLinkIconStandIn NC.ComputeCrossFileLinkMode) (FNS NC.GetCrossFileLinkDestCard NC.CreateCrossFileLinkCard NC.CrossFileLinkCardP NC.OpenCrossFileLinkDestNoteFile) (FNS NC.AddCrossFileLink NC.CrossFileLinkCopyFn NC.CrossFileLinkMakeFn NC.CrossFileLinkEditFn NC.CrossFileLinkGetFn NC.CrossFileLinkPutFn) (DECLARE%: DONTEVAL@LOAD (P (NC.AddCrossFileLink) (PUTPROP 'CrossFileLink 'Don'tForceFilingFlg T]) (PUTPROPS NCCROSSFILELINKS MAKEFILE-ENVIRONMENT (:PACKAGE "IL" :READTABLE "INTERLISP" :BASE 10)) (PUTPROPS NCCROSSFILELINKS FILETYPE :TCOMPL) (DEFINEQ (NCAddStub.CrossFileLink (LAMBDA NIL (* rht%: " 4-Oct-86 00:36") (* * kirk 18Jun86 Add the CrossFileLink card stub) (NC.AddCardTypeStub 'CrossFileLink 'NoteCard 'NCCROSSFILELINKS))) ) (* ;; "This file defines a card type called CrossFileLink that is a stand-in for really being able to link across notefiles." ) (* ;; "A programmer can customize the icon which will appear on the right side of the link icon for cross-file links. The main hook is the property 'AttachedBitMapFn' which should be placed on the card type's atom; which in this case is CrossFileLink. This function will be called in the display code by NC.FetchCrossFileLinkIconAttachedBitMap when a cross-file link is encountered. An example of such a function may be found in NC.CrossFileLinkAttachedBitMapFn in this file, and you would install it or your own function by doing (PUTPROP 'CrossFileLink 'AttachedBitMapFn (FUNCTION NC.CrossFileLinkAttachedBitMapFn))." ) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS NC.CopyCrossFileLinksMode NC.CrossFileLinkIcon NC.MakeCrossFileLinkIconStandIn NC.NewCrossFileLinksMode) ) (RPAQ? NC.NewCrossFileLinksMode 'ASK) (RPAQQ NC.CrossFileLinkIcon #*(21 18)OOOOOH@@H@@@@H@@H@@@@H@@H@CH@H@@H@AL@H@@H@@N@H@@H@@G@H@@IOOOHH@@IOOOLH@@IOOOHH@@H@@G@H@@H@@N@H@@H@AL@H@@H@CH@H@@H@@@@H@@H@@@@H@@H@@@@H@@OOOOOH@@ ) (RPAQ? NC.NewCrossFileLinksTwoWayFlg T) (RPAQ? NC.CopyCrossFileLinksMode NIL) (DEFINEQ (NC.AskCrossFileLinkMode [LAMBDA (DestCard InterestedWindow) (* ; "Edited 10-Feb-88 11:25 by Trigg") (* ;;; "Ask the user whether to make the link be twoway or oneway. Return T if user says two-way. If dest notefile is open read-only, then only choice is one-way so don't ask.") (* ;; "rht 2/10/88: Now checks whether prompt window was already open and if so, preserves that.") (LET* ((NoteFile (fetch (Card NoteFile) of DestCard)) (FullFileName (fetch (NoteFile FullFileName) of NoteFile)) (WasOpenPromptWindowFlg (NC.PromptWindowOpenP InterestedWindow))) (if (NC.ReadOnlyNoteFileP NoteFile) then NIL else (NC.AskYesOrNo (CONCAT "Okay to make cross-file link to '" (NC.RetrieveTitle DestCard) "' in '" (FILENAMEFIELD FullFileName 'NAME) ";" (FILENAMEFIELD FullFileName 'VERSION) "' be TWOWAY?" (CHARACTER 13) "(otherwise leaves no record of link in destination notefile) " ) " -- " "Yes" T InterestedWindow WasOpenPromptWindowFlg]) (NC.DeleteCrossFileLinkCard (LAMBDA (CrossFileLinkCard) (* rht%: "27-May-87 21:54") (* * Delete the crossfile link card. If it's a twoway crossfile link, and its "twin" is in an open notefile, then delete the cross file link over there.) (LET ((DestCard (NC.FetchRemoteCrossFileLinkCard CrossFileLinkCard))) (if DestCard then (NC.DeleteNoteCardInternal DestCard T)) (NC.DeleteNoteCardInternal CrossFileLinkCard T)))) (NC.FetchRemoteCrossFileLinkCard (LAMBDA (CrossFileLinkCard) (* rht%: "27-May-87 21:54") (* * Return the remote "twin" of CrossFileLinkCard if its notefile is open.) (LET ((CrossFileLinkSubstance (NCP.CardSubstance CrossFileLinkCard)) DestCard RemoteCrossFileLinkCardUID NoteFileUID NoteFile) (if (AND (fetch (CrossFileLinkSubstance CrossFileLinkTwoWayFlg) of CrossFileLinkSubstance) (SETQ RemoteCrossFileLinkCardUID (fetch (CrossFileLinkSubstance RemoteCrossFileLinkCardUID) of CrossFileLinkSubstance)) (type? UID (SETQ NoteFileUID (fetch (CrossFileLinkSubstance CrossFileLinkDestNoteFileUID) of CrossFileLinkSubstance))) (NCP.OpenNoteFileP (SETQ NoteFile (NC.NoteFileFromNoteFileUID NoteFileUID))) (NC.ValidCardP (SETQ DestCard (NC.CardFromUID RemoteCrossFileLinkCardUID NoteFile)) )) then DestCard else NIL)))) (NC.CheckCrossFileLinkCardTitle (LAMBDA (CrossFileLinkCard DestinationCard) (* rht%: "27-May-87 21:47") (* * If titles don't agree, change crossfilelink card title to match.) (LET ((DestinationCardTitle (NC.RetrieveTitle DestinationCard))) (if (NOT (STREQUAL DestinationCardTitle (NC.RetrieveTitle CrossFileLinkCard))) then (NC.AssignTitle CrossFileLinkCard NIL DestinationCardTitle))))) (NC.CheckCrossFileLinkType (LAMBDA (RemoteCrossFileLinkCard LocalCrossFileLinkCard Link) (* rht%: "27-May-87 22:33") (* * If link types don't agree, change remote crossfilelink type to match.) (LET ((RemoteDestCard (NC.GetCrossFileLinkDestCard LocalCrossFileLinkCard NIL T)) (LinkLabel (fetch (Link Label) of Link)) RemoteLink NoteFile) (if RemoteDestCard then (SETQ RemoteLink (OR (for FromLink in (NC.RetrieveFromLinks RemoteCrossFileLinkCard ) when (NC.SameCardP (fetch (Link SourceCard) of FromLink) RemoteDestCard) do (RETURN FromLink)) (for ToLink in (NC.RetrieveToLinks RemoteCrossFileLinkCard) when (NC.SameCardP (fetch (Link DestinationCard) of ToLink) RemoteDestCard) do (RETURN ToLink)))) (if (NOT (EQ (fetch (Link Label) of RemoteLink) LinkLabel)) then (if (NOT (NCP.ValidLinkTypeP LinkLabel (SETQ NoteFile (fetch (Card NoteFile ) of RemoteCrossFileLinkCard )))) then (NCP.CreateLinkType LinkLabel NoteFile)) (NC.RelabelLink RemoteLink NIL LinkLabel)))))) (NC.MakeCrossFileLinkIconStandIn (LAMBDA (CrossFileLinkCard) (* rht%: "27-May-87 23:39") (* * Return an imageobj to act as a standin for a cross file link.) (DECLARE (GLOBALVARS NC.ExternalPutLinkIconImageFns)) (IMAGEOBJCREATE (CONCAT "[[ Cross-file link to '" (NC.RetrieveTitle CrossFileLinkCard) "' ]]") NC.ExternalPutLinkIconImageFns))) (NC.ComputeCrossFileLinkMode (LAMBDA (RemoteCard CrossFileLinkModePropList InterestedWindow) (* rht%: " 6-Jun-87 16:19") (* * If we've already made cross file links to RemoteCard's notefile, then it'll be registered on CrossFileLinkModePropList. Otherwise, consult global var, possibly ask user, and register her answer on CrossFileLinkModePropList.) (* * rht 6/6/87%: Changed so that check of globalvar happens before check of CrossFileLinkModePropList.) (DECLARE (GLOBALVARS NC.NewCrossFileLinksMode)) (LET ((NoteFile (fetch (Card NoteFile) of RemoteCard)) Mode) (COND ((FMEMB NC.NewCrossFileLinksMode '(TWOWAY ONEWAY)) NC.NewCrossFileLinksMode) ((FMEMB NoteFile CrossFileLinkModePropList) (LISTGET CrossFileLinkModePropList NoteFile)) (T (SETQ Mode (if (NC.AskCrossFileLinkMode RemoteCard InterestedWindow) then 'TWOWAY else 'ONEWAY)) (LISTPUT CrossFileLinkModePropList NoteFile Mode) Mode))))) ) (DEFINEQ (NC.GetCrossFileLinkDestCard [LAMBDA (CrossFileLinkCard InterestedWindow Don'tOpenDestNoteFileFlg) (* ; "Edited 4-Oct-88 18:35 by DSJ") (* * Find the notefile corresponding to this crossfilelink and try to open it if not already open. Then look for the card in there having the given UID. Return NIL if failed for any reason.) (* * rht 11/10/86%: Make sure CrossFileLinkCard is cached before fetching substance.) (* * rht 11/19/86%: Now rips off version number from destination notefile hint.) (* * rht 12/11/86%: Now checks that destination card is not deleted.) (* * rht 12/16/86%: Now takes InterestedWindow argument.) (* * rht 3/25/87%: Now calls NC.CoerceToInterestedWindow.) (* * rht 3/27/87%: Now calls NC.OpenCrossFileLinkDestNoteFile.) (* * rht 5/27/87%: New arg Don'tOpenDestNoteFileFlg. If non-nil, then destination notefile has to be already open.) (* * rht 6/4/87%: Now passes CrossFileLinkCard to NC.OpenCrossFileLinkDestNoteFile.) (* * rht 6/8/87%: Now computes WasOpenPromptWindowFlg) (* * pmi 8/7/87%: Now gets a filename if it has to loop and ask for another notefile to try.) (* * pmi 9/8/87%: Now sets Don'tOpenDestNoteFileFlg to the results of NC.OpenCrossFileLinkDestNoteFile) (* * dsj |9/14/88.| For speed, Now no longer updates the CrossFileLinkDestFileHint field of the CrossFileLinkCard substance with the DestNoteFile, thereby avoiding a call to FULLNAME.) (* * dsj |10/4/88.| Changed change of |9/14/88.| Now still does replaces but does not call FULLNAME.) (LET ((Title (NC.FetchTitle CrossFileLinkCard)) (SourceNoteFile (fetch (Card NoteFile) of CrossFileLinkCard)) Substance DestNoteFileUID DestFileHint DestCardUID DestNoteFile DestFileName Card WasOpenPromptWindowFlg) (OR InterestedWindow (SETQ InterestedWindow (NC.CoerceToInterestedWindow SourceNoteFile))) (SETQ WasOpenPromptWindowFlg (NC.PromptWindowOpenP InterestedWindow)) (if (NOT (NC.ActiveCardP CrossFileLinkCard)) then (NC.GetNoteCard CrossFileLinkCard)) (SETQ Substance (NC.FetchSubstance CrossFileLinkCard)) (SETQ DestCardUID (fetch (CrossFileLinkSubstance CrossFileLinkDestCardUID) of Substance )) (SETQ DestNoteFileUID (fetch (CrossFileLinkSubstance CrossFileLinkDestNoteFileUID) of Substance)) (SETQ DestFileHint (fetch (CrossFileLinkSubstance CrossFileLinkDestFileHint) of Substance)) (SETQ DestNoteFile (NC.NoteFileFromNoteFileUID DestNoteFileUID)) (SETQ DestFileName (OR (AND (type? NoteFile DestNoteFile) (fetch (NoteFile FullFileName) of DestNoteFile)) DestFileHint)) (for while [if Don'tOpenDestNoteFileFlg then (NCP.OpenNoteFileP DestNoteFile) else [SETQ Don'tOpenDestNoteFileFlg (NULL (SETQ DestNoteFile (NC.OpenCrossFileLinkDestNoteFile DestNoteFile DestFileName InterestedWindow CrossFileLinkCard] (SETQ DestFileName (OR DestFileName (AND (type? NoteFile DestNoteFile) (fetch (NoteFile FullFileName ) of DestNoteFile] bind NewFileName do (if (NC.ValidCardP (SETQ Card (NC.CardFromUID DestCardUID DestNoteFile))) then (* ;; "Now does not call FULLNAME on the CrossFileLinkDestFileHint, but instead strips the version off the FullFileName. dsj. ") (if (NOT (EQUAL (PACKFILENAME 'VERSION NIL 'BODY (SETQ NewFileName (fetch (NoteFile FullFileName ) of DestNoteFile))) (fetch (CrossFileLinkSubstance CrossFileLinkDestFileHint) of Substance))) then (replace (CrossFileLinkSubstance CrossFileLinkDestFileHint) of Substance with (PACKFILENAME 'VERSION NIL 'BODY NewFileName)) (NC.MarkCardDirty CrossFileLinkCard)) (RETURN Card) else (if Don'tOpenDestNoteFileFlg then (RETURN NIL) else (NC.PrintMsg InterestedWindow T "Couldn't find destination card in " DestFileName "." (CHARACTER 13)) (if (NOT (NC.AskYesOrNo "Want to try opening a different notefile? " " -- " "Yes" NIL InterestedWindow WasOpenPromptWindowFlg)) then (RETURN NIL) else (SETQ DestNoteFile (SETQ DestFileName NIL]) (NC.CreateCrossFileLinkCard (LAMBDA (SourceCard DestCard TwoWayFlg) (* rht%: " 9-Dec-86 14:50") (* * Create a cross file link card in SourceCard's notefile.) (* * rht 11/19/86%: Now rips off version number from destination notefile hint.) (* * rht 12/9/86%: No longer records fact that card was "just created.") (LET ((DestNoteFile (fetch (Card NoteFile) of DestCard)) CrossFileLinkCard) (SETQ CrossFileLinkCard (NC.MakeNoteCard 'CrossFileLink (fetch (Card NoteFile) of SourceCard ) (NC.FetchTitle DestCard) T (create CrossFileLinkSubstance CrossFileLinkDestCardUID ← (fetch (Card UID) of DestCard) CrossFileLinkDestNoteFileUID ← (fetch (NoteFile UID) of DestNoteFile) CrossFileLinkDestFileHint ← (PACKFILENAME 'VERSION NIL 'BODY (fetch (NoteFile FullFileName ) of DestNoteFile)) CrossFileLinkTwoWayFlg ← TwoWayFlg))) (* Indicate that card was just created.) CrossFileLinkCard))) (NC.CrossFileLinkCardP (LAMBDA (Card) (* rht%: " 6-Oct-86 10:49") (* * Return non-nil if card is a crossfilelink card.) (EQ (NC.FetchType Card) 'CrossFileLink))) (NC.OpenCrossFileLinkDestNoteFile (LAMBDA (DestNoteFile DestFileName InterestedWindow CrossFileLinkCard) (* pmi%: " 6-Aug-87 15:14") (* * If DestNoteFile is an open notefile, then fine. Otherwise get file names from user and keep trying to open until she gives up.) (* * rht 5/25/87%: Minor change%: no longer passes InterestedWindow to NC.OpenNoteFile.) (* * rht 6/3/87%: Now calls new function NC.AskUserWithMenu. Added CrossFileLinkCard argument whose title is used to construct Message.) (* * rht 6/8/87%: Now computes WasOpenPromptWindowFlg) (* * pmi 8/6/87%: Replaced NC.AskUser with NC.DatabaseFileName when asking the user for a filename to try. This insures that the filename ends in ".notefile") (OR InterestedWindow (NC.CoerceToInterestedWindow CrossFileLinkCard)) (LET ((WasOpenPromptWindowFlg (NC.PromptWindowOpenP InterestedWindow))) (if (NCP.OpenNoteFileP DestNoteFile) then DestNoteFile else (LET ((MenuItems '(Read/Write Read-Only Don't% Open))) (for while (OR DestFileName (SETQ DestFileName (NC.DatabaseFileName "File name to try opening: " NIL T T NIL InterestedWindow))) do (LET ((Message (if (NC.ValidCardP CrossFileLinkCard) then (CONCAT "Open " DestFileName " to look for '" (NC.RetrieveTitle CrossFileLinkCard) "'?") else (CONCAT "OPEN " DestFileName "?"))) ReadOnlyOpenFlg) (if (AND (SELECTQ (NC.AskUserWithMenu MenuItems Message InterestedWindow WasOpenPromptWindowFlg T) (Read/Write (SETQ ReadOnlyOpenFlg NIL) T) (Read-Only (SETQ ReadOnlyOpenFlg T)) (Don't% Open (RETURN NIL)) (RETURN NIL)) (NCP.OpenNoteFileP (SETQ DestNoteFile (NC.OpenNoteFile (OR DestNoteFile DestFileName) NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL ReadOnlyOpenFlg)))) then (RETURN DestNoteFile) else (NC.PrintMsg InterestedWindow T "Couldn't open " DestFileName "." (CHARACTER 13)) (SETQ DestFileName (SETQ DestNoteFile NIL)) (if (NOT (NC.AskYesOrNo "Want to try opening a different notefile? " " -- " "Yes" NIL InterestedWindow WasOpenPromptWindowFlg)) then (RETURN NIL)))))))))) ) (DEFINEQ (NC.AddCrossFileLink (LAMBDA NIL (* ; "Edited 3-Dec-87 19:01 by rht:") (* * rht 11/19/86%: Added LinkIconAttachedBitMap field.) (DECLARE (GLOBALVARS NC.CrossFileLinkIcon)) (NC.AddCardType 'CrossFileLink 'NoteCard `((MakeFn ,(FUNCTION NC.CrossFileLinkMakeFn)) (EditFn ,(FUNCTION NC.CrossFileLinkEditFn)) (GetFn ,(FUNCTION NC.CrossFileLinkGetFn)) (PutFn ,(FUNCTION NC.CrossFileLinkPutFn)) (CopyFn ,(FUNCTION NC.CrossFileLinkCopyFn)) (MarkDirtyFn ,(FUNCTION NILL)) (DirtyPFn ,(FUNCTION NILL)) (QuitFn ,(FUNCTION NILL)) (DeleteLinksFn ,(FUNCTION NILL)) (InsertLinkFn ,(FUNCTION NILL)) (CollectLinksFn ,(FUNCTION NILL)) (UpdateLinkIconsFn ,(FUNCTION NILL)) (TranslateWindowPositionFn ,(FUNCTION NILL))) `((LinkAnchorModesSupported NIL) (LinkDisplayMode ,(NC.InsureLinkDisplayMode 'Title)) (LinkIconAttachedBitMap ,NC.CrossFileLinkIcon))))) (NC.CrossFileLinkCopyFn (LAMBDA (Card FromStream ToStream Length) (* rht%: " 3-Oct-86 20:20") (* * Copy a CrossFileLink substance from FromStream to ToStream.) (LET* ((FromStartPtr (GETFILEPTR FromStream)) (FromEndPtr (PLUS Length FromStartPtr))) (COPYBYTES FromStream ToStream FromStartPtr FromEndPtr)) T)) (NC.CrossFileLinkMakeFn (LAMBDA (Card Title NoDisplayFlg CrossFileLinkSubstance) (* rht%: " 3-Oct-86 20:42") (* * Make a CrossFileLink substance.) (NC.SetSubstance Card CrossFileLinkSubstance) Card)) (NC.CrossFileLinkEditFn (LAMBDA (Card Substance ReadOnly RegionOrPosition TypeSpecificArgs) (* Randy.Gobbel " 4-Nov-87 14:12") (* * Given a CrossFileLink Substance, try to find the corresponding destination card in the destination notefile and bring it up.) (* * rht 11/13/86%: Now updates title of crossfile link card to be the same as destination card if necessary.) (* * rht 5/27/87%: Now calls NC.CheckCrossFileLinkCardTitle.) (* * rg |11/4/87| added ReadOnly) (LET ((DestinationCard (NC.GetCrossFileLinkDestCard Card)) DestinationCardTitle) (if DestinationCard then (NC.CheckCrossFileLinkCardTitle Card DestinationCard) (NC.EditNoteCard DestinationCard (OR ReadOnly (fetch (NoteFile ReadOnlyFlg) of (fetch (Card NoteFile) of Card))) RegionOrPosition TypeSpecificArgs))))) (NC.CrossFileLinkGetFn (LAMBDA (Card Length Stream VersionNum) (* rht%: "27-May-87 15:06") (* * Get the crossfilelink substance from the disk) (* * rht 11/1/86%: Now uses our readtable when reading.) (* * rht 5/27/87%: Now reads in new format of CrossFileLinkSubstance record with two new fields.) (DECLARE (GLOBALVARS NC.OrigReadTable)) (if (LEQ VersionNum 0) then (create CrossFileLinkSubstance CrossFileLinkDestCardUID ← (NC.ReadUID Stream) CrossFileLinkDestNoteFileUID ← (NC.ReadUID Stream) CrossFileLinkDestFileHint ← (READ Stream NC.OrigReadTable)) else (create CrossFileLinkSubstance CrossFileLinkDestCardUID ← (NC.ReadUID Stream) CrossFileLinkDestNoteFileUID ← (NC.ReadUID Stream) RemoteCrossFileLinkCardUID ← (NC.ReadUID Stream) CrossFileLinkDestFileHint ← (READ Stream NC.OrigReadTable) CrossFileLinkTwoWayFlg ← (READ Stream NC.OrigReadTable))))) (NC.CrossFileLinkPutFn (LAMBDA (Card Stream) (* rht%: "27-May-87 15:07") (* * Put crossfilelink substance) (* * rht 11/1/86%: Now uses our readtable when printing.) (* * rht 5/27/87%: Changed to write down new fields RemoteCrossFileLinkCardUID and CrossFileLinkTwoWayFlg of CrossFileLinkSubstance record.) (DECLARE (GLOBALVARS NC.OrigReadTable)) (LET ((Substance (NC.FetchSubstance Card))) (NC.WriteUID Stream (fetch (CrossFileLinkSubstance CrossFileLinkDestCardUID) of Substance)) (NC.WriteUID Stream (fetch (CrossFileLinkSubstance CrossFileLinkDestNoteFileUID) of Substance)) (NC.WriteUID Stream (fetch (CrossFileLinkSubstance RemoteCrossFileLinkCardUID) of Substance) ) (PRINT (fetch (CrossFileLinkSubstance CrossFileLinkDestFileHint) of Substance) Stream NC.OrigReadTable) (PRINT (fetch (CrossFileLinkSubstance CrossFileLinkTwoWayFlg) of Substance) Stream NC.OrigReadTable)) 1)) ) (DECLARE%: DONTEVAL@LOAD (NC.AddCrossFileLink) (PUTPROP 'CrossFileLink 'Don'tForceFilingFlg T) ) (PUTPROPS NCCROSSFILELINKS COPYRIGHT ("Xerox Corporation" 1986 1987 1988)) (DECLARE%: DONTCOPY (FILEMAP (NIL (2599 2871 (NCAddStub.CrossFileLink 2609 . 2869)) (4127 11786 (NC.AskCrossFileLinkMode 4137 . 5656) (NC.DeleteCrossFileLinkCard 5658 . 6191) (NC.FetchRemoteCrossFileLinkCard 6193 . 7481) ( NC.CheckCrossFileLinkCardTitle 7483 . 7947) (NC.CheckCrossFileLinkType 7949 . 10077) ( NC.MakeCrossFileLinkIconStandIn 10079 . 10527) (NC.ComputeCrossFileLinkMode 10529 . 11784)) (11787 24622 (NC.GetCrossFileLinkDestCard 11797 . 18513) (NC.CreateCrossFileLinkCard 18515 . 20631) ( NC.CrossFileLinkCardP 20633 . 20878) (NC.OpenCrossFileLinkDestNoteFile 20880 . 24620)) (24623 30368 ( NC.AddCrossFileLink 24633 . 26204) (NC.CrossFileLinkCopyFn 26206 . 26587) (NC.CrossFileLinkMakeFn 26589 . 26826) (NC.CrossFileLinkEditFn 26828 . 28029) (NC.CrossFileLinkGetFn 28031 . 29183) ( NC.CrossFileLinkPutFn 29185 . 30366))))) STOP