(DEFINE-FILE-INFO :PACKAGE "INTERLISP" :READTABLE "INTERLISP" :BASE 10)

(FILECREATED "23-Jun-2026 23:05:28" {MEDLEY}<lispusers>tmax>TMAX.;57 33568  

      :EDIT-BY rmk

      :CHANGES-TO (FNS TSP.SETUP.FILENAMES TSP.DISPLAY.FMMENU TMAX-DEBUG TMAX-EDIT TMAX-UPDATE 
                       UPDATE-TMAX)
                  (VARS TMAXCOMS)

      :PREVIOUS-DATE "15-May-2026 22:31:17" {MEDLEY}<lispusers>tmax>TMAX.;47)


(PRETTYCOMPRINT TMAXCOMS)

(RPAQQ TMAXCOMS
       (                                                     (* ; 
                                                   "Developed under support from NIH grant RR-00785.")
                                                             (* ; 
                                                         "Written by Frank Gilmurray and Sami Shaio.")
        (FILES (COMPILED SYSLOAD)
               TEDIT FREEMENU GRAPHER)
        (FILES * TMAXFILES)
        (FNS EDIT-TMAX)
        (DECLARE%: DONTCOPY (P (DOFILESLOAD (LIST* '(SOURCE)
                                                   TMAXFILES)))
               (DECLARE%: EVAL@COMPILE (FILES TEDIT-EXPORTS.ALL)))
        (DECLARE%: EVAL@COMPILE DONTCOPY (MACROS TMAXPROP TMAXADDPROP))
        

(* ;;; "Free Menu data structures")

        (VARS TSP.FM.DESC IMAGEOBJ.MENU.ITEMS)
        

(* ;;; "Free Menu functions")

        (FNS TSP.DISPLAY.FMMENU TSP.SETUP.FILENAMES TSP.SETUP.FMMENU TSP.FMMENU TSP.FM.APPLY 
             UPDATE.ALL DOWNDATE.ALL TSP.FUNCTION.HOOKS TSP.GETFN TSP.PUTFN)
        

(* ;;; "Free Menu toggle functions")

        (FNS AutoUpdate.TOGGLE UPDATE? NGROUP.Menu.TOGGLE NGROUPMENU.ENABLED? 
             NGROUP.Text-Before.TOGGLE TEXTBEFORE.ENABLED? NGROUP.Text-After.TOGGLE 
             TEXTAFTER.ENABLED? Manual.Index.TOGGLE MANUALINDEX.ENABLED?)
        

(* ;;; "TSP font stuff")

        (FNS GET.TSP.FONT GET.TSP.FONT.FAMILY GET.TSP.FONT.SIZE GET.TSP.FONT.FACE ABBREVIATE.FONT 
             TMAX.SHADEOBJ)
        

(* ;;; "Collect ImageObjects")

        (FNS TSP.LIST.OF.OBJECTS)
        (GLOBALVARS GP.DefaultFont GP.DefaultShade)
        (VARS (GP.DefaultFont (FONTCREATE 'TERMINAL 10))
              (GP.DefaultShade 1024))
        (P [TEDIT.ADD.MENUITEM TEDIT.DEFAULT.MENU '(TMAX% Menu (FUNCTION TSP.DISPLAY.FMMENU)
                                                          NIL
                                                          (SUBITEMS (Update (FUNCTION UPDATE.ALL)
                                                                           
                                                                       "Updates all cross-references"
                                                                           )
                                                                 (NGroup% Menu (FUNCTION GRAPHMENU)
                                                                        "Displays number-group menu"]
           (TSP.FUNCTION.HOOKS))
        (FNS TMAX-DEBUG TMAX-UPDATE TMAX-EDIT UPDATE-TMAX EDIT-TMAX)))



(* ; "Developed under support from NIH grant RR-00785.")




(* ; "Written by Frank Gilmurray and Sami Shaio.")


(FILESLOAD (COMPILED SYSLOAD)
       TEDIT FREEMENU GRAPHER)

(RPAQQ TMAXFILES (TMAX-DATE TMAX-ENDNOTE TMAX-INDEX TMAX-NUMBER TMAX-NGRAPH TMAX-NGROUP TMAX-XREF))

(FILESLOAD TMAX-DATE TMAX-ENDNOTE TMAX-INDEX TMAX-NUMBER TMAX-NGRAPH TMAX-NGROUP TMAX-XREF)
(DEFINEQ

(EDIT-TMAX
  [LAMBDA NIL                                                (* ; "Edited  7-Mar-2025 22:53 by rmk")
                                                             (* ; "Edited  3-Jul-2023 13:44 by rmk")
                                                             (* ; "Edited 17-Jun-2023 10:00 by rmk")
                                                             (* ; "Edited 25-Apr-2023 17:39 by rmk")
                                                             (* ; "Edited 26-Oct-2022 21:12 by rmk")
                                                             (* ; "Edited 14-Sep-2022 08:37 by rmk")
    (BKSYSBUF " ")
    (RESETLST
        (RESETSAVE LOADDBFLG 'YES)
        (FOR F IN TMAXFILES DO (LOADFROM F)
                               (LOADCOMP F)))
    (%. ANALYZE ON IN TMAXFILES])
)
(DECLARE%: DONTCOPY 

(DOFILESLOAD (LIST* '(SOURCE)
                    TMAXFILES))

(DECLARE%: EVAL@COMPILE 

(FILESLOAD TEDIT-EXPORTS.ALL)
)
)
(DECLARE%: EVAL@COMPILE DONTCOPY 
(DECLARE%: EVAL@COMPILE 

(PUTPROPS TMAXPROP MACRO (= . STREAMPROP))

(PUTPROPS TMAXADDPROP MACRO (= . STREAMADDPROP))
)
)



(* ;;; "Free Menu data structures")


(RPAQQ TSP.FM.DESC
       [(PROPS FORMAT TABLE TYPE MOMENTARY FONT (HELVETICA 10 BRR))
        ((LABEL "Miscellany:" TYPE DISPLAY FONT (TERMINAL 10 MRR))
         (LABEL "Update" ID UPDATE SELECTEDFN TSP.FM.APPLY)
         (LABEL "Undo Update" ID UNDOUPDATE SELECTEDFN TSP.FM.APPLY)
         (LABEL "Set AutoUpdate" TYPE TOGGLE SELECTEDFN AutoUpdate.TOGGLE FONT (TERMINAL 10 BIR))
         (LABEL "Date/Time" ID DATE/TIME SELECTEDFN TSP.FM.APPLY))
        ((LABEL "References:" TYPE DISPLAY FONT (TERMINAL 10 MRR))
         (LABEL "Reference" ID REFERENCE SELECTEDFN TSP.FM.APPLY)
         (LABEL "Known References" ID KNOWNREF SELECTEDFN TSP.FM.APPLY)
         (LABEL "Reference By" TYPE STATE MENUITEMS (Ask Value Page)
                INITSTATE Value LINKS (DISPLAY DEFAULTREF))
         (LABEL "" TYPE DISPLAY ID DEFAULTREF FONT (TERMINAL 10 MRR)))
        ((LABEL "Endnotes:" TYPE DISPLAY FONT (TERMINAL 10 MRR))
         (LABEL "Endnote" ID ENDNOTE SELECTEDFN TSP.FM.APPLY)
         (LABEL "Insert Endnotes" ID INSERTNOTE SELECTEDFN TSP.FM.APPLY)
         (LABEL "Delete Endnotes" ID DELETENOTE SELECTEDFN TSP.FM.APPLY)
         (LABEL "Set Style" ID SETSTYLE SELECTEDFN TSP.FM.APPLY))
        ((LABEL "Numbering:" TYPE DISPLAY FONT (TERMINAL 10 MRR))
         (LABEL "NGroup Menu" TYPE TOGGLE ID NGROUP.MENU SELECTEDFN NGROUP.Menu.TOGGLE FONT
                (TERMINAL 10 BIR))
         (LABEL "New Ngroup" ID NEWNGROUP SELECTEDFN TSP.FM.APPLY)
         (LABEL "Text Before" TYPE TOGGLE SELECTEDFN NGROUP.Text-Before.TOGGLE FONT (TERMINAL 10 BIR)
                )
         (LABEL "Text After" TYPE TOGGLE SELECTEDFN NGROUP.Text-After.TOGGLE FONT (TERMINAL 10 BIR)))
        ((LABEL "Contents File:" TYPE DISPLAY FONT (TERMINAL 10 MRR))
         (LABEL "Create TOC" ID CREATETOC SELECTEDFN TSP.FM.APPLY)
         (LABEL "View TOC" ID VIEWTOC SELECTEDFN TSP.FM.APPLY)
         (LABEL "TOC Filename:" TYPE EDITSTART LINKS (EDIT TOC.FILE))
         (LABEL "" TYPE EDIT ID TOC.FILE FONT (TERMINAL 10 MRR)))
        ((LABEL "Indices:" TYPE DISPLAY FONT (TERMINAL 10 MRR))
         (LABEL "Index" ID INDEX SELECTEDFN TSP.FM.APPLY)
         (LABEL "Extended Index" ID XTNDINDEX SELECTEDFN TSP.FM.APPLY)
         (LABEL "Known Indices" ID KNOWNINDEX SELECTEDFN TSP.FM.APPLY)
         (LABEL "Manual Index" TYPE TOGGLE SELECTEDFN Manual.Index.TOGGLE FONT (TERMINAL 10 BIR)))
        ((LABEL "Indices File:" TYPE DISPLAY FONT (TERMINAL 10 MRR))
         (LABEL "Create Index" ID CREATEINDEX SELECTEDFN TSP.FM.APPLY)
         (LABEL "View Index" ID VIEWINDEX SELECTEDFN TSP.FM.APPLY)
         (LABEL "Index Filename:" TYPE EDITSTART LINKS (EDIT INDEX.FILE))
         (LABEL "" TYPE EDIT ID INDEX.FILE FONT (TERMINAL 10 MRR])

(RPAQQ IMAGEOBJ.MENU.ITEMS
       ((UPDATE (UPDATE.ALL TSTREAM))
        (UNDOUPDATE (DOWNDATE.ALL TSTREAM))
        (DATE/TIME (TEDIT.INSERT.OBJECT (DATEOBJ)
                          TSTREAM))
        (REFERENCE (INSERT.REF TSTREAM))
        (KNOWNREF (INSERT.REF TSTREAM T))
        (ENDNOTE (ADD.ENDNOTE TSTREAM))
        (INSERTNOTE (INSERT.ENDNOTES TSTREAM))
        (DELETENOTE (DELETE.ENDNOTES TSTREAM))
        (SETSTYLE (SET.ENDNOTE.STYLE TSTREAM))
        (NEWNGROUP (AND (ADD.NUMBER.GROUP TSTREAM)
                        (GRAPHMENU TSTREAM)))
        (CREATETOC (CREATE.TOC.FILE TSTREAM))
        (VIEWTOC (VIEW.TOC.FILE TSTREAM))
        (INDEX (INSERT.INDEX TSTREAM))
        (XTNDINDEX (INSERT.INDEXENTRY TSTREAM))
        (KNOWNINDEX (INSERT.KNOWN.INDEX TSTREAM))
        (CREATEINDEX (CREATE.INDEX.FILE TSTREAM))
        (VIEWINDEX (VIEW.INDEX.FILE TSTREAM))))



(* ;;; "Free Menu functions")

(DEFINEQ

(TSP.DISPLAY.FMMENU
  [LAMBDA (TSTREAM)                                          (* ; "Edited 23-Jun-2026 00:54 by rmk")
                                                             (* ; "Edited 21-Feb-2025 09:25 by rmk")
                                                             (* fsg "24-Aug-87 14:37")

(* ;;; "Here when user buttons TMAX Menu in the TEDIT.DEFAULT.MENU.")

    (LET ((IMAGEOBJ.MENUW (TSP.FMMENU TSTREAM)))
         (CL:UNLESS (OPENWP IMAGEOBJ.MENUW)
             (ATTACHWINDOW IMAGEOBJ.MENUW (\TEDIT.PRIMARYPANE TSTREAM)
                    'TOP
                    'JUSTIFY)
             (WINDOWPROP IMAGEOBJ.MENUW 'PASSTOMAINCOMS '(MOVEW SHAPEW SHRINKW BURYW)))])

(TSP.SETUP.FILENAMES
  [LAMBDA (TSTREAM TYPE)                                     (* ; "Edited 23-Jun-2026 23:05 by rmk")
                                                             (* ; "Edited 22-Feb-2025 00:24 by rmk")
                                                             (* ; "Edited 11-Nov-87 11:19 by drc:")

    (* ;; "Setup the TOC/INDEX filenames if they're not already specified.   Refers to the FM menu to get and set the filename field")

    (LET ((MENUW (TMAXPROP TSTREAM 'IMAGEOBJ.MENUW))
          (TYPEPROP (PACK* (U-CASE TYPE)
                           ".FILE"))
          TYPEFILE)
         (if [AND MENUW (NEQ 0 (NCHARS (SETQ TYPEFILE (FM.ITEMPROP (FM.GETITEM TYPEPROP NIL MENUW)
                                                             'LABEL]
             then TYPEFILE
           elseif (GETTEXTPROP TSTREAM TYPEPROP)
           else (if (SETQ TYPEFILE (GETTEXTPROP TSTREAM 'FILENAME))
                    then (SETQ TYPEFILE (PACKFILENAME 'EXTENSION 'INDEX 'VERSION NIL 'BODY TYPEFILE))
                  elseif (SETQ TYPEFILE (TEDIT.GETINPUT TSTREAM (CONCAT 
                                                                "Please provide a file name for the "
                                                                       TYPE ": ")
                                               T))
                    then (SETQ TYPEFILE (PACKFILENAME 'BODY TYPEFILE 'DIRECTORY (DIRECTORYNAME T)
                                               'EXTENSION
                                               (U-CASE TYPE)))
                  else (TEDIT.PROMPTPRINT TSTREAM (CONCAT "No file for the " TYPE)
                              T))
                (PUTTEXTPROP TSTREAM TYPEPROP TYPEFILE)
                (CL:WHEN MENUW (FM.CHANGESTATE TYPEPROP TYPEFILE MENUW))
                TYPEFILE])

(TSP.SETUP.FMMENU
  [LAMBDA (TSTREAM)                                          (* ; "Edited 21-Feb-2025 10:17 by rmk")
                                                             (* ; "Edited 29-Apr-2024 09:56 by rmk")
                                                             (* fsg "24-Aug-87 16:04")

(* ;;; "Here to set up things like the FreeMenu, hasharrays, etc.  the first time through. WINDOW is the primary window of a text stream")

    (OR (TMAXPROP TSTREAM 'MAGEOBJ.MENUW)
        (TSP.FMMENU TSTREAM])

(TSP.FMMENU
  [LAMBDA (TSTREAM)                                          (* ; "Edited 22-Feb-2025 00:15 by rmk")
                                                             (* ; "Edited  2-May-97 17:02 by rmk:")
                                                             (* ; "Edited 29-Sep-87 11:17 by fsg")

    (* ;; "Creates the TMAX ImageObj menu but doesn't attach itself to the main TEdit window.")

    (LET (IMAGEOBJ.MENUW)
         (if (TMAXPROP TSTREAM 'IMAGEOBJ.MENUW)
           else (CL:UNLESS (HASHARRAYP (TMAXPROP TSTREAM 'TSP.NGROUP.ARRAY))
                    (TMAXPROP TSTREAM 'TSP.NGROUP.ARRAY (HASHARRAY 100)))
                (CL:UNLESS (HASHARRAYP (TMAXPROP TSTREAM 'TSP.CODE.ARRAY))
                    (TMAXPROP TSTREAM 'TSP.CODE.ARRAY (HASHARRAY 100)))
                (SETQ IMAGEOBJ.MENUW (FREEMENU TSP.FM.DESC "TMAX (Tedit Macros And eXtensions)"))
                (WINDOWADDPROP IMAGEOBJ.MENUW 'CLOSEFN (FUNCTION FREEATTACHEDWINDOW))
                (TMAXPROP TSTREAM 'IMAGEOBJ.MENUW IMAGEOBJ.MENUW)
                IMAGEOBJ.MENUW])

(TSP.FM.APPLY
  [LAMBDA (ITEM FMWINDOW BUTTON)                             (* ; "Edited 22-Feb-2025 14:27 by rmk")
                                                             (* ; "Edited 21-Feb-2025 11:33 by rmk")
                                                             (* ; "Edited 29-Sep-87 11:17 by fsg")
    (LET [(LABEL (FM.ITEMPROP ITEM 'ID))
          (TSTREAM (TEXTSTREAM (MAINWINDOW FMWINDOW]
         (DECLARE (SPECVARS TSTREAM))                        (* ; "RMK: Just in case?")
         (EVAL (CADR (ASSOC LABEL IMAGEOBJ.MENU.ITEMS])

(UPDATE.ALL
  [LAMBDA (TSTREAM)                                          (* ; "Edited 25-Feb-2025 14:48 by rmk")
                                                             (* ; "Edited 21-Feb-2025 00:34 by rmk")
                                                             (* fsg "24-Aug-87 11:40")

(* ;;; "Update the NGroup/Endnote numbers and any References to them.")

    (UPDATE.NUMBEROBJS TSTREAM (FUNCTION NUMBEROBJP))
    (UPDATE.XREFS TSTREAM)

(* ;;; "This should check if there is an Endnote section.  If there is one 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.")

    (CL:WHEN (TSP.LIST.OF.OBJECTS TSTREAM (FUNCTION REGMARKOBJP)
                    NIL
                    'FIRST)
           (INSERT.ENDNOTES TSTREAM])

(DOWNDATE.ALL
  [LAMBDA (TSTREAM WINDOW)                                   (* ; "Edited 25-Feb-2025 14:52 by rmk")
                                                             (* ; "Edited 21-Feb-2025 00:47 by rmk")
                                                             (* fsg "24-Sep-87 16:16")

(* ;;; "Undo everything that UPDATE does.")

    (DOWNDATE.NUMBEROBJS TSTREAM (FUNCTION NUMBEROBJP))
    (UPDATE.XREFS TSTREAM T)
    (CL:WHEN (TSP.LIST.OF.OBJECTS TSTREAM (FUNCTION REGMARKOBJP)
                    NIL
                    'FIRST)
           (INSERT.ENDNOTES TSTREAM WINDOW])

(TSP.FUNCTION.HOOKS
  [LAMBDA NIL                                                (* fsg " 3-Aug-87 15:33")
          (* * Called during LOAD to set up any function hooks.)

    (LET (FUNCTION.HOOK)
         (AND (SETQ FUNCTION.HOOK (LISTGET TEDIT.DEFAULT.PROPS 'GETFN))
              (NEQ FUNCTION.HOOK (FUNCTION TSP.GETFN))
              (PROGN (PRINTOUT PROMPTWINDOW T .CENTER 0 (CONCAT "TEdit GETFN hook " FUNCTION.HOOK 
                                                               " replaced by TMAX GETFN hook.")
                            T)
                     (FLASHWINDOW PROMPTWINDOW 2)))
         [COND
            ((LISTP TEDIT.DEFAULT.PROPS)
             (LISTPUT TEDIT.DEFAULT.PROPS 'GETFN (FUNCTION TSP.GETFN)))
            (T (SETQ TEDIT.DEFAULT.PROPS (LIST 'GETFN (FUNCTION TSP.GETFN]
         (AND (SETQ FUNCTION.HOOK (LISTGET TEDIT.DEFAULT.PROPS 'PUTFN))
              (NEQ FUNCTION.HOOK (FUNCTION TSP.PUTFN))
              (PROGN (PRINTOUT PROMPTWINDOW T .CENTER 0 (CONCAT "TEdit PUTFN hook " FUNCTION.HOOK 
                                                               " replaced by TMAX PUTFN hook.")
                            T)
                     (FLASHWINDOW PROMPTWINDOW 2)))
         (COND
            ((LISTP TEDIT.DEFAULT.PROPS)
             (LISTPUT TEDIT.DEFAULT.PROPS 'PUTFN (FUNCTION TSP.PUTFN)))
            (T (SETQ TEDIT.DEFAULT.PROPS (LIST 'PUTFN (FUNCTION TSP.PUTFN])

(TSP.GETFN
  [LAMBDA (TSTREAM FILENAME FLAVOR)                          (* ; "Edited 28-Feb-2025 00:35 by rmk")
                                                             (* fsg "24-Aug-87 14:27")

(* ;;; "Called both BEFORE and AFTER a TEdit GET.  Only interested in BEFORE call at which time we clear all the hash arrays in case of multiple GETs.")

    (CL:WHEN (EQ FLAVOR 'BEFORE)
        (CLRHASH (TMAXPROP TSTREAM 'TSP.CODE.ARRAY))
        (CLRHASH (WINDOWPROP TSTREAM 'TSP.INDEX.ARRAY))
        (CLRHASH (WINDOWPROP TSTREAM 'TSP.NGROUP.ARRAY)))])

(TSP.PUTFN
  [LAMBDA (TSTREAM FILENAME FLAVOR)                          (* ; "Edited 28-Feb-2025 00:28 by rmk")
                                                             (* fsg " 3-Aug-87 11:05")

(* ;;; "Called both before and after a TEdit PUT.")

    (LET ((WINDOW (\TEDIT.MAINW TSTREAM)))
         (CL:IF (EQ FLAVOR 'BEFORE)
             (TMAXPROP TSTREAM 'DUMPNGROUPGRAPH T)
             (TMAXPROP WINDOW 'DUMPNGROUPGRAPH NIL))])
)



(* ;;; "Free Menu toggle functions")

(DEFINEQ

(AutoUpdate.TOGGLE
  [LAMBDA (ITEM FMWINDOW BUTTON)                             (* ; "Edited 22-Feb-2025 23:36 by rmk")
                                                             (* ; "Edited 21-Feb-2025 11:34 by rmk")
                                                             (* ; "Edited 29-Sep-87 11:35 by fsg")
    (TMAXPROP (TEXTSTREAM (MAINWINDOW FMWINDOW))
           'AUTOUPDATE
           (FM.ITEMPROP ITEM 'STATE])

(UPDATE?
  [LAMBDA (TSTREAM)                                          (* ; "Edited 25-Feb-2025 21:09 by rmk")
                                                             (* ; "Edited 21-Feb-2025 10:17 by rmk")
                                                             (* ss%: "27-Jun-87 16:33")
    (TMAXPROP TSTREAM 'AUTOUPDATE)
    T])

(NGROUP.Menu.TOGGLE
  [LAMBDA (ITEM FMWINDOW BUTTON)                             (* ; "Edited 22-Feb-2025 17:29 by rmk")
                                                             (* ; "Edited 21-Feb-2025 11:35 by rmk")
                                                             (* ss%: "27-Jun-87 16:28")
    (LET [(TSTREAM (TEXTSTREAM (MAINWINDOW FMWINDOW)))
          (TOGGLE.STATE (FM.ITEMPROP ITEM 'STATE]
         (COND
            (TOGGLE.STATE (GRAPHMENU TSTREAM))
            (T (CLOSE.NGROUP.GRAPH TSTREAM])

(NGROUPMENU.ENABLED?
  [LAMBDA (TSTREAM)                                          (* ; "Edited 15-May-2026 22:29 by rmk")
                                                             (* ; "Edited 21-Feb-2025 10:17 by rmk")
                                                             (* ; "Edited 29-Sep-87 11:42 by fsg")
    (FM.ITEMPROP (FM.GETITEM 'NGROUP.MENU NIL (TSP.SETUP.FMMENU TSTREAM))
           'STATE])

(NGROUP.Text-Before.TOGGLE
  [LAMBDA (ITEM FMWINDOW BUTTON)                             (* ; "Edited 22-Feb-2025 17:35 by rmk")
                                                             (* ; "Edited 21-Feb-2025 11:35 by rmk")
                                                             (* ; "Edited 29-Sep-87 11:45 by fsg")
    (TMAXPROP (TEXTSTREAM (MAINWINDOW FMWINDOW))
           'NGROUPTEXTBEFORE
           (FM.ITEMPROP ITEM 'STATE])

(TEXTBEFORE.ENABLED?
  [LAMBDA (TSTREAM)                                          (* ; "Edited 21-Feb-2025 10:11 by rmk")
                                                             (* ss%: "27-Jun-87 16:29")
    (TMAXPROP TSTREAM 'NGROUPTEXTBEFORE])

(NGROUP.Text-After.TOGGLE
  [LAMBDA (ITEM FMWINDOW BUTTON)                             (* ; "Edited 22-Feb-2025 17:35 by rmk")
                                                             (* ; "Edited 21-Feb-2025 11:36 by rmk")
                                                             (* ; "Edited 29-Sep-87 11:46 by fsg")
    (TMAXPROP (TEXTSTREAM (MAINWINDOW FMWINDOW))
           'NGROUPTEXTAFTER
           (FM.ITEMPROP ITEM 'STATE])

(TEXTAFTER.ENABLED?
  [LAMBDA (TSTREAM)                                          (* ; "Edited 21-Feb-2025 10:11 by rmk")
                                                             (* ss%: "27-Jun-87 16:29")
    (TMAXPROP TSTREAM 'NGROUPTEXTAFTER])

(Manual.Index.TOGGLE
  [LAMBDA (ITEM FMWINDOW BUTTON)                             (* ; "Edited 22-Feb-2025 17:36 by rmk")
                                                             (* ; "Edited 21-Feb-2025 11:36 by rmk")
                                                             (* ; "Edited 29-Sep-87 11:48 by fsg")
    (TMAXPROP (TEXTSTREAM (MAINWINDOW FMWINDOW))
           'MANUALINDEX
           (FM.ITEMPROP ITEM 'STATE])

(MANUALINDEX.ENABLED?
  [LAMBDA (TSTREAM)                                          (* ; "Edited 21-Feb-2025 11:39 by rmk")
                                                             (* ss%: "27-Jun-87 16:27")
    (TMAXPROP TSTREAM 'MANUALINDEX])
)



(* ;;; "TSP font stuff")

(DEFINEQ

(GET.TSP.FONT
  [LAMBDA (DEFAULT.FONT FONT.FIELD)                          (* ; "Edited 27-Feb-2025 23:36 by rmk")
                                                             (* ; "Edited 21-Feb-2025 15:52 by rmk")
                                                             (* fsg " 8-Jul-87 10:08")

(* ;;; "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.  If FONT.FIELD is non-NIL, it specifies which one of the three fields to get.")

    (LET ((FAMILY (CL:IF (AND FONT.FIELD (NEQ FONT.FIELD 'FAMILY))
                      (FONTPROP DEFAULT.FONT 'FAMILY)
                      (GET.TSP.FONT.FAMILY DEFAULT.FONT)))
          (SIZE (CL:IF (AND FONT.FIELD (NEQ FONT.FIELD 'SIZE))
                    (FONTPROP DEFAULT.FONT 'SIZE)
                    (GET.TSP.FONT.SIZE DEFAULT.FONT)))
          (FACE (CL:IF (AND FONT.FIELD (NEQ FONT.FIELD 'FACE))
                    (FONTPROP DEFAULT.FONT 'FACE)
                    (GET.TSP.FONT.FACE DEFAULT.FONT)))
          NEWENTRY.FONT)
         (CL:WHEN (SETQ NEWENTRY.FONT (FONTCREATE FAMILY SIZE FACE NIL NIL T))
             (LIST FAMILY SIZE (FONTPROP NEWENTRY.FONT 'FACE)))])

(GET.TSP.FONT.FAMILY
  [LAMBDA (DEFAULT.FONT)                                     (* ; "Edited 28-Feb-2025 23:32 by rmk")
                                                             (* fsg " 8-Jul-87 15:44")

(* ;;; "Get the font family from the menu or DEFAULT.FONT if the menu returns NIL.")

    (U-CASE (OR [MKATOM (MENU (create MENU
                                     TITLE _ "Font Family"
                                     CENTERFLG _ T
                                     ITEMS _ `(Classic Gacha Terminal Helvetica Modern TimesRoman]
                (FONTPROP DEFAULT.FONT 'FAMILY])

(GET.TSP.FONT.SIZE
  [LAMBDA (DEFAULT.FONT)                                     (* fsg " 8-Jul-87 09:56")
          (* * Get the font size from the menu or DEFAULT.FONT if the menu returns NIL.)

    (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])

(GET.TSP.FONT.FACE
  [LAMBDA (DEFAULT.FONT)                                     (* ; "Edited 21-Feb-2025 23:22 by rmk")
                                                             (* fsg " 8-Jul-87 15:44")

(* ;;; "Get the font face from the menu or DEFAULT.FONT if the menu returns NIL.")

         (* * Get the font face from the menu or DEFAULT.FONT if the menu returns NIL.)

    (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])

(ABBREVIATE.FONT
  [LAMBDA (FONT)                                             (* ; "Edited 27-Feb-2025 22:05 by rmk")
                                                             (* ; "Edited 21-Feb-2025 23:24 by rmk")
                                                            (* ; "Edited 24-Oct-2021 22:05 by rmk:")
                                                             (* fsg " 8-Jul-87 15:57")

(* ;;; "Returns an abbreviated font description.  For example, if the font is (TIMESROMAN 12 (BOLD REGULAR REGULAR)) then the list (TimesRoman 12 Bold) is returned.")

    (LET ((FONT.LIST (CL:IF (FONTP FONT)
                         (FONTPROP FONT 'SPEC)
                         FONT)))
         (LIST* (LET ((FONT.FAMILY (pop FONT.LIST)))
                     (SELECTQ FONT.FAMILY
                         (CLASSIC 'Classic)
                         (TERMINAL 'Terminal)
                         (GACHA 'Gacha)
                         (HELVETICA 'Helvetica)
                         (MODERN 'Modern)
                         (TIMESROMAN 'TimesRoman)
                         FONT.FAMILY))
                (pop FONT.LIST)
                (LET ((FONT.FACE (pop FONT.LIST)))
                     (if (EQUAL FONT.FACE '(MEDIUM REGULAR REGULAR))
                         then '(Standard)
                       else (APPEND (CL:IF (EQ 'BOLD (pop FONT.FACE))
                                        (CONS 'Bold))
                                   (CL:IF (EQ 'ITALIC (pop FONT.FACE))
                                       (CONS 'Italic))])

(TMAX.SHADEOBJ
  [LAMBDA (OBJ STREAM SHADE)                             (* ; "Edited 26-Jan-97 14:07 by rmk:")
                                                             (* fsg "17-Sep-87 11:25")

    (* ;; "Shade the ImageObject to distinguish it from normal text.")

    (AND (IMAGESTREAMTYPEP STREAM 'DISPLAY)
         (LET [(BOUNDBOX (IMAGEOBJPROP OBJ 'BOUNDBOX]
              (BLTSHADE (OR SHADE GP.DefaultShade)
                     STREAM
                     (DSPXPOSITION NIL STREAM)
                     (IDIFFERENCE (DSPYPOSITION NIL STREAM)
                            (FETCH YDESC OF BOUNDBOX))
                     (FETCH XSIZE OF BOUNDBOX)
                     (FETCH YSIZE OF BOUNDBOX])
)



(* ;;; "Collect ImageObjects")

(DEFINEQ

(TSP.LIST.OF.OBJECTS
  [LAMBDA (TSTREAM TESTFN TESTFNARG COLLECT)                 (* ; "Edited 25-Feb-2025 14:36 by rmk")
                                                             (* ; "Edited 21-Feb-2025 00:17 by rmk")
                                                             (* ; "Edited  4-Mar-2024 16:22 by rmk")
                                                             (* ; "Edited  6-Nov-2022 09:38 by rmk")
                                                             (* ; "Edited  6-Sep-2022 10:16 by rmk")

    (* ;; "TESTFN is applied to OBJ CH# TESTFNARG.  WIthout the local function, it would be applied to CH# OBJ TESTFNARG, which is unnatural for most predicates.  TEDIT.MAP.OBJECTS is screwed up in this regard.")

(* ;;; "Loop through each PIECE of the TEdit document and call the user supplied function on those PIECEs that are ImageObjects.  The extra loop is because the callers expect the results to be of the form (OBJ CH#)")

    (DECLARE (SPECVARS TESTFN))
    (CL:WHEN TESTFN
        (TEDIT.MAP.OBJECTS TSTREAM [FUNCTION (LAMBDA (CH# OBJ FNARG)
                                               (DECLARE (USEDFREE TESTFN))
                                               (APPLY* TESTFN OBJ CH# FNARG]
               TESTFNARG
               (OR COLLECT 'OBJECT)))])
)
(DECLARE%: DOEVAL@COMPILE DONTCOPY

(GLOBALVARS GP.DefaultFont GP.DefaultShade)
)

(RPAQ GP.DefaultFont (FONTCREATE 'TERMINAL 10))

(RPAQQ GP.DefaultShade 1024)

[TEDIT.ADD.MENUITEM TEDIT.DEFAULT.MENU '(TMAX% Menu (FUNCTION TSP.DISPLAY.FMMENU)
                                               NIL
                                               (SUBITEMS (Update (FUNCTION UPDATE.ALL)
                                                                "Updates all cross-references")
                                                      (NGroup% Menu (FUNCTION GRAPHMENU)
                                                             "Displays number-group menu"]

(TSP.FUNCTION.HOOKS)
(DEFINEQ

(TMAX-DEBUG
  [LAMBDA (DONTOVERLOAD)                                     (* ; "Edited 22-Jun-2026 19:57 by rmk")
    (DRIBBLE (PSEUDOFILENAME "{LI}TMAX-DEBUG.DRIBBLE"))
    (FILESLOAD (NOERROR FROM LOADUPS)
           FULLER.DATABASE)
    (CL:UNLESS DONTOVERLOAD (TMAX-EDIT))
    (CL:UNLESS DONTOVERLOAD (%. ANALYZE ON TMAX-DEBUG))
    [SETQ TMAXFILES `(TMAX-DEBUG ,@TMAXFILES]
    (CNDIR (PSEUDOFILENAME (MEDLEYDIR "sources/tmax")))
    (PRINTOUT T T "Connected to " (PSEUDOFILENAME (MEDLEYDIR "sources/tmax"))
           T)
    (DRIBBLE])

(TMAX-UPDATE
  [LAMBDA (FILES LDFLG)                                      (* ; "Edited 22-Jun-2026 17:10 by rmk")
                                                             (* ; "Edited  9-Mar-2025 19:17 by rmk")
                                                             (* ; "Edited  7-Mar-2025 23:40 by rmk")
                                                             (* ; "Edited 26-Oct-2022 21:10 by rmk")
                                                             (* ; "Edited 16-Feb-2025 11:25 by rmk")

    (* ;; 
  "Loads compiled TMAXFILES that were compiled on sources different from the currently loaded files.")

    (CL:UNLESS LDFLG
        (SETQ LDFLG 'SYSLOAD))
    (for F CF in TMAXFILES when (SETQ CF (FINDFILE-WITH-EXTENSIONS F NIL *COMPILED-EXTENSIONS*))
       unless (thereis LF TCF in LOADEDFILELST first (SETQ TCF (TRUEFILENAME CF))
                 suchthat (STRING.EQUAL TCF (TRUEFILENAME LF))) do (LOAD CF LDFLG])

(TMAX-EDIT
  [LAMBDA NIL                                                (* ; "Edited 22-Jun-2026 19:58 by rmk")
                                                             (* ; "Edited  7-Mar-2025 22:53 by rmk")
                                                             (* ; "Edited  3-Jul-2023 13:44 by rmk")
                                                             (* ; "Edited 17-Jun-2023 10:00 by rmk")
                                                             (* ; "Edited 25-Apr-2023 17:39 by rmk")
                                                             (* ; "Edited 26-Oct-2022 21:12 by rmk")
                                                             (* ; "Edited 14-Sep-2022 08:37 by rmk")
    (BKSYSBUF " ")
    (RESETLST
        (RESETSAVE LOADDBFLG 'YES)
        (for F in TMAXFILES do (LOADFROM F)
                               (LOADCOMP F)))
    (%. ANALYZE ON IN TMAXFILES])

(UPDATE-TMAX
  [LAMBDA (FILES LDFLG)                                      (* ; "Edited 22-Jun-2026 17:10 by rmk")
                                                             (* ; "Edited  9-Mar-2025 19:17 by rmk")
                                                             (* ; "Edited  7-Mar-2025 23:40 by rmk")
                                                             (* ; "Edited 26-Oct-2022 21:10 by rmk")
                                                             (* ; "Edited 16-Feb-2025 11:25 by rmk")

    (* ;; 
  "Loads compiled TMAXFILES that were compiled on sources different from the currently loaded files.")

    (CL:UNLESS LDFLG
        (SETQ LDFLG 'SYSLOAD))
    (for F CF in TMAXFILES when (SETQ CF (FINDFILE-WITH-EXTENSIONS F NIL *COMPILED-EXTENSIONS*))
       unless (thereis LF TCF in LOADEDFILELST first (SETQ TCF (TRUEFILENAME CF))
                 suchthat (STRING.EQUAL TCF (TRUEFILENAME LF))) do (LOAD CF LDFLG])

(EDIT-TMAX
  [LAMBDA NIL                                                (* ; "Edited  7-Mar-2025 22:53 by rmk")
                                                             (* ; "Edited  3-Jul-2023 13:44 by rmk")
                                                             (* ; "Edited 17-Jun-2023 10:00 by rmk")
                                                             (* ; "Edited 25-Apr-2023 17:39 by rmk")
                                                             (* ; "Edited 26-Oct-2022 21:12 by rmk")
                                                             (* ; "Edited 14-Sep-2022 08:37 by rmk")
    (BKSYSBUF " ")
    (RESETLST
        (RESETSAVE LOADDBFLG 'YES)
        (FOR F IN TMAXFILES DO (LOADFROM F)
                               (LOADCOMP F)))
    (%. ANALYZE ON IN TMAXFILES])
)
(DECLARE%: DONTCOPY
  (FILEMAP (NIL (3412 4296 (EDIT-TMAX 3422 . 4294)) (8307 17158 (TSP.DISPLAY.FMMENU 8317 . 9038) (
TSP.SETUP.FILENAMES 9040 . 10932) (TSP.SETUP.FMMENU 10934 . 11485) (TSP.FMMENU 11487 . 12591) (
TSP.FM.APPLY 12593 . 13181) (UPDATE.ALL 13183 . 14059) (DOWNDATE.ALL 14061 . 14688) (
TSP.FUNCTION.HOOKS 14690 . 16120) (TSP.GETFN 16122 . 16697) (TSP.PUTFN 16699 . 17156)) (17204 21243 (
AutoUpdate.TOGGLE 17214 . 17671) (UPDATE? 17673 . 18038) (NGROUP.Menu.TOGGLE 18040 . 18585) (
NGROUPMENU.ENABLED? 18587 . 19034) (NGROUP.Text-Before.TOGGLE 19036 . 19507) (TEXTBEFORE.ENABLED? 
19509 . 19776) (NGROUP.Text-After.TOGGLE 19778 . 20247) (TEXTAFTER.ENABLED? 20249 . 20514) (
Manual.Index.TOGGLE 20516 . 20976) (MANUALINDEX.ENABLED? 20978 . 21241)) (21277 26939 (GET.TSP.FONT 
21287 . 22561) (GET.TSP.FONT.FAMILY 22563 . 23183) (GET.TSP.FONT.SIZE 23185 . 23673) (
GET.TSP.FONT.FACE 23675 . 24567) (ABBREVIATE.FONT 24569 . 26183) (TMAX.SHADEOBJ 26185 . 26937)) (26979
 28347 (TSP.LIST.OF.OBJECTS 26989 . 28345)) (29040 33545 (TMAX-DEBUG 29050 . 29610) (TMAX-UPDATE 29612
 . 30648) (TMAX-EDIT 30650 . 31631) (UPDATE-TMAX 31633 . 32669) (EDIT-TMAX 32671 . 33543)))))
STOP
