(FILECREATED "18-Feb-87 15:47:56" {SUMEX-AIM}PS:<TMAX.SOURCES>TMAX.;6 13415  

      changes to:  (VARS TSP.FM.DESC IMAGEOBJ.MENU.ITEMS)

      previous date: "18-Feb-87 10:00:09" {SUMEX-AIM}PS:<GILMURRAY.LISP>TMAX.;6)


(* Copyright (c) 1987 by Leland Stanford Junior University. All rights reserved.)

(PRETTYCOMPRINT TMAXCOMS)

(RPAQQ TMAXCOMS ((* Developed under support from NIH grant RR-00785.)
		   (* Written by Frank Gilmurray and Sami Shaio.)
		   (FILES (COMPILED SYSLOAD)
			  TEDIT FREEMENU)
		   (DECLARE: DONTCOPY (VARS TMAX.FILE.LIST TMAX.FILE.DIRECTORY)
			     (FNS TMAX.LOAD.FILES)
			     (P (TMAX.LOAD.FILES)))
		   (* * Free Menu data structures)
		   (VARS TSP.FM.DESC IMAGEOBJ.MENU.ITEMS)
		   (* * Free Menu functions)
		   (FNS TSP.FMMENU TSP.FM.APPLY UPDATE.ALL UPDATE?)
		   (* * Free Menu toggle functions)
		   (FNS AutoUpdate.TOGGLE NGROUP.Menu.TOGGLE Enable.TOC.TOGGLE)
		   (* * TSP font stuff)
		   (FNS GET.TSP.FONT ABBREVIATE.FONT)
		   (* * Collect ImageObjects)
		   (FNS TSP.LIST.OF.OBJECTS)
		   (GLOBALVARS GP.DefaultFont)
		   (P (SETQ GP.DefaultFont (FONTCREATE 'GACHA
						       10))
		      (TEDIT.ADD.MENUITEM TEDIT.DEFAULT.MENU '(TMAX% Menu (FUNCTION TSP.FMMENU)))
		      (SETQ IMAGEOBJGETFNS (APPEND '((DATE.GETFN)
						     (INDEX.GETFN)
						     (NOTE.GETFN)
						     (NUMBER.GETFN)
						     (REGMARK.GETFN)
						     (XREF.GETFN))
						   IMAGEOBJGETFNS)))))



(* Developed under support from NIH grant RR-00785.)




(* Written by Frank Gilmurray and Sami Shaio.)

(FILESLOAD (COMPILED SYSLOAD)
	   TEDIT FREEMENU)
