(FILECREATED "19-Nov-84 17:24:49" {AZTEC}<TRILLIUM>BIRTHDAY84>RERELEASE>TRI-SAVING.;2 30108  

      changes to:  (FNS LOADING.FILE)

      previous date: "17-Aug-84 23:24:10" {AZTEC}<TRILLIUM>BIRTHDAY84>RERELEASE>TRI-SAVING.;1)


(* Copyright (c) 1984 by Xerox Corporation)

(PRETTYCOMPRINT TRI-SAVINGCOMS)

(RPAQQ TRI-SAVINGCOMS ((VARS (CLEANUP.CONFIRM.MENU)
			     (FILE.OBJECT.TYPE.MENU)
			     (LOADING.&.SAVING.COMMAND.MENU)
			     (TRILLIUM.OBJECT.FILES))
	(FNS ACQUIRE.FILE.OBJECT.NAME ACQUIRE.FILE.OBJECT.TYPE ACQUIRE.OBJECT.FILE.ENTRY 
	     ACQUIRE.OBJECT.FILE.NAME ADD.INTERFACE.TO.FILE ADD.ITEMTYPE.TO.FILE ADD.OBJECT.TO.FILE 
	     CLEANUP.OBJECT.FILES CLEANUP.OBJECT.FILES.GIVE.REASON CLEANUP.OBJECT.FILES.SELECTIVELY 
	     COPY.OBJECT.FILE DEFINE.NEW.FILE DEFINE.OBJECT.FILE DELETE.FROM.FILE DELETE.OBJECT.FILE 
	     DELETE.OBJECT.FROM.FILE FILE.NEW.OBJECTS FILED.OBJECTS.ON FILES.WITH.MARKED.OBJECTS 
	     FORGET.OBJECT.CHANGES GET.CLEANUP.CONFIRM.MENU GET.LOADING.&.SAVING.COMMAND.MENU 
	     INTERACT&DELETE.OBJECT.FILE INTERACT&FILE.NEW.OBJECTS INTERACT&LIST.OBJECTS.ON.FILE 
	     INTERACT&MAKE.OBJECT.FILE INTERACT&SHOW.OBJECTS.ON.FILE LIST.OBJECTS.ON.FILE 
	     LOADING.&.SAVING LOADING.FILE MAKE.OBJECT.FILE MARK.OBJECT.FILE OBJECT.FILE.NAMES 
	     SHOW.OBJECT.FILES SHOW.OBJECTS.ON.FILE TRILLIUM.CONN? TRILLIUM.CONNECT 
	     WHERE.IS.OBJECT.FILED?)))

(RPAQQ CLEANUP.CONFIRM.MENU NIL)

(RPAQQ FILE.OBJECT.TYPE.MENU NIL)

(RPAQQ LOADING.&.SAVING.COMMAND.MENU NIL)

