(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP")
(FILECREATED " 1-Oct-87 10:51:42" {ERINYES}<LISPUSERS>LYRIC>DINFOEDIT.;4 15185  

      changes to%:  (FNS DINFO.NODE.EDITOR DINFO.EDIT.NODE.WINDOW DINFO.TEDIT)

      previous date%: "14-Aug-87 15:23:12" {ERINYES}<LISPUSERS>LYRIC>DINFOEDIT.;2)


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

(PRETTYCOMPRINT DINFOEDITCOMS)

(RPAQQ DINFOEDITCOMS ((FILES (SYSLOAD FROM LISPUSERS) DINFO) (DECLARE%: EVAL@COMPILE DONTCOPY (FILES (LOADCOMP) DINFO)) (FNS DINFO.DUMMY.GRAPH DINFO.EDIT.MENU DINFOEDIT.CLOSEFN DINFO.MARKASCHANGED DINFO.UNMARKASCHANGED DINFO.ISCHANGED DINFO.SAVE.GRAPH DINFO.FETCH.GRAPH DINFO.ADD.NODE DINFO.DELETE.NODE DINFO.EDIT.NODE DINFO.TEDIT DINFO.NODE.EDITOR DINFO.EDIT.NODE.WINDOW DINFO.DECODE.NODE.FM DINFO.SELECT.NEIGHBOR DINFO.READ/NODE) (ADDVARS (DINFO.GRAPHS (">> Empty Graph<<" (DINFO.DUMMY.GRAPH) "Start DInfo on an empty, editable graph"))))
)
(FILESLOAD (SYSLOAD FROM LISPUSERS) DINFO)
(DECLARE%: EVAL@COMPILE DONTCOPY 
(FILESLOAD (LOADCOMP) DINFO)
)
(DEFINEQ

(DINFO.DUMMY.GRAPH
(LAMBDA NIL (* drc%: "23-Jan-86 18:07") (* * Create an empty, editable graph) (LET* ((DIR (DIRECTORYNAME T)) (W (CREATEW NIL "Empty DInfo Graph")) (GRAPH (create DINFOGRAPH NODELST ← (LIST (create DINFONODE ID ← 0)) TOPNODEID ← 0 MENUFN ← (FUNCTION DINFO.EDIT.MENU) DEFAULTHOST ← (FILENAMEFIELD DIR (QUOTE HOST)) DEFAULTDEVICE ← (FILENAMEFIELD DIR (QUOTE DEVICE)) DEFAULTDIR ← (FILENAMEFIELD DIR (QUOTE DIRECTORY)) WINDOW ← W))) (DINFO.SETUP.WINDOW GRAPH W) (WINDOWADDPROP W (QUOTE CLOSEFN) (QUOTE DINFOEDIT.CLOSEFN) T) GRAPH))
)

(DINFO.EDIT.MENU
(LAMBDA (GRAPH) (* drc%: "27-Jan-86 13:14") (* * A MENUFN for DInfo graphs which enables graph editing) (CLEARW T) (LET ((TYPE (MENU (if (type? MENU (DINFOGRAPHPROP GRAPH (QUOTE DINFO.EDIT.MENU))) then (DINFOGRAPHPROP GRAPH (QUOTE DINFO.EDIT.MENU)) else (DINFOGRAPHPROP GRAPH (QUOTE DINFO.EDIT.MENU) (create MENU ITEMS ← (QUOTE (("Put Graph" (QUOTE PUT) "Save current graph to a file") ("Get Graph" (QUOTE GET) "Read a graph from a file and visit it") ("Add Child" (QUOTE ADD) "Add a child node to the current node") ("Delete Node" (QUOTE DELETE) "Delete a terminal node from the current graph") ("Edit Node" (QUOTE EDIT) "Edit a selected node with the node editor" (SUBITEMS ("This node" (QUOTE EDIT.THIS) "Start the node editor on the current node"))) ("TEdit" (QUOTE TEDIT) "Tedit the text of the current node"))) TITLE ← "DInfo Edit Menu " CENTERFLG ← T)))))) (if TYPE then (PROCESSPROP (THIS.PROCESS) (QUOTE NAME) (CONCAT "DInfo " (L-CASE TYPE T))) (SELECTQ TYPE (PUT (DINFO.SAVE.GRAPH GRAPH)) (GET (DINFO.FETCH.GRAPH GRAPH)) (ADD (DINFO.ADD.NODE GRAPH)) (DELETE (DINFO.DELETE.NODE GRAPH)) (EDIT (DINFO.EDIT.NODE GRAPH)) (EDIT.THIS (DINFO.EDIT.NODE GRAPH T)) (TEDIT (DINFO.TEDIT GRAPH)) NIL))))
)

(DINFOEDIT.CLOSEFN
(LAMBDA (W) (* drc%: "23-Jan-86 17:57") (LET ((GRAPH (WINDOWPROP W (QUOTE DINFOGRAPH)))) (if (type? DINFOGRAPH GRAPH) then (if (AND (DINFO.ISCHANGED GRAPH) (NOT (MOUSECONFIRM "Graph has been changed" NIL (GETPROMPTWINDOW W)))) then (QUOTE DON'T)))))
)

(DINFO.MARKASCHANGED
(LAMBDA (GRAPH) (* drc%: "25-Jan-86 18:24") (DINFOGRAPHPROP GRAPH (QUOTE GRAPH.CHANGED) T)))

(DINFO.UNMARKASCHANGED
(LAMBDA (GRAPH) (* drc%: "17-Jan-86 13:45") (DINFOGRAPHPROP GRAPH (QUOTE GRAPH.CHANGED) NIL)))

(DINFO.ISCHANGED
(LAMBDA (GRAPH) (* drc%: "17-Jan-86 13:46") (AND GRAPH (DINFOGRAPHPROP GRAPH (QUOTE GRAPH.CHANGED)))))

(DINFO.SAVE.GRAPH
(LAMBDA (GRAPH) (* drc%: "16-Dec-85 14:35") (LET ((FILENAME (PROMPTFORWORD "Put: " (AND (fetch (DINFOGRAPH NAME) of GRAPH) (MKSTRING (PACKFILENAME (QUOTE HOST) (fetch (DINFOGRAPH DEFAULTHOST) of GRAPH) (QUOTE DIRECTORY) (fetch (DINFOGRAPH DEFAULTDIR) of GRAPH) (QUOTE NAME) (fetch (DINFOGRAPH NAME) of GRAPH) (QUOTE EXTENSION) (QUOTE DINFOGRAPH)))) NIL NIL NIL (QUOTE TTY)))) (if FILENAME then (PRINTOUT T " ...") (SETQ FILENAME (DINFO.WRITE.GRAPH GRAPH FILENAME)) (PRINTOUT T T "Written: " FILENAME) (replace (DINFOGRAPH NAME) of GRAPH with (FILENAMEFIELD FILENAME (QUOTE NAME))) (replace (DINFOGRAPH DEFAULTHOST) of GRAPH with (FILENAMEFIELD FILENAME (QUOTE HOST))) (replace (DINFOGRAPH DEFAULTDIR) of GRAPH with (FILENAMEFIELD FILENAME (QUOTE DIRECTORY))) (WINDOWPROP (fetch (DINFOGRAPH WINDOW) of GRAPH) (QUOTE TITLE) (CONCAT (fetch (DINFOGRAPH NAME) of GRAPH) " DInfo Graph")) (DINFO.UNMARKASCHANGED GRAPH) FILENAME else (PRINTOUT T T "Aborted") NIL)))
)

(DINFO.FETCH.GRAPH
(LAMBDA (GRAPH) (* drc%: "25-Jan-86 17:42") (if (AND (DINFO.ISCHANGED GRAPH) (NOT (MOUSECONFIRM "Changes have been made." NIL T))) then (PRINTOUT T T "Aborted.") else (LET ((FILENAME (INFILEP (PROMPTFORWORD "Get: " (AND (fetch (DINFOGRAPH NAME) of GRAPH) (PACKFILENAME (QUOTE HOST) (fetch (DINFOGRAPH DEFAULTHOST) of GRAPH) (QUOTE DIRECTORY) (fetch (DINFOGRAPH DEFAULTDIR) of GRAPH) (QUOTE NAME) (fetch (DINFOGRAPH NAME) of GRAPH) (QUOTE EXTENSION) (QUOTE DINFOGRAPH))) NIL NIL NIL (QUOTE TTY))))) (if FILENAME then (PRINTOUT T " ...") (CLOSEW (fetch (DINFOGRAPH GRAPH.WINDOW) of GRAPH)) (DINFO (DINFO.READ.GRAPH FILENAME) (fetch (DINFOGRAPH WINDOW) of GRAPH)) else (PRINTOUT T " not found.")))))
)

(DINFO.ADD.NODE
(LAMBDA (GRAPH) (* drc%: "16-Dec-85 14:33") (LET* ((CURRENT.NODE (fetch (DINFOGRAPH CURRENTNODE) of GRAPH)) (NODELST (fetch (DINFOGRAPH NODELST) of GRAPH)) NEW.CHILD) (SETQ NEW.CHILD (DINFO.NODE.EDITOR (create DINFONODE ID ← (bind (I ← 1) until (NOT (FASSOC I NODELST)) do (SETQ I (ADD1 I)) finally (RETURN I)) PARENT ← (fetch (DINFONODE ID) of CURRENT.NODE)) GRAPH)) (if NEW.CHILD then (DINFO.UPDATE GRAPH CURRENT.NODE NIL T) (DINFO.MARKASCHANGED GRAPH) (PRINTOUT T T "OK, child added") else (PRINTOUT T T "Add Child aborted"))))
)

(DINFO.DELETE.NODE
(LAMBDA (GRAPH) (* drc%: "20-Dec-85 15:12") (PROG* ((NODE (DINFO.READ/NODE GRAPH "to be deleted")) (NODELST (fetch (DINFOGRAPH NODELST) of GRAPH)) (PARENT (FASSOC (fetch (DINFONODE PARENT) of NODE) NODELST)) (PREVIOUSNODE (FASSOC (fetch (DINFONODE PREVIOUSNODE) of NODE) NODELST)) (NEXTNODE (FASSOC (fetch (DINFONODE NEXTNODE) of NODE) NODELST)) (CHILDREN (fetch (DINFONODE CHILDREN) of NODE))) (COND ((EQ (fetch (DINFONODE ID) of NODE) (fetch (DINFOGRAPH TOPNODEID) of GRAPH)) (PRINTOUT T T "The top node cannot be deleted")) ((NULL CHILDREN) (OR (MOUSECONFIRM (CONCAT "Delete node " (fetch (DINFONODE LABEL) of NODE) " ?") NIL T) (RETURN (PRINTOUT T T "Delete node aborted"))) (replace (DINFOGRAPH NODELST) of GRAPH with (DREMOVE NODE NODELST)) (replace (DINFONODE CHILDREN) of PARENT with (DREMOVE (fetch (DINFONODE ID) of NODE) (fetch (DINFONODE CHILDREN) PARENT))) (if (AND PREVIOUSNODE NEXTNODE) then (replace (DINFONODE NEXTNODE) of PREVIOUSNODE with (fetch (DINFONODE ID) of NEXTNODE)) (replace (DINFONODE PREVIOUSNODE) of NEXTNODE with (fetch (DINFONODE ID) of PREVIOUSNODE))) (DINFO.UPDATE GRAPH (if (EQ NODE (fetch (DINFOGRAPH CURRENTNODE) of GRAPH)) then (FASSOC (fetch (DINFONODE PARENT) of NODE) NODELST) else (fetch (DINFOGRAPH CURRENTNODE) of GRAPH)) NIL T) (DINFO.MARKASCHANGED GRAPH) (PRINTOUT T T "OK, node " (fetch (DINFONODE LABEL) of NODE) " deleted.")) (T (PRINTOUT T T "Sorry, only terminal nodes can be deleted.")))))
)

(DINFO.EDIT.NODE
(LAMBDA (GRAPH CURRENT.NODE?) (* drc%: "20-Dec-85 15:40") (LET ((NEW.NODE (DINFO.NODE.EDITOR (if CURRENT.NODE? then (fetch (DINFOGRAPH CURRENTNODE) of GRAPH) elseif (NULL (CDR (fetch (DINFOGRAPH NODELST) of GRAPH))) then (CAR (fetch (DINFOGRAPH NODELST) of GRAPH)) else (DINFO.READ/NODE GRAPH "to edit")) GRAPH))) (COND (NEW.NODE (DINFO.UPDATE GRAPH (fetch (DINFOGRAPH CURRENTNODE) of GRAPH) NIL T) (DINFO.MARKASCHANGED GRAPH) (PRINTOUT T T "OK, Node Edit completed")) (T (PRINTOUT T T "Node Edit aborted")))))
)

(DINFO.TEDIT
(LAMBDA (GRAPH) (* ; "Edited  1-Oct-87 10:41 by drc:") (RESETLST (LET* ((DINFOW (fetch (DINFOGRAPH WINDOW) of GRAPH)) (NODE (fetch (DINFOGRAPH CURRENTNODE) of GRAPH)) (FILE (DINFO.GET.FILENAME GRAPH NODE)) (TEXTSTREAM (TEXTSTREAM DINFOW)) (TEXTOBJ (TEXTOBJ TEXTSTREAM))) (CLOSEW (fetch (DINFOGRAPH GRAPH.WINDOW) of GRAPH)) (DETACHALLWINDOWS DINFOW) (WINDOWPROP DINFOW (QUOTE TEDIT.TITLEMENUFN) (QUOTE TEDIT.DEFAULT.MENUFN)) (WINDOWDELPROP DINFOW (QUOTE CLOSEFN) (QUOTE DINFO.CLOSEFN)) (WINDOWDELPROP DINFOW (QUOTE CLOSEFN) (QUOTE DINFOEDIT.CLOSEFN)) (TTY.PROCESS (THIS.PROCESS)) (TEDIT TEXTOBJ DINFOW T (QUOTE (READONLY NIL QUITFN NILL))) (SELECTQ (SETQ FILE (FULLNAME (fetch TXTFILE of (TEXTOBJ TEXTSTREAM)))) ((T NIL)) (PROGN (OR (MKATOM (fetch (DINFONODE LABEL) of NODE)) (replace (DINFONODE LABEL) of NODE with (FILENAMEFIELD FILE (QUOTE NAME)))) (replace (DINFONODE FILE) of NODE with (LET ((L (UNPACKFILENAME FILE))) (PACKFILENAME (QUOTE NAME) (LISTGET L (QUOTE NAME)) (QUOTE EXTENSION) (LISTGET L (QUOTE EXTENSION)) (QUOTE HOST) (if (EQ (LISTGET L (QUOTE HOST)) (fetch (DINFOGRAPH DEFAULTHOST) of GRAPH)) then NIL else (LISTGET L (QUOTE HOST))) (QUOTE DEVICE) (if (EQ (LISTGET L (QUOTE DEVICE)) (fetch (DINFOGRAPH DEFAULTDEVICE) of GRAPH)) then NIL else (LISTGET L (QUOTE DEVICE))) (QUOTE DIRECTORY) (if (EQ (LISTGET L (QUOTE DIRECTORY)) (fetch (DINFOGRAPH DEFAULTDIR) of GRAPH)) then NIL else (LISTGET L (QUOTE DIRECTORY)))))) (DINFO.MARKASCHANGED GRAPH))) (OPENW DINFOW) (DETACHALLWINDOWS DINFOW) (AND (fetch (DINFOGRAPH FMENU.WINDOW) of GRAPH) (ATTACHWINDOW (fetch (DINFOGRAPH FMENU.WINDOW) of GRAPH) DINFOW)) (WINDOWADDPROP DINFOW (QUOTE CLOSEFN) (QUOTE DINFO.CLOSEFN)) (WINDOWADDPROP DINFOW (QUOTE CLOSEFN) (QUOTE DINFOEDIT.CLOSEFN) T) (WINDOWPROP DINFOW (QUOTE TEDIT.TITLEMENUFN) (QUOTE DINFO.TITLEMENUFN)) (DINFO.UPDATE GRAPH NIL NIL T))))
)

(DINFO.NODE.EDITOR
(LAMBDA (NODE GRAPH) (* ; "Edited  1-Oct-87 10:47 by drc:") (LET* ((NODELST (fetch (DINFOGRAPH NODELST) of GRAPH)) (WINDOW (DINFO.EDIT.NODE.WINDOW NODE NODELST (CONCAT "Edit of DInfo node " (fetch (DINFONODE ID) of NODE)))) NEW.NODE) (WINDOWPROP WINDOW (QUOTE DINFOGRAPH) GRAPH) (WINDOWPROP WINDOW (QUOTE EVENT) (CREATE.EVENT (QUOTE DINFO.NODE.EDITOR))) (WINDOWPROP WINDOW (QUOTE CLOSEFN) (FUNCTION (LAMBDA (W) (NOTIFY.EVENT (WINDOWPROP W (QUOTE EVENT)))))) (RESETSAVE NIL (LIST (QUOTE CLOSEW) WINDOW)) (MOVEW WINDOW (GETBOXPOSITION (WINDOWPROP WINDOW (QUOTE WIDTH)) (WINDOWPROP WINDOW (QUOTE HEIGHT)) NIL NIL NIL "Position DInfo Node Editor window")) (OPENW WINDOW) (AWAIT.EVENT (WINDOWPROP WINDOW (QUOTE EVENT))) (if (WINDOWPROP WINDOW (QUOTE SAVE.CHANGES)) then (LET* ((NEW.NODE (DINFO.DECODE.NODE.FM WINDOW NODE)) (PARENT (FASSOC (fetch (DINFONODE PARENT) of NEW.NODE) NODELST))) (* add into nodelst) (replace (DINFOGRAPH NODELST) of GRAPH with (ATTACH NEW.NODE (DREMOVE NODE NODELST))) (if (EQ (fetch (DINFONODE ID) of NEW.NODE) (fetch (DINFONODE ID) of (fetch (DINFOGRAPH CURRENTNODE) of GRAPH))) then (replace (DINFOGRAPH CURRENTNODE) of GRAPH with NEW.NODE)) (AND PARENT (replace (DINFONODE CHILDREN) of PARENT with (LET ((ID (fetch (DINFONODE ID) of NEW.NODE)) (NEXT (fetch (DINFONODE NEXTNODE) of NEW.NODE)) (SIBLINGS (fetch (DINFONODE CHILDREN) of PARENT))) (if (MEMB NEXT SIBLINGS) then (LSUBST (LIST NEXT ID) NEXT (DREMOVE ID SIBLINGS)) else (ATTACH ID (DREMOVE ID SIBLINGS)))))) (AND (fetch (DINFONODE PREVIOUSNODE) of NEW.NODE) (replace (DINFONODE NEXTNODE) of (FASSOC (fetch (DINFONODE PREVIOUSNODE) of NEW.NODE) NODELST) with (fetch (DINFONODE ID) of NEW.NODE))) (AND (fetch (DINFONODE NEXTNODE) of NEW.NODE) (replace (DINFONODE PREVIOUSNODE) of (FASSOC (fetch (DINFONODE NEXTNODE) of NEW.NODE) NODELST) with (fetch (DINFONODE ID) of NEW.NODE))) NEW.NODE))))
)

(DINFO.EDIT.NODE.WINDOW
(LAMBDA (NODE NODELST TITLE) (* ; "Edited  1-Oct-87 10:50 by drc:") (FREEMENU (BQUOTE ((PROPS FONT (HELVETICA 10)) ((LABEL Exit! FONT (HELVETICA 10 BOLD) SELECTEDFN (LAMBDA (ITEM WINDOW) (WINDOWPROP WINDOW (QUOTE SAVE.CHANGES) T) (CLOSEW WINDOW)) MESSAGE "Exit DInfo Node editor, saving changes") (LABEL Abort! FONT (HELVETICA 10 BOLD) SELECTEDFN (LAMBDA (ITEM WINDOW) (CLOSEW WINDOW)) MESSAGE "Abort DInfo Node editor, changes will be forgotten")) ((LABEL ID%: TYPE DISPLAY) (ID ID TYPE DISPLAY LABEL %, (MKSTRING (fetch (DINFONODE ID) of NODE)))) ((LABEL Label%: TYPE EDITSTART LINKS (EDIT LABEL)) (ID LABEL TYPE EDIT FONT (HELVETICA 10 BOLD) LABEL %, (MKSTRING (fetch (DINFONODE LABEL) of NODE)))) ((LABEL File%: TYPE EDITSTART LINKS (EDIT FILE)) (ID FILE TYPE EDIT FONT (HELVETICA 10 BOLD) LABEL %, (MKSTRING (fetch (DINFONODE FILE) of NODE)))) ((LABEL "Parent:" TYPE DISPLAY) (ID PARENT TYPE DISPLAY LABEL %, (MKSTRING (fetch (DINFONODE LABEL) of (FASSOC (fetch (DINFONODE PARENT) of NODE) NODELST))))) ((LABEL "Previous Node:" TYPE DISPLAY) (ID PREVIOUSNODE FONT (HELVETICA 10 BOLD) LABEL %, (MKSTRING (fetch (DINFONODE LABEL) of (FASSOC (fetch (DINFONODE PREVIOUSNODE) of NODE) NODELST))) NODEID %, (fetch (DINFONODE PREVIOUSNODE) of NODE) SELECTEDFN DINFO.SELECT.NEIGHBOR MESSAGE "Select a node to be the Previous Node")) ((LABEL "Next Node:" TYPE DISPLAY) (ID NEXTNODE FONT (HELVETICA 10 BOLD) LABEL %, (MKSTRING (fetch (DINFONODE LABEL) of (FASSOC (fetch (DINFONODE NEXTNODE) of NODE) NODELST))) NODEID %, (fetch (DINFONODE NEXTNODE) of NODE) SELECTEDFN DINFO.SELECT.NEIGHBOR MESSAGE "Select a node to be the Next Node")))) TITLE))
)

(DINFO.DECODE.NODE.FM
(LAMBDA (FM.WINDOW OLD.NODE) (* jow "21-May-86 15:57") (LET ((STATE (FM.GETSTATE FM.WINDOW))) (create DINFONODE ID ← (fetch (DINFONODE ID) of OLD.NODE) PARENT ← (fetch (DINFONODE PARENT) of OLD.NODE) CHILDREN ← (fetch (DINFONODE CHILDREN) of OLD.NODE) LABEL ← (LISTGET STATE (QUOTE LABEL)) FILE ← (MKATOM (LISTGET STATE (QUOTE FILE))) NEXTNODE ← (FM.ITEMPROP (FM.GETITEM (QUOTE NEXTNODE) NIL FM.WINDOW) (QUOTE NODEID)) PREVIOUSNODE ← (FM.ITEMPROP (FM.GETITEM (QUOTE PREVIOUSNODE) NIL FM.WINDOW) (QUOTE NODEID)))))
)

(DINFO.SELECT.NEIGHBOR
(LAMBDA (ITEM FM.WINDOW) (* jow "21-May-86 16:02") (LET ((NODE (DINFO.READ/NODE (WINDOWPROP FM.WINDOW (QUOTE DINFOGRAPH)) (SELECTQ (FM.ITEMPROP ITEM (QUOTE ID)) (NEXTNODE "to be Next Node") (PREVIOUSNODE "to be Previous Node") (SHOULDNT))))) (FM.ITEMPROP ITEM (QUOTE NODEID) (fetch (DINFONODE ID) of NODE)) (FM.CHANGELABEL ITEM (fetch (DINFONODE LABEL) of NODE) FM.WINDOW)))
)

(DINFO.READ/NODE
(LAMBDA (GRAPH BLURB) (* jow "21-May-86 16:04") (LET ((DINFOW (fetch (DINFOGRAPH WINDOW) of GRAPH))) (RESETLST (RESETSAVE (TTYDISPLAYSTREAM (GETPROMPTWINDOW DINFOW))) (RESETSAVE (TTY.PROCESS (THIS.PROCESS))) (PRINTOUT T T "Select node in DInfo Graph window ") (AND BLURB (PRINTOUT T BLURB)) (RESETSAVE (CURSOR CROSSHAIRS)) (LET* ((FMENUW (fetch (DINFOGRAPH FMENU.WINDOW) of GRAPH)) (FM.ITEM (FM.GETITEM (QUOTE GRAPH) NIL FMENUW)) GRAPHW) (OR (FM.ITEMPROP FM.ITEM (QUOTE STATE)) (PROGN (FM.CHANGESTATE FM.ITEM T FMENUW) (DINFO.TOGGLE.GRAPH FM.ITEM FMENUW))) (TOTOPW (SETQ GRAPHW (fetch (DINFOGRAPH GRAPH.WINDOW) of GRAPH))) (RESETSAVE (INTERRUPTABLE T)) (PROG1 (fetch (GRAPHNODE NODEID) of (READ/NODE (fetch (GRAPH GRAPHNODES) of (WINDOWPROP GRAPHW (QUOTE GRAPH))) GRAPHW)) (TERPRI T))))))
)
)

(ADDTOVAR DINFO.GRAPHS (">> Empty Graph<<" (DINFO.DUMMY.GRAPH) "Start DInfo on an empty, editable graph")
)
(PUTPROPS DINFOEDIT COPYRIGHT ("Xerox Corporation" 1986 1987))
(DECLARE%: DONTCOPY
  (FILEMAP (NIL (1081 14986 (DINFO.DUMMY.GRAPH 1091 . 1643) (DINFO.EDIT.MENU 1645 . 2867) (
DINFOEDIT.CLOSEFN 2869 . 3143) (DINFO.MARKASCHANGED 3145 . 3262) (DINFO.UNMARKASCHANGED 3264 . 3385) (
DINFO.ISCHANGED 3387 . 3510) (DINFO.SAVE.GRAPH 3512 . 4493) (DINFO.FETCH.GRAPH 4495 . 5216) (
DINFO.ADD.NODE 5218 . 5770) (DINFO.DELETE.NODE 5772 . 7239) (DINFO.EDIT.NODE 7241 . 7774) (DINFO.TEDIT
 7776 . 9648) (DINFO.NODE.EDITOR 9650 . 11550) (DINFO.EDIT.NODE.WINDOW 11552 . 13223) (
DINFO.DECODE.NODE.FM 13225 . 13766) (DINFO.SELECT.NEIGHBOR 13768 . 14171) (DINFO.READ/NODE 14173 . 
14984)))))
STOP