(DECLARE: DONTCOPY 

(RPAQQ TMAX.FILE.LIST (DATE ENDNOTE INDEX NGROUP XREF))

(RPAQQ TMAX.FILE.DIRECTORY {SUMEX-AIM}<TMAX.SOURCES>)

(DEFINEQ

(TMAX.LOAD.FILES
  (LAMBDA NIL                                                (* fsg "11-Feb-87 13:52")

          (* * Load the other files that comprise TMAX. This function is only called from the source file and is not copied 
	  into the compiled file. Furthermore, TMAX.ONLY is checked. If non-NIL, then the other support files are not 
	  loaded.)


    (OR (AND (BOUNDP 'TMAX.ONLY)
		 TMAX.ONLY)
	  (for FILE in TMAX.FILE.LIST do (LOAD (PACKFILENAME 'DIRECTORY
								       TMAX.FILE.DIRECTORY
								       'NAME
								       FILE))))))
)

(TMAX.LOAD.FILES)
)
(* * Free Menu data structures)


(RPAQQ TSP.FM.DESC (((TYPE TITLE LABEL Miscellany: FONT (HELVETICA 10))
		       (TYPE MOMENTARY LABEL Update SELECTEDFN TSP.FM.APPLY FONT (HELVETICA 10 BOLD))
		       (TYPE TOGGLE LABEL Set% AutoUpdate SELECTEDFN AutoUpdate.TOGGLE FONT
			     (HELVETICA 10 BIR))
		       (TYPE MOMENTARY LABEL Current% Date/Time SELECTEDFN TSP.FM.APPLY FONT
			     (HELVETICA 10 BOLD)))
		      ((TYPE TITLE LABEL EndNotes: FONT (HELVETICA 10))
		       (TYPE MOMENTARY LABEL Endnote SELECTEDFN TSP.FM.APPLY FONT (HELVETICA 10 BOLD))
		       (TYPE MOMENTARY LABEL Insert% Endnotes SELECTEDFN TSP.FM.APPLY FONT
			     (HELVETICA 10 BOLD))
		       (TYPE MOMENTARY LABEL Delete% Endnotes SELECTEDFN TSP.FM.APPLY FONT
			     (HELVETICA 10 BOLD))
		       (TYPE MOMENTARY LABEL Set% Style SELECTEDFN TSP.FM.APPLY FONT
			     (HELVETICA 10 BOLD)))
		      ((TYPE TITLE LABEL References: FONT (HELVETICA 10))
		       (TYPE MOMENTARY LABEL Reference SELECTEDFN TSP.FM.APPLY FONT
			     (HELVETICA 10 BOLD))
		       (TYPE MOMENTARY LABEL Previous% References SELECTEDFN TSP.FM.APPLY FONT
			     (HELVETICA 10 BOLD)))
		      ((TYPE TITLE LABEL Number% Groups: FONT (HELVETICA 10))
		       (TYPE TOGGLE LABEL NGroup% Menu SELECTEDFN NGROUP.Menu.TOGGLE FONT
			     (HELVETICA 10 BIR))
		       (TYPE TOGGLE LABEL NGroup% Text SELECTEDFN Enable.TOC.TOGGLE FONT
			     (HELVETICA 10 BIR))
		       (TYPE MOMENTARY LABEL New% Ngroup SELECTEDFN TSP.FM.APPLY FONT
			     (HELVETICA 10 BOLD)))
		      ((TYPE TITLE LABEL Contents% File: FONT (HELVETICA 10))
		       (TYPE MOMENTARY LABEL Create% TOC SELECTEDFN TSP.FM.APPLY FONT
			     (HELVETICA 10 BOLD))
		       (TYPE MOMENTARY LABEL View% TOC SELECTEDFN TSP.FM.APPLY FONT
			     (HELVETICA 10 BOLD))
		       (TYPE EDITSTART LABEL TOC% Filename: FONT (HELVETICA 10 BOLD)
			     ITEMS
			     (TOC.FILE))
		       (TYPE EDIT ID TOC.FILE LABEL ""))
		      ((TYPE TITLE LABEL Indices: FONT (HELVETICA 10))
		       (TYPE MOMENTARY LABEL Index SELECTEDFN TSP.FM.APPLY FONT (HELVETICA 10 BOLD))
		       (TYPE MOMENTARY LABEL IndexEntry SELECTEDFN TSP.FM.APPLY FONT
			     (HELVETICA 10 BOLD))
		       (TYPE MOMENTARY LABEL Known% Indices SELECTEDFN TSP.FM.APPLY FONT
			     (HELVETICA 10 BOLD)))
		      ((TYPE TITLE LABEL Indices% File: FONT (HELVETICA 10))
		       (TYPE MOMENTARY LABEL Create% Index SELECTEDFN TSP.FM.APPLY FONT
			     (HELVETICA 10 BOLD))
		       (TYPE MOMENTARY LABEL View% Index SELECTEDFN TSP.FM.APPLY FONT
			     (HELVETICA 10 BOLD))
		       (TYPE EDITSTART LABEL Index% Filename: FONT (HELVETICA 10 BOLD)
			     ITEMS
			     (INDEX.FILE))
		       (TYPE EDIT ID INDEX.FILE LABEL ""))
		      (WINDOWPROPS TITLE "TMAX (Tedit Macros And eXtensions) -- Experimental version")
		      ))

(RPAQQ IMAGEOBJ.MENU.ITEMS ((Update (UPDATE.ALL TSTREAM TWINDOW))
			      (Current% Date/Time (TEDIT.INSERT.OBJECT (DATEOBJ)
								       (TEXTOBJ TSTREAM)))
			      (Endnote (ADD.ENDNOTE TSTREAM TWINDOW))
			      (Insert% Endnotes (INSERT.ENDNOTES TSTREAM TWINDOW)
						"Insert endnotes at the end of the document")
			      (Delete% Endnotes (DELETE.ENDNOTES TSTREAM)
						"Delete Endnotes from the end of the document")
			      (Set% Style (SET.ENDNOTE.STYLE TSTREAM TWINDOW))
			      (Reference (INSERT.REF TSTREAM))
			      (Previous% References (INSERT.REF TSTREAM T))
			      (New% Ngroup (AND (ADD.NUMBER.GROUP TWINDOW TSTREAM)
						(TSP.NGROUP.GRAPHP TWINDOW)
						(GRAPHMENU TSTREAM TWINDOW)))
			      (Create% TOC (CREATE.TOC.FILE TSTREAM TWINDOW))
			      (View% TOC (VIEW.TOC.FILE TSTREAM TWINDOW))
			      (Index (INSERT.INDEX TSTREAM TWINDOW))
			      (IndexEntry (INSERT.INDEXENTRY TSTREAM TWINDOW))
			      (Known% Indices (INSERT.KNOWN.INDEX TSTREAM TWINDOW))
			      (Create% Index (CREATE.INDEX.FILE TSTREAM TWINDOW))
			      (View% Index (VIEW.INDEX.FILE TSTREAM TWINDOW))))
(* * Free Menu functions)

(DEFINEQ

(TSP.FMMENU
  (LAMBDA (STREAM)                                           (* fsg "10-Feb-87 13:58")

          (* Creates an imageobj menu that attaches itself to the current TEdit window. Sets a windowproperty TSTREAM on the 
	  menu window that points to the associated TEdit stream. *)


    (LET* ((WINDOW (\TEDIT.MAINW STREAM))
	   (IMAGEOBJ.MENUW (WINDOWPROP WINDOW 'IMAGEOBJ.MENUW)))
          (COND
	    (IMAGEOBJ.MENUW (COND
			      ((NOT (OPENWP IMAGEOBJ.MENUW))
				(OPENW IMAGEOBJ.MENUW))))
	    (T (WINDOWPROP WINDOW 'TSP.CODE.ARRAY
			     (HASHARRAY 100))
	       (WINDOWPROP WINDOW 'TSP.INDEX.ARRAY
			     (HASHARRAY 100))
	       (WINDOWPROP WINDOW 'TSP.NGROUP.ARRAY
			     (HASHARRAY 100))
	       (SETQ IMAGEOBJ.MENUW (FM.FORMATMENU TSP.FM.DESC))
	       (ATTACHWINDOW IMAGEOBJ.MENUW WINDOW 'TOP
			       'JUSTIFY)
	       (WINDOWPROP IMAGEOBJ.MENUW 'TSTREAM
			     STREAM)
	       (WINDOWPROP IMAGEOBJ.MENUW 'TWINDOW
			     WINDOW)
	       (WINDOWPROP IMAGEOBJ.MENUW 'PASSTOMAINCOMS
			     '(MOVEW SHAPEW SHRINKW BURYW))
	       (WINDOWPROP WINDOW 'IMAGEOBJ.MENUW
			     IMAGEOBJ.MENUW)))
      IMAGEOBJ.MENUW)))

(TSP.FM.APPLY
  (LAMBDA (ITEM WINDOW BUTTON)                               (* ss: "22-Apr-86 15:55")
    (LET ((LABEL (FM.ITEMPROP ITEM 'LABEL))
	  (TSTREAM (WINDOWPROP WINDOW 'TSTREAM))
	  (TWINDOW (WINDOWPROP WINDOW 'TWINDOW)))
         (EVAL (CADR (ASSOC LABEL IMAGEOBJ.MENU.ITEMS))))))

(UPDATE.ALL
  (LAMBDA (STREAM WINDOW)                                    (* fsg " 4-Feb-87 14:00")
                                                             (* (CLRHASH (WINDOWPROP WINDOW 
							     (QUOTE TSP.CODE.ARRAY))))
    (UPDATE.NUMBEROBJS WINDOW 'NUMBEROBJP)
    (REBUILD.TAG.ARRAY WINDOW)
    (UPDATE.XREFS WINDOW)

          (* This should check if there is an endnote section, if there is then we want to re-insert the endnotes.
	  The test for REGMARKOBJs works because we are only using them for the purpose of marking the endnote section.)


    (AND (TSP.LIST.OF.OBJECTS (TEXTOBJ STREAM)
				  'REGMARKOBJP)
	   (INSERT.ENDNOTES STREAM WINDOW))))

(UPDATE?
  (LAMBDA (WINDOW)                                           (* ss: " 6-Aug-85 16:20")
    (WINDOWPROP WINDOW 'AUTOUPDATE)))
)
(* * Free Menu toggle functions)

(DEFINEQ

(AutoUpdate.TOGGLE
  (LAMBDA (ITEM WINDOW BUTTON)                               (* ss: "24-Mar-86 14:37")
    (LET ((TWINDOW (WINDOWPROP WINDOW 'TWINDOW))
	  (TOGGLE.STATE (FM.ITEMPROP ITEM 'STATE)))
         (WINDOWPROP TWINDOW 'AUTOUPDATE
		       TOGGLE.STATE))))

(NGROUP.Menu.TOGGLE
  (LAMBDA (ITEM WINDOW BUTTON)                               (* ss: "24-Mar-86 14:42")
    (LET ((TWINDOW (WINDOWPROP WINDOW 'TWINDOW))
	  (TSTREAM (WINDOWPROP WINDOW 'TSTREAM))
	  (TOGGLE.STATE (FM.ITEMPROP ITEM 'STATE)))
         (COND
	   (TOGGLE.STATE (GRAPHMENU TSTREAM TWINDOW))
	   (T (CLOSEW (WINDOWPROP TWINDOW 'NGROUPW)))))))

(Enable.TOC.TOGGLE
  (LAMBDA (ITEM WINDOW BUTTON)                               (* fsg "10-Dec-86 15:32")
    (LET ((TWINDOW (WINDOWPROP WINDOW 'TWINDOW))
	  (TOGGLE.STATE (FM.ITEMPROP ITEM 'STATE)))
         (WINDOWPROP TWINDOW 'ENABLETOC
		       TOGGLE.STATE))))
)
(* * TSP font stuff)

(DEFINEQ

(GET.TSP.FONT
  (LAMBDA (WINDOW DEFAULT.FONT)                              (* fsg " 4-Feb-87 11:20")

          (* * Return the font descriptor list. If the FAMILY, SIZE, and/or FACE is not specified, it defaults to the 
	  corresponding value in the DEFAULT.FONT descriptor.)


    (LET ((FAMILY (OR (MKATOM (MENU (create MENU
						    TITLE ← "Font Family"
						    CENTERFLG ← T
						    ITEMS ← '(CLASSIC GACHA HELVETICA MODERN 
								      TIMESROMAN))))
			(FONTPROP DEFAULT.FONT 'FAMILY)))
	  (SIZE (OR (MKATOM (MENU (create MENU
						  TITLE ← "Font Size"
						  CENTERFLG ← T
						  MENUCOLUMNS ← 2
						  ITEMS ←
						  '(6 8 10 12 14 18 24 36))))
		      (FONTPROP DEFAULT.FONT 'SIZE)))
	  (FACE (OR (MKATOM (MENU (create MENU
						  TITLE ← "Font Face"
						  CENTERFLG ← T
						  ITEMS ← '((STANDARD 'MRR
								      "(MEDIUM REGULAR REGULAR)")
							    (ITALIC 'MIR
								    "(MEDIUM ITALIC REGULAR)")
							    (BOLD 'BRR
								  "(BOLD REGULAR REGULAR)")
							    (BOLDITALIC 'BIR
									"(BOLD ITALIC REGULAR)")))))
		      (FONTPROP DEFAULT.FONT 'FACE)))
	  NEWENTRY.FONT)
         (AND (SETQ NEWENTRY.FONT (FONTCREATE FAMILY SIZE FACE NIL NIL T))
		(LIST FAMILY SIZE (FONTPROP NEWENTRY.FONT 'FACE))))))

(ABBREVIATE.FONT
  (LAMBDA (FONT)                                             (* fsg "25-Nov-86 14:44")

          (* * Returns an abbreviated font description. For example, if the font is {TIMESROMAN 12 {BOLD ITALIC REGULAR}} 
	  then "TIMESROMAN 12 BIR" is returned.)


    (LET ((FONT.LIST (COND
		       ((FONTP FONT)
			 (LIST (FONTPROP FONT 'FAMILY)
				 (FONTPROP FONT 'SIZE)
				 (FONTPROP FONT 'FACE)))
		       (T FONT))))
         (CONCAT (CAR FONT.LIST)
		   " "
		   (CADR FONT.LIST)
		   " "
		   (CONCATLIST (for FIELD in (CADDR FONT.LIST) collect (GNC FIELD)))))))
)
(* * Collect ImageObjects)

(DEFINEQ

(TSP.LIST.OF.OBJECTS
  (LAMBDA (TEXTOBJ TESTFN TESTFNARG)                       (* fsg "18-Feb-87 09:33")

          (* * Loop through each PIECE of the TEdit document and call the user supplied function on those PIECEs that are 
	  ImageObjects.)


    (AND TESTFN (LET ((OBJLIST (TCONC NIL)))
		       (TEDIT.MAPPIECES TEXTOBJ (FUNCTION (LAMBDA (CH# PIECE PC# OBL)
					      (AND (TYPENAMEP PIECE 'PIECE)
						     (IMAGEOBJP (fetch POBJ of PIECE))
						     (APPLY* TESTFN (fetch POBJ of PIECE)
							       TESTFNARG)
						     (TCONC OBL (LIST (fetch POBJ of PIECE)
									  CH#)))))
					  OBJLIST)
		       (CDAR OBJLIST)))))
)
(DECLARE: DOEVAL@COMPILE DONTCOPY

(GLOBALVARS GP.DefaultFont)
)
(SETQ GP.DefaultFont (FONTCREATE 'GACHA
				 10))
(TEDIT.ADD.MENUITEM TEDIT.DEFAULT.MENU '(TMAX% Menu (FUNCTION TSP.FMMENU)))
(SETQ IMAGEOBJGETFNS (APPEND '((DATE.GETFN)
			       (INDEX.GETFN)
			       (NOTE.GETFN)
			       (NUMBER.GETFN)
			       (REGMARK.GETFN)
			       (XREF.GETFN))
			     IMAGEOBJGETFNS))
(PUTPROPS TMAX COPYRIGHT ("Leland Stanford Junior University" 1987))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (1796 2425 (TMAX.LOAD.FILES 1808 . 2422)) (6486 8984 (TSP.FMMENU 6498 . 7763) (
TSP.FM.APPLY 7767 . 8093) (UPDATE.ALL 8097 . 8830) (UPDATE? 8834 . 8981)) (9027 10029 (
AutoUpdate.TOGGLE 9039 . 9330) (NGROUP.Menu.TOGGLE 9334 . 9732) (Enable.TOC.TOGGLE 9736 . 10026)) (
10060 12130 (GET.TSP.FONT 10072 . 11450) (ABBREVIATE.FONT 11454 . 12127)) (12167 12925 (
TSP.LIST.OF.OBJECTS 12179 . 12922)))))
STOP