(RPAQQ TRILLIUM.OBJECT.FILES NIL)
(DEFINEQ

(ACQUIRE.FILE.OBJECT.NAME
  [LAMBDA (FILENAME)                                         (* DAHJr "23-JAN-83 14:33")
    (DECLARE (GLOBALVARS ITEMTYPE.NAMES))
    (PROG (INTERFACE.NAMES ITEMS FILE.OBJECT.MENU)
          (SETQ ITEMS (CONS))
          (SETQ INTERFACE.NAMES (FILED.OBJECTS.ON (QUOTE INTERFACE.NAMES)
						  FILENAME))
          [COND
	    (INTERFACE.NAMES (TCONC ITEMS (LIST "--Interfaces--" NIL))
			     (for INTERFACE.NAME in INTERFACE.NAMES
				do (TCONC ITEMS (LIST INTERFACE.NAME (KWOTE (CONS (QUOTE 
										  INTERFACE.NAMES)
										  INTERFACE.NAME]
          (SETQ ITEMTYPE.NAMES (FILED.OBJECTS.ON (QUOTE ITEMTYPE.NAMES)
						 FILENAME))
          [COND
	    (ITEMTYPE.NAMES (TCONC ITEMS (LIST "--Item types--" NIL))
			    (for ITYPE in ITEMTYPE.NAMES
			       do (TCONC ITEMS (LIST ITYPE (KWOTE (CONS (QUOTE ITEMTYPE.NAMES)
									ITYPE]
          (SETQ FILE.OBJECT.MENU (create MENU
					 ITEMS ←(CAR ITEMS)
					 TITLE ←(CONCAT "Objects on file " FILENAME)
					 CENTERFLG ← T
					 CHANGEOFFSETFLG ← T))
          (RETURN (MENU FILE.OBJECT.MENU])

(ACQUIRE.FILE.OBJECT.TYPE
  [LAMBDA NIL                                                (* DAHJr "23-JAN-83 19:18")
                                                             (* EVAL THIS WHEN THE MENU IS CHANGED 
							     (SETQ FILE.OBJECT.TYPE.MENU))
    (DECLARE (GLOBALVARS FILE.OBJECT.TYPE.MENU))
    (MENU (OR FILE.OBJECT.TYPE.MENU (SETQ FILE.OBJECT.TYPE.MENU (create MENU
									TITLE ← "What kind of object"
									ITEMS ←[QUOTE
									  ((Interface (QUOTE 
										  INTERFACE.NAMES))
									    (Itemtype (QUOTE 
										   ITEMTYPE.NAMES]
									CENTERFLG ← T
									CHANGEOFFSETFLG ← T])

(ACQUIRE.OBJECT.FILE.ENTRY
  [LAMBDA (MESSAGE)                                          (* HaKo "25-Jul-84 17:06")
    (DECLARE (GLOBALVARS TRILLIUM.OBJECT.FILES))
    (PROG (NAME.MENU)
          (COND
	    (MESSAGE (TRILLIUM.PRINTOUT ON PROMPTWINDOW MESSAGE)))
          (SETQ NAME.MENU (create MENU
				  ITEMS ←(for ENTRY in TRILLIUM.OBJECT.FILES
					    collect (LIST (CAR ENTRY)
							  (KWOTE ENTRY)))
				  TITLE ← "Trillium object files"
				  CENTERFLG ← T
				  CHANGEOFFSETFLG ← T))
          (RETURN (MENU NAME.MENU])

(ACQUIRE.OBJECT.FILE.NAME
  [LAMBDA (MESSAGE)                                          (* DAHJr "24-JAN-83 10:12")
    (CAR (ACQUIRE.OBJECT.FILE.ENTRY MESSAGE])

(ADD.INTERFACE.TO.FILE
  [LAMBDA NIL                                                (* DAHJr "23-JAN-83 13:48")
    (PROG (ENTRY INTERFACE.NAME CONTENTS INTERFACE.NAMES)
          (SETQ ENTRY (ACQUIRE.OBJECT.FILE.ENTRY))
          (COND
	    (ENTRY (SETQ INTERFACE.NAME (ACQUIRE.INTERFACE.NAME))
		   (COND
		     (INTERFACE.NAME (ADD.OBJECT.TO.FILE INTERFACE.NAME (QUOTE INTERFACE.NAMES)
							 (CAR ENTRY])

(ADD.ITEMTYPE.TO.FILE
  [LAMBDA NIL                                                (* DAHJr "23-JAN-83 13:50")
    (PROG (ENTRY ITEMTYPE.NAME CONTENTS ITEMTYPE.NAMES)
          (SETQ ENTRY (ACQUIRE.OBJECT.FILE.ENTRY))
          (COND
	    (ENTRY (SETQ ITEMTYPE.NAME (ACQUIRE.ITEM.TYPE))
		   (COND
		     (ITEMTYPE.NAME (ADD.OBJECT.TO.FILE ITEMTYPE.NAME (QUOTE ITEMTYPE.NAMES)
							(CAR ENTRY])

(ADD.OBJECT.TO.FILE
  [LAMBDA (OBJECT TYPE FILENAME)                             (* DAHJr "24-JAN-83 10:14")
    (DECLARE (GLOBALVARS TRILLIUM.OBJECT.FILES))
    (PROG (ENTRY CONTENTS OBJECTS)
          (SETQ ENTRY (FASSOC FILENAME TRILLIUM.OBJECT.FILES))
          [COND
	    ((NULL ENTRY)
	      (DEFINE.NEW.FILE FILENAME NIL)
	      (SETQ ENTRY (FASSOC FILENAME TRILLIUM.OBJECT.FILES]
          (SETQ CONTENTS (CDR ENTRY))
          [COND
	    (CONTENTS (SETQ OBJECTS (LISTGET CONTENTS TYPE))
		      (SETQ OBJECTS (CONS OBJECT OBJECTS))
		      (SETQ OBJECTS (INTERSECTION OBJECTS OBJECTS))
		      (SETQ OBJECTS (SORT OBJECTS))
		      (LISTPUT CONTENTS TYPE OBJECTS))
	    (T (RPLACD ENTRY (LIST TYPE (LIST OBJECT]
          (MARK.OBJECT.FILE FILENAME T])

(CLEANUP.OBJECT.FILES
  [LAMBDA NIL                                                (* HaKo "16-Aug-84 16:23")
    (PROG (TO.BE.DUMPED.FILES)
          (INTERACT&FILE.NEW.OBJECTS)
          (SETQ TO.BE.DUMPED.FILES (FILES.WITH.MARKED.OBJECTS))
          (COND
	    (TO.BE.DUMPED.FILES (TRILLIUM.PRINTOUT ON TRILLIUM.DESCRIPTIONS "Files to be made:")
				(for FILENAME in TO.BE.DUMPED.FILES
				   do (TRILLIUM.PRINTOUT ON TRILLIUM.DESCRIPTIONS SAME.LINE 1 
							 FILENAME))
				(SELECTQ (MENU (GET.CLEANUP.CONFIRM.MENU))
					 ((NIL DON'T.MAKE.ANY.FILES.NOW)
					   NIL)
					 [MAKE.ALL.WITHOUT.CONFIRMATION (THINKING
									  (for FILENAME in 
									       TO.BE.DUMPED.FILES
									     do (MAKE.OBJECT.FILE
										  FILENAME]
					 (MAKE.SELECTIVELY.WITH.CONFIRMATION (
CLEANUP.OBJECT.FILES.SELECTIVELY TO.BE.DUMPED.FILES))
					 (SHOULDNT)))
	    (T (TRILLIUM.PRINTOUT ON TRILLIUM.DESCRIPTIONS "No files need making"])

(CLEANUP.OBJECT.FILES.GIVE.REASON
  [LAMBDA (FILENAME)                                         (* HaKo "16-Aug-84 16:25")
    (PROG (MEMBERSHIP.CHANGES INTERFACE.NAMES ITYPES)
          (SETQ MEMBERSHIP.CHANGES (FILED.OBJECTS.ON (QUOTE CHANGED)
						     FILENAME))
          (SETQ INTERFACE.NAMES (for INTERFACE.NAME in (FILED.OBJECTS.ON (QUOTE INTERFACE.NAMES)
									 FILENAME)
				   when (MARKASCHANGEDP INTERFACE.NAME (QUOTE DIALOGS)) collect
											 
										   INTERFACE.NAME))
          (SETQ ITYPES (for ITYPE in (FILED.OBJECTS.ON (QUOTE ITEMTYPE.NAMES)
						       FILENAME)
			  when (MARKASCHANGEDP ITYPE (QUOTE ITEMTYPES)) collect ITYPE))
          (COND
	    [(OR MEMBERSHIP.CHANGES INTERFACE.NAMES ITYPES)
	      (TRILLIUM.PRINTOUT ON TRILLIUM.DESCRIPTIONS "The file " FILENAME 
				 " needs to be made because")
	      (COND
		(MEMBERSHIP.CHANGES (TRILLIUM.PRINTOUT ON TRILLIUM.DESCRIPTIONS SAME.BLOCK 2 
						       "its membership has changed")))
	      [COND
		(INTERFACE.NAMES (TRILLIUM.PRINTOUT ON TRILLIUM.DESCRIPTIONS SAME.BLOCK 2 
						    "these interfaces have changed:")
				 (for INTERFACE.NAME in INTERFACE.NAMES
				    do (TRILLIUM.PRINTOUT ON TRILLIUM.DESCRIPTIONS SAME.LINE 1 
							  INTERFACE.NAME]
	      (COND
		(ITYPES (TRILLIUM.PRINTOUT ON TRILLIUM.DESCRIPTIONS SAME.BLOCK 2 
					   "these itemtypes have changed:")
			(for ITYPE in ITYPES do (TRILLIUM.PRINTOUT ON TRILLIUM.DESCRIPTIONS SAME.LINE 
								   1 ITYPE]
	    (T (TRILLIUM.PRINTOUT ON TRILLIUM.DESCRIPTIONS "The file " FILENAME 
				  " does not need making"])

(CLEANUP.OBJECT.FILES.SELECTIVELY
  [LAMBDA (FILENAMES)                                        (* DAHJr "24-JAN-83 12:37")
    (PROG (CONFIRM.SUBMENU DONE)
          (for FILENAME in FILENAMES
	     do (SETQ CONFIRM.SUBMENU (create MENU
					      TITLE ←(CONCAT "Make file " FILENAME " now?")
					      ITEMS ←(QUOTE (YES NOT.NOW (" " NIL)
								 WHY.DOES.IT.NEED.MAKING? 
								 SHOW.MEMBERSHIP 
								 FORGET.MEMBERSHIP.CHANGES 
								 FORGET.CHANGES.TO.OBJECTS))
					      CENTERFLG ← T
					      CHANGEOFFSETFLG ← T))
		(SETQ DONE)
		(until DONE do (SELECTQ (MENU CONFIRM.SUBMENU)
					(NIL NIL)
					(YES (SETQ DONE T)
					     (MAKE.OBJECT.FILE FILENAME))
					(NOT.NOW (SETQ DONE T))
					(WHY.DOES.IT.NEED.MAKING? (CLEANUP.OBJECT.FILES.GIVE.REASON
								    FILENAME))
					(SHOW.MEMBERSHIP (SHOW.OBJECTS.ON.FILE FILENAME))
					(FORGET.MEMBERSHIP.CHANGES (MARK.OBJECT.FILE FILENAME NIL))
					(FORGET.CHANGES.TO.OBJECTS (FORGET.OBJECT.CHANGES FILENAME))
					(SHOULDNT])

(COPY.OBJECT.FILE
  [LAMBDA NIL                                                (* HaKo "16-Aug-84 16:25")
    (PROG (ENTRY FILENAME CONTENTS)
          (SETQ ENTRY (ACQUIRE.OBJECT.FILE.ENTRY "Indicate file to be copied"))
          (COND
	    (ENTRY (TRILLIUM.PRINTOUT ON PROMPTWINDOW "Name of the copy: ")
		   (SETQ FILENAME (PROMPT.READ))
		   (COND
		     (FILENAME (SETQ CONTENTS (COPYALL (CDR ENTRY)))
			       (DEFINE.NEW.FILE FILENAME CONTENTS)
			       (TRILLIUM.PRINTOUT ON TRILLIUM.TRACE "File " FILENAME " defined"])

(DEFINE.NEW.FILE
  [LAMBDA (FILENAME CONTENTS)                                (* DAHJr "24-JAN-83 10:09")
    (DECLARE (GLOBALVARS TRILLIUM.OBJECT.FILES))
    [COND
      (TRILLIUM.OBJECT.FILES (PUTASSOC FILENAME CONTENTS TRILLIUM.OBJECT.FILES))
      (T (SETQ TRILLIUM.OBJECT.FILES (LIST (CONS FILENAME CONTENTS]
    (MARK.OBJECT.FILE FILENAME T])

(DEFINE.OBJECT.FILE
  [LAMBDA NIL                                                (* HaKo "16-Aug-84 16:26")
    (PROG (FILENAME)
          (TRILLIUM.PRINTOUT ON PROMPTWINDOW "Name of file to hold Trillium objects: ")
          (SETQ FILENAME (PROMPT.READ))
          (COND
	    (FILENAME (DEFINE.NEW.FILE FILENAME NIL)
		      (TRILLIUM.PRINTOUT ON TRILLIUM.TRACE SAME.BLOCK "File " FILENAME 
					 " defined containing no objects"])

(DELETE.FROM.FILE
  [LAMBDA NIL                                                (* HaKo "16-Aug-84 16:27")
    (PROG (ENTRY CONTENTS FILENAME OBJECT.NAME INTERFACE.NAMES)
          (SETQ ENTRY (ACQUIRE.OBJECT.FILE.ENTRY))
          (COND
	    (ENTRY (SETQ FILENAME (CAR ENTRY))
		   (SETQ CONTENTS (CDR ENTRY))
		   (COND
		     [CONTENTS (SETQ OBJECT.NAME (ACQUIRE.FILE.OBJECT.NAME FILENAME))
			       (COND
				 ([AND OBJECT.NAME (CONFIRM (CONCAT "Delete " (SELECTQ (CAR 
										      OBJECT.NAME)
										       (
INTERFACE.NAMES "interface")
										       (ITEMTYPE.NAMES
											 "itemtype")
										       (SHOULDNT))
								    " "
								    (CDR OBJECT.NAME]
				   (DELETE.OBJECT.FROM.FILE (CDR OBJECT.NAME)
							    (CAR OBJECT.NAME)
							    FILENAME]
		     (T (TRILLIUM.PRINTOUT ON TRILLIUM.TRACE "There are no entries on file " FILENAME 
					   " to delete"])

(DELETE.OBJECT.FILE
  [LAMBDA (FILENAME)                                         (* DAHJr "24-JAN-83 10:41")
    (DECLARE (GLOBALVARS TRILLIUM.OBJECT.FILES))
    (SETQ TRILLIUM.OBJECT.FILES (DREMOVE (FASSOC FILENAME TRILLIUM.OBJECT.FILES)
					 TRILLIUM.OBJECT.FILES])

(DELETE.OBJECT.FROM.FILE
  [LAMBDA (OBJECT TYPE FILENAME)                             (* DAHJr "24-JAN-83 10:16")
    (DECLARE (GLOBALVARS TRILLIUM.OBJECT.FILES))
    (PROG (ENTRY CONTENTS OBJECTS)
          (SETQ ENTRY (FASSOC FILENAME TRILLIUM.OBJECT.FILES))
          (OR ENTRY (SHOULDNT))
          (SETQ CONTENTS (CDR ENTRY))
          [COND
	    (CONTENTS (LISTPUT CONTENTS TYPE (DREMOVE OBJECT (LISTGET CONTENTS TYPE]
          (MARK.OBJECT.FILE FILENAME T])

(FILE.NEW.OBJECTS
  [LAMBDA (INTERFACE.NAMES ITYPES)                           (* HaKo "25-Jul-84 17:10")
    (PROG (FILED.INTERFACES FILED.ITEMTYPES ENTRY)
          [for INTERFACE.NAME in INTERFACE.NAMES
	     do (TRILLIUM.PRINTOUT ON PROMPTWINDOW "Indicate where to file interface " INTERFACE.NAME)
		(SETQ ENTRY (ACQUIRE.OBJECT.FILE.ENTRY))
		(COND
		  (ENTRY (ADD.OBJECT.TO.FILE INTERFACE.NAME (QUOTE INTERFACE.NAMES)
					     (CAR ENTRY]
          (for ITYPE in ITYPES
	     do (TRILLIUM.PRINTOUT ON PROMPTWINDOW "Indicate where to file itemtype " ITYPE)
		(SETQ ENTRY (ACQUIRE.OBJECT.FILE.ENTRY))
		(COND
		  (ENTRY (ADD.OBJECT.TO.FILE ITYPE (QUOTE ITEMTYPE.NAMES)
					     (CAR ENTRY])

(FILED.OBJECTS.ON
  [LAMBDA (TYPE OBJECT.FILES)                                (* DAHJr "23-JAN-83 17:10")
    (DECLARE (GLOBALVARS TRILLIUM.OBJECT.FILES))
    (COND
      ((AND OBJECT.FILES (LITATOM OBJECT.FILES))
	(LISTGET (CDR (FASSOC OBJECT.FILES TRILLIUM.OBJECT.FILES))
		 TYPE))
      (T (PROG (FILES OBJECTS ENTRY)
	       (SETQ FILES (OR OBJECT.FILES (OBJECT.FILE.NAMES)))
	       [SETQ OBJECTS (for FILE in FILES
				join (SETQ ENTRY (FASSOC FILE TRILLIUM.OBJECT.FILES))
				     (COPY (LISTGET (CDR ENTRY)
						    TYPE]
	       (SETQ OBJECTS (INTERSECTION OBJECTS OBJECTS))
	       (RETURN (SORT OBJECTS])

(FILES.WITH.MARKED.OBJECTS
  [LAMBDA NIL                                                (* DAHJr "24-JAN-83 10:28")
    (for FILENAME in (OBJECT.FILE.NAMES) unless [AND (NULL (FILED.OBJECTS.ON (QUOTE CHANGED)
									     FILENAME))
						     (for INTERFACE.NAME in (FILED.OBJECTS.ON
									      (QUOTE INTERFACE.NAMES)
									      FILENAME)
							never (MARKASCHANGEDP INTERFACE.NAME
									      (QUOTE DIALOGS)))
						     (for ITYPE in (FILED.OBJECTS.ON (QUOTE 
										   ITEMTYPE.NAMES)
										     FILENAME)
							never (MARKASCHANGEDP ITYPE (QUOTE ITEMTYPES]
       collect FILENAME])

(FORGET.OBJECT.CHANGES
  [LAMBDA (FILENAME)                                         (* DAHJr "24-JAN-83 12:18")
    (PROG (INTERFACE.NAMES ITYPES)
          [for INTERFACE.NAME in (FILED.OBJECTS.ON (QUOTE INTERFACE.NAMES)
						   FILENAME)
	     do (COND
		  ((AND (MARKASCHANGEDP INTERFACE.NAME (QUOTE DIALOGS))
			(CONFIRM (CONCAT "Forget changes to interface " INTERFACE.NAME "?")))
		    (UNMARK.INTERFACE (FIND.INTERFACE INTERFACE.NAME]
          (for ITYPE in (FILED.OBJECTS.ON (QUOTE ITEMTYPE.NAMES)
					  FILENAME)
	     do (COND
		  ((AND (MARKASCHANGEDP ITYPE (QUOTE ITEMTYPES))
			(CONFIRM (CONCAT "Forget changes to itemtype " ITYPE "?")))
		    (UNMARK.ITEM.TYPE ITYPE])

(GET.CLEANUP.CONFIRM.MENU
  [LAMBDA NIL                                                (* DAHJr "24-JAN-83 11:15")
                                                             (* EVAL THIS WHEN CHANGING THE MENU 
							     (SETQ CLEANUP.CONFIRM.MENU))
    (DECLARE (GLOBALVARS CLEANUP.CONFIRM.MENU))
    (OR CLEANUP.CONFIRM.MENU (SETQ CLEANUP.CONFIRM.MENU (create MENU
								TITLE ← "Make these files now?"
								ITEMS ←(QUOTE (
MAKE.ALL.WITHOUT.CONFIRMATION MAKE.SELECTIVELY.WITH.CONFIRMATION DON'T.MAKE.ANY.FILES.NOW))
								CENTERFLG ← T
								CHANGEOFFSETFLG ← T])

(GET.LOADING.&.SAVING.COMMAND.MENU
  [LAMBDA NIL                                                (* DAHJr "22-MAR-83 12:31")
                                                             (* WHEN MENU CHANGES EVAL: (SETQ 
							     LOADING.&.SAVING.COMMAND.MENU NIL))
    (DECLARE (GLOBALVARS LOADING.&.SAVING.COMMAND.MENU))
    (OR LOADING.&.SAVING.COMMAND.MENU (SETQ LOADING.&.SAVING.COMMAND.MENU
	  (create MENU
		  ITEMS ←(QUOTE (CONNECTED.TO.? CONNECT.TO.HOST/DIRECTORY ("" NIL)
						LOAD.FILE
						("" NIL)
						CREATE.NEW.FILE COPY.FILE DELETE.FILE SHOW.FILES
						("" NIL)
						ADD.INTERFACE.TO.FILE ADD.ITEMTYPE.TO.FILE 
						DELETE.OBJECT.FROM.FILE SHOW.OBJECTS.ON.FILE 
						LIST.OBJECTS.ON.FILE WHERE.IS.OBJECT.FILED?
						("" NIL)
						FILE.NEW.OBJECTS MAKE.FILE CLEANUP.ALL.CHANGES QUIT))
		  TITLE ← "Loading and Saving"
		  CENTERFLG ← T
		  CHANGEOFFSETFLG ← T])

(INTERACT&DELETE.OBJECT.FILE
  [LAMBDA NIL                                                (* DAHJr "24-JAN-83 10:41")
    (PROG (FILENAME)
          (SETQ FILENAME (ACQUIRE.OBJECT.FILE.NAME))
          (COND
	    ((AND FILENAME (CONFIRM (CONCAT "Delete Trillium file " FILENAME)))
	      (DELETE.OBJECT.FILE FILENAME])

(INTERACT&FILE.NEW.OBJECTS
  [LAMBDA NIL                                                (* HaKo "16-Aug-84 16:28")
    (DECLARE (GLOBALVARS INTERFACES ITEM.TYPES))
    (PROG (FILED.INTERFACES FILED.ITEMTYPES TO.BE.FILED.INTERFACES TO.BE.FILED.ITEMTYPES 
			    TO.BE.DUMPED.FILES)
          (SETQ FILED.INTERFACES (FILED.OBJECTS.ON (QUOTE INTERFACE.NAMES)
						   NIL))
          (SETQ TO.BE.FILED.INTERFACES (LDIFFERENCE INTERFACES FILED.INTERFACES))
          (SETQ FILED.ITEMTYPES (FILED.OBJECTS.ON (QUOTE ITEMTYPE.NAMES)
						  NIL))
          (SETQ TO.BE.FILED.ITEMTYPES (LDIFFERENCE ITEM.TYPES FILED.ITEMTYPES))
          (COND
	    [(OR TO.BE.FILED.INTERFACES TO.BE.FILED.ITEMTYPES)
	      (TRILLIUM.PRINTOUT ON TRILLIUM.DESCRIPTIONS "Not yet filed:")
	      [COND
		(TO.BE.FILED.INTERFACES (TRILLIUM.PRINTOUT ON TRILLIUM.DESCRIPTIONS 2 "Interfaces:")
					(for INTERFACE.NAME in TO.BE.FILED.INTERFACES
					   do (TRILLIUM.PRINTOUT ON TRILLIUM.DESCRIPTIONS 1 
								 INTERFACE.NAME]
	      [COND
		(TO.BE.FILED.ITEMTYPES (TRILLIUM.PRINTOUT ON TRILLIUM.DESCRIPTIONS 2 "Itemtypes:")
				       (for ITYPE in TO.BE.FILED.ITEMTYPES
					  do (TRILLIUM.PRINTOUT ON TRILLIUM.DESCRIPTIONS 1 ITYPE]
	      (COND
		((CONFIRM "Files these before making files?")
		  (FILE.NEW.OBJECTS TO.BE.FILED.INTERFACES TO.BE.FILED.ITEMTYPES]
	    (T (TRILLIUM.PRINTOUT ON TRILLIUM.TRACE "All objects have already been filed"])

(INTERACT&LIST.OBJECTS.ON.FILE
  [LAMBDA NIL                                                (* DAHJr "17-FEB-83 11:09")
    (PROG (FILENAME)
          (SETQ FILENAME (ACQUIRE.OBJECT.FILE.NAME))
          (COND
	    (FILENAME (THINKING (LIST.OBJECTS.ON.FILE FILENAME])

(INTERACT&MAKE.OBJECT.FILE
  [LAMBDA NIL                                                (* DAHJr "24-JAN-83 10:55")
    (PROG (NAME)
          (SETQ NAME (ACQUIRE.OBJECT.FILE.NAME))
          (COND
	    (NAME (THINKING (MAKE.OBJECT.FILE NAME])

(INTERACT&SHOW.OBJECTS.ON.FILE
  [LAMBDA NIL                                                (* DAHJr "24-JAN-83 12:24")
    (PROG (FILENAME)
          (SETQ FILENAME (ACQUIRE.OBJECT.FILE.NAME))
          (COND
	    (FILENAME (SHOW.OBJECTS.ON.FILE FILENAME])

(LIST.OBJECTS.ON.FILE
  [LAMBDA (FILENAME)                                         (* HaKo "16-Aug-84 16:29")
    (DECLARE (GLOBALVARS TRILLIUM.OBJECT.FILES))
    (PROG (ENTRY CONTENTS INTERFACE.NAMES ITEMTYPE.NAMES FN INTERFACE)
          (SETQ ENTRY (FASSOC FILENAME TRILLIUM.OBJECT.FILES))
          (SETQ CONTENTS (CDR ENTRY))
          (SETQ FN (PACKFILENAME (QUOTE HOST)
				 (QUOTE CORE)
				 (QUOTE NAME)
				 FILENAME
				 (QUOTE EXTENSION)
				 (QUOTE TXT)
				 (QUOTE VERSION)
				 1))
          (TRILLIUM.PRINTOUT ON TRILLIUM.TRACE "Making the file ...")
          (OPENFILE FN (QUOTE OUTPUT))
          (printout FN "A printout of " FILENAME ", a file of Trillium objects." T "As of " (DATE)
		    ", has contents as follows:")
          (printout FN T)
          (printout FN T)
          (printout FN "Interfaces:")
          (SETQ INTERFACE.NAMES (LISTGET CONTENTS (QUOTE INTERFACE.NAMES)))
          (COND
	    (INTERFACE.NAMES (for INTERFACE.NAME in INTERFACE.NAMES do (printout FN " " 
										 INTERFACE.NAME)))
	    (T (printout FN " none")))
          (printout FN T)
          (printout FN T)
          (printout FN "Itemtypes:")
          (SETQ ITEMTYPE.NAMES (LISTGET CONTENTS (QUOTE ITEMTYPE.NAMES)))
          (COND
	    (ITEMTYPE.NAMES (for ITEMTYPE.NAME in ITEMTYPE.NAMES do (printout FN " " ITEMTYPE.NAME)))
	    (T (printout FN " none")))
          (printout FN T)
          (printout FN T)
          (for INTERFACE.NAME in INTERFACE.NAMES
	     do (SETQ INTERFACE (FIND.INTERFACE INTERFACE.NAME))
		(RESET.INTERFACE INTERFACE T)
		(PRINTDEF INTERFACE NIL NIL NIL NIL FN)
		(printout FN T)
		(printout FN T))
          (for ITEMTYPE.NAME in ITEMTYPE.NAMES
	     do (PRINTDEF (ITEM.TYPE.DESCRIPTION ITEMTYPE.NAME)
			  NIL NIL NIL NIL FN)
		(printout FN T)
		(printout FN T))
          (CLOSEF FN)
          (TRILLIUM.PRINTOUT ON TRILLIUM.TRACE SAME.LINE "listing the file ...")
          (APPLY* (QUOTE LISTFILES)
		  FN)
          (TRILLIUM.PRINTOUT ON TRILLIUM.TRACE SAME.LINE "done")
          (DELFILE FN])

(LOADING.&.SAVING
  [LAMBDA (INTERFACE)                                        (* HaKo "16-Aug-84 16:30")
                                                             (* "Top level of the editor")
    (PROG (COMMAND.MENU COMMAND HOST DIRECTORY DONE)
          (SETQ COMMAND.MENU (GET.LOADING.&.SAVING.COMMAND.MENU))
          (until DONE
	     do (SETQ COMMAND (MENU COMMAND.MENU))
		(TRILLIUM.CLEAR.ALL.PROMPTING)
		(SELECTQ COMMAND
			 (NIL)
			 (QUIT (SETQ DONE T))
			 (CONNECTED.TO.? (TRILLIUM.PRINTOUT ON TRILLIUM.DESCRIPTIONS 
							    "Now connected to: "
							    (TRILLIUM.CONN?)))
			 (CONNECT.TO.HOST/DIRECTORY (TRILLIUM.CONNECT))
			 (LOAD.FILE (LOADING.FILE))
			 (CHECK.OBJECTS (DEFINE.OBJECT.FILE))
			 (CREATE.NEW.FILE (DEFINE.OBJECT.FILE))
			 (COPY.FILE (COPY.OBJECT.FILE))
			 (DELETE.FILE (INTERACT&DELETE.OBJECT.FILE))
			 (SHOW.FILES (SHOW.OBJECT.FILES))
			 (ADD.INTERFACE.TO.FILE (ADD.INTERFACE.TO.FILE))
			 (ADD.ITEMTYPE.TO.FILE (ADD.ITEMTYPE.TO.FILE))
			 (DELETE.OBJECT.FROM.FILE (DELETE.FROM.FILE))
			 (SHOW.OBJECTS.ON.FILE (INTERACT&SHOW.OBJECTS.ON.FILE))
			 (LIST.OBJECTS.ON.FILE (INTERACT&LIST.OBJECTS.ON.FILE))
			 (WHERE.IS.OBJECT.FILED? (WHERE.IS.OBJECT.FILED?))
			 (FILE.NEW.OBJECTS (INTERACT&FILE.NEW.OBJECTS))
			 (MAKE.FILE (INTERACT&MAKE.OBJECT.FILE))
			 (CLEANUP.ALL.CHANGES (CLEANUP.OBJECT.FILES))
			 (SHOULDNT])

(LOADING.FILE
  [LAMBDA NIL                                                (* kkm "19-Nov-84 15:58")
                                                             (* HaKo "16-Aug-84 16:31")
    (PROG (FILENAME)
          (TRILLIUM.PRINTOUT ON PROMPTWINDOW "Name of the file to be loaded: ")
          (SETQ FILENAME (PROMPT.READ))
          (COND
	    (FILENAME (TRILLIUM.PRINTOUT ON TRILLIUM.TRACE "Loading file " FILENAME)
		      (LOAD FILENAME)
		      (TRILLIUM.PRINTOUT ON TRILLIUM.TRACE SAME.BLOCK "File " FILENAME " loaded")
		      (MARK.OBJECT.FILE FILENAME NIL])

(MAKE.OBJECT.FILE
  [LAMBDA (FILENAME)                                         (* HaKo "16-Aug-84 16:58")
    (DECLARE (GLOBALVARS NOTCOMPILEDFILES NOTLISTEDFILES))
    (PROG (INTERFACE.NAMES ITEMTYPE.NAMES FILECOMS FILECOMSVAR FULL.FILE.NAME)
          (SETQ INTERFACE.NAMES (FILED.OBJECTS.ON (QUOTE INTERFACE.NAMES)
						  FILENAME))
          [COND
	    (INTERFACE.NAMES (SETQ FILECOMS (CONS (CONS (QUOTE DIALOGS)
							INTERFACE.NAMES)
						  FILECOMS]
          (SETQ ITEMTYPE.NAMES (FILED.OBJECTS.ON (QUOTE ITEMTYPE.NAMES)
						 FILENAME))
          [COND
	    (ITEMTYPE.NAMES (SETQ FILECOMS (CONS (CONS (QUOTE ITEMTYPES)
						       ITEMTYPE.NAMES)
						 FILECOMS]
          [SETQ FILECOMSVAR (MKATOM (CONCAT FILENAME (QUOTE COMS]
          (SET FILECOMSVAR FILECOMS)
          (TRILLIUM.PRINTOUT ON TRILLIUM.TRACE "Trillium object file " FILENAME " => ")
          [SETQ FULL.FILE.NAME (MAKEFILE FILENAME (QUOTE (FAST]
          (TRILLIUM.PRINTOUT ON TRILLIUM.TRACE SAME.LINE FULL.FILE.NAME)
          (MARK.OBJECT.FILE FILENAME NIL)
          (RPLACD (GETPROP FILENAME (QUOTE FILE)))
          (SETQ NOTCOMPILEDFILES (DREMOVE FILENAME NOTCOMPILEDFILES))
          (SETQ NOTLISTEDFILES (DREMOVE FILENAME NOTLISTEDFILES])

(MARK.OBJECT.FILE
  [LAMBDA (FILENAME CHANGED)                                 (* HaKo "30-SEP-83 22:13")
                                                             (* edited: "15-APR-83 16:50")
    (DECLARE (GLOBALVARS TRILLIUM.OBJECT.FILES))
    (PROG (ENTRY CONTENTS)
          (SETQ ENTRY (FASSOC FILENAME TRILLIUM.OBJECT.FILES))
          (COND
	    [ENTRY (SETQ CONTENTS (CDR ENTRY))
		   (COND
		     (CONTENTS (LISTPUT CONTENTS (QUOTE CHANGED)
					CHANGED))
		     (T (RPLACD ENTRY (LIST (QUOTE CHANGED)
					    CHANGED]
	    (CHANGED (SHOULDNT "File is undefined"))
	    (T (SETQ TRILLIUM.OBJECT.FILES (CONS (LIST FILENAME)
						 TRILLIUM.OBJECT.FILES])

(OBJECT.FILE.NAMES
  [LAMBDA NIL
    (DECLARE (GLOBALVARS TRILLIUM.OBJECT.FILES))
    (for ENTRY in TRILLIUM.OBJECT.FILES collect (CAR ENTRY])

(SHOW.OBJECT.FILES
  [LAMBDA NIL                                                (* HaKo "16-Aug-84 16:32")
    (DECLARE (GLOBALVARS TRILLIUM.OBJECT.FILES))
    (COND
      (TRILLIUM.OBJECT.FILES (TRILLIUM.PRINTOUT ON TRILLIUM.DESCRIPTIONS "Trillium object files: ")
			     (for FILE in (OBJECT.FILE.NAMES) do (TRILLIUM.PRINTOUT ON 
									    TRILLIUM.DESCRIPTIONS 
										    SAME.BLOCK 3 FILE)
				  ))
      (T (TRILLIUM.PRINTOUT ON TRILLIUM.DESCRIPTIONS "There are no Trillium object files yet defined"]
)

(SHOW.OBJECTS.ON.FILE
  [LAMBDA (FILENAME)                                         (* HaKo "16-Aug-84 16:32")
    (DECLARE (GLOBALVARS TRILLIUM.OBJECT.FILES))
    (PROG (ENTRY CONTENTS INTERFACE.NAMES ITEMTYPE.NAMES)
          (SETQ ENTRY (FASSOC FILENAME TRILLIUM.OBJECT.FILES))
          (COND
	    (ENTRY (SETQ CONTENTS (CDR ENTRY))
		   (COND
		     [CONTENTS (TRILLIUM.PRINTOUT ON TRILLIUM.DESCRIPTIONS "The file " FILENAME 
						  " now has objects:")
			       (TRILLIUM.PRINTOUT ON TRILLIUM.DESCRIPTIONS SAME.BLOCK 3 "Interfaces:")
			       (SETQ INTERFACE.NAMES (LISTGET CONTENTS (QUOTE INTERFACE.NAMES)))
			       (COND
				 (INTERFACE.NAMES (for INTERFACE.NAME in INTERFACE.NAMES
						     do (TRILLIUM.PRINTOUT ON TRILLIUM.DESCRIPTIONS 
									   SAME.LINE 1 INTERFACE.NAME)
						       ))
				 (T (TRILLIUM.PRINTOUT ON TRILLIUM.DESCRIPTIONS SAME.LINE 1 "none")))
			       (TRILLIUM.PRINTOUT ON TRILLIUM.DESCRIPTIONS SAME.BLOCK 3 "Itemtypes:")
			       (SETQ ITEMTYPE.NAMES (LISTGET CONTENTS (QUOTE ITEMTYPE.NAMES)))
			       (COND
				 (ITEMTYPE.NAMES (for ITEMTYPE.NAME in ITEMTYPE.NAMES
						    do (TRILLIUM.PRINTOUT ON TRILLIUM.DESCRIPTIONS 
									  SAME.LINE 1 ITEMTYPE.NAME)))
				 (T (TRILLIUM.PRINTOUT ON TRILLIUM.DESCRIPTIONS SAME.LINE 1 "none"]
		     (T (TRILLIUM.PRINTOUT ON TRILLIUM.DESCRIPTIONS "The file " (CAR ENTRY)
					   "has no objects on it now"])

(TRILLIUM.CONN?
  [LAMBDA NIL                                                (* DAHJr "22-JAN-83 16:12")
    (DECLARE (GLOBALVARS \CONNECTED.DIR \CONNECTED.HOST))
    (PACKFILENAME (QUOTE HOST)
		  \CONNECTED.HOST
		  (QUOTE DIRECTORY)
		  \CONNECTED.DIR])

(TRILLIUM.CONNECT
  [LAMBDA NIL                                                (* HaKo "16-Aug-84 16:32")
    (DECLARE (GLOBALVARS LOGINHOST/DIR))
    (PROG (HOST DIRECTORY HOST/DIR)
          (TRILLIUM.PRINTOUT ON PROMPTWINDOW "Host to connect to (%")%" means no change): ")
          (SETQ HOST (PROMPT.READ))
          (TRILLIUM.PRINTOUT ON PROMPTWINDOW SAME.BLOCK 
			     "Directory (name>name>...>name) to connect to: ")
          (SETQ DIRECTORY (PROMPT.READ))
          (SETQ HOST/DIR (COND
	      ((OR HOST DIRECTORY)
		(PACKFILENAME (QUOTE HOST)
			      HOST
			      (QUOTE DIRECTORY)
			      DIRECTORY))
	      (T LOGINHOST/DIR)))
          (CNDIR HOST/DIR)
          (TRILLIUM.PRINTOUT ON TRILLIUM.TRACE "You are now connected to " (TRILLIUM.CONN?])

(WHERE.IS.OBJECT.FILED?
  [LAMBDA NIL                                                (* HaKo "16-Aug-84 16:33")
    (PROG (TYPE.MENU TYPE OBJECT.NAME FILENAMES)
          (SETQ TYPE (ACQUIRE.FILE.OBJECT.TYPE))
          (SETQ OBJECT.NAME (SELECTQ TYPE
				     (NIL NIL)
				     (INTERFACE.NAMES (ACQUIRE.INTERFACE.NAME))
				     (ITEMTYPE.NAMES (ACQUIRE.ITEM.TYPE))
				     (SHOULDNT)))
          (COND
	    (OBJECT.NAME (SETQ FILENAMES (for FILENAME in (OBJECT.FILE.NAMES)
					    when (FMEMB OBJECT.NAME (FILED.OBJECTS.ON TYPE FILENAME))
					    collect FILENAME))
			 (TRILLIUM.PRINTOUT ON TRILLIUM.DESCRIPTIONS (COND
					      ((EQ TYPE (QUOTE INTERFACE.NAMES))
						"Interface")
					      (T "Itemtype"))
					    1 OBJECT.NAME)
			 (SELECTQ (LENGTH FILENAMES)
				  (0 (TRILLIUM.PRINTOUT ON TRILLIUM.DESCRIPTIONS SAME.LINE 
							" is not filed on any file"))
				  (1 (TRILLIUM.PRINTOUT ON TRILLIUM.DESCRIPTIONS SAME.LINE 
							" is filed on file "
							(CAR FILENAMES)))
				  (PROGN (TRILLIUM.PRINTOUT ON TRILLIUM.DESCRIPTIONS SAME.LINE 
							    " is filed on files")
					 (for FILENAME in FILENAMES
					    do (TRILLIUM.PRINTOUT ON TRILLIUM.DESCRIPTIONS SAME.BLOCK 
								  1 FILENAME])
)
(PUTPROPS TRI-SAVING COPYRIGHT ("Xerox Corporation" 1984))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (1556 30027 (ACQUIRE.FILE.OBJECT.NAME 1566 . 2697) (ACQUIRE.FILE.OBJECT.TYPE 2699 . 3342
) (ACQUIRE.OBJECT.FILE.ENTRY 3344 . 3903) (ACQUIRE.OBJECT.FILE.NAME 3905 . 4077) (
ADD.INTERFACE.TO.FILE 4079 . 4504) (ADD.ITEMTYPE.TO.FILE 4506 . 4918) (ADD.OBJECT.TO.FILE 4920 . 5701)
 (CLEANUP.OBJECT.FILES 5703 . 6689) (CLEANUP.OBJECT.FILES.GIVE.REASON 6691 . 8344) (
CLEANUP.OBJECT.FILES.SELECTIVELY 8346 . 9392) (COPY.OBJECT.FILE 9394 . 9940) (DEFINE.NEW.FILE 9942 . 
10306) (DEFINE.OBJECT.FILE 10308 . 10753) (DELETE.FROM.FILE 10755 . 11669) (DELETE.OBJECT.FILE 11671
 . 11951) (DELETE.OBJECT.FROM.FILE 11953 . 12434) (FILE.NEW.OBJECTS 12436 . 13179) (FILED.OBJECTS.ON 
13181 . 13826) (FILES.WITH.MARKED.OBJECTS 13828 . 14502) (FORGET.OBJECT.CHANGES 14504 . 15229) (
GET.CLEANUP.CONFIRM.MENU 15231 . 15833) (GET.LOADING.&.SAVING.COMMAND.MENU 15835 . 16746) (
INTERACT&DELETE.OBJECT.FILE 16748 . 17082) (INTERACT&FILE.NEW.OBJECTS 17084 . 18548) (
INTERACT&LIST.OBJECTS.ON.FILE 18550 . 18833) (INTERACT&MAKE.OBJECT.FILE 18835 . 19094) (
INTERACT&SHOW.OBJECTS.ON.FILE 19096 . 19369) (LIST.OBJECTS.ON.FILE 19371 . 21542) (LOADING.&.SAVING 
21544 . 23028) (LOADING.FILE 23030 . 23618) (MAKE.OBJECT.FILE 23620 . 24878) (MARK.OBJECT.FILE 24880
 . 25563) (OBJECT.FILE.NAMES 25565 . 25727) (SHOW.OBJECT.FILES 25729 . 26272) (SHOW.OBJECTS.ON.FILE 
26274 . 27706) (TRILLIUM.CONN? 27708 . 27976) (TRILLIUM.CONNECT 27978 . 28758) (WHERE.IS.OBJECT.FILED?
 28760 . 30025)))))
STOP