1
0
mirror of synced 2026-01-12 00:42:56 +00:00

Updated TMAX to separate window vs textstream properties (#2254)

* Updated TMAX to separate window vs textstream properties

* missed one
This commit is contained in:
rmkaplan 2025-08-14 23:48:51 -07:00 committed by GitHub
parent 0469bd2820
commit a39e3d9dc5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
16 changed files with 2451 additions and 2305 deletions

View File

@ -1,12 +1,14 @@
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
(FILECREATED "29-Apr-2024 10:01:10" {WMEDLEY}<lispusers>TMAX>TMAX.;11 25484
(FILECREATED "12-Aug-2025 08:27:53" 
{DSK}<Users>kaplan>Local>medley3.5>working-medley>lispusers>tmax>TMAX.;46 28244
:EDIT-BY rmk
:CHANGES-TO (FNS TSP.SETUP.FMMENU)
:CHANGES-TO (VARS TMAXCOMS TSP.FM.DESC)
:PREVIOUS-DATE " 4-Mar-2024 16:23:18" {WMEDLEY}<lispusers>TMAX>TMAX.;10)
:PREVIOUS-DATE "30-Mar-2025 21:51:58"
{DSK}<Users>kaplan>Local>medley3.5>working-medley>lispusers>TMAX>TMAX.;44)
(PRETTYCOMPRINT TMAXCOMS)
@ -17,13 +19,13 @@
(* ;
 "Written by Frank Gilmurray and Sami Shaio.")
(FILES (COMPILED SYSLOAD)
TEDIT FREEMENU)
(VARS TMAX.FILE.LIST)
TEDIT FREEMENU GRAPHER)
(FILES * TMAXFILES)
(FNS EDIT-TMAX)
(DECLARE%: DONTCOPY (P (DOFILESLOAD (LIST* '(SOURCE)
TMAX.FILE.LIST)))
(DECLARE%: EVAL@COMPILE (FILES (FROM LOADUPS)
EXPORTS.ALL)))
(P (DOFILESLOAD TMAX.FILE.LIST))
TMAXFILES)))
(DECLARE%: EVAL@COMPILE (FILES TEDIT-EXPORTS.ALL)))
(DECLARE%: EVAL@COMPILE DONTCOPY (MACROS TMAXPROP TMAXADDPROP))
(* ;;; "Free Menu data structures")
@ -58,23 +60,12 @@
(GP.DefaultShade 1024))
(P [TEDIT.ADD.MENUITEM TEDIT.DEFAULT.MENU '(TMAX% Menu (FUNCTION TSP.DISPLAY.FMMENU)
NIL
(SUBITEMS (Update [FUNCTION
(LAMBDA
(TEXTSTREAM)
(UPDATE.ALL
TEXTSTREAM
(\TEDIT.MAINW
TEXTSTREAM]
(SUBITEMS (Update (FUNCTION UPDATE.ALL)
"Updates all cross-references"
)
(NGroup% Menu
[FUNCTION (LAMBDA
(TEXTSTREAM)
(GRAPHMENU TEXTSTREAM
(\TEDIT.MAINW
TEXTSTREAM]
"Displays number-group menu"]
(NGroup% Menu (FUNCTION GRAPHMENU)
"Displays number-group menu"]
(TSP.FUNCTION.HOOKS))))
@ -88,23 +79,45 @@
(FILESLOAD (COMPILED SYSLOAD)
TEDIT FREEMENU)
TEDIT FREEMENU GRAPHER)
(RPAQQ TMAX.FILE.LIST (TMAX-DATE TMAX-ENDNOTE TMAX-INDEX TMAX-NUMBER TMAX-NGRAPH TMAX-NGROUP
TMAX-XREF))
(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)
TMAX.FILE.LIST))
TMAXFILES))
(DECLARE%: EVAL@COMPILE
(FILESLOAD (FROM LOADUPS)
EXPORTS.ALL)
(FILESLOAD TEDIT-EXPORTS.ALL)
)
)
(DECLARE%: EVAL@COMPILE DONTCOPY
(DECLARE%: EVAL@COMPILE
(DOFILESLOAD TMAX.FILE.LIST)
(PUTPROPS TMAXPROP MACRO (= . STREAMPROP))
(PUTPROPS TMAXADDPROP MACRO (= . STREAMADDPROP))
)
)
@ -113,64 +126,65 @@
(RPAQQ TSP.FM.DESC
[(PROPS FORMAT TABLE TYPE MOMENTARY FONT (HELVETICA 10 BRR))
((LABEL "Miscellany:" TYPE DISPLAY FONT (NIL NIL MRR))
((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 (NIL NIL BIR))
(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 (NIL NIL MRR))
((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 (NIL NIL 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 (NIL NIL MRR))
((LABEL "Numbering:" TYPE DISPLAY FONT (TERMINAL 10 MRR))
(LABEL "NGroup Menu" TYPE TOGGLE ID NGROUP.MENU SELECTEDFN NGROUP.Menu.TOGGLE FONT
(NIL NIL BIR))
(TERMINAL 10 BIR))
(LABEL "New Ngroup" ID NEWNGROUP SELECTEDFN TSP.FM.APPLY)
(LABEL "Text Before" TYPE TOGGLE SELECTEDFN NGROUP.Text-Before.TOGGLE FONT (NIL NIL BIR))
(LABEL "Text After" TYPE TOGGLE SELECTEDFN NGROUP.Text-After.TOGGLE FONT (NIL NIL BIR)))
((LABEL "Contents File:" TYPE DISPLAY FONT (NIL NIL MRR))
(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 (NIL NIL 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 (NIL NIL BIR)))
((LABEL "Indices File:" TYPE DISPLAY FONT (NIL NIL MRR))
(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 TWINDOW))
(UNDOUPDATE (DOWNDATE.ALL TSTREAM TWINDOW))
((UPDATE (UPDATE.ALL TSTREAM))
(UNDOUPDATE (DOWNDATE.ALL TSTREAM))
(DATE/TIME (TEDIT.INSERT.OBJECT (DATEOBJ)
(TEXTOBJ TSTREAM)))
TSTREAM))
(REFERENCE (INSERT.REF TSTREAM))
(KNOWNREF (INSERT.REF TSTREAM T))
(ENDNOTE (ADD.ENDNOTE TSTREAM TWINDOW))
(INSERTNOTE (INSERT.ENDNOTES TSTREAM TWINDOW))
(ENDNOTE (ADD.ENDNOTE TSTREAM))
(INSERTNOTE (INSERT.ENDNOTES TSTREAM))
(DELETENOTE (DELETE.ENDNOTES TSTREAM))
(SETSTYLE (SET.ENDNOTE.STYLE TSTREAM TWINDOW))
(NEWNGROUP (AND (ADD.NUMBER.GROUP TWINDOW TSTREAM)
(GRAPHMENU TSTREAM TWINDOW)))
(CREATETOC (CREATE.TOC.FILE TSTREAM TWINDOW))
(VIEWTOC (VIEW.TOC.FILE TSTREAM TWINDOW))
(INDEX (INSERT.INDEX TSTREAM TWINDOW))
(XTNDINDEX (INSERT.INDEXENTRY TSTREAM TWINDOW))
(KNOWNINDEX (INSERT.KNOWN.INDEX TSTREAM TWINDOW))
(CREATEINDEX (VIEW.INDEX.FILE TSTREAM TWINDOW T))
(VIEWINDEX (VIEW.INDEX.FILE TSTREAM TWINDOW))))
(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))))
@ -179,99 +193,108 @@
(DEFINEQ
(TSP.DISPLAY.FMMENU
[LAMBDA (STREAM) (* fsg "24-Aug-87 14:37")
(* * Here when user buttons TMAX Menu in the TEDIT.DEFAULT.MENU.)
[LAMBDA (TSTREAM) (* ; "Edited 21-Feb-2025 09:25 by rmk")
(* fsg "24-Aug-87 14:37")
(LET ((WINDOW (\TEDIT.MAINW STREAM))
(IMAGEOBJ.MENUW (TSP.FMMENU STREAM)))
(AND (NOT (OPENWP IMAGEOBJ.MENUW))
(PROGN (TSP.SETUP.FILENAMES IMAGEOBJ.MENUW)
(ATTACHWINDOW IMAGEOBJ.MENUW WINDOW 'TOP 'JUSTIFY)
(WINDOWPROP IMAGEOBJ.MENUW 'PASSTOMAINCOMS '(MOVEW SHAPEW SHRINKW BURYW])
(* ;;; "Here when user buttons TMAX Menu in the TEDIT.DEFAULT.MENU.")
(LET ((IMAGEOBJ.MENUW (TSP.FMMENU TSTREAM)))
(CL:UNLESS (OPENWP IMAGEOBJ.MENUW)
(TSP.SETUP.FILENAMES IMAGEOBJ.MENUW TSTREAM)
(ATTACHWINDOW IMAGEOBJ.MENUW (\TEDIT.PRIMARYPANE TSTREAM)
'TOP
'JUSTIFY)
(WINDOWPROP IMAGEOBJ.MENUW 'PASSTOMAINCOMS '(MOVEW SHAPEW SHRINKW BURYW)))])
(TSP.SETUP.FILENAMES
[LAMBDA (OBJMENUW) (* ; "Edited 11-Nov-87 11:19 by drc:")
[LAMBDA (OBJMENUW TSTREAM) (* ; "Edited 22-Feb-2025 00:24 by rmk")
(* ; "Edited 11-Nov-87 11:19 by drc:")
(* * Here when displaying the TMAX menu.
 Setup the TOC/INDEX filenames if they're not already specified.)
(* ;;; "Here when displaying the TMAX menu. Setup the TOC/INDEX filenames if they're not already specified.")
(LET ((TEXT.FILE (with TEXTOBJ TEXTOBJ TXTFILE)))
(AND (STREAMP TEXT.FILE)
(LET* [(FILE.NAME (fetch (STREAM FULLNAME) of TEXT.FILE))
(FILE.BASE (PACKFILENAME 'HOST (FILENAMEFIELD FILE.NAME 'HOST)
'DIRECTORY
(FILENAMEFIELD FILE.NAME 'DIRECTORY)
'NAME
(FILENAMEFIELD FILE.NAME 'NAME]
(for EXTENSION in '(TOC INDEX)
do (LET ((FM.ITEM (FM.GETITEM (MKATOM (CONCAT EXTENSION ".FILE"))
NIL OBJMENUW)))
(AND (STREQUAL (FM.ITEMPROP FM.ITEM 'LABEL)
"")
(FM.CHANGESTATE FM.ITEM (CONCAT FILE.BASE "." EXTENSION)
OBJMENUW])
(LET ((FILE.NAME (GETTEXTPROP TSTREAM 'FILENAME))
FILE.BASE)
(CL:WHEN FILE.NAME
[SETQ FILE.BASE (PACKFILENAME 'HOST (FILENAMEFIELD FILE.NAME 'HOST)
'DIRECTORY
(FILENAMEFIELD FILE.NAME 'DIRECTORY)
'NAME
(FILENAMEFIELD FILE.NAME 'NAME]
(for EXTENSION FM.ITEM in '(TOC INDEX) eachtime (SETQ FM.ITEM
(FM.GETITEM (MKATOM (CONCAT EXTENSION
".FILE"))
NIL OBJMENUW))
when [EQ 0 (NCHARS (FM.ITEMPROP FM.ITEM 'LABEL]
do (FM.CHANGESTATE FM.ITEM (CONCAT FILE.BASE "." EXTENSION)
OBJMENUW)))])
(TSP.SETUP.FMMENU
[LAMBDA (WINDOW) (* ; "Edited 29-Apr-2024 09:56 by rmk")
[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 (WINDOWPROP WINDOW 'IMAGEOBJ.MENUW)
(TSP.FMMENU (fetch (TEXTWINDOW WTEXTSTREAM) of WINDOW])
(OR (TMAXPROP TSTREAM 'MAGEOBJ.MENUW)
(TSP.FMMENU TSTREAM])
(TSP.FMMENU
[LAMBDA (STREAM) (* ; "Edited 2-May-97 17:02 by rmk:")
(* ; "Edited 29-Sep-87 11:17 by fsg")
[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.")
(* ;; "Creates the TMAX ImageObj menu but doesn't attach itself to the main TEdit window.")
(LET ((WINDOW (\TEDIT.MAINW STREAM))
IMAGEOBJ.MENUW)
(OR (WINDOWPROP WINDOW 'IMAGEOBJ.MENUW)
(PROGN (CL:UNLESS (HASHARRAYP (WINDOWPROP WINDOW 'TSP.NGROUP.ARRAY))
(WINDOWPROP WINDOW 'TSP.NGROUP.ARRAY (HASHARRAY 100)))
(CL:UNLESS (HASHARRAYP (WINDOWPROP WINDOW 'TSP.CODE.ARRAY))
(WINDOWPROP WINDOW 'TSP.CODE.ARRAY (HASHARRAY 100)))
(SETQ IMAGEOBJ.MENUW (FREEMENU TSP.FM.DESC "TMAX (Tedit Macros And eXtensions)"))
(WINDOWPROP IMAGEOBJ.MENUW 'TSTREAM STREAM)
(WINDOWADDPROP IMAGEOBJ.MENUW 'CLOSEFN (FUNCTION FREEATTACHEDWINDOW))
(WINDOWPROP IMAGEOBJ.MENUW 'TWINDOW WINDOW)
(WINDOWPROP WINDOW 'IMAGEOBJ.MENUW IMAGEOBJ.MENUW)
IMAGEOBJ.MENUW])
(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 WINDOW BUTTON) (* ; "Edited 29-Sep-87 11:17 by fsg")
[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 (WINDOWPROP WINDOW 'TSTREAM))
(TWINDOW (WINDOWPROP WINDOW 'TWINDOW]
(TSTREAM (TEXTSTREAM (MAINWINDOW FMWINDOW]
(DECLARE (SPECVARS TSTREAM)) (* ; "RMK: Just in case?")
(EVAL (CADR (ASSOC LABEL IMAGEOBJ.MENU.ITEMS])
(UPDATE.ALL
[LAMBDA (STREAM WINDOW) (* fsg "24-Aug-87 11:40")
(* * Update the NGroup/Endnote numbers and any References to them.)
[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.NUMBEROBJS WINDOW STREAM 'NUMBEROBJP)
(UPDATE.XREFS WINDOW)
(* * 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.)
(* ;;; "Update the NGroup/Endnote numbers and any References to them.")
(AND (TSP.LIST.OF.OBJECTS (TEXTOBJ STREAM)
'REGMARKOBJP)
(INSERT.ENDNOTES STREAM WINDOW])
(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 (STREAM WINDOW) (* fsg "24-Sep-87 16:16")
(* * Undo everything that UPDATE does.)
[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")
(DOWNDATE.NUMBEROBJS WINDOW STREAM 'NUMBEROBJP)
(UPDATE.XREFS WINDOW T)
(AND (TSP.LIST.OF.OBJECTS (TEXTOBJ STREAM)
'REGMARKOBJP)
(INSERT.ENDNOTES STREAM WINDOW])
(* ;;; "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")
@ -300,26 +323,26 @@
(T (SETQ TEDIT.DEFAULT.PROPS (LIST 'PUTFN (FUNCTION TSP.PUTFN])
(TSP.GETFN
[LAMBDA (STREAM FILENAME FLAVOR) (* 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.)
[LAMBDA (TSTREAM FILENAME FLAVOR) (* ; "Edited 28-Feb-2025 00:35 by rmk")
(* fsg "24-Aug-87 14:27")
(AND (EQ FLAVOR 'BEFORE)
(LET ((WINDOW (\TEDIT.MAINW STREAM)))
(CLRHASH (WINDOWPROP WINDOW 'TSP.CODE.ARRAY))
(CLRHASH (WINDOWPROP WINDOW 'TSP.INDEX.ARRAY))
(CLRHASH (WINDOWPROP WINDOW 'TSP.NGROUP.ARRAY])
(* ;;; "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 (STREAM FILENAME FLAVOR) (* fsg " 3-Aug-87 11:05")
(* * Called both before and after a TEdit PUT.)
[LAMBDA (TSTREAM FILENAME FLAVOR) (* ; "Edited 28-Feb-2025 00:28 by rmk")
(* fsg " 3-Aug-87 11:05")
(LET ((WINDOW (\TEDIT.MAINW STREAM)))
(COND
((EQ FLAVOR 'BEFORE)
(WINDOWPROP WINDOW 'DUMPNGROUPGRAPH T))
(T (WINDOWPROP WINDOW 'DUMPNGROUPGRAPH NIL])
(* ;;; "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))])
)
@ -329,63 +352,74 @@
(DEFINEQ
(AutoUpdate.TOGGLE
[LAMBDA (ITEM WINDOW BUTTON) (* ; "Edited 29-Sep-87 11:35 by fsg")
(WINDOWPROP (WINDOWPROP WINDOW 'TWINDOW)
[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 (WINDOW) (* ss%: "27-Jun-87 16:33")
(WINDOWPROP WINDOW 'AUTOUPDATE])
[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 WINDOW BUTTON) (* ss%: "27-Jun-87 16:28")
(LET [(TWINDOW (WINDOWPROP WINDOW 'TWINDOW))
(TSTREAM (WINDOWPROP WINDOW 'TSTREAM))
[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 TWINDOW))
(T (CLOSE.NGROUP.GRAPH TWINDOW])
(TOGGLE.STATE (GRAPHMENU TSTREAM))
(T (CLOSE.NGROUP.GRAPH TSTREAM])
(NGROUPMENU.ENABLED?
[LAMBDA (TWINDOW) (* ; "Edited 29-Sep-87 11:42 by fsg")
(FM.ITEMPROP (FM.GETITEM 'NGROUP.MENU NIL (WINDOWPROP TWINDOW 'IMAGEOBJ.MENUW))
[LAMBDA (TSTREAM) (* ; "Edited 21-Feb-2025 10:17 by rmk")
(* ; "Edited 29-Sep-87 11:42 by fsg")
(FM.ITEMPROP (FM.GETITEM 'NGROUP.MENU NIL (TMAXPROP TSTREAM 'IMAGEOBJ.MENUW))
'STATE])
(NGROUP.Text-Before.TOGGLE
[LAMBDA (ITEM WINDOW BUTTON) (* ; "Edited 29-Sep-87 11:45 by fsg")
(WINDOWPROP (WINDOWPROP WINDOW 'TWINDOW)
[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 (WINDOW) (* ss%: "27-Jun-87 16:29")
(WINDOWPROP WINDOW 'NGROUPTEXTBEFORE])
[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 WINDOW BUTTON) (* ; "Edited 29-Sep-87 11:46 by fsg")
(WINDOWPROP (WINDOWPROP WINDOW 'TWINDOW)
[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 (WINDOW) (* ss%: "27-Jun-87 16:29")
(WINDOWPROP WINDOW 'NGROUPTEXTAFTER])
[LAMBDA (TSTREAM) (* ; "Edited 21-Feb-2025 10:11 by rmk")
(* ss%: "27-Jun-87 16:29")
(TMAXPROP TSTREAM 'NGROUPTEXTAFTER])
(Manual.Index.TOGGLE
[LAMBDA (ITEM WINDOW BUTTON) (* ; "Edited 29-Sep-87 11:48 by fsg")
(WINDOWPROP (WINDOWPROP WINDOW 'TWINDOW)
[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 (WINDOW) (* ss%: "27-Jun-87 16:27")
(WINDOWPROP WINDOW 'MANUALINDEX])
[LAMBDA (TSTREAM) (* ; "Edited 21-Feb-2025 11:39 by rmk")
(* ss%: "27-Jun-87 16:27")
(TMAXPROP TSTREAM 'MANUALINDEX])
)
@ -395,44 +429,36 @@
(DEFINEQ
(GET.TSP.FONT
[LAMBDA (WINDOW DEFAULT.FONT FONT.FIELD) (* 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.)
[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")
(LET ([FAMILY (COND
((AND FONT.FIELD (NEQ FONT.FIELD 'FAMILY))
(FONTPROP DEFAULT.FONT 'FAMILY))
(T (GET.TSP.FONT.FAMILY DEFAULT.FONT]
[SIZE (COND
((AND FONT.FIELD (NEQ FONT.FIELD 'SIZE))
(FONTPROP DEFAULT.FONT 'SIZE))
(T (GET.TSP.FONT.SIZE DEFAULT.FONT]
[FACE (COND
((AND FONT.FIELD (NEQ FONT.FIELD 'FACE))
(FONTPROP DEFAULT.FONT 'FACE))
(T (GET.TSP.FONT.FACE DEFAULT.FONT]
(* ;;; "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)
(AND (SETQ NEWENTRY.FONT (FONTCREATE FAMILY SIZE FACE NIL NIL T))
(LIST FAMILY SIZE (FONTPROP NEWENTRY.FONT 'FACE])
(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 24-Oct-2021 23:39 by rmk:")
[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.)
(* ;;; "Get the font family from the menu or DEFAULT.FONT if the menu returns NIL.")
(OR [MKATOM (MENU (create MENU
TITLE _ "Font Family"
CENTERFLG _ T
ITEMS _ '((Classic 'CLASSIC)
(Gacha 'GACHA)
(Terminal 'TERMINAL)
(Helvetica 'HELVETICA)
(Modern 'MODERN)
(TimesRoman 'TIMESROMAN]
(FONTPROP DEFAULT.FONT 'FAMILY])
(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")
@ -446,8 +472,12 @@
(FONTPROP DEFAULT.FONT 'SIZE])
(GET.TSP.FONT.FACE
[LAMBDA (DEFAULT.FONT) (* fsg " 8-Jul-87 15:44")
(* * Get the font face from the menu or DEFAULT.FONT if the menu returns NIL.)
[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"
@ -459,37 +489,33 @@
(FONTPROP DEFAULT.FONT 'FACE])
(ABBREVIATE.FONT
[LAMBDA (FONT) (* ; "Edited 24-Oct-2021 22:05 by rmk:")
[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.)
(* ;;; "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 (COND
[(FONTP FONT)
(LIST (FONTPROP FONT 'FAMILY)
(FONTPROP FONT 'SIZE)
(FONTPROP FONT 'FACE]
(T FONT]
(LIST (LET ((FONT.FAMILY (CAR FONT.LIST)))
(SELECTQ FONT.FAMILY
(CLASSIC 'Classic)
(TERMINAL 'Terminal)
(GACHA 'Gacha)
(HELVETICA 'Helvetica)
(MODERN 'Modern)
(TIMESROMAN 'TimesRoman)
FONT.FAMILY))
(CADR FONT.LIST)
(LET [(FONT.FACE (CONCATLIST (for FIELD in (CADDR FONT.LIST)
collect (GNC FIELD]
(SELECTQ (MKATOM FONT.FACE)
(MRR 'Standard)
(MIR 'Italic)
(BRR 'Bold)
(BIR 'BoldItalic)
FONT.FACE])
(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:")
@ -515,18 +541,23 @@
(DEFINEQ
(TSP.LIST.OF.OBJECTS
[LAMBDA (TEXTOBJ TESTFN TESTFNARG) (* ; "Edited 4-Mar-2024 16:22 by rmk")
[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")
(* ss%: "27-Jun-87 16:32")
(* ;; "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
(LET ((OBJECTS (TEDIT.MAP.OBJECTS TEXTOBJ TESTFN TESTFNARG T)))
(for X in OBJECTS do (swap (CAR X)
(CADR X)))
OBJECTS))])
(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
@ -539,28 +570,22 @@
[TEDIT.ADD.MENUITEM TEDIT.DEFAULT.MENU '(TMAX% Menu (FUNCTION TSP.DISPLAY.FMMENU)
NIL
(SUBITEMS (Update [FUNCTION (LAMBDA (TEXTSTREAM)
(UPDATE.ALL TEXTSTREAM
(\TEDIT.MAINW
TEXTSTREAM]
(SUBITEMS (Update (FUNCTION UPDATE.ALL)
"Updates all cross-references")
(NGroup% Menu [FUNCTION (LAMBDA (TEXTSTREAM)
(GRAPHMENU
TEXTSTREAM
(\TEDIT.MAINW
TEXTSTREAM]
(NGroup% Menu (FUNCTION GRAPHMENU)
"Displays number-group menu"]
(TSP.FUNCTION.HOOKS)
(DECLARE%: DONTCOPY
(FILEMAP (NIL (8079 15320 (TSP.DISPLAY.FMMENU 8089 . 8654) (TSP.SETUP.FILENAMES 8656 . 9907) (
TSP.SETUP.FMMENU 9909 . 10395) (TSP.FMMENU 10397 . 11583) (TSP.FM.APPLY 11585 . 11904) (UPDATE.ALL
11906 . 12578) (DOWNDATE.ALL 12580 . 12950) (TSP.FUNCTION.HOOKS 12952 . 14382) (TSP.GETFN 14384 .
14944) (TSP.PUTFN 14946 . 15318)) (15366 17615 (AutoUpdate.TOGGLE 15376 . 15612) (UPDATE? 15614 .
15759) (NGROUP.Menu.TOGGLE 15761 . 16143) (NGROUPMENU.ENABLED? 16145 . 16381) (
NGROUP.Text-Before.TOGGLE 16383 . 16633) (TEXTBEFORE.ENABLED? 16635 . 16798) (NGROUP.Text-After.TOGGLE
16800 . 17048) (TEXTAFTER.ENABLED? 17050 . 17211) (Manual.Index.TOGGLE 17213 . 17452) (
MANUALINDEX.ENABLED? 17454 . 17613)) (17649 23122 (GET.TSP.FONT 17659 . 18823) (GET.TSP.FONT.FAMILY
18825 . 19673) (GET.TSP.FONT.SIZE 19675 . 20163) (GET.TSP.FONT.FACE 20165 . 20864) (ABBREVIATE.FONT
20866 . 22366) (TMAX.SHADEOBJ 22368 . 23120)) (23162 24072 (TSP.LIST.OF.OBJECTS 23172 . 24070)))))
(FILEMAP (NIL (3307 4191 (EDIT-TMAX 3317 . 4189)) (8202 16445 (TSP.DISPLAY.FMMENU 8212 . 8886) (
TSP.SETUP.FILENAMES 8888 . 10219) (TSP.SETUP.FMMENU 10221 . 10772) (TSP.FMMENU 10774 . 11878) (
TSP.FM.APPLY 11880 . 12468) (UPDATE.ALL 12470 . 13346) (DOWNDATE.ALL 13348 . 13975) (
TSP.FUNCTION.HOOKS 13977 . 15407) (TSP.GETFN 15409 . 15984) (TSP.PUTFN 15986 . 16443)) (16491 20425 (
AutoUpdate.TOGGLE 16501 . 16958) (UPDATE? 16960 . 17325) (NGROUP.Menu.TOGGLE 17327 . 17872) (
NGROUPMENU.ENABLED? 17874 . 18216) (NGROUP.Text-Before.TOGGLE 18218 . 18689) (TEXTBEFORE.ENABLED?
18691 . 18958) (NGROUP.Text-After.TOGGLE 18960 . 19429) (TEXTAFTER.ENABLED? 19431 . 19696) (
Manual.Index.TOGGLE 19698 . 20158) (MANUALINDEX.ENABLED? 20160 . 20423)) (20459 26121 (GET.TSP.FONT
20469 . 21743) (GET.TSP.FONT.FAMILY 21745 . 22365) (GET.TSP.FONT.SIZE 22367 . 22855) (
GET.TSP.FONT.FACE 22857 . 23749) (ABBREVIATE.FONT 23751 . 25365) (TMAX.SHADEOBJ 25367 . 26119)) (26161
27529 (TSP.LIST.OF.OBJECTS 26171 . 27527)))))
STOP

View File

@ -1,12 +1,12 @@
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "XCL" BASE 10)
(FILECREATED "25-Jun-2024 12:00:23" |{WMEDLEY}<lispusers>tmax>TMAX-DATE.;8| 15021
(FILECREATED "21-Feb-2025 09:55:10" |{WMEDLEY}<lispusers>tmax>TMAX-DATE.;9| 15170
:EDIT-BY |rmk|
:CHANGES-TO (FNS DATE.GETFN)
:CHANGES-TO (FNS DATE.COPYFN CURRENT.DISPLAY.FONT)
:PREVIOUS-DATE "24-Jun-2024 23:30:47" |{WMEDLEY}<lispusers>tmax>TMAX-DATE.;7|)
:PREVIOUS-DATE "25-Jun-2024 12:00:23" |{WMEDLEY}<lispusers>tmax>TMAX-DATE.;8|)
(PRETTYCOMPRINT TMAX-DATECOMS)
@ -106,16 +106,17 @@
(APPLY (FUNCTION DATEOBJ)
(OR COPY.OBJECT (CADR (READ STREAM))))))
(date.copyfn
(lambda (image.obj source.stream target.stream) (* |fsg| "23-Jul-87 11:34")
(* * |Here| |to| copy \a |Date| |Image| |Object.|)
(DATE.COPYFN
(LAMBDA (IMAGE.OBJ SOURCE.STREAM TARGET.STREAM) (* \; "Edited 21-Feb-2025 09:29 by rmk")
(* |fsg| "23-Jul-87 11:34")
(selectq (imagestreamtype target.stream)
(text (let ((textobj (textobj target.stream)))
(apply* (imageobjprop image.obj 'getfn)
target.stream
(|fetch| objectdatum |of| image.obj))))
(error "Unknown TARGET stream type" (imagestreamtype target.stream)))))
(* |;;;| "Here to COPY a Date Image Object.")
(SELECTQ (IMAGESTREAMTYPE TARGET.STREAM)
(TEXT (APPLY* (IMAGEOBJPROP IMAGE.OBJ 'GETFN)
TARGET.STREAM
(|fetch| OBJECTDATUM |of| IMAGE.OBJ)))
(ERROR "Unknown TARGET stream type" (IMAGESTREAMTYPE TARGET.STREAM)))))
(date.buttoneventinfn
(lambda (obj windowstream selection relx rely window hoststream button)
@ -147,13 +148,14 @@
(DEFINEQ
(CURRENT.DISPLAY.FONT
(LAMBDA (TEXTOBJ) (* \; "Edited 25-May-2024 20:36 by rmk")
(LAMBDA (TSTREAM) (* \; "Edited 21-Feb-2025 09:49 by rmk")
(* \; "Edited 25-May-2024 20:36 by rmk")
(* \; "Edited 9-May-2024 10:05 by rmk")
(* \; "Edited 12-Mar-88 15:28 by drc:")
(* |;;;| "Return the current font. This function is not now used in TMAX, but the comment says \"this code is also used in the LetterHead code.\" ")
(LET ((CURRENT.FONT (|fetch| CLFONT |of| (GETTOBJ TEXTOBJ CARETLOOKS))))
(LET ((CURRENT.FONT (|fetch| CLFONT |of| (TEDIT.CARETLOOKS TSTREAM))))
(COND
((TYPENAMEP CURRENT.FONT 'FONTDESCRIPTOR)
CURRENT.FONT)
@ -349,10 +351,10 @@
)
)
(DECLARE\: DONTCOPY
(FILEMAP (NIL (1378 6194 (DATEOBJ 1388 . 2155) (DATEOBJP 2157 . 2591) (DATE.DISPLAYFN 2593 . 2915) (
DATE.IMAGEBOXFN 2917 . 3422) (DATE.PUTFN 3424 . 3622) (DATE.GETFN 3624 . 4122) (DATE.COPYFN 4124 .
4656) (DATE.BUTTONEVENTINFN 4658 . 6192)) (6238 9039 (CURRENT.DISPLAY.FONT 6248 . 7102) (
CHANGE.DATE.FORMAT 7104 . 9037)) (9092 13491 (FINDTIME 9102 . 10881) (FINDHOUR 10883 . 11244) (AMPM
11246 . 11545) (FINDDAY 11547 . 11818) (NUMP 11820 . 12049) (FINDMONTH 12051 . 13167) (FINDYEAR 13169
. 13489)) (14203 14769 (MAKE.DATEOBJ.IMAGEFNS 14213 . 14767)))))
(FILEMAP (NIL (1400 6236 (DATEOBJ 1410 . 2177) (DATEOBJP 2179 . 2613) (DATE.DISPLAYFN 2615 . 2937) (
DATE.IMAGEBOXFN 2939 . 3444) (DATE.PUTFN 3446 . 3644) (DATE.GETFN 3646 . 4144) (DATE.COPYFN 4146 .
4698) (DATE.BUTTONEVENTINFN 4700 . 6234)) (6280 9188 (CURRENT.DISPLAY.FONT 6290 . 7251) (
CHANGE.DATE.FORMAT 7253 . 9186)) (9241 13640 (FINDTIME 9251 . 11030) (FINDHOUR 11032 . 11393) (AMPM
11395 . 11694) (FINDDAY 11696 . 11967) (NUMP 11969 . 12198) (FINDMONTH 12200 . 13316) (FINDYEAR 13318
. 13638)) (14352 14918 (MAKE.DATEOBJ.IMAGEFNS 14362 . 14916)))))
STOP

Binary file not shown.

View File

@ -1,12 +1,13 @@
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "XCL" BASE 10)
(FILECREATED "25-Jun-2024 12:00:23" |{WMEDLEY}<lispusers>tmax>TMAX-ENDNOTE.;6| 23878
(FILECREATED "28-Feb-2025 23:37:36" |{WMEDLEY}<lispusers>tmax>TMAX-ENDNOTE.;21| 25304
:EDIT-BY |rmk|
:CHANGES-TO (FNS REGMARK.GETFN)
:CHANGES-TO (FNS NOTE.WHENSELECTEDFN INSERT.ENDNOTES.TEXT ENDNOTEP MAP.ENDNOTE.LOOKS
DELETE.ENDNOTES)
:PREVIOUS-DATE "24-Jun-2024 23:30:47" |{WMEDLEY}<lispusers>tmax>TMAX-ENDNOTE.;5|)
:PREVIOUS-DATE "23-Feb-2025 00:27:40" |{WMEDLEY}<lispusers>tmax>TMAX-ENDNOTE.;19|)
(PRETTYCOMPRINT TMAX-ENDNOTECOMS)
@ -50,90 +51,95 @@
(DEFINEQ
(add.endnote
(lambda (stream window) (* |fsg| "13-Jul-87 10:44")
(* * |Insert| |an| endnote |ImageObject| |as| \a |superscript.|
 |Displayed| |as| \a |number| |when| |updated.|)
(ADD.ENDNOTE
(LAMBDA (TSTREAM) (* \; "Edited 21-Feb-2025 00:35 by rmk")
(* |fsg| "13-Jul-87 10:44")
(let ((noteobj (numberobj 'note)))
(tedit.insert.object noteobj stream)
(|replace| (numberobj text.after#) |of| (|fetch| objectdatum |of| noteobj)
|with| (or (tedit.getinput stream "Endnote text:")
(* |;;;| "Insert an ENDNOTE ImageObject as a superscript. Displayed as a number when updated.")
(LET ((NOTEOBJ (NUMBEROBJ 'NOTE)))
(TEDIT.INSERT.OBJECT NOTEOBJ TSTREAM)
(|replace| (NUMBEROBJ TEXT.AFTER#) |of| (|fetch| OBJECTDATUM |of| NOTEOBJ)
|with| (OR (TEDIT.GETINPUT TSTREAM "Endnote text:")
""))
(tedit.promptprint stream "" t)
(and (update? window)
(update.numberobjs window stream 'endnotep)))))
(TEDIT.PROMPTPRINT TSTREAM "" T)
(AND (UPDATE? TSTREAM)
(UPDATE.NUMBEROBJS TSTREAM 'ENDNOTEP)))))
(insert.endnotes
(lambda (stream window) (* |fsg| "25-Sep-87 10:23")
(* * |Inserts| |text| |of| |endnotes| |at| |the| |end| |of| |the| |TEdit|
 |document.| |The| |text| |is| |inserted| |between| |two| |Region| |marking|
 |imageobjs.|)
(INSERT.ENDNOTES
(LAMBDA (TSTREAM) (* \; "Edited 21-Feb-2025 09:55 by rmk")
(* |fsg| "25-Sep-87 10:23")
(let ((textobj (textobj stream))
list.of.endnotes)
(and (setq list.of.endnotes (tsp.list.of.objects textobj 'endnotep))
(let ((caretposition (|fetch| ch# |of| (tedit.getsel stream))))
(tedit.promptprint stream (concat (cond
((delete.endnotes stream)
(* |;;;| "Inserts text of endnotes at the end of the TEdit document. The text is inserted between two Region marking imageobjs.")
(LET ((LIST.OF.ENDNOTES (TSP.LIST.OF.OBJECTS TSTREAM 'ENDNOTEP))
(TEXTLEN (TEDIT.NCHARS TSTREAM)))
(CL:WHEN LIST.OF.ENDNOTES
(LET ((CARETPOSITION (TEDIT.SELPROP TSTREAM 'CH#)))
(TEDIT.PROMPTPRINT TSTREAM (CONCAT (COND
((DELETE.ENDNOTES TSTREAM)
"Rei")
(t "I"))
(T "I"))
"nserting Endnotes...")
t)
(tedit.insert.object (regmarkobj 'endnotes '|Endnotes-START|)
stream
(add1 (|fetch| textlen |of| textobj)))
(tedit.looks stream '(protected on) (|fetch| textlen |of| textobj)
1)
(tedit.insert stream (concat (character (charcode eol))
T)
(TEDIT.INSERT.OBJECT (REGMARKOBJ 'ENDNOTES '|Endnotes-START|)
TSTREAM
(ADD1 TEXTLEN))
(TEDIT.LOOKS TSTREAM '(PROTECTED ON)
TEXTLEN 1)
(TEDIT.INSERT TSTREAM (CONCAT (CHARACTER (CHARCODE EOL))
"Notes"
(character (charcode eol)))
(add1 (|fetch| textlen |of| textobj))
(|fetch| (endnotefonts title.font) |of| (get.endnote.fonts window))
t)
(insert.endnotes.text stream window textobj list.of.endnotes)
(tedit.insert.object (regmarkobj 'endnotes '|Endnotes-END|)
stream
(add1 (|fetch| textlen |of| textobj)))
(tedit.looks stream '(protected on) (|fetch| textlen |of| textobj)
1)
(tedit.promptprint stream "done")
(tedit.normalizecaret textobj (tedit.setsel stream caretposition 1)))))))
(CHARACTER (CHARCODE EOL)))
(ADD1 TEXTLEN)
(|fetch| (ENDNOTEFONTS TITLE.FONT) |of| (GET.ENDNOTE.FONTS TSTREAM))
T)
(INSERT.ENDNOTES.TEXT TSTREAM LIST.OF.ENDNOTES)
(TEDIT.INSERT.OBJECT (REGMARKOBJ 'ENDNOTES '|Endnotes-END|)
TSTREAM
(ADD1 TEXTLEN))
(TEDIT.LOOKS TSTREAM '(PROTECTED ON)
TEXTLEN 1)
(TEDIT.PROMPTPRINT TSTREAM "done")
(TEDIT.NORMALIZECARET TSTREAM (TEDIT.SETSEL TSTREAM CARETPOSITION 1)))))))
(insert.endnotes.text
(lambda (stream window textobj list.of.endnotes) (* |fsg| "18-Jun-87 13:17")
(* * |Here| |to| |print| |the| |text| |of| |each| |endnote.|)
(INSERT.ENDNOTES.TEXT
(LAMBDA (TSTREAM WINDOW LIST.OF.ENDNOTES) (* \; "Edited 25-Feb-2025 12:12 by rmk")
(* \; "Edited 21-Feb-2025 00:40 by rmk")
(* |fsg| "18-Jun-87 13:17")
(let ((textlooks (|fetch| (endnotefonts text.font) |of| (get.endnote.fonts window)))
(numblooks (|fetch| (endnotefonts number.font) |of| (get.endnote.fonts window))))
(|for| endnoteobj |in| list.of.endnotes
|do| (let ((numstring (mkstring (|fetch| (numberobj numstring) |of| (|fetch| objectdatum
|of| (car
endnoteobj
)))))
(text (|fetch| (numberobj text.after#) |of| (|fetch| objectdatum
|of| (car endnoteobj)))))
(tedit.insert stream numstring (add1 (|fetch| textlen |of| textobj))
numblooks t)
(tedit.insert stream (concat " " text (character (charcode eol)))
(add1 (|fetch| textlen |of| textobj))
textlooks t))))))
(* |;;;| "Here to print the text of each endnote.")
(delete.endnotes
(lambda (stream) (* |fsg| "25-Sep-87 10:12")
(* * |Delete| |the| |Endnotes,| |i.e.| |delete| |the| |start/end| regmark
 |ImageObjects| |and| |all| |the| |text| |between| |them.|)
(LET ((TEXTLOOKS (|fetch| (ENDNOTEFONTS TEXT.FONT) |of| (GET.ENDNOTE.FONTS TSTREAM)))
(NUMBLOOKS (|fetch| (ENDNOTEFONTS NUMBER.FONT) |of| (GET.ENDNOTE.FONTS TSTREAM))))
(|for| ENDNOTEOBJ |in| LIST.OF.ENDNOTES
|do| (LET ((DISPLAYSTRING (NUMBER.DISPLAYSTRING ENDNOTEOBJ))
(TEXT (|fetch| (NUMBEROBJ TEXT.AFTER#) |of| (|fetch| OBJECTDATUM |of|
ENDNOTEOBJ
))))
(TEDIT.INSERT TSTREAM DISPLAYSTRING (ADD1 (TEDIT.NCHARS TSTREAM))
NUMBLOOKS T)
(TEDIT.INSERT TSTREAM (CONCAT " " TEXT (CHARACTER (CHARCODE EOL)))
(ADD1 (TEDIT.NCHARS TSTREAM))
TEXTLOOKS T))))))
(let* ((textobj (textobj stream))
(notemarker.list (tsp.list.of.objects textobj 'notesregionp))
(notes.start (cadar notemarker.list))
(notes.end (cadadr notemarker.list)))
(and notes.start notes.end (progn (tedit.promptprint stream "Deleting Endnotes..." t)
(tedit.delete stream notes.start (idifference
(add1 notes.end)
notes.start))
(tedit.promptprint stream "done")
t)))))
(DELETE.ENDNOTES
(LAMBDA (TSTREAM) (* \; "Edited 25-Feb-2025 14:24 by rmk")
(* \; "Edited 21-Feb-2025 09:56 by rmk")
(* |fsg| "25-Sep-87 10:12")
(* |;;;| "Delete the Endnotes, i.e. delete the start/end REGMARK ImageObjects and all the text between them.")
(LET* ((NOTEMARKER.LIST (TSP.LIST.OF.OBJECTS TSTREAM (FUNCTION NOTESREGIONP)
NIL
'CH#))
(NOTES.START (CAR NOTEMARKER.LIST))
(NOTES.END (CADR NOTEMARKER.LIST)))
(CL:WHEN (AND NOTES.START NOTES.END)
(TEDIT.PROMPTPRINT TSTREAM "Deleting Endnotes..." T)
(TEDIT.DELETE TSTREAM NOTES.START (IDIFFERENCE (ADD1 NOTES.END)
NOTES.START))
(TEDIT.PROMPTPRINT TSTREAM "done")
T))))
(notesregionp
(lambda (imobj) (* |ss:| "27-Jun-87 15:29")
@ -141,146 +147,157 @@
(eq (|fetch| region.use |of| (|fetch| objectdatum |of| imobj))
'endnotes))))
(set.endnote.style
(lambda (stream window) (* |fsg| "18-Aug-87 14:13")
(* * |Set| |the| |font| |of| |the| endnote |number,| |title,| |or| |text.|)
(SET.ENDNOTE.STYLE
(LAMBDA (TSTREAM) (* \; "Edited 21-Feb-2025 00:49 by rmk")
(* |fsg| "18-Aug-87 14:13")
(let ((note.fonts (get.endnote.fonts window))
(note.type (menu (|create| menu
title _ "Endnote Fonts"
centerflg _ t
items _ '(|Number| |Title| |Text|))))
old.font new.font)
(and note.type (progn (setq old.font (selectq note.type
(|Number| (|fetch| (endnotefonts number.font)
|of| note.fonts))
(|Title| (|fetch| (endnotefonts title.font)
|of| note.fonts))
(|Text| (|fetch| (endnotefonts text.font)
|of| note.fonts))
nil))
(tedit.promptprint stream (concat "Change Endnote " note.type " font "
(abbreviate.font old.font)
" to...")
t)
(setq new.font (fontcreate (get.tsp.font window old.font)))
(cond
((neq old.font new.font)
(selectq note.type
(|Number| (|replace| (endnotefonts number.font) |of|
note.fonts
|with| new.font))
(|Title| (|replace| (endnotefonts title.font) |of| note.fonts
|with| new.font))
(|Text| (|replace| (endnotefonts text.font) |of| note.fonts
|with| new.font))
nil)
(and (eq note.type '|Number|)
(map.endnote.looks stream new.font)))
(t nil))
(tedit.promptprint stream "" t))))))
(* |;;;| "Set the font of the ENDNOTE number, title, or text.")
(map.endnote.looks
(lambda (stream numberfont) (* |ss:| "27-Jun-87 15:26")
(* * |Here| |to| |update| |the| endnote |looks.|
 |Only| |the| endnote |superscript| |numbers| |are| |updated.|)
(LET ((NOTE.FONTS (GET.ENDNOTE.FONTS TSTREAM))
(NOTE.TYPE (MENU (|create| MENU
TITLE _ "Endnote Fonts"
CENTERFLG _ T
ITEMS _ '(|Number| |Title| |Text|))))
OLD.FONT NEW.FONT)
(AND NOTE.TYPE (PROGN (SETQ OLD.FONT (SELECTQ NOTE.TYPE
(|Number| (|fetch| (ENDNOTEFONTS NUMBER.FONT)
|of| NOTE.FONTS))
(|Title| (|fetch| (ENDNOTEFONTS TITLE.FONT)
|of| NOTE.FONTS))
(|Text| (|fetch| (ENDNOTEFONTS TEXT.FONT)
|of| NOTE.FONTS))
NIL))
(TEDIT.PROMPTPRINT TSTREAM (CONCAT "Change Endnote " NOTE.TYPE
" font " (ABBREVIATE.FONT OLD.FONT)
" to...")
T)
(SETQ NEW.FONT (FONTCREATE (GET.TSP.FONT OLD.FONT)))
(COND
((NEQ OLD.FONT NEW.FONT)
(SELECTQ NOTE.TYPE
(|Number| (|replace| (ENDNOTEFONTS NUMBER.FONT) |of|
NOTE.FONTS
|with| NEW.FONT))
(|Title| (|replace| (ENDNOTEFONTS TITLE.FONT) |of| NOTE.FONTS
|with| NEW.FONT))
(|Text| (|replace| (ENDNOTEFONTS TEXT.FONT) |of| NOTE.FONTS
|with| NEW.FONT))
NIL)
(AND (EQ NOTE.TYPE '|Number|)
(MAP.ENDNOTE.LOOKS TSTREAM NEW.FONT)))
(T NIL))
(TEDIT.PROMPTPRINT TSTREAM "" T))))))
(let ((list.of.notes (tsp.list.of.objects (textobj stream)
'endnotep)))
(and list.of.notes (progn (tedit.promptprint stream "Updating ENDNOTE Number looks..." t)
(|for| note/ch# |in| list.of.notes
|do| (tedit.looks stream numberfont (cadr note/ch#)
1))
(tedit.promptprint stream "done"))))))
(MAP.ENDNOTE.LOOKS
(LAMBDA (TSTREAM NUMBERFONT) (* \; "Edited 25-Feb-2025 14:24 by rmk")
(* \; "Edited 21-Feb-2025 09:56 by rmk")
(* |ss:| "27-Jun-87 15:26")
(get.endnote.fonts
(lambda (window) (* |ss:| "27-Jun-87 15:24")
(* * |Setup| |the| |default| endnote |fonts| |for| |number,| |title,| |and|
 |text.|)
(* |;;;| "Here to update the ENDNOTE looks. Only the ENDNOTE superscript numbers are updated.")
(or (windowprop window 'endnote.fonts)
(progn (windowprop window 'endnote.fonts
(|create| endnotefonts
number.font _ |GP.DefaultFont|
title.font _ |GP.DefaultFont|
text.font _ |GP.DefaultFont|))
(windowprop window 'endnote.fonts)))))
(LET ((LIST.OF.NOTES (TSP.LIST.OF.OBJECTS TSTREAM (FUNCTION ENDNOTEP)
NIL
'CH#)))
(CL:WHEN LIST.OF.NOTES
(TEDIT.PROMPTPRINT TSTREAM "Updating ENDNOTE Number looks..." T)
(|for| NOTE/CH# |in| LIST.OF.NOTES |do| (TEDIT.LOOKS TSTREAM NUMBERFONT NOTE/CH# 1))
(TEDIT.PROMPTPRINT TSTREAM "done")))))
(GET.ENDNOTE.FONTS
(LAMBDA (TSTREAM) (* \; "Edited 21-Feb-2025 10:17 by rmk")
(* |ss:| "27-Jun-87 15:24")
(* |;;;| "Setup the default ENDNOTE fonts for number, title, and text.")
(OR (TMAXPROP TSTREAM 'ENDNOTE.FONTS)
(PROGN (TMAXPROP TSTREAM 'ENDNOTE.FONTS
(|create| ENDNOTEFONTS
NUMBER.FONT _ |GP.DefaultFont|
TITLE.FONT _ |GP.DefaultFont|
TEXT.FONT _ |GP.DefaultFont|))
(TMAXPROP TSTREAM 'ENDNOTE.FONTS)))))
)
(DEFINEQ
(endnotep
(lambda (imobj) (* |ss:| "27-Jun-87 15:23")
(* * |Like| numberobjp |but| |also| |checks| |for| note |ImageObject.|)
(ENDNOTEP
(LAMBDA (IMOBJ) (* \; "Edited 25-Feb-2025 14:26 by rmk")
(* |ss:| "27-Jun-87 15:23")
(and (numberobjp imobj)
(eq (|fetch| (numberobj use) |of| (|fetch| objectdatum |of| imobj))
'note))))
(* |;;;| "Like NUMBEROBJP but also checks for NOTE ImageObject.")
(note.putfn
(lambda (numberobj stream window) (* |fsg| "11-Aug-87 10:04")
(* * |Used| |to| |put| \a |numberobj| |that| |is| |functioning| |as| |an|
 |endnote.|)
(CL:WHEN (NUMBEROBJP IMOBJ)
(EQ 'NOTE (|fetch| (NUMBEROBJ USE) |of| (|fetch| OBJECTDATUM |of| IMOBJ))))))
(|with| numberobj (|fetch| objectdatum |of| numberobj)
(setq font (|for| notefont |in| (get.endnote.fonts window) |collect| (list.font.props
notefont))))
(prin4 (list '|Endnote| nil (imageobjprop numberobj 'tag)
(|fetch| objectdatum |of| numberobj))
stream)))
(NOTE.PUTFN
(LAMBDA (NUMBEROBJ STREAM TSTREAM) (* \; "Edited 22-Feb-2025 17:44 by rmk")
(* |fsg| "11-Aug-87 10:04")
(note.getfn
(lambda (newobj note.datum window) (* |fsg| "16-Jul-87 10:49")
(* * |Used| |to| |get| \a |numberobj| |that| |is| |functioning| |as| |an|
 |endnote.|)
(* |;;;| "Used to put a numberobj that is functioning as an endnote.")
(windowprop window 'endnote.fonts (|for| notefont |in| (|fetch| (numberobj font) |of| note.datum)
|collect| (fontcreate notefont)))
(|replace| (numberobj font) |of| note.datum |with| nil)
(|replace| objectdatum |of| newobj |with| note.datum)
newobj))
(|with| NUMBEROBJ (|fetch| OBJECTDATUM |of| NUMBEROBJ)
(SETQ FONT (|for| NOTEFONT |in| (GET.ENDNOTE.FONTS TSTREAM) |collect| (LIST.FONT.PROPS
NOTEFONT))))
(PRIN4 (LIST '|Endnote| NIL (IMAGEOBJPROP NUMBEROBJ 'TAG)
(|fetch| OBJECTDATUM |of| NUMBEROBJ))
STREAM)))
(note.buttoneventinfn
(lambda (obj stream window) (* |fsg| " 5-Aug-87 09:31")
(* * |Allow| |user| |to| |edit| |Endnote| |text,| |specify| \a tag\, |delete|
 |the| tag\, |or| |change| |the| tag.)
(NOTE.GETFN
(LAMBDA (NEWOBJ NOTE.DATUM TSTREAM) (* \; "Edited 21-Feb-2025 10:17 by rmk")
(* |fsg| "16-Jul-87 10:49")
(let* ((tag (imageobjprop obj 'tag))
(nmenu (|create| menu
title _ '|Endnote Menu|
items _ (cond
(tag endnote.tag.items)
(t endnote.notag.items))
centerflg _ t
whenselectedfn _ 'note.whenselectedfn)))
(putmenuprop nmenu 'note.obj obj)
(putmenuprop nmenu 'note.window window)
(menu nmenu))))
(* |;;;| "Used to get a numberobj that is functioning as an endnote.")
(note.whenselectedfn
(lambda (item menu mb) (* |fsg| "10-Aug-87 13:48")
(let* ((window (getmenuprop menu 'note.window))
(obj (getmenuprop menu 'note.obj))
(tstream (textstream window)))
(selectq (cadr item)
(TMAXPROP TSTREAM 'ENDNOTE.FONTS (|for| NOTEFONT |in| (|fetch| (NUMBEROBJ FONT) |of| NOTE.DATUM)
|collect| (FONTCREATE NOTEFONT)))
(|replace| (NUMBEROBJ FONT) |of| NOTE.DATUM |with| NIL)
(|replace| OBJECTDATUM |of| NEWOBJ |with| NOTE.DATUM)
NEWOBJ))
(NOTE.BUTTONEVENTINFN
(LAMBDA (OBJ STREAM WINDOW) (* \; "Edited 21-Feb-2025 16:08 by rmk")
(* |fsg| " 5-Aug-87 09:31")
(* |;;;| "Allow user to edit Endnote text, specify a TAG, delete the TAG, or change the TAG.")
(LET* ((TAG (IMAGEOBJPROP OBJ 'TAG))
(NMENU (|create| MENU
TITLE _ '|Endnote Menu|
ITEMS _ (CL:IF TAG
ENDNOTE.TAG.ITEMS
ENDNOTE.NOTAG.ITEMS)
CENTERFLG _ T
WHENSELECTEDFN _ (FUNCTION NOTE.WHENSELECTEDFN))))
(PUTMENUPROP NMENU 'NOTE.OBJ OBJ)
(PUTMENUPROP NMENU 'NOTE.WINDOW WINDOW)
(MENU NMENU))))
(NOTE.WHENSELECTEDFN
(LAMBDA (ITEM MENU MB) (* \; "Edited 28-Feb-2025 23:37 by rmk")
(* \; "Edited 25-Feb-2025 10:49 by rmk")
(* \; "Edited 21-Feb-2025 16:10 by rmk")
(* |fsg| "10-Aug-87 13:48")
(LET* ((WINDOW (GETMENUPROP MENU 'NOTE.WINDOW))
(OBJ (GETMENUPROP MENU 'NOTE.OBJ))
(TSTREAM (TEXTSTREAM WINDOW)))
(SELECTQ (CADR ITEM)
((|Change Tag| |Define Tag|)
(let ((old.tag (imageobjprop obj 'tag))
(new.tag (tsp.get.incode tstream)))
(and new.tag (neq new.tag old.tag)
(progn (number.delete.tag window obj)
(tsp.putcode new.tag obj window)
(imageobjprop obj 'tag new.tag)))))
(|Delete Tag| (number.delete.tag window obj))
(|Show Tag| (tedit.promptprint tstream (concat "EndNote Tag=\"" (imageobjprop
obj
'tag)
(LET ((OLD.TAG (IMAGEOBJPROP OBJ 'TAG))
(NEW.TAG (TSP.GET.INCODE TSTREAM)))
(CL:WHEN (AND NEW.TAG (NEQ NEW.TAG OLD.TAG))
(NUMBER.DELETE.TAG WINDOW OBJ)
(TSP.PUTCODE NEW.TAG OBJ WINDOW)
(IMAGEOBJPROP OBJ 'TAG NEW.TAG)
'CHANGED)))
(|Delete Tag| (NUMBER.DELETE.TAG WINDOW OBJ))
(|Show Tag| (TEDIT.PROMPTPRINT TSTREAM (CONCAT "EndNote Tag=\"" (IMAGEOBJPROP
OBJ
'TAG)
"\"")
t))
(|Edit Text| (aux.tedit obj (concat "Endnote #" (|fetch| numstring
|of| (|fetch| objectdatum
|of| obj)))
tstream))
(error "Undefined EndNote menu item" item))
nil)))
T))
(|Edit Text| (AUX.TEDIT OBJ (CONCAT "Endnote #" (NUMBER.DISPLAYSTRING OBJ))
TSTREAM))
(ERROR "Undefined EndNote menu item" ITEM))
NIL)))
)
(RPAQQ ENDNOTE.NOTAG.ITEMS ((|Edit Text| |Edit Text| "Edit the text associated with this EndNote.")
@ -300,48 +317,59 @@
(DEFINEQ
(aux.tedit
(lambda (imobj title stream) (* |ss:| "27-Jun-87 15:22")
(* * |Open| \a |TEdit| |window| |where| |the| |user| |can| |view/edit| |the|
 |text| |of| |the| |selected| |Endnote.|)
(AUX.TEDIT
(LAMBDA (IMOBJ TITLE TSTREAM) (* \; "Edited 23-Feb-2025 00:27 by rmk")
(* |ss:| "27-Jun-87 15:22")
(let* ((mainwindow (\\tedit.mainw stream))
(auxwindow (createw (windowprop mainwindow 'auxw.region)
title)))
(windowprop auxwindow 'main.window mainwindow)
(windowprop auxwindow 'note.imageobj imobj)
(tedit nil auxwindow nil '(afterquitfn aux.tedit.afterquitfn titlemenufn
aux.tedit.titlemenufn))
(tedit.insert (textstream auxwindow)
(mkstring (|fetch| (numberobj text.after#) |of| (|fetch| objectdatum |of| imobj)))
nil
(|fetch| (endnotefonts text.font) |of| (get.endnote.fonts mainwindow))))))
(* |;;;| "Open a TEdit window where the user can view/edit the text of the selected Endnote.")
(aux.tedit.afterquitfn
(lambda (auxwindow) (* |ss:| "27-Jun-87 15:22")
(* * |Here| after |user| |finished| |with| |Endnote| |TEdit| |process.|)
(LET (AUXTSTREAM)
(SETQ AUXTSTREAM (TEXTSTREAM (TEDIT NIL (CREATEW (TMAXPROP TSTREAM 'AUXW.REGION)
TITLE)
NIL
'(AFTERQUITFN AUX.TEDIT.AFTERQUITFN TITLEMENUFN
AUX.TEDIT.TITLEMENUFN))))
(TMAXPROP AUXTSTREAM 'MAINTSTREAM TSTREAM)
(TMAXPROP AUXTSTREAM 'NOTE.IMAGEOBJ IMOBJ)
(TEDIT.INSERT AUXTSTREAM (MKSTRING (|fetch| (NUMBEROBJ TEXT.AFTER#)
|of| (|fetch| OBJECTDATUM |of| IMOBJ)))
NIL
(|fetch| (ENDNOTEFONTS TEXT.FONT) |of| (GET.ENDNOTE.FONTS TSTREAM))))))
(let ((mainwindow (windowprop auxwindow 'main.window)))
(windowprop mainwindow 'auxw.region (windowprop auxwindow 'region))
(give.tty.process mainwindow)
(tedit.normalizecaret (textobj mainwindow)))))
(AUX.TEDIT.AFTERQUITFN
(LAMBDA (AUXWINDOW) (* \; "Edited 22-Feb-2025 22:40 by rmk")
(* \; "Edited 21-Feb-2025 09:57 by rmk")
(* |ss:| "27-Jun-87 15:22")
(aux.tedit.titlemenufn
(lambda (auxwindow) (* |ss:| "27-Jun-87 15:23")
(* * |Here| |when| |left| |or| |middle| |button| |hit| |in| |title| |bar.|)
(* |;;;| "Here AFTER user finished with Endnote TEdit process.")
(let ((item (menu (|create| menu
centerflg _ t
items _ '(|Save Changes| |Abort Changes|)))))
(and item (progn (selectq item
(|Save Changes|
(|replace| (numberobj text.after#)
|of| (|fetch| objectdatum |of| (windowprop auxwindow
'note.imageobj))
|with| (coercetextobj (textstream auxwindow)
'stringp)))
nil)
(tedit.quit (textstream auxwindow)))))))
(LET ((MAINWINDOW (WINDOWPROP AUXWINDOW 'MAIN.WINDOW)))
(CL:WHEN (AND MAINWINDOW (TEXTSTREAM MAINWINDOW T))
(WINDOWPROP MAINWINDOW 'AUXW.REGION (WINDOWPROP AUXWINDOW 'REGION))
(GIVE.TTY.PROCESS MAINWINDOW)
(TEDIT.NORMALIZECARET (TEXTSTREAM MAINWINDOW))))))
(AUX.TEDIT.TITLEMENUFN
(LAMBDA (AUXWINDOW) (* \; "Edited 23-Feb-2025 00:26 by rmk")
(* |ss:| "27-Jun-87 15:23")
(* |;;;| "Here when left or middle button hit in title bar of the aux (e.g. endnote) window.")
(LET ((AUXTSTREAM (TEXTSTREAM AUXWINDOW)))
(CL:WHEN (GETTEXTPROP AUXTSTREAM 'DIRTY)
(SELECTQ (MENU (|create| MENU
CENTERFLG _ T
ITEMS _ '(|Save Changes| |Abort Changes|)))
(|Save Changes| (* \;
 "Don't need to update the main looks if the object (e.g. endnote) doesn't show its string")
(|replace| (NUMBEROBJ TEXT.AFTER#) |of| (|fetch| OBJECTDATUM
|of| (TMAXPROP AUXTSTREAM
'NOTE.IMAGEOBJ))
|with| (COERCETEXTOBJ AUXTSTREAM 'STRINGP))
(PUTTEXTPROP (TMAXPROP AUXTSTREAM 'MAINTSTREAM)
'DIRTY T))
NIL)
(TEDIT.QUIT AUXTSTREAM)))))
)
(* * |Delimit| |text| |between| |two| |markers| |known| |as| REGION MARKERS.)
@ -395,16 +423,17 @@
(APPLY (FUNCTION REGMARKOBJ)
(OR COPY.OBJECT (CDR (READ STREAM))))))
(regmark.copyfn
(lambda (image.obj source.stream target.stream) (* |fsg| "23-Jul-87 14:09")
(* * |Here| |to| copy \a |RegMark| |Image| |Object.|)
(REGMARK.COPYFN
(LAMBDA (IMAGE.OBJ SOURCE.STREAM TARGET.STREAM) (* \; "Edited 21-Feb-2025 09:58 by rmk")
(* |fsg| "23-Jul-87 14:09")
(selectq (imagestreamtype target.stream)
(text (let ((textobj (textobj target.stream)))
(apply* (imageobjprop image.obj 'getfn)
target.stream
(|fetch| objectdatum |of| image.obj))))
(error "Unknown TARGET stream type" (imagestreamtype target.stream)))))
(* |;;;| "Here to COPY a RegMark Image Object.")
(SELECTQ (IMAGESTREAMTYPE TARGET.STREAM)
(TEXT (APPLY* (IMAGEOBJPROP IMAGE.OBJ 'GETFN)
TARGET.STREAM
(|fetch| OBJECTDATUM |of| IMAGE.OBJ)))
(ERROR "Unknown TARGET stream type" (IMAGESTREAMTYPE TARGET.STREAM)))))
(REGMARK.BUTTONEVENTINFN
(LAMBDA (MARKOBJ STREAM) (* \; "Edited 26-Jun-2022 18:13 by rmk")
@ -448,13 +477,13 @@
)
)
(DECLARE\: DONTCOPY
(FILEMAP (NIL (2401 12028 (ADD.ENDNOTE 2411 . 3079) (INSERT.ENDNOTES 3081 . 5284) (
INSERT.ENDNOTES.TEXT 5286 . 6715) (DELETE.ENDNOTES 6717 . 7708) (NOTESREGIONP 7710 . 7972) (
SET.ENDNOTE.STYLE 7974 . 10647) (MAP.ENDNOTE.LOOKS 10649 . 11416) (GET.ENDNOTE.FONTS 11418 . 12026)) (
12029 15944 (ENDNOTEP 12039 . 12380) (NOTE.PUTFN 12382 . 13034) (NOTE.GETFN 13036 . 13616) (
NOTE.BUTTONEVENTINFN 13618 . 14398) (NOTE.WHENSELECTEDFN 14400 . 15942)) (16702 19106 (AUX.TEDIT 16712
. 17674) (AUX.TEDIT.AFTERQUITFN 17676 . 18119) (AUX.TEDIT.TITLEMENUFN 18121 . 19104)) (19191 23238 (
REGMARKOBJ 19201 . 19608) (REGMARKOBJP 19610 . 19804) (REGMARK.DISPLAYFN 19806 . 20052) (
REGMARK.IMAGEBOXFN 20054 . 20405) (REGMARK.PUTFN 20407 . 20878) (REGMARK.GETFN 20880 . 21383) (
REGMARK.COPYFN 21385 . 21923) (REGMARK.BUTTONEVENTINFN 21925 . 23236)))))
(FILEMAP (NIL (2497 12236 (ADD.ENDNOTE 2507 . 3240) (INSERT.ENDNOTES 3242 . 5284) (
INSERT.ENDNOTES.TEXT 5286 . 6638) (DELETE.ENDNOTES 6640 . 7675) (NOTESREGIONP 7677 . 7939) (
SET.ENDNOTE.STYLE 7941 . 10698) (MAP.ENDNOTE.LOOKS 10700 . 11558) (GET.ENDNOTE.FONTS 11560 . 12234)) (
12237 16593 (ENDNOTEP 12247 . 12668) (NOTE.PUTFN 12670 . 13390) (NOTE.GETFN 13392 . 14036) (
NOTE.BUTTONEVENTINFN 14038 . 14885) (NOTE.WHENSELECTEDFN 14887 . 16591)) (17351 20512 (AUX.TEDIT 17361
. 18479) (AUX.TEDIT.AFTERQUITFN 18481 . 19198) (AUX.TEDIT.TITLEMENUFN 19200 . 20510)) (20597 24664 (
REGMARKOBJ 20607 . 21014) (REGMARKOBJP 21016 . 21210) (REGMARK.DISPLAYFN 21212 . 21458) (
REGMARK.IMAGEBOXFN 21460 . 21811) (REGMARK.PUTFN 21813 . 22284) (REGMARK.GETFN 22286 . 22789) (
REGMARK.COPYFN 22791 . 23349) (REGMARK.BUTTONEVENTINFN 23351 . 24662)))))
STOP

Binary file not shown.

View File

@ -1,12 +1,12 @@
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "XCL" BASE 10)
(FILECREATED "25-Jun-2024 12:00:23" |{WMEDLEY}<lispusers>tmax>TMAX-INDEX.;6| 46698
(FILECREATED "28-Feb-2025 23:36:19" |{WMEDLEY}<lispusers>tmax>TMAX-INDEX.;22| 46719
:EDIT-BY |rmk|
:CHANGES-TO (FNS INDEX.DISPLAYFN)
:CHANGES-TO (FNS INDEX.MANUAL.DELIMITER RESET.INDEX.PAGENUMBERS)
:PREVIOUS-DATE "24-Jun-2024 23:30:47" |{WMEDLEY}<lispusers>tmax>TMAX-INDEX.;5|)
:PREVIOUS-DATE "23-Feb-2025 11:55:07" |{WMEDLEY}<lispusers>tmax>TMAX-INDEX.;20|)
(PRETTYCOMPRINT TMAX-INDEXCOMS)
@ -122,14 +122,14 @@
'indexobj))))
(INDEX.DISPLAYFN
(LAMBDA (OBJ IMAGESTREAM) (* \; "Edited 25-Jun-2024 11:59 by rmk")
(LAMBDA (OBJ IMAGESTREAM IMAGESTREAMTYPE TSTREAM) (* \; "Edited 22-Feb-2025 17:40 by rmk")
(* \; "Edited 25-Jun-2024 11:59 by rmk")
(* \; "Edited 16-Mar-2024 07:46 by rmk")
(* \; "Edited 14-Feb-97 09:30 by rmk:")
(* |fsg| "17-Sep-87 11:14")
(* |;;| "Display an Index imageobject. If the stream-type is display, then just type Index or Extended Index followed by their args. Otherwise the stream-type is hardcopy. In this case, type nothing and replace the CAR of the hash array entry with a list of page numbers in which this index appears.")
(DECLARE (USEDFREE TSTREAM))
(SELECTQ (IMAGESTREAMTYPE IMAGESTREAM)
(DISPLAY (CL:UNLESS (EQ 'INVISIBLE INDEXDISPLAYAPPEARANCE)
(DSPFONT |GP.DefaultFont| IMAGESTREAM)
@ -140,7 +140,7 @@
(PRIN3 (INDEX.STRING OBJ)
IMAGESTREAM)))))
(LET ((PGS/IMOBJS (GETHASH.INDEX OBJ IMAGESTREAM))
(CURRENT.PAGE (INDEX.PAGE.NUMBER (\\TEDIT.PRIMARYPANE TSTREAM))))
(CURRENT.PAGE (INDEX.PAGE.NUMBER)))
(COND
((LISTP (CAR PGS/IMOBJS))
(OR (MEMB CURRENT.PAGE (CAR PGS/IMOBJS))
@ -199,17 +199,18 @@
(APPLY (FUNCTION INDEXOBJ)
(OR COPY.OBJECT (CDR (READ STREAM))))))
(index.copyfn
(lambda (image.obj source.stream target.stream) (* |fsg| "23-Jul-87 12:01")
(* * |Here| |to| copy |an| |Index| |or| |Extended| |Index| |Image| |Object.|)
(INDEX.COPYFN
(LAMBDA (IMAGE.OBJ SOURCE.STREAM TARGET.STREAM) (* \; "Edited 21-Feb-2025 09:58 by rmk")
(* |fsg| "23-Jul-87 12:01")
(selectq (imagestreamtype target.stream)
(text (let ((textobj (textobj target.stream)))
(apply* (imageobjprop image.obj 'getfn)
target.stream
(list (imageobjprop image.obj 'index.key)
(|fetch| objectdatum |of| image.obj)))))
(error "Unknown TARGET stream type" (imagestreamtype target.stream)))))
(* |;;;| "Here to COPY an Index or Extended Index Image Object.")
(SELECTQ (IMAGESTREAMTYPE TARGET.STREAM)
(TEXT (APPLY* (IMAGEOBJPROP IMAGE.OBJ 'GETFN)
TARGET.STREAM
(LIST (IMAGEOBJPROP IMAGE.OBJ 'INDEX.KEY)
(|fetch| OBJECTDATUM |of| IMAGE.OBJ))))
(ERROR "Unknown TARGET stream type" (IMAGESTREAMTYPE TARGET.STREAM)))))
(INDEX.BUTTONEVENTINFN
(LAMBDA (OBJ STREAM SEL RELX RELY WINDOW HOSTSTREAM BUTTON)
@ -254,50 +255,50 @@
(TEDIT.PROMPTPRINT STREAM "" T))))
(INSERT.INDEXENTRY
(LAMBDA (STREAM WINDOW) (* \; "Edited 14-Feb-97 09:15 by rmk:")
(* |fsg| "19-Mar-87 11:56")
(LAMBDA (TSTREAM) (* \; "Edited 21-Feb-2025 09:12 by rmk")
(* \; "Edited 14-Feb-97 09:15 by rmk:")
(* |fsg| "19-Mar-87 11:56")
(* |;;| "Process the 'Extended Index' function in the ImageObjects menu. NOTE...Extended Index use to be called IndexEntry after the Scribe cmd of the same name.")
(* |;;| "Process the 'Extended Index' function in the ImageObjects menu. NOTE...Extended Index use to be called IndexEntry after the Scribe cmd of the same name.")
(LET ((NEWINDEX.KEY (MKATOM (CONVERT.TABS.TO.SPACES (TEDIT.GETINPUT STREAM "Extended Index Key:")
))))
(LET ((NEWINDEX.KEY (MKATOM (CONVERT.TABS.TO.SPACES (TEDIT.GETINPUT TSTREAM "Extended Index Key:"
)))))
(AND NEWINDEX.KEY (LET ((NEW.INDEX.OBJ
(INDEXOBJ NEWINDEX.KEY
(CREATE INDEX.ENTRY.RECORD
INDEX.ENTRY _
(OR (MKATOM (CONVERT.TABS.TO.SPACES
(TEDIT.GETINPUT STREAM
(TEDIT.GETINPUT TSTREAM
"Extended Index Entry:"
(MKSTRING NEWINDEX.KEY))))
NEWINDEX.KEY)
INDEX.ENTRYFONT _
(LET (NEWINDEX.FONT)
(TEDIT.PROMPTPRINT STREAM
(TEDIT.PROMPTPRINT TSTREAM
"Extended Index Entry font..." T)
(UNTIL (SETQ NEWINDEX.FONT (GET.TSP.FONT
WINDOW
(UNTIL (SETQ NEWINDEX.FONT (GET.TSP.FONT
|GP.DefaultFont|
))
DO (TEDIT.PROMPTPRINT STREAM
))
DO (TEDIT.PROMPTPRINT TSTREAM
"Invalid font specification...try again."
T))
T))
NEWINDEX.FONT)
INDEX.NUMBER _ (PROGN (TEDIT.PROMPTPRINT STREAM
INDEX.NUMBER _ (PROGN (TEDIT.PROMPTPRINT TSTREAM
"Extended Index Number option..."
T)
(GET.INDEXENTRY.NUMBER)))))
)
(TEDIT.INSERT.OBJECT NEW.INDEX.OBJ STREAM)))
(TEDIT.PROMPTPRINT STREAM "" T))))
(GET.INDEXENTRY.NUMBER))))))
(TEDIT.INSERT.OBJECT NEW.INDEX.OBJ TSTREAM)))
(TEDIT.PROMPTPRINT TSTREAM "" T))))
(INSERT.KNOWN.INDEX
(LAMBDA (STREAM WINDOW) (* \; "Edited 14-Feb-97 17:24 by rmk:")
(* |fsg| "16-Sep-87 11:31")
(LAMBDA (TSTREAM) (* \; "Edited 21-Feb-2025 09:16 by rmk")
(* \; "Edited 14-Feb-97 17:24 by rmk:")
(* |fsg| "16-Sep-87 11:31")
(* |;;| "Process the 'Known Indices' function in the ImageObjects menu. A menu of all the known Indices and Extended Indices pops up and the user may button one of these to insert the corrsponding Index or Extended Index.")
(* |;;| "Process the 'Known Indices' function in the ImageObjects menu. A menu of all the known Indices and Extended Indices pops up and the user may button one of these to insert the corrsponding Index or Extended Index.")
(HELP "NEED TO DO TEDIT.MAPPIECES INSTEAD OF INDEX.LIST.REFS")
(LET* ((PREVINDICES (INDEX.LIST.REFS STREAM))
(LET* ((PREVINDICES (INDEX.LIST.REFS TSTREAM))
(NEWINDEX.KEY (COND
(PREVINDICES (LET ((MENU.SELECTION
(MENU (|create| MENU
@ -311,12 +312,13 @@
SUBITEM.SELECTFN)))))
(AND MENU.SELECTION (OR (LISTP MENU.SELECTION)
(LIST MENU.SELECTION)))))
(T (TEDIT.PROMPTPRINT STREAM
(T (TEDIT.PROMPTPRINT TSTREAM
"There are no Indices/Extended Indices in this document." T)
NIL))))
(AND NEWINDEX.KEY (LET ((NEWINDEX.OBJ (APPLY 'INDEXOBJ NEWINDEX.KEY)))
(TEDIT.INSERT.OBJECT NEWINDEX.OBJ STREAM)
(TEDIT.PROMPTPRINT STREAM "" T))))))
(CL:WHEN NEWINDEX.KEY
(LET ((NEWINDEX.OBJ (APPLY 'INDEXOBJ NEWINDEX.KEY)))
(TEDIT.INSERT.OBJECT NEWINDEX.OBJ TSTREAM)
(TEDIT.PROMPTPRINT TSTREAM "" T))))))
(subitem.selectfn
(lambda (item menu key) (* |fsg| "16-Sep-87 13:28")
@ -336,18 +338,19 @@
|else| (return (defaultwhenselectedfn item menu key))))))
(ADD.NEW.INDEX
(LAMBDA (IMAGESTREAM INDEXKEY OBJ) (* \; "Edited 14-Feb-97 09:08 by rmk:")
(* |ss:| "27-Jun-87 15:44")
(LAMBDA (IMAGESTREAM INDEXKEY OBJ) (* \; "Edited 21-Feb-2025 10:17 by rmk")
(* \; "Edited 14-Feb-97 09:08 by rmk:")
(* |ss:| "27-Jun-87 15:44")
(* |;;| "Add an Index or Extended Index imageobject to our index array. If at least one already exists for this index key, then just append this imageobject to the list. Otherwise create a new array entry for this imageobject. The list contains three elements; a string, a list of Index imageobjects, and a list of Extended Index imageobjects.")
(* |;;| "Add an Index or Extended Index imageobject to our index array. If at least one already exists for this index key, then just append this imageobject to the list. Otherwise create a new array entry for this imageobject. The list contains three elements; a string, a list of Index imageobjects, and a list of Extended Index imageobjects.")
(LET ((CODE.ARRAY (STREAMPROP IMAGESTREAM 'TSP.INDEX.ARRAY))
(LET ((CODE.ARRAY (TMAXPROP IMAGESTREAM 'TSP.INDEX.ARRAY))
HASH.VALUE INDEX.OBJS ENTRY.OBJS)
(CL:UNLESS (HASHARRAYP CODE.ARRAY)
(SETQ CODE.ARRAY (HASHARRAY 100))
(STREAMPROP IMAGESTREAM 'TSP.CODE.ARRAY CODE.ARRAY)
(CL:UNLESS (HASHARRAYP (STREAMPROP IMAGESTREAM 'TSP.INDEX.ARRAY))
(STREAMPROP IMAGESTREAM 'TSP.INDEX.ARRAY (HASHARRAY 100))))
(TMAXPROP IMAGESTREAM 'TSP.CODE.ARRAY CODE.ARRAY)
(CL:UNLESS (HASHARRAYP (TMAXPROP IMAGESTREAM 'TSP.INDEX.ARRAY))
(TMAXPROP IMAGESTREAM 'TSP.INDEX.ARRAY (HASHARRAY 100))))
(SETQ HASH.VALUE (GETHASH INDEXKEY CODE.ARRAY))
(SETQ INDEX.OBJS (CADR HASH.VALUE))
(SETQ ENTRY.OBJS (CADDR HASH.VALUE))
@ -441,59 +444,59 @@
(DEFINEQ
(GETHASH.INDEX
(LAMBDA (OBJ IMAGESTREAM) (* \; "Edited 14-Feb-97 09:28 by rmk:")
(* |fsg| "13-Jul-87 11:09")
(LAMBDA (OBJ IMAGESTREAM) (* \; "Edited 21-Feb-2025 10:17 by rmk")
(* \; "Edited 14-Feb-97 09:28 by rmk:")
(* |fsg| "13-Jul-87 11:09")
(* |;;| "Get the hash array entry for this Index or Extended Index.")
(* |;;| "Get the hash array entry for this Index or Extended Index.")
(LET ((HARRAY (HASHARRAYP (STREAMPROP IMAGESTREAM 'TSP.INDEX.ARRAY))))
(LET ((HARRAY (HASHARRAYP (TMAXPROP IMAGESTREAM 'TSP.INDEX.ARRAY))))
(CL:UNLESS HARRAY
(STREAMPROP IMAGESTREAM 'TSP.INDEX.ARRAY (SETQ HARRAY (HASHARRAY 100))))
(TMAXPROP IMAGESTREAM 'TSP.INDEX.ARRAY (SETQ HARRAY (HASHARRAY 100))))
(OR (GETHASH (IMAGEOBJPROP OBJ 'INDEX.KEY)
HARRAY)
(ADD.NEW.INDEX IMAGESTREAM (IMAGEOBJPROP OBJ 'INDEX.KEY)
OBJ)))))
(INDEX.PAGE.NUMBER
(LAMBDA (WINDOW) (* \; "Edited 14-Feb-97 09:58 by rmk:")
(* |fsg| "16-Jul-87 10:08")
(LAMBDA (TSTREAM) (* \; "Edited 22-Feb-2025 17:39 by rmk")
(* \; "Edited 21-Feb-2025 11:38 by rmk")
(* \; "Edited 14-Feb-97 09:58 by rmk:")
(* |fsg| "16-Jul-87 10:08")
(* |;;| "Return the index page number; either the page number or manual-style page number.")
(* |;;| "Return the index page number; either the page number or manual-style page number.")
(DECLARE (USEDFREE FORMATTINGSTATE))
(MKATOM (COND
((MANUALINDEX.ENABLED? WINDOW)
((MANUALINDEX.ENABLED? TSTREAM)
(LET ((INDEX.PAGE "")
(TEMPLATE.LIST (APPEND (WINDOWPROP WINDOW 'MANUALTEMPLATES)))
(TEMPLATE.LIST (APPEND (TMAXPROP TSTREAM 'MANUALTEMPLATES)))
INDEX.TEMPLATE)
(WHILE (SETQ INDEX.TEMPLATE (POP TEMPLATE.LIST))
DO (WITH NGTEMPLATE INDEX.TEMPLATE (SETQ INDEX.PAGE
(CONCAT INDEX.PAGE
(OR NG.TEXT-BEFORE "")
(NGROUP.CHARTYPE.CONVERT
NG.CHARTYPE NG.CURRENTVAL
)
(INDEX.MANUAL.DELIMITER
NG.TEXT-AFTER
(CAR TEMPLATE.LIST))))))
(CONCAT INDEX.PAGE (OR NG.TEXT-BEFORE "")
(NGROUP.CHARTYPE.CONVERT
NG.CHARTYPE NG.CURRENTVAL)
(INDEX.MANUAL.DELIMITER
NG.TEXT-AFTER
(CAR TEMPLATE.LIST))))))
(CONCAT INDEX.PAGE (CAR FORMATTINGSTATE))))
(T (CAR FORMATTINGSTATE))))))
(index.manual.delimiter
(lambda (after.delimiter next.template) (* |fsg| "16-Jul-87 10:00")
(* * |Return| |the| |delimiter| |between| |NGroups| |and| |the| |page| |number|
 |for| \a |Manual| |Index| |page| |reference.|)
(INDEX.MANUAL.DELIMITER
(LAMBDA (AFTER.DELIMITER NEXT.TEMPLATE) (* \; "Edited 26-Feb-2025 14:54 by rmk")
(* |fsg| "16-Jul-87 10:00")
(or (cond
(next.template (cond
((|fetch| (ngtemplate ng.text-before) |of| next.template)
"")
(t nil)))
(t (cond
((or (null after.delimiter)
(strequal after.delimiter ""))
".")
(t nil))))
after.delimiter)))
(* |;;;|
"Return the delimiter between NGroups and the page number for a Manual Index page reference.")
(OR (CL:IF NEXT.TEMPLATE
(CL:IF (|fetch| (NGTEMPLATE NG.DELIMBEFORE) |of| NEXT.TEMPLATE)
"")
(CL:IF (OR (NULL AFTER.DELIMITER)
(STREQUAL AFTER.DELIMITER ""))
"."))
AFTER.DELIMITER)))
(index.string
(lambda (index.obj) (* |ss:| "27-Jun-87 15:52")
@ -532,12 +535,13 @@
'yes)))
(INDEX.LIST.REFS
(LAMBDA (IMAGESTREAM) (* \; "Edited 14-Feb-97 09:09 by rmk:")
(* |ss:| "27-Jun-87 15:51")
(LAMBDA (IMAGESTREAM) (* \; "Edited 21-Feb-2025 10:17 by rmk")
(* \; "Edited 14-Feb-97 09:09 by rmk:")
(* |ss:| "27-Jun-87 15:51")
(* |;;| "Return a sorted list of the Index and Extended Index keys. Simple Index keys are just added to the list. For an Extended Index key, there are SUBITEMS for each Extended Index for this key. This list can be used as the ITEMS field in the Known Indices menu or for creating the index file.")
(* |;;| "Return a sorted list of the Index and Extended Index keys. Simple Index keys are just added to the list. For an Extended Index key, there are SUBITEMS for each Extended Index for this key. This list can be used as the ITEMS field in the Known Indices menu or for creating the index file.")
(LET ((INDEX.ARRAY (STREAMPROP IMAGESTREAM 'TSP.INDEX.ARRAY))
(LET ((INDEX.ARRAY (TMAXPROP IMAGESTREAM 'TSP.INDEX.ARRAY))
(INDEX.KEYLIST NIL)
(INDEX.ITEMS (CONS))
INDEX.VALUE)
@ -545,13 +549,12 @@
(SETQ INDEX.KEYLIST (CONS KY INDEX.KEYLIST)))))
(FOR KEY IN (SORT INDEX.KEYLIST 'UALPHORDER)
DO (SETQ INDEX.VALUE (GETHASH KEY INDEX.ARRAY))
(AND (CADR INDEX.VALUE)
(NCONC INDEX.ITEMS (LIST KEY)))
(AND (CADDR INDEX.VALUE)
(NCONC INDEX.ITEMS (LIST (LIST KEY NIL "Select an Extended Index subitem."
(CONS 'SUBITEMS (LIST.OF.INDEXENTRIES
KEY
(CADDR INDEX.VALUE))))))))
(AND (CADR INDEX.VALUE)
(NCONC INDEX.ITEMS (LIST KEY)))
(AND (CADDR INDEX.VALUE)
(NCONC INDEX.ITEMS (LIST (LIST KEY NIL "Select an Extended Index subitem."
(CONS 'SUBITEMS (LIST.OF.INDEXENTRIES KEY
(CADDR INDEX.VALUE))))))))
(CDR INDEX.ITEMS))))
(list.of.indexentries
@ -584,28 +587,27 @@
(DEFINEQ
(CREATE.INDEX.FILE
(LAMBDA (TEXTSTREAM IMAGESTREAM INDEXFILE INDEX.FONT NOTITLE)
(* \; "Edited 14-Feb-97 11:10 by rmk:")
(* |fsg| "13-Aug-87 09:05")
(LAMBDA (TSTREAM INDEX.FILE INDEX.FONT NOTITLE) (* \; "Edited 23-Feb-2025 11:55 by rmk")
(* \; "Edited 21-Feb-2025 10:17 by rmk")
(* \; "Edited 14-Feb-97 11:10 by rmk:")
(* |fsg| "13-Aug-87 09:05")
(SETQ INDEX.FILE (OR (OUTFILEP (OR INDEX.FILE (GET.INDEX.FILE (TMAXPROP TSTREAM 'IMAGEOBJ.MENUW))
))
(ERROR (CONCAT "Can't open " INDEX.FILE " as a index file"))))
(TEDIT.PROMPTPRINT TSTREAM (CONCAT "Writing index on " INDEX.FILE)
T)
(LET ((IMAGESTREAM (OPENIMAGESTREAM '{NULL}))
INDEX.ARRAY INDEX.LIST INDEX.STREAM)
(* |;;| "Writes the indices and their corresponding page numbers to the index file. The indices are sorted alphabetically regardless of case.")
(* |;;|
 "Make sure we have the page numbers, written in the image stream. Why not in TSTREAM?")
(LET ((INDEX.ARRAY (IF IMAGESTREAM
THEN (STREAMPROP IMAGESTREAM 'TSP.INDEX.ARRAY)
ELSE
(* |;;| "Menu call should do a hardcopy to a nodircore image stream, which can then be passed in for us to interrogate.")
(* |;;| "(STREAMPROP WINDOW 'TSP.INDEX.ARRAY)")
(HELP "Trying to write index when not hard-copying")))
(INDEX.LIST (INDEX.LIST.REFS IMAGESTREAM))
(INDEX.FILE (OUTFILEP INDEXFILE))
(INDEX.STREAM (OPENTEXTSTREAM)))
(TEDIT.FORMAT.HARDCOPY TSTREAM IMAGESTREAM NIL NIL NIL NIL NIL NIL NIL NIL T)
(SETQ INDEX.ARRAY (TMAXPROP IMAGESTREAM 'TSP.INDEX.ARRAY))
(SETQ INDEX.LIST (INDEX.LIST.REFS IMAGESTREAM))
(COND
((AND INDEX.LIST INDEX.FILE)
(TEDIT.PROMPTPRINT TEXTSTREAM (CONCAT "Putting Indices into file " INDEX.FILE "... ")
T)
(SETQ INDEX.STREAM (OPENTEXTSTREAM))
(CL:UNLESS NOTITLE
(DSPFONT (FONTCREATE '(HELVETICA 14 BRR))
INDEX.STREAM)
@ -613,62 +615,54 @@
(WRITE.INDEX.FILE INDEX.STREAM INDEX.LIST INDEX.ARRAY INDEX.FONT)
(CLOSEF? (TEDIT.PUT INDEX.STREAM INDEX.FILE))
INDEX.FILE)
(INDEX.LIST (TEDIT.PROMPTPRINT TEXTSTREAM "Specify a file name for the Indices first." T)
(INDEX.LIST (TEDIT.PROMPTPRINT TSTREAM "Please specify a name for the index file" T)
NIL)
(T (TEDIT.PROMPTPRINT TEXTSTREAM
"There are no Indices/Extended Indices in this document." T)
(T (TEDIT.PROMPTPRINT TSTREAM "There are no indexed terms in this document." T)
NIL)))))
(DUMP.INDEX
(LAMBDA (INDEXFILE) (* \; "Edited 14-Feb-97 11:12 by rmk:")
(LAMBDA (INDEXFILE) (* \; "Edited 21-Feb-2025 09:20 by rmk")
(* \; "Edited 14-Feb-97 11:12 by rmk:")
(* |;;| "Dumps the current index to INDEXFILE without a title and in the font of the current image stream. Convenient to call in an EVALOBJect context. By default, indexfile will be placed on the same directory as the text file underlying the textstream")
(* |;;| "Dumps the current index to INDEXFILE without a title and in the font of the current image stream. Convenient to call in an EVALOBJect context. By default, indexfile will be placed on the same directory as the text file underlying the textstream")
(DECLARE (USEDFREE TEXTSTREAM WINDOW IMAGESTREAM))
(LET ((TEXTFILE (FETCH (TEXTOBJ TXTFILE) OF (TEXTOBJ TEXTSTREAM))))
(IF TEXTFILE
THEN (SETQ TEXTFILE (FULLNAME TEXTFILE)))
(CREATE.INDEX.FILE TEXTSTREAM IMAGESTREAM (IF INDEXFILE
THEN (PACKFILENAME 'VERSION NIL
'BODY INDEXFILE
'HOST
(FILENAMEFIELD
TEXTFILE
'HOST)
'DIRECTORY
(FILENAMEFIELD
TEXTFILE
'DIRECTORY))
ELSEIF TEXTFILE
THEN (PACKFILENAME 'VERSION NIL
'EXTENSION
'INDEX
'BODY TEXTFILE)
ELSEIF (GET.INDEX.FILE
(WINDOWPROP WINDOW
'IMAGEOBJ.MENUW))
ELSE (HELP "No file for index"))
(DECLARE (USEDFREE TSTREAM IMAGESTREAM))
(LET ((TEXTFILE (TXTFILE TSTREAM)))
(CL:WHEN TEXTFILE
(SETQ TEXTFILE (FULLNAME TEXTFILE)))
(CREATE.INDEX.FILE TSTREAM IMAGESTREAM (IF INDEXFILE
THEN (PACKFILENAME 'VERSION NIL 'BODY INDEXFILE
'HOST
(FILENAMEFIELD TEXTFILE 'HOST)
'DIRECTORY
(FILENAMEFIELD TEXTFILE 'DIRECTORY))
ELSEIF TEXTFILE
THEN (PACKFILENAME 'VERSION NIL 'EXTENSION
'INDEX
'BODY TEXTFILE)
ELSEIF (GET.INDEX.FILE (TMAXPROP TSTREAM
'IMAGEOBJ.MENUW))
ELSE (HELP "No file for index"))
(DSPFONT NIL IMAGESTREAM)
T))))
(VIEW.INDEX.FILE
(LAMBDA (STREAM WINDOW DONTSHOW) (* \; "Edited 14-Feb-97 17:15 by rmk:")
(* |fsg| "12-Aug-87 16:34")
(LAMBDA (TSTREAM) (* \; "Edited 23-Feb-2025 11:52 by rmk")
(* \; "Edited 21-Feb-2025 09:18 by rmk")
(* \; "Edited 14-Feb-97 17:15 by rmk:")
(* |fsg| "12-Aug-87 16:34")
(* |;;| "Writes out the index file via CREATE.INDEX.FILE and then opens another TEdit window where this new file is displayed.")
(* |;;|
 "Writes out the index file and then opens another TEdit window where this new file is displayed.")
(* |;;| "First, do a dummy hardcopy to get the page numbers. Use the type of the current defaultprintinghost as the imagestream type")
(LET* ((IMAGESTREAM (OPENIMAGESTREAM '{NULL}))
(INDEX.FILE (CREATE.INDEX.FILE STREAM (PROGN (TEDIT.FORMAT.HARDCOPY STREAM IMAGESTREAM
)
IMAGESTREAM)
(GET.INDEX.FILE (WINDOWPROP WINDOW 'IMAGEOBJ.MENUW)))))
(AND INDEX.FILE (NOT DONTSHOW)
(PROGN (OR (WINDOWPROP WINDOW 'INDEX.WINDOW)
(WINDOWPROP WINDOW 'INDEX.WINDOW (CREATEW NIL (CONCAT "Viewing Index file "
INDEX.FILE))))
(TEDIT INDEX.FILE (WINDOWPROP WINDOW 'INDEX.WINDOW)))))))
(LET ((INDEX.FILE (CREATE.INDEX.FILE TSTREAM)))
(CL:WHEN INDEX.FILE
(TMAXPROP TSTREAM 'INDEX.REGION (WINDOWREGION (WFROMDS (TEXTSTREAM
(TEDIT INDEX.FILE
(TMAXPROP TSTREAM
'INDEX.REGION)))))
))
INDEX.FILE)))
(get.index.file
(lambda (menuw) (* \; "Edited 29-Sep-87 14:34 by fsg")
@ -743,14 +737,19 @@
(T (PRINTOUT STREAM (CONCAT PAGE.STRING PAGE.NBRS)))))))
(RESET.INDEX.PAGENUMBERS
(LAMBDA (IMAGESTREAM) (* \; "Edited 14-Feb-97 09:11 by rmk:")
(* |fsg| "13-Aug-87 10:43")
(LAMBDA (IMAGESTREAM) (* \; "Edited 25-Feb-2025 10:22 by rmk")
(* \; "Edited 21-Feb-2025 10:17 by rmk")
(* \; "Edited 14-Feb-97 09:11 by rmk:")
(* |fsg| "13-Aug-87 10:43")
(* |;;| "Here before hardcopying the TMAX/TEdit window. Reset the page number list to NIL so the hardcopy DISPLAYFN will create a new list of index page numbers.")
(* |;;| "THIS DOESN'T SEEM TO BE CALLED. AND THE DATA IS HUNG OFF THE TSTREAM--IS THAT THE IMAGESTREAM HERE?")
(LET ((INDEX.ARRAY (STREAMPROP IMAGESTREAM 'TSP.INDEX.ARRAY)))
(AND INDEX.ARRAY (MAPHASH INDEX.ARRAY (FUNCTION (LAMBDA (VAL KEY)
(RPLACA VAL NIL))))))))
(* |;;| "Here before hardcopying the TMAX/TEdit window. Reset the page number list to NIL so the hardcopy DISPLAYFN will create a new list of index page numbers.")
(LET ((INDEX.ARRAY (TMAXPROP IMAGESTREAM 'TSP.INDEX.ARRAY)))
(CL:WHEN INDEX.ARRAY
(MAPHASH INDEX.ARRAY (FUNCTION (LAMBDA (VAL KEY)
(RPLACA VAL NIL))))))))
)
(DECLARE\: EVAL@COMPILE
@ -812,25 +811,24 @@
(ERROR!)))))
(SELECTION.TO.INDEX
(LAMBDA (STREAM) (* \; "Edited 14-Feb-97 09:56 by rmk:")
(* |fsg| "10-Mar-87 14:02")
(LAMBDA (TSTREAM) (* \; "Edited 21-Feb-2025 10:00 by rmk")
(* \; "Edited 14-Feb-97 09:56 by rmk:")
(* |fsg| "10-Mar-87 14:02")
(* |;;| "The index key has been depressed. Index on the current selection")
(* |;;| "The index key has been depressed. Index on the current selection")
(LET ((NEWINDEX.KEY (MKATOM (CL:STRING-TRIM '(#\Space)
(CONVERT.TABS.TO.SPACES (SELECTION.TO.STRING STREAM)))))
(TEXTOBJ (TEXTOBJ STREAM)))
(CONVERT.TABS.TO.SPACES (SELECTION.TO.STRING TSTREAM))))))
(IF (AND NEWINDEX.KEY (NEQ 0 (NCHARS NEWINDEX.KEY)))
THEN (LET ((OBJ (INDEXOBJ NEWINDEX.KEY)))
(REPLACE BLUEPENDINGDELETE OF TEXTOBJ WITH NIL)
(TEDIT.INSERT.OBJECT OBJ STREAM (TEDIT.GETPOINT STREAM))
(TEDIT.SETSEL STREAM (ADD1 (TEDIT.GETPOINT STREAM))
0
'RIGHT NIL T 'NORMAL)
(TEDIT.PROMPTPRINT STREAM (CONCAT "Index term: " NEWINDEX.KEY)
T))
ELSE (TEDIT.PROMPTPRINT STREAM "No index term selected" T)
(ERROR!)))))
(TEDIT.INSERT.OBJECT OBJ TSTREAM (TEDIT.GETPOINT TSTREAM))
(TEDIT.SETSEL TSTREAM (ADD1 (TEDIT.GETPOINT TSTREAM))
0
'RIGHT NIL T 'NORMAL)
(TEDIT.PROMPTPRINT TSTREAM (CONCAT "Index term: " NEWINDEX.KEY)
T))
ELSE (TEDIT.PROMPTPRINT TSTREAM "No index term selected" T)
(ERROR!)))))
)
(DECLARE\: EVAL@COMPILE
@ -867,17 +865,17 @@
(* |;;;| "IMAGE OBJECT for causing the index to be written, without using the menu")
(DECLARE\: DONTCOPY
(FILEMAP (NIL (3074 10997 (INDEXOBJ 3084 . 4107) (INDEXOBJP 4109 . 4557) (INDEX.DISPLAYFN 4559 . 6376)
(INDEX.IMAGEBOXFN 6378 . 7924) (INDEX.PUTFN 7926 . 8356) (INDEX.GETFN 8358 . 8749) (INDEX.COPYFN 8751
. 9386) (INDEX.BUTTONEVENTINFN 9388 . 10995)) (11036 18909 (INSERT.INDEX 11046 . 11633) (
INSERT.INDEXENTRY 11635 . 14402) (INSERT.KNOWN.INDEX 14404 . 16481) (SUBITEM.SELECTFN 16483 . 17477) (
ADD.NEW.INDEX 17479 . 18907)) (18975 22906 (CHANGE.INDEX 18985 . 19553) (CHANGE.INDEXENTRY 19555 .
20305) (CHANGE.XINDEX.KEY 20307 . 20865) (CHANGE.XINDEX.ENTRY 20867 . 21500) (CHANGE.XINDEX.FONT 21502
. 22371) (CHANGE.XINDEX.NUMBER 22373 . 22904)) (22948 30669 (GETHASH.INDEX 22958 . 23625) (
INDEX.PAGE.NUMBER 23627 . 25206) (INDEX.MANUAL.DELIMITER 25208 . 25899) (INDEX.STRING 25901 . 26911) (
GET.INDEXENTRY.NUMBER 26913 . 27933) (INDEX.LIST.REFS 27935 . 29425) (LIST.OF.INDEXENTRIES 29427 .
30667)) (30711 40915 (CREATE.INDEX.FILE 30721 . 32600) (DUMP.INDEX 32602 . 35022) (VIEW.INDEX.FILE
35024 . 36288) (GET.INDEX.FILE 36290 . 36680) (WRITE.INDEX.FILE 36682 . 39083) (
WRITE.INDEX.PAGENUMBERS 39085 . 40285) (RESET.INDEX.PAGENUMBERS 40287 . 40913)) (41113 45167 (
SELECTION.TO.STRING 41123 . 43955) (SELECTION.TO.INDEX 43957 . 45165)))))
(FILEMAP (NIL (3107 11080 (INDEXOBJ 3117 . 4140) (INDEXOBJP 4142 . 4590) (INDEX.DISPLAYFN 4592 . 6451)
(INDEX.IMAGEBOXFN 6453 . 7999) (INDEX.PUTFN 8001 . 8431) (INDEX.GETFN 8433 . 8824) (INDEX.COPYFN 8826
. 9469) (INDEX.BUTTONEVENTINFN 9471 . 11078)) (11119 19220 (INSERT.INDEX 11129 . 11716) (
INSERT.INDEXENTRY 11718 . 14501) (INSERT.KNOWN.INDEX 14503 . 16687) (SUBITEM.SELECTFN 16689 . 17683) (
ADD.NEW.INDEX 17685 . 19218)) (19286 23217 (CHANGE.INDEX 19296 . 19864) (CHANGE.INDEXENTRY 19866 .
20616) (CHANGE.XINDEX.KEY 20618 . 21176) (CHANGE.XINDEX.ENTRY 21178 . 21811) (CHANGE.XINDEX.FONT 21813
. 22682) (CHANGE.XINDEX.NUMBER 22684 . 23215)) (23259 31132 (GETHASH.INDEX 23269 . 24045) (
INDEX.PAGE.NUMBER 24047 . 25700) (INDEX.MANUAL.DELIMITER 25702 . 26334) (INDEX.STRING 26336 . 27346) (
GET.INDEXENTRY.NUMBER 27348 . 28368) (INDEX.LIST.REFS 28370 . 29888) (LIST.OF.INDEXENTRIES 29890 .
31130)) (31174 40965 (CREATE.INDEX.FILE 31184 . 33079) (DUMP.INDEX 33081 . 34931) (VIEW.INDEX.FILE
34933 . 35993) (GET.INDEX.FILE 35995 . 36385) (WRITE.INDEX.FILE 36387 . 38788) (
WRITE.INDEX.PAGENUMBERS 38790 . 39990) (RESET.INDEX.PAGENUMBERS 39992 . 40963)) (41163 45188 (
SELECTION.TO.STRING 41173 . 44005) (SELECTION.TO.INDEX 44007 . 45186)))))
STOP

Binary file not shown.

View File

@ -1,130 +1,156 @@
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "XCL" BASE 10)
(filecreated "30-Dec-87 11:35:45" |{POGO:AISNORTH:XEROX}<CUTTING>TMAX>TMAX-NGRAPH.;2| 25361
|previous| |date:| "11-Nov-87 11:56:01" |{POGO:AISNORTH:XEROX}<CUTTING>TMAX>TMAX-NGRAPH.;1|)
(FILECREATED "28-Feb-2025 23:52:01" |{WMEDLEY}<lispusers>tmax>TMAX-NGRAPH.;14| 27479
:EDIT-BY |rmk|
:CHANGES-TO (FNS NGROUP.CHARTYPE.CONVERT UPDATE.NUMBEROBJS DOWNDATE.NUMBEROBJS NGROUP.CHARTYPE
INITIAL.NGROUP.GRAPH RESET.DEPENDENT.CLASSES GET.NCOUNTER GRAPHMENU
CREATE.NGROUP.NODE FLATTEN.TREE.TO.STRING)
(VARS TMAX-NGRAPHCOMS)
:PREVIOUS-DATE "23-Feb-2025 22:59:05" |{WMEDLEY}<lispusers>tmax>TMAX-NGRAPH.;11|)
; Copyright (c) 1987 by Xerox Corporation. All rights reserved.
(PRETTYCOMPRINT TMAX-NGRAPHCOMS)
(prettycomprint tmax-ngraphcoms)
(RPAQQ TMAX-NGRAPHCOMS
(
(* |;;| "Developed under support from NIH grant RR-00785.")
(rpaqq tmax-ngraphcoms
((* |Developed| |under| |support| |from| nih |grant| rr-00785.)
(* |Written| |by| |Frank| |Gilmurray| |and| |Sami| |Shaio.|)
(* * |Number| |Group| graph |functions|)
(fns graphmenu initial.ngroup.graph ngroup.make.rootnode tspgraphregion close.ngroup.graph
ngroup.graph.closefn add.ngroup.to.mother.node add.node.to.graph collect.hasharray
create.ngroup.node get.fromnodes get.tonodes find.node tsp.get.ngroup.array tsp.legalid
list.ancestors toplevel.sisters get.ngroup.mother)
(* * |Number| |counting| |functions|)
(fns downdate.numberobjs update.numberobjs reset.dependent.classes reset.ncounter
get.ncounter ncounter? flatten.tree.to.string ngroup.chartype ngroup.chartype.convert
number.to.letter remove.all.counters)))
(* |;;| "Written by Frank Gilmurray and Sami Shaio.")
(* |;;| "Number Group GRAPH functions")
(FNS GRAPHMENU INITIAL.NGROUP.GRAPH NGROUP.MAKE.ROOTNODE TSPGRAPHREGION CLOSE.NGROUP.GRAPH
NGROUP.GRAPH.CLOSEFN ADD.NGROUP.TO.MOTHER.NODE ADD.NODE.TO.GRAPH COLLECT.HASHARRAY
CREATE.NGROUP.NODE GET.FROMNODES GET.TONODES FIND.NODE TSP.GET.NGROUP.ARRAY TSP.LEGALID
LIST.ANCESTORS TOPLEVEL.SISTERS GET.NGROUP.MOTHER)
(* |;;;| "Number counting functions")
(FNS DOWNDATE.NUMBEROBJS UPDATE.NUMBEROBJS RESET.DEPENDENT.CLASSES RESET.NCOUNTER
GET.NCOUNTER NCOUNTER? FLATTEN.TREE.TO.STRING NGROUP.CHARTYPE NGROUP.CHARTYPE.CONVERT
NUMBER.TO.LETTER REMOVE.ALL.COUNTERS)))
(* |Developed| |under| |support| |from| nih |grant| rr-00785.)
(* |;;| "Developed under support from NIH grant RR-00785.")
(* |Written| |by| |Frank| |Gilmurray| |and| |Sami| |Shaio.|)
(* |;;| "Written by Frank Gilmurray and Sami Shaio.")
(* * |Number| |Group| graph |functions|)
(defineq
(graphmenu
(lambda (tstream twindow) (* |fsg| "11-Jul-87 12:17")
(let* ((graph (or (and (not (windowprop twindow 'rebuild.graphflg))
(windowprop twindow 'ngroup.graph))
(initial.ngroup.graph twindow)))
(region (tspgraphregion graph twindow t))
(graphw (createw region "Number Group Graph" nil t)))
(and (ngroupmenu.enabled? twindow)
(close.ngroup.graph twindow))
(windowprop graphw 'repaintfn nil)
(attachwindow graphw twindow 'top 'justify 'localclose)
(showgraph graph graphw (function insert.ngroup)
(function change.ngroup))
(windowprop twindow 'rebuild.graphflg nil)
(windowprop twindow 'ngroupw graphw)
(windowprop twindow 'ngroup.graph graph)
(windowprop graphw 'closefn (function ngroup.graph.closefn))
(windowprop graphw 'twindow twindow)
(windowprop graphw 'tstream tstream))))
(initial.ngroup.graph
(lambda (window) (* |ss:| "27-Jun-87 16:56")
(let* ((rootnode (ngroup.make.rootnode))
(nodelst (|for| node |in| (collect.hasharray (tsp.get.ngroup.array window))
|collect| (cadr node))))
(or (find.node 'new.ngroup window)
(progn (setq nodelst (cons rootnode nodelst))
(add.ngroup.to.dbase 'new.ngroup nil nil nil rootnode window)))
(layoutgraph nodelst '(new.ngroup)))))
(* |;;| "Number Group GRAPH functions")
(DEFINEQ
(GRAPHMENU
(LAMBDA (TSTREAM) (* \; "Edited 28-Feb-2025 09:10 by rmk")
(* \; "Edited 21-Feb-2025 10:24 by rmk")
(* |fsg| "11-Jul-87 12:17")
(LET* ((GRAPH (OR (AND (NOT (TMAXPROP TSTREAM 'REBUILD.GRAPHFLG))
(TMAXPROP TSTREAM 'NGROUP.GRAPH))
(INITIAL.NGROUP.GRAPH TSTREAM)))
(REGION (TSPGRAPHREGION GRAPH T))
(GRAPHW (CREATEW REGION "Number Group Graph" NIL T)))
(CL:WHEN (NGROUPMENU.ENABLED? TSTREAM)
(CLOSE.NGROUP.GRAPH TSTREAM))
(WINDOWPROP GRAPHW 'REPAINTFN NIL)
(ATTACHWINDOW GRAPHW (\\TEDIT.PRIMARYPANE TSTREAM)
'TOP
'JUSTIFY
'LOCALCLOSE)
(SHOWGRAPH GRAPH GRAPHW (FUNCTION INSERT.NGROUP)
(FUNCTION CHANGE.NGROUP))
(TMAXPROP TSTREAM 'REBUILD.GRAPHFLG NIL)
(TMAXPROP TSTREAM 'NGROUPW GRAPHW)
(TMAXPROP TSTREAM 'NGROUP.GRAPH GRAPH)
(WINDOWPROP GRAPHW 'CLOSEFN (FUNCTION NGROUP.GRAPH.CLOSEFN))
(WINDOWPROP GRAPHW 'TSTREAM TSTREAM))))
(INITIAL.NGROUP.GRAPH
(LAMBDA (TSTREAM) (* \; "Edited 26-Feb-2025 10:08 by rmk")
(* \; "Edited 20-Feb-2025 23:41 by rmk")
(* |ss:| "27-Jun-87 16:56")
(LET* ((ROOTNODE (NGROUP.MAKE.ROOTNODE))
(NODELST (|for| NODE |in| (COLLECT.HASHARRAY (TSP.GET.NGROUP.ARRAY TSTREAM))
|collect| (CADR NODE))))
(CL:UNLESS (FIND.NODE 'NEW.NGROUP TSTREAM)
(SETQ NODELST (CONS ROOTNODE NODELST))
(ADD.NGROUP.TO.DBASE 'NEW.NGROUP NIL NIL NIL ROOTNODE TSTREAM))
(LAYOUTGRAPH NODELST '(NEW.NGROUP)))))
(ngroup.make.rootnode
(lambda nil (* |ss:| "27-Jun-87 16:14")
(nodecreate 'new.ngroup '|NGroups| nil nil nil (fontcreate 'helvetica 10 'brr)
1)))
(tspgraphregion
(lambda (graph main.window titleflg border) (* |ss:| " 2-Apr-86 16:28")
(let ((r (graphregion graph))
(main.r (windowregion main.window)))
(|replace| (region width) |of| r |with| (widthifwindow (|fetch| (region width) |of| r)))
(|replace| (region height) |of| r |with| (heightifwindow (|fetch| (region height)
|of| r)
titleflg border))
r)))
(TSPGRAPHREGION
(LAMBDA (GRAPH TITLEFLG BORDER) (* \; "Edited 20-Feb-2025 23:47 by rmk")
(* |ss:| " 2-Apr-86 16:28")
(LET ((R (GRAPHREGION GRAPH)))
(|replace| (REGION WIDTH) |of| R |with| (WIDTHIFWINDOW (|fetch| (REGION WIDTH) |of| R)))
(|replace| (REGION HEIGHT) |of| R |with| (HEIGHTIFWINDOW (|fetch| (REGION HEIGHT)
|of| R)
TITLEFLG BORDER))
R)))
(close.ngroup.graph
(lambda (twindow) (* |fsg| "11-Jul-87 12:51")
(* * |Program| |invoked| |close| |of| |the| |NGroup| |menu| |graph| |window.|
 program.close |is| |used| |to| |distinguish| |between| |our| |closing| |the|
 |window| |and| |the| |user| |buttoning| |the| |Window| |Menu| close |command.|)
(CLOSE.NGROUP.GRAPH
(LAMBDA (TSTREAM) (* \; "Edited 21-Feb-2025 10:17 by rmk")
(* |fsg| "11-Jul-87 12:51")
(let ((graph.window (windowprop twindow 'ngroupw)))
(windowprop graph.window 'program.close t)
(freeattachedwindow graph.window)
(closew graph.window))))
(* |;;;| "Program invoked close of the NGroup menu graph window. PROGRAM.CLOSE is used to distinguish between our closing the window and the user buttoning the Window Menu CLOSE command.")
(ngroup.graph.closefn
(lambda (graph.window) (* \; "Edited 29-Sep-87 15:04 by fsg")
(LET ((GRAPH.WINDOW (TMAXPROP TSTREAM 'NGROUPW)))
(WINDOWPROP GRAPH.WINDOW 'PROGRAM.CLOSE T)
(FREEATTACHEDWINDOW GRAPH.WINDOW)
(CLOSEW GRAPH.WINDOW))))
(* * |Clean| |up| \a |few| |things| |when| |user| close\s |the| |NGroup| |menu|
 |graph| |window.|)
(NGROUP.GRAPH.CLOSEFN
(LAMBDA (GRAPH.WINDOW) (* \; "Edited 21-Feb-2025 23:55 by rmk")
(* \; "Edited 29-Sep-87 15:04 by fsg")
(or (windowprop graph.window 'program.close)
(let ((twindow (windowprop graph.window 'twindow)))
(fm.changestate (fm.getitem 'ngroup.menu nil (windowprop twindow 'imageobj.menuw))
nil
(windowprop twindow 'imageobj.menuw))
(freeattachedwindow graph.window)))))
(* |;;;| "Clean up a few things when user CLOSEs the NGroup menu graph window.")
(add.ngroup.to.mother.node
(lambda (id motherid w) (* |ss:| " 3-Apr-86 17:50")
(let* ((mother.node (find.node motherid w))
(tonodes (|fetch| (graphnode tonodes) |of| mother.node)))
(or (member id tonodes)
(|replace| (graphnode tonodes) |of| mother.node |with| (cons id tonodes))))))
(CL:UNLESS (WINDOWPROP GRAPH.WINDOW 'PROGRAM.CLOSE)
(LET ((FMWINDOW (TMAXPROP (WINDOWPROP GRAPH.WINDOW 'TSTREAM)
'IMAGEOBJ.MENUW)))
(FM.CHANGESTATE (FM.GETITEM 'NGROUP.MENU NIL FMWINDOW)
NIL FMWINDOW)
(FREEATTACHEDWINDOW GRAPH.WINDOW)))))
(add.node.to.graph
(lambda (node graph window) (* |ss:| "27-Jun-87 15:57")
(let* ((parent.node (find.node (car (|fetch| (graphnode fromnodes) |of| node))
window))
(tonodes (|fetch| (graphnode tonodes) |of| node)))
(or (member (|fetch| (graphnode nodeid) |of| node)
tonodes)
(progn (|replace| (graphnode tonodes) |of| parent.node
|with| (cons (|fetch| (graphnode nodeid) |of| node)
(|fetch| (graphnode tonodes) |of| parent.node)))
(|replace| (graph graphnodes) |of| graph |with| (cons node (|fetch| (graph
graphnodes)
|of| graph)))))
(layoutgraph (|fetch| (graph graphnodes) |of| graph)
'(new.ngroup)))))
(ADD.NGROUP.TO.MOTHER.NODE
(LAMBDA (ID MOTHERID TSTREAM) (* \; "Edited 20-Feb-2025 23:20 by rmk")
(* |ss:| " 3-Apr-86 17:50")
(LET* ((MOTHER.NODE (FIND.NODE MOTHERID TSTREAM))
(TONODES (|fetch| (GRAPHNODE TONODES) |of| MOTHER.NODE)))
(OR (MEMBER ID TONODES)
(|replace| (GRAPHNODE TONODES) |of| MOTHER.NODE |with| (CONS ID TONODES))))))
(ADD.NODE.TO.GRAPH
(LAMBDA (NODE GRAPH TSTREAM) (* \; "Edited 21-Feb-2025 00:36 by rmk")
(* |ss:| "27-Jun-87 15:57")
(LET* ((PARENT.NODE (FIND.NODE (CAR (|fetch| (GRAPHNODE FROMNODES) |of| NODE))
TSTREAM))
(TONODES (|fetch| (GRAPHNODE TONODES) |of| NODE)))
(OR (MEMBER (|fetch| (GRAPHNODE NODEID) |of| NODE)
TONODES)
(PROGN (|replace| (GRAPHNODE TONODES) |of| PARENT.NODE
|with| (CONS (|fetch| (GRAPHNODE NODEID) |of| NODE)
(|fetch| (GRAPHNODE TONODES) |of| PARENT.NODE)))
(|replace| (GRAPH GRAPHNODES) |of| GRAPH |with| (CONS NODE (|fetch| (GRAPH
GRAPHNODES)
|of| GRAPH)))))
(LAYOUTGRAPH (|fetch| (GRAPH GRAPHNODES) |of| GRAPH)
'(NEW.NGROUP)))))
(collect.hasharray
(lambda (harray) (* |ss:| "27-Jun-87 16:03")
@ -133,22 +159,24 @@
(setq result (cons val result)))))
result)))
(create.ngroup.node
(lambda (id mother userdata w) (* |fsg| "22-Jun-87 13:27")
(let* ((ngroup.harray (tsp.get.ngroup.array w))
(node (gethash id ngroup.harray)))
(or node (let ((new.node (selectq id
(new.ngroup (ngroup.make.rootnode))
(nodecreate id id nil nil (list mother)))))
(puthash id (list userdata new.node)
(list ngroup.harray))
new.node))
(or (and node (car node))
(and userdata node (rplaca node userdata))))))
(CREATE.NGROUP.NODE
(LAMBDA (ID MOTHER USERDATA TSTREAM) (* \; "Edited 28-Feb-2025 09:21 by rmk")
(* \; "Edited 20-Feb-2025 23:19 by rmk")
(* |fsg| "22-Jun-87 13:27")
(LET* ((NGROUP.HARRAY (TSP.GET.NGROUP.ARRAY TSTREAM))
(NODE (GETHASH ID NGROUP.HARRAY)))
(CL:UNLESS NODE
(PUTHASH ID (LIST USERDATA (SELECTQ ID
(NEW.NGROUP (NGROUP.MAKE.ROOTNODE))
(SETQ NODE (NODECREATE ID ID NIL NIL (LIST MOTHER)))))
NGROUP.HARRAY))
(CL:WHEN (AND NODE (NULL (CAR NODE)))
(RPLACA NODE USERDATA)))))
(get.fromnodes
(lambda (ngid window) (* |ss:| " 3-Apr-86 16:00")
(car (|fetch| (graphnode fromnodes) |of| (find.node ngid window)))))
(GET.FROMNODES
(LAMBDA (NGID TSTREAM) (* \; "Edited 21-Feb-2025 00:23 by rmk")
(* |ss:| " 3-Apr-86 16:00")
(CAR (|fetch| (GRAPHNODE FROMNODES) |of| (FIND.NODE NGID TSTREAM)))))
(get.tonodes
(lambda (ngid window) (* |fsg| "28-Jul-87 10:54")
@ -163,13 +191,15 @@
(reverse tonodes))
(t (car tonodes))))))
(find.node
(lambda (ngid window) (* |fsg| " 4-Mar-87 10:22")
(cadr (gethash ngid (tsp.get.ngroup.array window)))))
(FIND.NODE
(LAMBDA (NGID TSTREAM) (* \; "Edited 20-Feb-2025 23:20 by rmk")
(* |fsg| " 4-Mar-87 10:22")
(CADR (GETHASH NGID (TSP.GET.NGROUP.ARRAY TSTREAM)))))
(tsp.get.ngroup.array
(lambda (window) (* |ss:| "27-Jun-87 16:21")
(windowprop window 'tsp.ngroup.array)))
(TSP.GET.NGROUP.ARRAY
(LAMBDA (TSTREAM) (* \; "Edited 21-Feb-2025 10:17 by rmk")
(* |ss:| "27-Jun-87 16:21")
(TMAXPROP TSTREAM 'TSP.NGROUP.ARRAY)))
(tsp.legalid
(lambda (prev.ngroups stream) (* |fsg| " 3-Aug-87 17:04")
@ -189,233 +219,246 @@
)))))))
ngroup.id)))
(list.ancestors
(lambda (nid ancestors window) (* |ss:| "27-Jun-87 16:09")
(* * |Return| \a |list| |of| |the| |parents| |of| |the| |given| |node.|)
(LIST.ANCESTORS
(LAMBDA (NID ANCESTORS TSTREAM) (* \; "Edited 21-Feb-2025 00:23 by rmk")
(* |ss:| "27-Jun-87 16:09")
(let ((mother (get.fromnodes nid window)))
(cond
((and mother (neq mother 'new.ngroup))
(list.ancestors mother (cons mother ancestors)
window))
(t ancestors)))))
(* |;;;| "Return a list of the parents of the given node.")
(toplevel.sisters
(lambda (window) (* |ss:| "27-Jun-87 16:21")
(* * |Returns| \a |list| |of| |the| |top| |level| |NGroup| |nodes.|
 a |top| |level| |node| |is| \a |node| |whose| |mother| |is| new.ngroup.)
(LET ((MOTHER (GET.FROMNODES NID TSTREAM)))
(COND
((AND MOTHER (NEQ MOTHER 'NEW.NGROUP))
(LIST.ANCESTORS MOTHER (CONS MOTHER ANCESTORS)
TSTREAM))
(T ANCESTORS)))))
(reverse (|fetch| (graphnode tonodes) |of| (find.node 'new.ngroup window)))))
(TOPLEVEL.SISTERS
(LAMBDA (TSTREAM) (* \; "Edited 21-Feb-2025 00:52 by rmk")
(* |ss:| "27-Jun-87 16:21")
(get.ngroup.mother
(lambda (ngid window) (* |fsg| " 4-Mar-87 11:24")
(* * |Return| |the| |top| |level| |mother| |of| \a |branch| |of| |the| |Ngroup|
 |tree.|)
(* |;;;| "Returns a list of the top level NGroup nodes. A top level node is a node whose mother is NEW.NGROUP.")
(let ((ancestors (list.ancestors ngid nil window)))
(cond
(ancestors (car ancestors))
(t (cond
((find.node ngid window)
ngid)
(t nil)))))))
(REVERSE (|fetch| (GRAPHNODE TONODES) |of| (FIND.NODE 'NEW.NGROUP TSTREAM)))))
(GET.NGROUP.MOTHER
(LAMBDA (NGID TSTREAM) (* \; "Edited 21-Feb-2025 00:53 by rmk")
(* |fsg| " 4-Mar-87 11:24")
(* |;;;| "Return the top level mother of a branch of the Ngroup tree.")
(LET ((ANCESTORS (LIST.ANCESTORS NGID NIL TSTREAM)))
(COND
(ANCESTORS (CAR ANCESTORS))
(T (COND
((FIND.NODE NGID TSTREAM)
NGID)
(T NIL)))))))
)
(* * |Number| |counting| |functions|)
(defineq
(downdate.numberobjs
(lambda (window stream objselectfn) (* |fsg| "25-Sep-87 09:45")
(* * |Undoes| |what| update.numberobjs |does.|)
(let ((nbrobj.list (tsp.list.of.objects (textobj window)
objselectfn)))
(and nbrobj.list
(progn (tedit.promptprint stream (concat "Undoing Update of " (selectq objselectfn
(ngroupp
"Number Groups")
(endnotep "Endnotes")
(* |;;;| "Number counting functions")
(DEFINEQ
(DOWNDATE.NUMBEROBJS
(LAMBDA (TSTREAM OBJSELECTFN) (* \; "Edited 25-Feb-2025 14:40 by rmk")
(* \; "Edited 21-Feb-2025 00:47 by rmk")
(* |fsg| "25-Sep-87 09:45")
(* |;;;| "Undoes what UPDATE.NUMBEROBJS does.")
(LET ((NBROBJ.LIST (TSP.LIST.OF.OBJECTS TSTREAM OBJSELECTFN)))
(CL:WHEN NBROBJ.LIST
(TEDIT.PROMPTPRINT TSTREAM (CONCAT "Undoing Update of " (SELECTQ OBJSELECTFN
(NGROUPP "Number Groups")
(ENDNOTEP "Endnotes")
"Number Groups and Endnotes"
)
"...")
t)
(|for| nbrobj |in| nbrobj.list
|do| (let ((datum (|fetch| objectdatum |of| (car nbrobj))))
(|with| numberobj datum (setq page.number nil)
(and updated.obj
(progn (setq updated.obj nil)
(|replace| (ngtemplate ng.currentval)
|of| template |with| nil)
(setq numstring
(selectq use
(ngroup (concat "[" ref.type "]"))
(note "Note#")
nil))
(tedit.object.changed stream (car nbrobj)))))))
(tedit.promptprint stream "done"))))))
)
"...")
T)
(|for| NBROBJ |in| NBROBJ.LIST
|do|
(* |;;| "CAR because of TSP.LIST.OF.OBJECTS returns (obj ch#)")
(update.numberobjs
(lambda (window stream objselectfn) (* |fsg| "25-Sep-87 09:34")
(* * |Convert| |the| |NGroup| |and| |Endnote| |markers| |to| |their|
 |corresponding| |numeric| |values.|)
(|with| NUMBEROBJ (|fetch| OBJECTDATUM |of| (CAR NBROBJ))
(SETQ PAGE.NUMBER NIL)
(CL:WHEN UPDATED.OBJ
(SETQ UPDATED.OBJ NIL)
(|replace| (NGTEMPLATE NG.CURRENTVAL) |of| TEMPLATE |with| NIL)
(SETQ NUMSTRING (SELECTQ USE
(NGROUP (CONCAT "[" REF.TYPE "]"))
(NOTE "[Note#]")
NIL))
(TEDIT.OBJECT.CHANGED TSTREAM (CAR NBROBJ)))))
(TEDIT.PROMPTPRINT TSTREAM "done")))))
(let ((nbrobj.list (tsp.list.of.objects (textobj window)
objselectfn)))
(and nbrobj.list (progn (tedit.promptprint stream (concat "Updating " (selectq objselectfn
(ngroupp
"Number Groups")
(endnotep
"Endnotes")
"Number Groups and Endnotes"
)
"...")
t)
(|for| nbrobj |in| nbrobj.list
|do| (let ((datum (|fetch| objectdatum |of| (car nbrobj)))
new.count)
(|with| numberobj datum (reset.dependent.classes window
use ref.type)
(setq new.count
(get.ncounter window use ref.type ngroup.mother
template datum))
(and (neq new.count numstring)
(progn (setq numstring new.count)
(setq updated.obj t)
(tedit.object.changed stream
(car nbrobj))))))
|finally| (remove.all.counters window))
(tedit.promptprint stream "done"))))))
(UPDATE.NUMBEROBJS
(LAMBDA (TSTREAM OBJSELECTFN) (* \; "Edited 25-Feb-2025 14:38 by rmk")
(* \; "Edited 23-Feb-2025 22:58 by rmk")
(* \; "Edited 21-Feb-2025 00:27 by rmk")
(* |fsg| "25-Sep-87 09:34")
(reset.dependent.classes
(lambda (window use ref.type) (* |fsg| "12-Dec-86 10:50")
(|for| dependent |in| (|fetch| (graphnode tonodes) |of| (find.node ref.type window))
|do| (progn (reset.ncounter window use dependent)
(reset.dependent.classes window use dependent)))))
(* |;;;|
"Convert the NGroup and Endnote markers to their corresponding numeric and display-string values.")
(reset.ncounter
(lambda (window use ref.type) (* |fsg| "12-Dec-86 11:07")
(let* ((template (selectq use
(ngroup (|fetch| (numberobj template) |of| (car (gethash ref.type
(tsp.get.ngroup.array
window)))))
nil))
(counter (ncounter? window use ref.type template)))
(|replace| ncount |of| counter |with| (cond
(template (sub1 (|fetch| ng.start |of| template)))
(t 0))))))
(LET ((NBROBJ.LIST (TSP.LIST.OF.OBJECTS TSTREAM OBJSELECTFN)))
(CL:WHEN NBROBJ.LIST
(TEDIT.PROMPTPRINT TSTREAM (CONCAT "Updating " (SELECTQ OBJSELECTFN
(NGROUPP "Number Groups")
(ENDNOTEP "Endnotes")
"Number Groups and Endnotes")
"...")
T)
(|for| NBROBJ NEW.COUNT DATUM |in| NBROBJ.LIST
|do| (SETQ DATUM (|fetch| OBJECTDATUM |of| NBROBJ))
(|with| NUMBEROBJ DATUM (RESET.DEPENDENT.CLASSES TSTREAM USE REF.TYPE)
(SETQ NEW.COUNT (GET.NCOUNTER TSTREAM USE REF.TYPE NGROUP.MOTHER TEMPLATE
DATUM))
(CL:WHEN (NUMBER.NUMSTRING DATUM NEW.COUNT)
(SETQ UPDATED.OBJ T)
(TEDIT.OBJECT.CHANGED TSTREAM NBROBJ))))
(REMOVE.ALL.COUNTERS TSTREAM)
(TEDIT.PROMPTPRINT TSTREAM "done")))))
(get.ncounter
(lambda (window use ref.type mother.class template nbr.datum)
(RESET.DEPENDENT.CLASSES
(LAMBDA (TSTREAM USE REF.TYPE) (* \; "Edited 26-Feb-2025 18:19 by rmk")
(* \; "Edited 21-Feb-2025 00:24 by rmk")
(* |fsg| "12-Dec-86 10:50")
(|for| DEPENDENT |in| (|fetch| (GRAPHNODE TONODES) |of| (FIND.NODE REF.TYPE TSTREAM))
|do| (RESET.NCOUNTER TSTREAM USE DEPENDENT)
(RESET.DEPENDENT.CLASSES TSTREAM USE DEPENDENT))))
(RESET.NCOUNTER
(LAMBDA (TSTREAM USE REF.TYPE) (* \; "Edited 21-Feb-2025 00:38 by rmk")
(* |fsg| "12-Dec-86 11:07")
(LET* ((TEMPLATE (SELECTQ USE
(NGROUP (|fetch| (NUMBEROBJ TEMPLATE) |of| (CAR (GETHASH REF.TYPE
(TSP.GET.NGROUP.ARRAY
TSTREAM)))))
NIL))
(COUNTER (NCOUNTER? TSTREAM USE REF.TYPE TEMPLATE)))
(|replace| NCOUNT |of| COUNTER |with| (COND
(TEMPLATE (SUB1 (|fetch| NG.START |of| TEMPLATE)))
(T 0))))))
(GET.NCOUNTER
(LAMBDA (TSTREAM USE REF.TYPE MOTHER.CLASS TEMPLATE NBR.DATUM)
(* \; "Edited 26-Feb-2025 18:29 by rmk")
(* \; "Edited 25-Feb-2025 00:17 by rmk")
(* \; "Edited 21-Feb-2025 00:25 by rmk")
(* |fsg| "11-Aug-87 15:26")
(let ((counter (ncounter? window use ref.type template)))
(and counter (progn (|with| ngcounter counter (|add| ncount 1)
(and (eq use 'ngroup)
template
(|replace| (ngtemplate ng.currentval) |of| template
|with| ncount)))
(cond
(mother.class (flatten.tree.to.string window use ref.type nbr.datum))
(t (mkstring (|fetch| ncount |of| counter)))))))))
(LET ((COUNTER (NCOUNTER? TSTREAM USE REF.TYPE TEMPLATE)))
(CL:WHEN COUNTER
(|add| (|fetch| (NGCOUNTER NCOUNT) |of| COUNTER)
1)
(CL:WHEN (AND (EQ USE 'NGROUP)
TEMPLATE)
(|replace| (NGTEMPLATE NG.CURRENTVAL) |of| TEMPLATE |with| (|fetch| (NGCOUNTER
NCOUNT)
|of| COUNTER)))
(CL:IF MOTHER.CLASS
(FLATTEN.TREE.TO.STRING TSTREAM USE REF.TYPE NBR.DATUM)
(MKSTRING (|fetch| NCOUNT |of| COUNTER)))))))
(ncounter?
(lambda (window use ref.type template) (* |fsg| "14-Jul-87 14:10")
(* * |Return| |the| |record| |for| |this| |number| |counter.|
 i\f |the| |record| |doesn't| |exist,| |we| |create| |one| |based| |on| |the|
 use |value.|)
(NCOUNTER?
(LAMBDA (TSTREAM USE REF.TYPE TEMPLATE) (* \; "Edited 21-Feb-2025 10:17 by rmk")
(* |fsg| "14-Jul-87 14:10")
(let ((counter.id (mkatom (concat (selectq use
(ngroup (concat "NGROUP." ref.type "."))
(note "ENDNOTE.")
(error "Unknown NUMBER type" use))
(* |;;;| "Return the record for this number counter. If the record doesn't exist, we create one based on the USE value.")
(LET ((COUNTER.ID (MKATOM (CONCAT (SELECTQ USE
(NGROUP (CONCAT "NGROUP." REF.TYPE "."))
(NOTE "ENDNOTE.")
(ERROR "Unknown NUMBER type" USE))
"COUNTER"))))
(or (windowprop window counter.id)
(progn (windowprop window counter.id (|create| ngcounter
ncount _ (cond
((and (eq use 'ngroup)
template)
(sub1 (|fetch| ng.start
|of| template)))
(t 0))
ancestry _
(selectq use
(ngroup (list.ancestors ref.type nil
window))
nil)))
(windowaddprop window 'counters counter.id)
(windowprop window counter.id))))))
(OR (TMAXPROP TSTREAM COUNTER.ID)
(PROGN (TMAXPROP TSTREAM COUNTER.ID (|create| NGCOUNTER
NCOUNT _ (COND
((AND (EQ USE 'NGROUP)
TEMPLATE)
(SUB1 (|fetch| NG.START
|of| TEMPLATE)))
(T 0))
ANCESTRY _
(SELECTQ USE
(NGROUP (LIST.ANCESTORS REF.TYPE NIL
TSTREAM))
NIL)))
(STREAMADDPROP TSTREAM 'COUNTERS COUNTER.ID)
(TMAXPROP TSTREAM COUNTER.ID))))))
(flatten.tree.to.string
(lambda (window use ref.type nbr.datum) (* |fsg| " 5-Aug-87 14:12")
(let* ((ngroup.counter (ncounter? window use ref.type))
(ngroup.list (append (|fetch| (ngcounter ancestry) |of| ngroup.counter)))
(abbrevval (|with| numberobj nbr.datum (and abbrev-val (list.ancestors abbrev-val nil
window))))
(flat.tree "")
ancestor)
(and ngroup.list (|while| (setq ancestor (|pop| ngroup.list))
|do| (or (and abbrevval (memb ancestor abbrevval))
(setq flat.tree (concat flat.tree
(ngroup.chartype window ancestor
(|fetch| (ngcounter ncount)
|of| (ncounter? window use
ancestor))
(or (car ngroup.list)
ref.type)))))))
(setq flat.tree (concat flat.tree (ngroup.chartype window ref.type (|fetch| (ngcounter
ncount)
|of| ngroup.counter)
nil))))))
(FLATTEN.TREE.TO.STRING
(LAMBDA (TSTREAM USE REF.TYPE NBR.DATUM) (* \; "Edited 25-Feb-2025 00:20 by rmk")
(* \; "Edited 21-Feb-2025 00:39 by rmk")
(* |fsg| " 5-Aug-87 14:12")
(LET* ((NGROUP.COUNTER (NCOUNTER? TSTREAM USE REF.TYPE))
(NGROUP.LIST (APPEND (|fetch| (NGCOUNTER ANCESTRY) |of| NGROUP.COUNTER)))
(ABBREVVAL (|with| NUMBEROBJ NBR.DATUM (AND ABBREV-VAL (LIST.ANCESTORS ABBREV-VAL NIL
TSTREAM))))
(FLAT.TREE "")
ANCESTOR)
(CL:WHEN NGROUP.LIST
(|while| (SETQ ANCESTOR (|pop| NGROUP.LIST)) |unless| (AND ABBREVVAL (MEMB ANCESTOR
ABBREVVAL))
|do| (SETQ FLAT.TREE (CONCAT FLAT.TREE (NGROUP.CHARTYPE TSTREAM ANCESTOR
(|fetch| (NGCOUNTER NCOUNT)
|of| (NCOUNTER? TSTREAM USE
ANCESTOR))
(OR (CAR NGROUP.LIST)
REF.TYPE))))))
(SETQ FLAT.TREE (CONCAT FLAT.TREE (NGROUP.CHARTYPE TSTREAM REF.TYPE (|fetch| (NGCOUNTER
NCOUNT)
|of| NGROUP.COUNTER)
NIL))))))
(ngroup.chartype
(lambda (window ref.type ncount next.ngroup) (* |fsg| "11-Aug-87 15:23")
(* * |Convert| |the| |number| ncount |to| |the| |format| |specified| |in|
 template. delimitflg |is| |the| |next| |NGroup's| |preceding| |delimiter| |or|
 nil |if| |either| |the| |next| |NGroup| |has| |no| |preceding| |delimiter| |or|
 |there| |is| |no| |next| |NGroup.|)
(NGROUP.CHARTYPE
(LAMBDA (TSTREAM REF.TYPE NCOUNT NEXT.NGROUP) (* \; "Edited 26-Feb-2025 14:54 by rmk")
(* \; "Edited 21-Feb-2025 00:39 by rmk")
(* |fsg| "11-Aug-87 15:23")
(let ((delimitflg (and next.ngroup (|with| ngtemplate (|fetch| (numberobj template)
|of| (car (gethash next.ngroup
(tsp.get.ngroup.array
window))))
ng.text-before))))
(|with| ngtemplate (|fetch| (numberobj template) |of| (car (gethash ref.type (
 tsp.get.ngroup.array
window))))
(concat (or ng.text-before "")
(ngroup.chartype.convert ng.chartype ncount)
(cond
(delimitflg "")
(t (or ng.text-after ""))))))))
(* |;;;| "Convert the number NCOUNT to the format specified in TEMPLATE. DELIMITFLG is the next NGroup's preceding delimiter or NIL if either the next NGroup has no preceding delimiter or there is no next NGroup.")
(ngroup.chartype.convert
(lambda (chartype ncount) (* |fsg| "28-Jul-87 11:12")
(* * |Convert| |the| |value| ncount |to| |the| |type| |specified| |by|
 chartype. i\f ncount < 1 |and| chartype |is| |Letter/Roman| |then| |we|
 |return| nil. |This| |anomaly| |is| |usually| |caused| |by| |out-of-order|
 |NGroups.|)
(LET ((TEMPLATE (|fetch| (NUMBEROBJ TEMPLATE) |of| (CAR (GETHASH REF.TYPE (TSP.GET.NGROUP.ARRAY
TSTREAM)))))
(DELIMITFLG (AND NEXT.NGROUP (|fetch| (NGTEMPLATE NG.DELIMBEFORE)
|of| (|fetch| (NUMBEROBJ TEMPLATE)
|of| (CAR (GETHASH NEXT.NGROUP (
 TSP.GET.NGROUP.ARRAY
TSTREAM))))))))
(CONCAT (OR (|fetch| (NGTEMPLATE NG.DELIMBEFORE) |of| TEMPLATE)
"")
(NGROUP.CHARTYPE.CONVERT TEMPLATE NCOUNT)
(CL:IF DELIMITFLG
""
(OR (|fetch| (NGTEMPLATE NG.DELIMAFTER) |of| TEMPLATE)
""))))))
(cond
((fixp ncount)
(cond
((or (igreaterp ncount 0)
(eq chartype '|Number|)
(eq chartype '|Null String|))
(selectq chartype
(uppercase\ letter
(number.to.letter ncount t))
(|lowercase letter|
(number.to.letter ncount))
(uppercase\ roman
(romannumerals ncount t))
(|lowercase roman|
(romannumerals ncount))
(|Null String| "")
(|Number| (mkstring ncount))
(error "Unknown display type" chartype)))
(t (mkstring nil))))
(t (error "Invalid integer" ncount)))))
(NGROUP.CHARTYPE.CONVERT
(LAMBDA (TEMPLATE NCOUNT) (* \; "Edited 28-Feb-2025 23:51 by rmk")
(* \; "Edited 25-Feb-2025 22:44 by rmk")
(* |fsg| "28-Jul-87 11:12")
(CL:UNLESS (FIX NCOUNT)
(ERROR "Invalid integer" NCOUNT))
(LET ((CHARTYPE (|fetch| (NGTEMPLATE NG.CHARTYPE) |of| TEMPLATE)))
(CL:UNLESS (OR (IGEQ NCOUNT 1)
(MEMB CHARTYPE '(|Number| |Null String|)))
(ERROR "Invalid integer" NCOUNT))
(|if| (OR (IGEQ NCOUNT 1)
(MEMB CHARTYPE '(|Number| |Null String|)))
|then| "Number out of order?"
|else| (SELECTQ CHARTYPE
(UPPERCASE\ LETTER
(NUMBER.TO.LETTER NCOUNT T))
(|lowercase letter|
(NUMBER.TO.LETTER NCOUNT))
(UPPERCASE\ ROMAN
(ROMANNUMERALS NCOUNT T))
(|lowercase roman|
(ROMANNUMERALS NCOUNT))
(|Null String| "")
(|Number| (MKSTRING NCOUNT))
(ERROR "Unknown display type" CHARTYPE))))))
(number.to.letter
(lambda (number ucflg) (* |fsg| " 5-Dec-86 10:18")
@ -435,22 +478,22 @@
(ucflg (u-case ltrlst))
(t (l-case ltrlst))))))
(remove.all.counters
(lambda (window) (* |ss:| "30-Sep-85 09:38")
(|for| counter |in| (windowprop window 'counters) |do| (windowprop window counter nil)
|finally| (windowprop window 'counters nil))))
(REMOVE.ALL.COUNTERS
(LAMBDA (TSTREAM) (* \; "Edited 21-Feb-2025 10:17 by rmk")
(* |ss:| "30-Sep-85 09:38")
(|for| COUNTER |in| (TMAXPROP TSTREAM 'COUNTERS) |do| (TMAXPROP TSTREAM COUNTER NIL)
|finally| (TMAXPROP TSTREAM 'COUNTERS NIL))))
)
(putprops tmax-ngraph copyright ("Xerox Corporation" 1987))
(declare\: dontcopy
(filemap (nil (1425 11144 (graphmenu 1435 . 2488) (initial.ngroup.graph 2490 . 3059) (
ngroup.make.rootnode 3061 . 3282) (tspgraphregion 3284 . 3876) (close.ngroup.graph 3878 . 4462) (
ngroup.graph.closefn 4464 . 5065) (add.ngroup.to.mother.node 5067 . 5461) (add.node.to.graph 5463 .
6568) (collect.hasharray 6570 . 6856) (create.ngroup.node 6858 . 7535) (get.fromnodes 7537 . 7737) (
get.tonodes 7739 . 8326) (find.node 8328 . 8501) (tsp.get.ngroup.array 8503 . 8669) (tsp.legalid 8671
. 9832) (list.ancestors 9834 . 10278) (toplevel.sisters 10280 . 10662) (get.ngroup.mother 10664 .
11142)) (11189 25278 (downdate.numberobjs 11199 . 13348) (update.numberobjs 13350 . 15883) (
reset.dependent.classes 15885 . 16258) (reset.ncounter 16260 . 17044) (get.ncounter 17046 . 17876) (
ncounter? 17878 . 19663) (flatten.tree.to.string 19665 . 21370) (ngroup.chartype 21372 . 22825) (
ngroup.chartype.convert 22827 . 24000) (number.to.letter 24002 . 24992) (remove.all.counters 24994 .
25276)))))
stop
(DECLARE\: DONTCOPY
(FILEMAP (NIL (1692 12881 (GRAPHMENU 1702 . 2983) (INITIAL.NGROUP.GRAPH 2985 . 3763) (
NGROUP.MAKE.ROOTNODE 3765 . 3986) (TSPGRAPHREGION 3988 . 4639) (CLOSE.NGROUP.GRAPH 4641 . 5245) (
NGROUP.GRAPH.CLOSEFN 5247 . 5904) (ADD.NGROUP.TO.MOTHER.NODE 5906 . 6411) (ADD.NODE.TO.GRAPH 6413 .
7624) (COLLECT.HASHARRAY 7626 . 7912) (CREATE.NGROUP.NODE 7914 . 8749) (GET.FROMNODES 8751 . 9057) (
GET.TONODES 9059 . 9646) (FIND.NODE 9648 . 9927) (TSP.GET.NGROUP.ARRAY 9929 . 10199) (TSP.LEGALID
10201 . 11362) (LIST.ANCESTORS 11364 . 11893) (TOPLEVEL.SISTERS 11895 . 12333) (GET.NGROUP.MOTHER
12335 . 12879)) (12928 27456 (DOWNDATE.NUMBEROBJS 12938 . 14887) (UPDATE.NUMBEROBJS 14889 . 16686) (
RESET.DEPENDENT.CLASSES 16688 . 17263) (RESET.NCOUNTER 17265 . 18156) (GET.NCOUNTER 18158 . 19417) (
NCOUNTER? 19419 . 21229) (FLATTEN.TREE.TO.STRING 21231 . 23129) (NGROUP.CHARTYPE 23131 . 24689) (
NGROUP.CHARTYPE.CONVERT 24691 . 26076) (NUMBER.TO.LETTER 26078 . 27068) (REMOVE.ALL.COUNTERS 27070 .
27454)))))
STOP

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -1,28 +1,39 @@
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "XCL" BASE 10)
(FILECREATED "25-Jun-2024 12:00:23" |{WMEDLEY}<lispusers>tmax>TMAX-NUMBER.;6| 34833
(FILECREATED "12-Aug-2025 08:33:13" 
|{DSK}<Users>kaplan>Local>medley3.5>working-medley>lispusers>tmax>TMAX-NUMBER.;33| 34020
:EDIT-BY |rmk|
:CHANGES-TO (FNS NUMBER.DISPLAYFN NUMBER.PREPRINTFN NUMBER.IMAGEBOXFN NUMBER.PUTFN NUMBER.GETFN
NUMBER.COPYFN)
:CHANGES-TO (FNS NGROUP.BUTTONEVENTINFN)
:PREVIOUS-DATE "24-Jun-2024 23:30:47" |{WMEDLEY}<lispusers>tmax>TMAX-NUMBER.;5|)
:PREVIOUS-DATE "28-Feb-2025 23:58:55"
|{DSK}<Users>kaplan>Local>medley3.5>working-medley>lispusers>tmax>TMAX-NUMBER.;32|)
(PRETTYCOMPRINT TMAX-NUMBERCOMS)
(RPAQQ TMAX-NUMBERCOMS
((* |Developed| |under| |support| |from| NIH |grant| RR-00785.)
(* |Written| |by| |Frank| |Gilmurray| |and| |Sami| |Shaio.|)
(* * TMAX-NUMBER |ImageObject| |functions|)
(
(* |;;| "Developed under support from NIH grant RR-00785.")
(* |;;| "Written by Frank Gilmurray and Sami Shaio.")
(* |;;;| "TMAX-NUMBER ImageObject functions")
(FNS NUMBEROBJ NUMBEROBJP NGROUPP NUMBER.DISPLAYFN NUMBER.PREPRINTFN NUMBER.IMAGEBOXFN
NUMBER.PUTFN NUMBER.GETFN NUMBER.COPYFN NUMBER.BUTTONEVENTINFN NUMBEROBJ.TEDIT-TO-TEX-FN
)
NUMBER.NUMSTRING NUMBER.DISPLAYSTRING NUMBER.PUTFN NUMBER.GETFN NUMBER.COPYFN
NUMBER.BUTTONEVENTINFN NUMBEROBJ.TEDIT-TO-TEX-FN)
(FNS COPY.NGROUP.BRANCH DUMP.NGROUP.GRAPH NGROUP.BUTTONEVENTINFN NGROUP.DEFINE.TAG
NUMBER.DELETE.TAG NGROUP.SHOW.TAG CHANGE.INSERTED.NGROUP.FORMAT
CHANGE.NGROUP.FORMAT.#TEXT SHOW.INSERTED.NGROUP.FORMAT)
(* * |Variable| |and| |Record| |definitions|)
NUMBER.DELETE.TAG NGROUP.SHOW.TAG CHANGE.NGROUP.FORMAT.#TEXT SHOW.INSERTED.NGROUP.FORMAT
)
(* |;;;| "Variable and Record definitions")
(VARS NGROUP.GRAPH.MENU.ITEMS NGROUP.INSERTED.MENU.ITEMS NGROUP.INSERTED.NOTAG.ITEMS
NGROUP.INSERTED.TAG.ITEMS)
(FILES (COMPILED SYSLOAD)
@ -44,14 +55,17 @@
(* |Developed| |under| |support| |from| NIH |grant| RR-00785.)
(* |;;| "Developed under support from NIH grant RR-00785.")
(* |Written| |by| |Frank| |Gilmurray| |and| |Sami| |Shaio.|)
(* |;;| "Written by Frank Gilmurray and Sami Shaio.")
(* * TMAX-NUMBER |ImageObject| |functions|)
(* |;;;| "TMAX-NUMBER ImageObject functions")
(DEFINEQ
@ -75,74 +89,73 @@
(IMAGEOBJPROP NEWOBJ 'TEDIT-TO-TEX-FN (FUNCTION NUMBEROBJ.TEDIT-TO-TEX-FN))
NEWOBJ)))
(numberobjp
(lambda (imobj) (* |ss:| "27-Jun-87 16:21")
(* * |Tests| |an| |imageobj| |to| |see| |if| |it| |is| \a |number|
 |imageobject.| |The| |only| |number| |imageobjects| |so| |far| |are| |NGroups|
 |and| |Endnotes.| b\y |convention,| |testing| |functions| |for| |an|
 |imageobject| |will| |be| |named| (concat |<type| |of| |imageobj>| "P"))
(NUMBEROBJP
(LAMBDA (IMOBJ) (* \; "Edited 23-Feb-2025 21:39 by rmk")
(* |ss:| "27-Jun-87 16:21")
(and imobj (eq (imageobjprop imobj 'type)
'numberobj))))
(* |;;;| "Tests an imageobj to see if it is a number imageobject. The only number imageobjects so far are NGroups and Endnotes. By convention, testing functions for an imageobject will be named (CONCAT <type of imageobj> 'P')")
(ngroupp
(lambda (imobj) (* |ss:| "27-Jun-87 16:15")
(* * |Like| numberobjp |but| |also| |checks| |for| |NGroup| |ImageObject.|)
(AND IMOBJ (EQ (IMAGEOBJPROP IMOBJ 'TYPE)
'NUMBEROBJ))))
(and (numberobjp imobj)
(eq (|fetch| (numberobj use) |of| (|fetch| objectdatum |of| imobj))
'ngroup))))
(NGROUPP
(LAMBDA (IMOBJ LABEL) (* \; "Edited 23-Feb-2025 21:42 by rmk")
(* |ss:| "27-Jun-87 16:15")
(* |;;;| "Like NUMBEROBJP but also checks for NGroup ImageObject and LABEL if given")
(AND (NUMBEROBJP IMOBJ)
(EQ (|fetch| (NUMBEROBJ USE) |of| (|fetch| OBJECTDATUM |of| IMOBJ))
'NGROUP)
(OR (NOT LABEL)
(EQ LABEL (|fetch| (NUMBEROBJ REF.TYPE) |of| (|fetch| OBJECTDATUM |of| IMOBJ)))))))
(NUMBER.DISPLAYFN
(LAMBDA (IMAGE.OBJ STREAM) (* \; "Edited 25-Jun-2024 11:59 by rmk")
(LAMBDA (IMAGE.OBJ IMAGESTREAM IMAGESTREAMTYPE TSTREAM) (* \; "Edited 26-Feb-2025 15:23 by rmk")
(* \; "Edited 25-Feb-2025 10:48 by rmk")
(* \; "Edited 20-Feb-2025 23:54 by rmk")
(* \; "Edited 25-Jun-2024 11:59 by rmk")
(* \; "Edited 16-Mar-2024 07:46 by rmk")
(* |fsg| "24-Sep-87 14:56")
(* |;;| "Display function for numberobjs. Allows different formats for display according to the use to which the numberobj is being put. If no specific action is specified, displaying defaults to printing out as a plain number.*")
(DECLARE (USEDFREE TSTREAM))
(|with| NUMBEROBJ (|fetch| OBJECTDATUM |of| IMAGE.OBJ)
(LET* ((MAIN.WINDOW (\\TEDIT.PRIMARYPANE TSTREAM))
(IMAGE.TAG (IMAGEOBJPROP IMAGE.OBJ 'TAG))
(OLD.FONT (DSPFONT NIL STREAM))
(NBR.FONT (SELECTQ USE
(NOTE (|fetch| (ENDNOTEFONTS NUMBER.FONT) |of| (GET.ENDNOTE.FONTS
MAIN.WINDOW)))
(NGROUP FONT)
(ERROR "Undefined USE field" USE))))
(AND IMAGE.TAG (OR (TSP.GETCODEVAL IMAGE.TAG MAIN.WINDOW)
(TSP.PUTCODE IMAGE.TAG IMAGE.OBJ MAIN.WINDOW)))
(AND (FONTP NBR.FONT)
(DSPFONT (FONTCREATE (FONTPROP NBR.FONT 'FAMILY)
(FONTPROP NBR.FONT 'SIZE)
(FONTPROP NBR.FONT 'FACE))
STREAM))
(OR (IMAGESTREAMTYPEP STREAM 'DISPLAY)
(SETQ PAGE.NUMBER (CAR FORMATTINGSTATE)))
(TMAX.SHADEOBJ IMAGE.OBJ STREAM)
(SELECTQ USE
(NGROUP (PRIN1 (CONCAT (OR TEXT.BEFORE# "")
(MKSTRING NUMSTRING)
(OR TEXT.AFTER# ""))
STREAM)
(OR (IMAGESTREAMTYPEP STREAM 'DISPLAY)
(UPDATE.NGROUP.MANINDEX TEMPLATE REF.TYPE MAIN.WINDOW)))
(NOTE (LET ((CURRENT.YPOS (DSPYPOSITION NIL STREAM))
(IMAGEBOX (LISTGET (|fetch| IMAGEOBJPLIST |of| IMAGE.OBJ)
'BOUNDBOX)))
(DSPYPOSITION (IPLUS CURRENT.YPOS (IDIFFERENCE (|fetch| YSIZE
|of| IMAGEBOX)
(FONTPROP STREAM
'HEIGHT)))
STREAM)
(PRIN1 (MKSTRING NUMSTRING)
STREAM)
(DSPYPOSITION CURRENT.YPOS STREAM)))
NIL)
(DSPFONT OLD.FONT STREAM)))))
(DECLARE (USEDFREE FORMATTINGSTATE))
(LET* ((NUMOBJ (|fetch| OBJECTDATUM |of| IMAGE.OBJ))
(USE (|fetch| (NUMBEROBJ USE) |of| NUMOBJ))
(IMAGE.TAG (IMAGEOBJPROP IMAGE.OBJ 'TAG))
(OLD.FONT (DSPFONT NIL IMAGESTREAM))
(NBR.FONT (SELECTQ USE
(NOTE (|fetch| (ENDNOTEFONTS NUMBER.FONT) |of| (GET.ENDNOTE.FONTS TSTREAM)))
(NGROUP (|fetch| (NUMBEROBJ FONT) |of| NUMOBJ))
(ERROR "Undefined USE field" USE))))
(CL:WHEN IMAGE.TAG
(OR (TSP.GETCODEVAL IMAGE.TAG TSTREAM)
(TSP.PUTCODE IMAGE.TAG IMAGE.OBJ TSTREAM)))
(CL:WHEN (FONTP NBR.FONT)
(DSPFONT NBR.FONT IMAGESTREAM))
(CL:UNLESS (IMAGESTREAMTYPEP IMAGESTREAM 'DISPLAY)
(|replace| (NUMBEROBJ PAGE.NUMBER) |of| NUMOBJ |with| (CAR FORMATTINGSTATE)))
(TMAX.SHADEOBJ IMAGE.OBJ IMAGESTREAM)
(SELECTQ USE
(NGROUP (PRIN1 (NUMBER.DISPLAYSTRING IMAGE.OBJ)
IMAGESTREAM)
(CL:UNLESS (IMAGESTREAMTYPEP IMAGESTREAM 'DISPLAY)
(UPDATE.NGROUP.MANINDEX NUMOBJ TSTREAM)))
(NOTE (LET ((CURRENT.YPOS (DSPYPOSITION NIL IMAGESTREAM))
(IMAGEBOX (IMAGEOBJPROP IMAGE.OBJ 'BOUNDBOX)))
(DSPYPOSITION (IPLUS CURRENT.YPOS (IDIFFERENCE (|fetch| YSIZE |of| IMAGEBOX)
(FONTPROP IMAGESTREAM 'HEIGHT)))
IMAGESTREAM)
(PRIN3 (|fetch| (NUMBEROBJ NUMSTRING) |of| NUMOBJ)
IMAGESTREAM)
(DSPYPOSITION CURRENT.YPOS IMAGESTREAM)))
NIL)
(DSPFONT OLD.FONT IMAGESTREAM))))
(NUMBER.PREPRINTFN
(LAMBDA (IMAGE.OBJ) (* \; "Edited 25-Jun-2024 11:59 by rmk")
(LAMBDA (IMAGE.OBJ) (* \; "Edited 25-Feb-2025 10:49 by rmk")
(* \; "Edited 25-Jun-2024 11:59 by rmk")
(* \; "Edited 16-Mar-2024 07:47 by rmk")
(* \; "Edited 18-May-99 22:51 by rmk:")
(* |fsg| "24-Sep-87 14:56")
@ -151,80 +164,85 @@
(DECLARE (USEDFREE TSTREAM))
(WITH NUMBEROBJ (FETCH OBJECTDATUM OF IMAGE.OBJ)
(LET* ((MAIN.WINDOW (\\TEDIT.PRIMARYPANE TSTREAM))
(IMAGE.TAG (IMAGEOBJPROP IMAGE.OBJ 'TAG)))
(AND IMAGE.TAG (OR (TSP.GETCODEVAL IMAGE.TAG MAIN.WINDOW)
(TSP.PUTCODE IMAGE.TAG IMAGE.OBJ MAIN.WINDOW)))
(SELECTQ USE
(NGROUP (CONCAT (OR TEXT.BEFORE# "")
(MKSTRING NUMSTRING)
(OR TEXT.AFTER# "")))
(NOTE (MKSTRING NUMSTRING))
NIL)))))
(LET ((IMAGE.TAG (IMAGEOBJPROP IMAGE.OBJ 'TAG)))
(CL:WHEN IMAGE.TAG
(OR (TSP.GETCODEVAL IMAGE.TAG TSTREAM)
(TSP.PUTCODE IMAGE.TAG IMAGE.OBJ TSTREAM)))
(NUMBER.DISPLAYSTRING IMAGE.OBJ)))))
(NUMBER.IMAGEBOXFN
(LAMBDA (OBJ STREAM CURRENTX RIGHTMARGIN) (* \; "Edited 25-Jun-2024 11:59 by rmk")
(LAMBDA (OBJ STREAM CURRENTX RIGHTMARGIN TSTREAM) (* \; "Edited 26-Feb-2025 15:31 by rmk")
(* \; "Edited 25-Feb-2025 10:55 by rmk")
(* \; "Edited 25-Jun-2024 11:59 by rmk")
(* \; "Edited 25-May-2024 20:46 by rmk")
(* \; "Edited 16-Mar-2024 07:47 by rmk")
(* |fsg| " 4-Aug-87 14:56")
(* |;;| "For Endnote numbers, the YSize is the current font height plus 0.25 times the Endnote number font height. We do this so the the Endnote number will be superscripted but not too much.")
(* |;;| "For Endnote numbers the YSize is the current font height plus 0.25 times the Endnote number font height. We do this so that the Endnote number will be superscripted but not too much.")
(* |;;| "WHY ARE THE NOTES HUNG AS WINDOWPROPS INSTEAD OF TEXTPROPS ")
(DECLARE (USEDFREE TSTREAM))
(LET* ((NUMBEROBJ (|fetch| OBJECTDATUM |of| OBJ))
(IMOBJ.STRING (MKSTRING (|fetch| (NUMBEROBJ NUMSTRING) |of| NUMBEROBJ)))
(USE (|fetch| (NUMBEROBJ USE) |of| NUMBEROBJ))
(FONT (SELECTQ USE
(NOTE (|fetch| (ENDNOTEFONTS NUMBER.FONT) |of| (GET.ENDNOTE.FONTS (
\\TEDIT.PRIMARYPANE
TSTREAM))))
(NOTE (|fetch| (ENDNOTEFONTS NUMBER.FONT) |of| (GET.ENDNOTE.FONTS TSTREAM)))
(NGROUP (|fetch| (NUMBEROBJ FONT) |of| NUMBEROBJ))
(ERROR "Undefined USE field" USE)))
(HEIGHT (FONTPROP FONT 'HEIGHT)))
(CL:WHEN (EQ USE 'NGROUP)
(SETQ IMOBJ.STRING (CONCAT (OR (STRINGP (|fetch| (NUMBEROBJ TEXT.BEFORE#) |of|
NUMBEROBJ
))
"")
IMOBJ.STRING
(OR (STRINGP (|fetch| (NUMBEROBJ TEXT.AFTER#) |of| NUMBEROBJ)
)
""))))
(HEIGHT (FONTPROP FONT 'HEIGHT))
STRING)
(SETQ STRING (SELECTQ USE
(NOTE (SETQ HEIGHT (FIX (PLUS (TIMES (DSPSCALE NIL STREAM)
HEIGHT)
(TIMES 0.25 HEIGHT))))
(|fetch| (NUMBEROBJ NUMSTRING) |of| NUMBEROBJ))
(NGROUP (NUMBER.DISPLAYSTRING OBJ))
NIL))
(|create| IMAGEBOX
XSIZE _ (STRINGWIDTH IMOBJ.STRING FONT)
YSIZE _ (SELECTQ USE
(NOTE (FIX (PLUS (TIMES (DSPSCALE NIL STREAM)
HEIGHT)
(TIMES 0.25 HEIGHT))))
HEIGHT)
XSIZE _ (STRINGWIDTH STRING FONT)
YSIZE _ HEIGHT
YDESC _ (FONTPROP FONT 'DESCENT)
XKERN _ 0))))
(NUMBER.NUMSTRING
(LAMBDA (OBJ NCOUNT) (* \; "Edited 25-Feb-2025 21:29 by rmk")
(LET ((DATUM (|fetch| OBJECTDATUM |of| OBJ))
NEWSTRING)
(SETQ NEWSTRING (NGROUP.CHARTYPE.CONVERT (|fetch| (NUMBEROBJ TEMPLATE) |of| DATUM)
NCOUNT))
(CL:UNLESS (STREQUAL NEWSTRING (|fetch| (NUMBEROBJ NUMSTRING) |of| DATUM))
(|replace| (NUMBEROBJ NUMSTRING) |of| DATUM |with| NEWSTRING)))))
(NUMBER.DISPLAYSTRING
(LAMBDA (OBJ) (* \; "Edited 25-Feb-2025 10:58 by rmk")
(|with| NUMBEROBJ (|fetch| OBJECTDATUM |of| OBJ)
(CONCAT (OR TEXT.BEFORE# "")
NUMSTRING
(OR TEXT.AFTER# "")))))
(NUMBER.PUTFN
(LAMBDA (OBJ STREAM) (* \; "Edited 25-Jun-2024 11:59 by rmk")
(LAMBDA (OBJ STREAM) (* \; "Edited 22-Feb-2025 17:45 by rmk")
(* \; "Edited 25-Jun-2024 11:59 by rmk")
(* \; "Edited 16-Mar-2024 07:48 by rmk")
(* |fsg| " 5-Aug-87 08:24")
(DECLARE (USEDFREE TSTREAM))
(LET ((WINDOW (\\TEDIT.PRIMARYPANE TSTREAM))
(USE (|with| NUMBEROBJ (|fetch| OBJECTDATUM |of| OBJ)
(LET ((USE (|with| NUMBEROBJ (|fetch| OBJECTDATUM |of| OBJ)
USE))
(OLD.FONT (|with| NUMBEROBJ (|fetch| OBJECTDATUM |of| OBJ)
FONT)))
(SELECTQ USE
(NOTE (NOTE.PUTFN OBJ STREAM WINDOW))
(NOTE (NOTE.PUTFN OBJ STREAM TSTREAM))
(NGROUP (LET ((NGROUP.REC (COPY (|fetch| OBJECTDATUM |of| OBJ))))
(|with| NUMBEROBJ NGROUP.REC (SETQ FONT (LIST.FONT.PROPS FONT))
(PRIN4 (LIST '|NGroup| (AND (WINDOWPROP WINDOW 'DUMPNGROUPGRAPH)
(DUMP.NGROUP.GRAPH WINDOW))
(PRIN4 (LIST '|NGroup| (AND (TMAXPROP TSTREAM 'DUMPNGROUPGRAPH)
(DUMP.NGROUP.GRAPH TSTREAM))
(IMAGEOBJPROP OBJ 'TAG)
NGROUP.REC)
STREAM))))
(ERROR "Unknown NUMBER ImageObject type" USE)))))
(NUMBER.GETFN
(LAMBDA (STREAM COPY.OBJECT) (* \; "Edited 25-Jun-2024 11:59 by rmk")
(LAMBDA (STREAM COPY.OBJECT) (* \; "Edited 28-Feb-2025 23:39 by rmk")
(* \; "Edited 26-Feb-2025 12:24 by rmk")
(* \; "Edited 21-Feb-2025 10:17 by rmk")
(* \; "Edited 25-Jun-2024 11:59 by rmk")
(* \; "Edited 16-Mar-2024 07:48 by rmk")
(* |fsg| " 3-Sep-87 15:17")
@ -232,35 +250,38 @@
(DECLARE (USEDFREE TSTREAM))
(LET ((NBROBJ.DATUM (OR COPY.OBJECT (CDR (READ STREAM))))
(NEWOBJ (NUMBEROBJ))
(WINDOW (\\TEDIT.PRIMARYPANE TSTREAM)))
(TSP.SETUP.FMMENU WINDOW)
(AND (ILESSP (LENGTH NBROBJ.DATUM)
3)
(SETQ NBROBJ.DATUM (CONS NIL NBROBJ.DATUM)))
(AND (CAR NBROBJ.DATUM)
(NOT (AND (BOUNDP 'TMAX.PRUNE.NGRAPH)
TMAX.PRUNE.NGRAPH))
(COPY.NGROUP.BRANCH (CAR NBROBJ.DATUM)
WINDOW))
(AND (CADR NBROBJ.DATUM)
(NOT (GETHASH (CADR NBROBJ.DATUM)
(WINDOWPROP WINDOW 'TSP.CODE.ARRAY)))
(PROGN (TSP.PUTCODE (CADR NBROBJ.DATUM)
NEWOBJ WINDOW)
(IMAGEOBJPROP NEWOBJ 'TAG (CADR NBROBJ.DATUM))))
(NEWOBJ (NUMBEROBJ)))
(* |;;| "READ returns (NGroup [graphstuff] [actual datum]")
(TSP.SETUP.FMMENU TSTREAM)
(CL:WHEN (ILESSP (LENGTH NBROBJ.DATUM)
3) (* \; "No graph, push NIL")
(|push| NBROBJ.DATUM NIL))
(CL:WHEN (AND (CAR NBROBJ.DATUM)
(NOT (AND (BOUNDP 'TMAX.PRUNE.NGRAPH)
TMAX.PRUNE.NGRAPH))) (* \; "The graph is in this object")
(COPY.NGROUP.BRANCH (CAR NBROBJ.DATUM)
TSTREAM))
(CL:WHEN (AND (CADR NBROBJ.DATUM)
(NOT (GETHASH (CADR NBROBJ.DATUM)
(TMAXPROP TSTREAM 'TSP.CODE.ARRAY))))
(* \; "CADR is the actual DATUM")
(TSP.PUTCODE (CADR NBROBJ.DATUM)
NEWOBJ TSTREAM)
(IMAGEOBJPROP NEWOBJ 'TAG (CADR NBROBJ.DATUM)))
(|with| NUMBEROBJ (SETQ NBROBJ.DATUM (NGROUP.FIXUP.RECORDS (CADDR NBROBJ.DATUM)
COPY.OBJECT))
(SELECTQ USE
(NOTE (NOTE.GETFN NEWOBJ NBROBJ.DATUM WINDOW))
(NOTE (NOTE.GETFN NEWOBJ NBROBJ.DATUM TSTREAM))
(NGROUP (AND (LISTP FONT)
(SETQ FONT (FONTCREATE FONT)))
(CREATE.NGROUP.NODE REF.TYPE NGROUP.MOTHER NBROBJ.DATUM WINDOW)
(CREATE.NGROUP.NODE NGROUP.MOTHER NIL NIL WINDOW)
(ADD.NGROUP.TO.MOTHER.NODE REF.TYPE NGROUP.MOTHER WINDOW)
(WINDOWPROP WINDOW 'REBUILD.GRAPHFLG T)
(AND (|fetch| (NGTEMPLATE NG.MANUALINDEX) |of| TEMPLATE)
(WINDOWADDPROP WINDOW 'MANUALGROUPS REF.TYPE))
(CREATE.NGROUP.NODE REF.TYPE NGROUP.MOTHER NBROBJ.DATUM TSTREAM)
(CREATE.NGROUP.NODE NGROUP.MOTHER NIL NIL TSTREAM)
(ADD.NGROUP.TO.MOTHER.NODE REF.TYPE NGROUP.MOTHER TSTREAM)
(TMAXPROP TSTREAM 'REBUILD.GRAPHFLG T)
(CL:WHEN (|fetch| (NGTEMPLATE NG.MANUALINDEX) |of| TEMPLATE)
(TMAXADDPROP TSTREAM 'MANUALGROUPS REF.TYPE))
(|replace| OBJECTDATUM |of| NEWOBJ |with| NBROBJ.DATUM))
(ERROR "Unknown USE type in NUMBER.GETFN" USE)))
NEWOBJ)))
@ -290,37 +311,35 @@
(|fetch| OBJECTDATUM |of| IMAGE.OBJ)))))
(ERROR "Unknown TARGET stream type" (IMAGESTREAMTYPE TARGET.STREAM)))))
(number.buttoneventinfn
(lambda (obj stream sel relx rely window hoststream button)(* |fsg| " 2-Sep-87 11:09")
(* * |Here| |when| \a |NumberOBJ| |is| |left| |or| |middle| |buttoned.|
 |Left| |just| |dislays| |the| |Tag| |if| |any| |in| |the| |prompt| |window.|
 |Middle| |pops| |up| \a |menu| |allowing| |this| |user| |to| |do| |various|
 |things.|)
(NUMBER.BUTTONEVENTINFN
(LAMBDA (OBJ STREAM SEL RELX RELY WINDOW TSTREAM BUTTON) (* \; "Edited 21-Feb-2025 16:17 by rmk")
(* |fsg| " 2-Sep-87 11:09")
(and (mousestate left)
(cond
((imageobjprop obj 'tag)
(|with| numberobj (|fetch| objectdatum |of| obj)
(tedit.promptprint stream (concat "Tag for this " (selectq use
(note "Endnote")
(ngroup ref.type)
(error "Undefined USE code"
use))
" is \""
(imageobjprop obj 'tag)
"\"")
t)))
(t (tedit.promptprint stream "" t))))
(and (mousestate middle)
(let* ((datum (|fetch| objectdatum |of| obj))
(use (|fetch| (numberobj use) |of| datum))
(ref.type (|fetch| (numberobj ref.type) |of| datum)))
(and (selectq use
(note (note.buttoneventinfn obj stream window))
(ngroup (ngroup.buttoneventinfn ref.type obj stream window))
(error "Undefined USE code" use))
(progn (tedit.promptprint stream "" t)
'changed))))))
(* |;;;| "Here when a NumberOBJ is left or middle buttoned. Left just dislays the Tag if any in the prompt window. Middle pops up a menu allowing this user to do various things.")
(SELECTQ BUTTON
(LEFT (COND
((IMAGEOBJPROP OBJ 'TAG)
(|with| NUMBEROBJ (|fetch| OBJECTDATUM |of| OBJ)
(TEDIT.PROMPTPRINT TSTREAM (CONCAT "Tag for this " (SELECTQ USE
(NOTE "Endnote")
(NGROUP REF.TYPE)
(ERROR
"Undefined USE code"
USE))
" is \""
(IMAGEOBJPROP OBJ 'TAG)
"\"")
T)))
(T (TEDIT.PROMPTCLEAR TSTREAM))))
(MIDDLE (LET* ((DATUM (|fetch| OBJECTDATUM |of| OBJ))
(USE (|fetch| (NUMBEROBJ USE) |of| DATUM))
(REF.TYPE (|fetch| (NUMBEROBJ REF.TYPE) |of| DATUM)))
(SELECTQ USE
(NOTE (NOTE.BUTTONEVENTINFN OBJ STREAM WINDOW TSTREAM))
(NGROUP (NGROUP.BUTTONEVENTINFN REF.TYPE OBJ STREAM WINDOW TSTREAM))
(ERROR "Undefined USE code" USE))))
NIL)))
(NUMBEROBJ.TEDIT-TO-TEX-FN
(LAMBDA (OBJ STREAM)
@ -335,236 +354,218 @@
)
(DEFINEQ
(copy.ngroup.branch
(lambda (ngroup.parents window) (* |fsg| "11-Aug-87 09:36")
(* * |Build| |the| |NGroup| |database| |for| |the| |parents| |of| \a |copied|
 |NGroup| |or| |the| |entire| |NGroup| |database| |on| \a get.)
(COPY.NGROUP.BRANCH
(LAMBDA (NGROUP.PARENTS TSTREAM) (* \; "Edited 28-Feb-2025 14:53 by rmk")
(* \; "Edited 26-Feb-2025 18:22 by rmk")
(* \; "Edited 20-Feb-2025 23:20 by rmk")
(* |fsg| "11-Aug-87 09:36")
(|for| parent |in| ngroup.parents |do| (and parent (|with| numberobj parent (and (listp font)
(setq font
(fontcreate
font)))
(or ngroup.mother (setq ngroup.mother
'new.ngroup))
(create.ngroup.node ref.type
ngroup.mother parent window)
(create.ngroup.node ngroup.mother nil
nil window)
(add.ngroup.to.mother.node ref.type
ngroup.mother window))))))
(* |;;;| "Build the NGroup database for the parents of a copied NGroup or the entire NGroup database on a GET.")
(dump.ngroup.graph
(lambda (window) (* |fsg| " 3-Aug-87 16:03")
(* * |Return| \a |list| |of| |the| |NGroup| |graph| |data| |that| |is| put
 |along| |with| |the| |NGroup| |Imageobject.|
 w\e |can| |then| |rebuild| |the| |entire| |NGroup| |graph| |on| \a get.)
(|for| PARENT |in| NGROUP.PARENTS |when| PARENT |do| (SETQ PARENT (NGROUP.FIXUP.RECORDS PARENT))
(|with| NUMBEROBJ PARENT
(CL:WHEN (LISTP FONT)
(SETQ FONT (FONTCREATE FONT)))
(CL:UNLESS NGROUP.MOTHER
(SETQ NGROUP.MOTHER 'NEW.NGROUP))
(CREATE.NGROUP.NODE REF.TYPE
NGROUP.MOTHER PARENT TSTREAM)
(CREATE.NGROUP.NODE NGROUP.MOTHER NIL
NIL TSTREAM)
(ADD.NGROUP.TO.MOTHER.NODE REF.TYPE
NGROUP.MOTHER TSTREAM)))))
(let ((graph.list (tconc nil)))
(maphash (tsp.get.ngroup.array window)
(function (lambda (val key)
(and (neq key 'new.ngroup)
(let ((ngroup.rec (copy (car val))))
(|with| numberobj ngroup.rec (setq font (list.font.props font))
(tconc graph.list ngroup.rec)))))))
(windowprop window 'dumpngroupgraph nil)
(cdar graph.list))))
(DUMP.NGROUP.GRAPH
(LAMBDA (TSTREAM) (* \; "Edited 22-Feb-2025 17:43 by rmk")
(* |fsg| " 3-Aug-87 16:03")
(ngroup.buttoneventinfn
(lambda (ref.type ngroup.obj stream window) (* |fsg| " 5-Aug-87 08:31")
(* * |Here| |when| |an| |inserted| |NGroup| |is| |middle| |buttoned.|)
(* |;;;| "Return a list of the NGroup graph data that is PUT along with the NGroup Imageobject. We can then rebuild the entire NGroup graph on a GET.")
(let ((tag (imageobjprop ngroup.obj 'tag))
(graphw (windowprop window 'imageobj.menuw)))
(menu (|create| menu
title _ (concat ref.type " Menu")
items _ (append (cond
(tag ngroup.inserted.tag.items)
(t ngroup.inserted.notag.items))
ngroup.inserted.menu.items)
centerflg _ t)))))
(LET ((GRAPH.LIST (TCONC NIL)))
(MAPHASH (TSP.GET.NGROUP.ARRAY TSTREAM)
(FUNCTION (LAMBDA (VAL KEY)
(AND (NEQ KEY 'NEW.NGROUP)
(LET ((NGROUP.REC (COPY (CAR VAL))))
(|with| NUMBEROBJ NGROUP.REC (SETQ FONT (LIST.FONT.PROPS FONT))
(TCONC GRAPH.LIST NGROUP.REC)))))))
(TMAXPROP TSTREAM 'DUMPNGROUPGRAPH NIL)
(CDAR GRAPH.LIST))))
(ngroup.define.tag
(lambda (ref.type window ngroup.obj) (* |fsg| " 5-Aug-87 09:26")
(* * |Define| \a tag |for| |this| |NGroup| |or| |Change| |the| tag |if| |it|
 |already| |exists.|)
(NGROUP.BUTTONEVENTINFN
(LAMBDA (REF.TYPE NGROUP.OBJ STREAM WINDOW TSTREAM) (* \; "Edited 12-Aug-2025 08:31 by rmk")
(* \; "Edited 27-Feb-2025 17:27 by rmk")
(* \; "Edited 26-Feb-2025 11:50 by rmk")
(* \; "Edited 21-Feb-2025 16:13 by rmk")
(* |fsg| " 5-Aug-87 08:31")
(let ((old.tag (imageobjprop ngroup.obj 'tag))
(new.tag (tsp.get.incode (textstream window))))
(and new.tag (neq new.tag old.tag)
(progn (and old.tag (number.delete.tag window ngroup.obj))
(tsp.putcode new.tag ngroup.obj window)
(imageobjprop ngroup.obj 'tag new.tag))))))
(* |;;;| "Here when an inserted NGroup object is middle buttoned. This is under a RESETLST in TEDIT.SELECT.OBJECT.")
(number.delete.tag
(lambda (window ngroup.obj) (* |fsg| " 5-Aug-87 09:27")
(* * |Delete| |this| |Imageobj's| tag.)
(DECLARE (SPECVARS TSTREAM NGROUP.OBJ))
(LET ((TAG (IMAGEOBJPROP NGROUP.OBJ 'TAG)))
(MENU (|create| MENU
TITLE _ (CONCAT REF.TYPE " Menu")
ITEMS _ (APPEND (CL:IF TAG
NGROUP.INSERTED.TAG.ITEMS
NGROUP.INSERTED.NOTAG.ITEMS)
NGROUP.INSERTED.MENU.ITEMS)
CENTERFLG _ T)))))
(tsp.putcode (imageobjprop ngroup.obj 'tag nil)
nil window)
nil))
(NGROUP.DEFINE.TAG
(LAMBDA (REF.TYPE TSTREAM NGROUP.OBJ) (* \; "Edited 21-Feb-2025 16:13 by rmk")
(* |fsg| " 5-Aug-87 09:26")
(ngroup.show.tag
(lambda (ref.type window ngroup.obj) (* |fsg| " 5-Aug-87 08:43")
(* * |Show| |this| |NGroup's| tag.)
(* |;;;| "Define a TAG for this NGroup or Change the TAG if it already exists.")
(tedit.promptprint (textstream window)
(concat ref.type ": Tag=\"" (imageobjprop ngroup.obj 'tag)
(LET ((OLD.TAG (IMAGEOBJPROP NGROUP.OBJ 'TAG))
(NEW.TAG (TSP.GET.INCODE TSTREAM)))
(CL:WHEN (AND NEW.TAG (NEQ NEW.TAG OLD.TAG))
(CL:WHEN OLD.TAG (NUMBER.DELETE.TAG TSTREAM NGROUP.OBJ))
(TSP.PUTCODE NEW.TAG NGROUP.OBJ TSTREAM)
(IMAGEOBJPROP NGROUP.OBJ 'TAG NEW.TAG)
'CHANGED))))
(NUMBER.DELETE.TAG
(LAMBDA (TSTREAM NGROUP.OBJ) (* \; "Edited 21-Feb-2025 16:14 by rmk")
(* |fsg| " 5-Aug-87 09:27")
(* |;;;| "Delete this Imageobj's TAG.")
(TSP.PUTCODE (IMAGEOBJPROP NGROUP.OBJ 'TAG NIL)
NIL TSTREAM)
'CHANGED))
(NGROUP.SHOW.TAG
(LAMBDA (REF.TYPE WINDOW NGROUP.OBJ) (* \; "Edited 21-Feb-2025 16:14 by rmk")
(* |fsg| " 5-Aug-87 08:43")
(* |;;;| "Show this NGroup's TAG.")
(TEDIT.PROMPTPRINT (TEXTSTREAM WINDOW)
(CONCAT REF.TYPE ": Tag=\"" (IMAGEOBJPROP NGROUP.OBJ 'TAG)
"\"")
t)))
T)
NIL))
(change.inserted.ngroup.format
(lambda (ref.type ngroup.obj stream window format.field) (* |fsg| " 1-Sep-87 15:33")
(* * |Change| |an| |inserted| |NGroup's| |entire| |format| |or| \a |selected|
 |field.|)
(CHANGE.NGROUP.FORMAT.#TEXT
(LAMBDA (TSTREAM NGROUP.OBJ FLAVOR) (* \; "Edited 28-Feb-2025 23:55 by rmk")
(* \; "Edited 26-Feb-2025 00:18 by rmk")
(* \; "Edited 21-Feb-2025 12:50 by rmk")
(* |fsg| "25-Aug-87 14:48")
(let ((graphw (windowprop window 'imageobj.menuw))
(new.format (|for| field |in| (cond
(format.field (list format.field))
(t '(txtbefore display txtafter abbrevval before#txt
after#txt)))
|collect| (selectq field
(txtbefore (change.ngroup.format.txtbefore ref.type graphw
ngroup.obj))
(display (change.ngroup.format.display ref.type graphw
ngroup.obj))
(txtafter (change.ngroup.format.txtafter ref.type graphw
ngroup.obj))
(abbrevval (change.ngroup.format.abbrev ref.type graphw
ngroup.obj))
(before#txt (change.ngroup.format.#text ref.type window
ngroup.obj 'before))
(after#txt (change.ngroup.format.#text ref.type window
ngroup.obj 'after))
(error "Unknown NGroup Format field" field)))))
(apply 'or new.format))))
(* |;;;| "Change the text before or after an inserted NGroup regardless of the Text Before or Text After toggle settings.")
(change.ngroup.format.#text
(lambda (ref.type window ngroup.obj flavor) (* |fsg| "25-Aug-87 14:48")
(* * |Change| |the| |text| |before| |or| |after| |an| |inserted| |NGroup|
 |regardless| |of| |the| |Text| |Before| |or| |Text| |After| |toggle|
 |settings.|)
(|with| NUMBEROBJ (|fetch| OBJECTDATUM |of| NGROUP.OBJ)
(LET ((OLD.STRING (SELECTQ FLAVOR
(BEFORE TEXT.BEFORE#)
TEXT.AFTER#))
(NEW.STRING (TEDIT.GETINPUT TSTREAM (CONCAT "Text " (SELECTQ FLAVOR
(BEFORE "before ")
"after ")
REF.TYPE ":"))))
(CL:WHEN NEW.STRING
(SETQ NEW.STRING (CONCAT (SELECTQ FLAVOR
(BEFORE "")
" ")
(CONVERT.TABS.TO.SPACES NEW.STRING)
(SELECTQ FLAVOR
(BEFORE " ")
""))))
(SELECTQ FLAVOR
(BEFORE (SETQ TEXT.BEFORE# NEW.STRING))
(SETQ TEXT.AFTER# NEW.STRING))
(NOT (STREQUAL OLD.STRING NEW.STRING))))))
(|with| numberobj (|fetch| objectdatum |of| ngroup.obj)
(let ((old.string (selectq flavor
(before text.before#)
text.after#))
(new.string (tedit.getinput (textstream window)
(concat (selectq flavor
(before "Text before ")
"Text after ")
ref.type ":"))))
(and new.string (setq new.string (concat (selectq flavor
(before "")
" ")
(convert.tabs.to.spaces new.string)
(selectq flavor
(before " ")
""))))
(selectq flavor
(before (setq text.before# new.string))
(setq text.after# new.string))
(not (strequal old.string new.string))))))
(SHOW.INSERTED.NGROUP.FORMAT
(LAMBDA (REF.TYPE NGROUP.OBJ TSTREAM WINDOW) (* \; "Edited 24-Feb-2025 22:53 by rmk")
(* |fsg| "26-Aug-87 12:05")
(show.inserted.ngroup.format
(lambda (ref.type ngroup.obj stream window) (* |fsg| "26-Aug-87 12:05")
(* * |Show| |the| |format| |of| |an| |inserted| |NGroup.|)
(* |;;;| "Show the format of an inserted NGroup. ")
(|with| numberobj (|fetch| objectdatum |of| ngroup.obj)
(|with| ngtemplate template (tedit.promptprint stream
(concat ref.type ": Display="
(concat (cond
(ng.text-before (concat "\""
ng.text-before
"\""))
(t "\"\""))
ng.chartype
(cond
(ng.text-after (concat "\""
ng.text-after
"\""))
(t "\"\"")))
" Abbrev="
(or abbrev-val "None"))
t)))))
(|with| NUMBEROBJ (|fetch| OBJECTDATUM |of| NGROUP.OBJ)
(TEDIT.PROMPTPRINT TSTREAM (CONCAT REF.TYPE ": Display= " "\"" (OR TEXT.BEFORE# "")
"["
(|fetch| NG.CHARTYPE |of| TEMPLATE)
"]"
(OR TEXT.AFTER# "")
"\"" " Abbrev=" (OR ABBREV-VAL "None"))
T))))
)
(* * |Variable| |and| |Record| |definitions|)
(* |;;;| "Variable and Record definitions")
(RPAQQ NGROUP.GRAPH.MENU.ITEMS
`((|Change Font| (CHANGE.NGROUP.FONT LABEL GRAPHW)
`((|Change Font| (CHANGE.NGROUP.FONT LABEL TSTREAM)
"Change this NGroup's entire FONT."
(SUBITEMS (|Family| (CHANGE.NGROUP.FONT LABEL GRAPHW 'FAMILY)
(SUBITEMS (|Family| (CHANGE.NGROUP.FONT LABEL TSTREAM 'FAMILY)
"Change this NGroup's font family.")
(|Size| (CHANGE.NGROUP.FONT LABEL GRAPHW 'SIZE)
(|Size| (CHANGE.NGROUP.FONT LABEL TSTREAM 'SIZE)
"Change this NGroup's font size.")
(|Face| (CHANGE.NGROUP.FONT LABEL GRAPHW 'FACE)
(|Face| (CHANGE.NGROUP.FONT LABEL TSTREAM 'FACE)
"Change this NGroup's font face.")))
(|Show Font| (SHOW.NGROUP.FONT LABEL GRAPHW)
(|Show Font| (SHOW.NGROUP.FONT LABEL TSTREAM)
"Show this NGroup's FONT.")
(|Change Format| (CHANGE.NGROUP.FORMAT LABEL GRAPHW)
(|Change Format| (CHANGE.NGROUP.FORMAT LABEL TSTREAM)
"Change this NGroup's entire FORMAT."
(SUBITEMS (|Delimiter Before| (CHANGE.NGROUP.FORMAT LABEL GRAPHW 'TXTBEFORE)
(SUBITEMS (|Delimiter Before| (CHANGE.NGROUP.FORMAT LABEL TSTREAM 'DELIMBEFORE)
"Change the delimiter preceding this NGroup.")
(|Display Type| (CHANGE.NGROUP.FORMAT LABEL GRAPHW 'DISPLAY)
"Change how this NGroup is displayed.")
(|Delimiter After| (CHANGE.NGROUP.FORMAT LABEL GRAPHW 'TXTAFTER)
(|Delimiter After| (CHANGE.NGROUP.FORMAT LABEL TSTREAM 'DELIMAFTER)
"Change the delimiter following this NGroup.")
(|Abbreviate Level| (CHANGE.NGROUP.FORMAT LABEL GRAPHW 'ABBREVVAL)
(|Display Type| (CHANGE.NGROUP.FORMAT LABEL TSTREAM 'DISPLAY)
"Change how this NGroup is displayed.")
(|Abbreviate Level| (CHANGE.NGROUP.FORMAT LABEL TSTREAM 'ABBREVVAL)
"Specify the starting level of this NGroup value.")
(|Starting Value| (CHANGE.NGROUP.FORMAT LABEL GRAPHW 'START)
(|Starting Value| (CHANGE.NGROUP.FORMAT LABEL TSTREAM 'START)
"Change this NGroup's starting value.")
(|Table-Of-Contents| (CHANGE.NGROUP.FORMAT LABEL GRAPHW 'TOC)
(|Table-Of-Contents| (CHANGE.NGROUP.FORMAT LABEL TSTREAM 'TOC)
"Include this NGroup in the Table-Of-Contents.")
\,@
(AND (MANUALINDEX.ENABLED? (WINDOWPROP GRAPHW 'TWINDOW))
(LIST (LIST '|Manual Index| (FUNCTION (CHANGE.NGROUP.FORMAT LABEL GRAPHW
'MANINDEX))
"Include this NGroup in the Manual Index page numbers.")))))
(|Show Format| (SHOW.NGROUP.FORMAT LABEL GRAPHW)
(CL:WHEN (MANUALINDEX.ENABLED? (WINDOWPROP GRAPHW 'TSTREAM))
(LIST (LIST '|Manual Index| (FUNCTION (CHANGE.NGROUP.FORMAT LABEL TSTREAM
'MANINDEX))
"Include this NGroup in the Manual Index page numbers.")))))
(|Show Format| (SHOW.NGROUP.FORMAT LABEL TSTREAM)
"Show this NGroup's FORMAT.")))
(RPAQQ NGROUP.INSERTED.MENU.ITEMS
((|Change Font| (CHANGE.NGROUP.FONT REF.TYPE GRAPHW NIL NGROUP.OBJ)
((|Change Font| (CHANGE.NGROUP.FONT REF.TYPE TSTREAM NIL NGROUP.OBJ)
"Change this NGroup's entire FONT."
(SUBITEMS (|Family| (CHANGE.NGROUP.FONT REF.TYPE GRAPHW 'FAMILY NGROUP.OBJ)
(SUBITEMS (|Family| (CHANGE.NGROUP.FONT REF.TYPE TSTREAM 'FAMILY NGROUP.OBJ)
"Change this NGroup's font family.")
(|Size| (CHANGE.NGROUP.FONT REF.TYPE GRAPHW 'SIZE NGROUP.OBJ)
(|Size| (CHANGE.NGROUP.FONT REF.TYPE TSTREAM 'SIZE NGROUP.OBJ)
"Change this NGroup's font size.")
(|Face| (CHANGE.NGROUP.FONT REF.TYPE GRAPHW 'FACE NGROUP.OBJ)
(|Face| (CHANGE.NGROUP.FONT REF.TYPE TSTREAM 'FACE NGROUP.OBJ)
"Change this NGroup's font face.")))
(|Show Font| (SHOW.NGROUP.FONT REF.TYPE GRAPHW NGROUP.OBJ)
(|Show Font| (SHOW.NGROUP.FONT REF.TYPE TSTREAM NGROUP.OBJ)
"Show this NGroup's FONT.")
(|Change Format| (CHANGE.INSERTED.NGROUP.FORMAT REF.TYPE NGROUP.OBJ STREAM WINDOW)
(|Change Format| (CHANGE.NGROUP.FORMAT REF.TYPE TSTREAM)
"Change this NGroup's entire FORMAT."
(SUBITEMS (|Delimiter Before| (CHANGE.INSERTED.NGROUP.FORMAT REF.TYPE NGROUP.OBJ
STREAM WINDOW 'TXTBEFORE)
(SUBITEMS (|Delimiter Before| (CHANGE.NGROUP.FORMAT REF.TYPE TSTREAM 'DELIMBEFORE)
"Change the delimiter preceding this NGroup.")
(|Display Type| (CHANGE.INSERTED.NGROUP.FORMAT REF.TYPE NGROUP.OBJ STREAM
WINDOW 'DISPLAY)
"Change how this NGroup is displayed.")
(|Delimiter After| (CHANGE.INSERTED.NGROUP.FORMAT REF.TYPE NGROUP.OBJ STREAM
WINDOW 'TXTAFTER)
(|Delimiter After| (CHANGE.NGROUP.FORMAT REF.TYPE TSTREAM 'DELIMAFTER)
"Change the delimiter following this NGroup.")
(|Abbreviate Level| (CHANGE.INSERTED.NGROUP.FORMAT REF.TYPE NGROUP.OBJ STREAM
WINDOW 'ABBREVVAL)
(|Display Type| (CHANGE.NGROUP.FORMAT REF.TYPE TSTREAM 'DISPLAY)
"Change how this NGroup is displayed.")
(|Abbreviate Level| (CHANGE.NGROUP.FORMAT REF.TYPE TSTREAM 'ABBREVVAL
NGROUP.OBJ)
"Specify the starting level of this NGroup value.")
(|Text Before| (CHANGE.INSERTED.NGROUP.FORMAT REF.TYPE NGROUP.OBJ STREAM WINDOW
'BEFORE#TXT)
(|Text Before| (CHANGE.NGROUP.FORMAT REF.TYPE TSTREAM 'BEFORE#TXT NGROUP.OBJ)
"Change the text preceding this NGroup.")
(|Text After| (CHANGE.INSERTED.NGROUP.FORMAT REF.TYPE NGROUP.OBJ STREAM WINDOW
'AFTER#TXT)
(|Text After| (CHANGE.NGROUP.FORMAT REF.TYPE TSTREAM 'AFTER#TXT NGROUP.OBJ)
"Change the text following this NGroup.")))
(|Show Format| (SHOW.INSERTED.NGROUP.FORMAT REF.TYPE NGROUP.OBJ STREAM WINDOW)
(|Show Format| (SHOW.INSERTED.NGROUP.FORMAT REF.TYPE NGROUP.OBJ TSTREAM WINDOW)
"Show this NGroup's FORMAT.")))
(RPAQQ NGROUP.INSERTED.NOTAG.ITEMS ((|Define Tag| (NGROUP.DEFINE.TAG REF.TYPE WINDOW NGROUP.OBJ)
(RPAQQ NGROUP.INSERTED.NOTAG.ITEMS ((|Define Tag| (NGROUP.DEFINE.TAG REF.TYPE TSTREAM NGROUP.OBJ)
"Define a TAG for this NGroup.")))
(RPAQQ NGROUP.INSERTED.TAG.ITEMS ((|Change Tag| (NGROUP.DEFINE.TAG REF.TYPE WINDOW NGROUP.OBJ)
(RPAQQ NGROUP.INSERTED.TAG.ITEMS ((|Change Tag| (NGROUP.DEFINE.TAG REF.TYPE TSTREAM NGROUP.OBJ)
"Change this NGroup's TAG.")
(|Delete Tag| (NUMBER.DELETE.TAG WINDOW NGROUP.OBJ)
(|Delete Tag| (NUMBER.DELETE.TAG TSTREAM NGROUP.OBJ)
"Delete this NGroup's TAG.")
(|Show Tag| (NGROUP.SHOW.TAG REF.TYPE WINDOW NGROUP.OBJ)
(|Show Tag| (NGROUP.SHOW.TAG REF.TYPE TSTREAM NGROUP.OBJ)
"Show this NGroup's TAG.")))
(FILESLOAD (COMPILED SYSLOAD)
@ -589,20 +590,20 @@
(RECORD NGCOUNTER (NCOUNT . ANCESTRY))
(RECORD NGTEMPLATE (NG.CHARTYPE NG.TEXT-AFTER NG.START NG.ADDTOTOC NG.CURRENTVAL NG.MANUALINDEX
NG.TEXT-BEFORE))
(RECORD NGTEMPLATE (NG.CHARTYPE NG.DELIMAFTER NG.START NG.ADDTOTOC NG.CURRENTVAL NG.MANUALINDEX
NG.DELIMBEFORE NG.ABBREV-VAL NG.FONT))
(RECORD NUMBEROBJ (REF.TYPE NUMSTRING USE NGROUP.MOTHER TEMPLATE UPDATED.OBJ TEXT.AFTER# PAGE.NUMBER
FONT TEXT.BEFORE# ABBREV-VAL))
)
)
(DECLARE\: DONTCOPY
(FILEMAP (NIL (2562 19225 (NUMBEROBJ 2572 . 3678) (NUMBEROBJP 3680 . 4220) (NGROUPP 4222 . 4576) (
NUMBER.DISPLAYFN 4578 . 7732) (NUMBER.PREPRINTFN 7734 . 9015) (NUMBER.IMAGEBOXFN 9017 . 11607) (
NUMBER.PUTFN 11609 . 12930) (NUMBER.GETFN 12932 . 15266) (NUMBER.COPYFN 15268 . 17046) (
NUMBER.BUTTONEVENTINFN 17048 . 18953) (NUMBEROBJ.TEDIT-TO-TEX-FN 18955 . 19223)) (19226 28397 (
COPY.NGROUP.BRANCH 19236 . 20692) (DUMP.NGROUP.GRAPH 20694 . 21570) (NGROUP.BUTTONEVENTINFN 21572 .
22272) (NGROUP.DEFINE.TAG 22274 . 22877) (NUMBER.DELETE.TAG 22879 . 23138) (NGROUP.SHOW.TAG 23140 .
23462) (CHANGE.INSERTED.NGROUP.FORMAT 23464 . 25259) (CHANGE.NGROUP.FORMAT.#TEXT 25261 . 26847) (
SHOW.INSERTED.NGROUP.FORMAT 26849 . 28395)))))
(FILEMAP (NIL (2587 20019 (NUMBEROBJ 2597 . 3703) (NUMBEROBJP 3705 . 4238) (NGROUPP 4240 . 4839) (
NUMBER.DISPLAYFN 4841 . 7695) (NUMBER.PREPRINTFN 7697 . 8807) (NUMBER.IMAGEBOXFN 8809 . 10814) (
NUMBER.NUMSTRING 10816 . 11360) (NUMBER.DISPLAYSTRING 11362 . 11671) (NUMBER.PUTFN 11673 . 13055) (
NUMBER.GETFN 13057 . 15986) (NUMBER.COPYFN 15988 . 17766) (NUMBER.BUTTONEVENTINFN 17768 . 19747) (
NUMBEROBJ.TEDIT-TO-TEX-FN 19749 . 20017)) (20020 27913 (COPY.NGROUP.BRANCH 20030 . 21751) (
DUMP.NGROUP.GRAPH 21753 . 22656) (NGROUP.BUTTONEVENTINFN 22658 . 23819) (NGROUP.DEFINE.TAG 23821 .
24489) (NUMBER.DELETE.TAG 24491 . 24852) (NGROUP.SHOW.TAG 24854 . 25280) (CHANGE.NGROUP.FORMAT.#TEXT
25282 . 27089) (SHOW.INSERTED.NGROUP.FORMAT 27091 . 27911)))))
STOP

Binary file not shown.

View File

@ -1,12 +1,14 @@
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "XCL" BASE 10)
(FILECREATED "25-Jun-2024 12:00:23" |{WMEDLEY}<lispusers>tmax>TMAX-XREF.;13| 24116
(FILECREATED "12-Aug-2025 09:08:07" 
|{DSK}<Users>kaplan>Local>medley3.5>working-medley>lispusers>tmax>TMAX-XREF.;25| 25155
:EDIT-BY |rmk|
:CHANGES-TO (FNS XREF.GETFN XREF.GET.TOOBJ)
:CHANGES-TO (FNS UPDATE.XREFS)
:PREVIOUS-DATE "24-Jun-2024 23:30:47" |{WMEDLEY}<lispusers>tmax>TMAX-XREF.;12|)
:PREVIOUS-DATE "28-Feb-2025 23:36:07"
|{DSK}<Users>kaplan>Local>medley3.5>working-medley>lispusers>tmax>TMAX-XREF.;24|)
(PRETTYCOMPRINT TMAX-XREFCOMS)
@ -99,15 +101,15 @@
(eq (imageobjprop obj 'type)
'xref))))
(xref.displayfn
(lambda (obj stream) (* |fsg| "17-Sep-87 11:19")
(* * |General| |purpose| |display| |function| |for| |an| xref |imageobject.|
 |Relies| |on| xref.get.display.text |to| |get| |the| |actual| |text| |that|
 |must| |be| |displayed.|)
(XREF.DISPLAYFN
(LAMBDA (OBJ STREAM) (* \; "Edited 28-Feb-2025 15:21 by rmk")
(* |fsg| "17-Sep-87 11:19")
(tmax.shadeobj obj stream)
(prin1 (xref.get.display.text obj)
stream)))
(* |;;;| "General purpose display function for an XREF imageobject. Relies on XREF.GET.DISPLAY.TEXT to get the actual text that must be displayed.")
(TMAX.SHADEOBJ OBJ STREAM)
(PRIN3 (XREF.GET.DISPLAY.TEXT OBJ)
STREAM)))
(XREF.IMAGEBOXFN
(LAMBDA (OBJ STREAM) (* \; "Edited 25-May-2024 20:34 by rmk")
@ -140,20 +142,24 @@
'|Value|))
XREF.OBJ)))
(xref.copyfn
(lambda (image.obj source.stream target.stream) (* |fsg| "12-Aug-87 11:07")
(* * |Here| |to| copy |an| xref |Image| |Object.|)
(XREF.COPYFN
(LAMBDA (IMAGE.OBJ SOURCE.STREAM TARGET.STREAM) (* \; "Edited 21-Feb-2025 10:07 by rmk")
(* |fsg| "12-Aug-87 11:07")
(selectq (imagestreamtype target.stream)
(text (let ((textobj (textobj target.stream)))
(apply* (imageobjprop image.obj 'getfn)
target.stream
(list (|fetch| objectdatum |of| image.obj)
(imageobjprop image.obj 'reference.by)))))
(error "Unknown TARGET stream type" (imagestreamtype target.stream)))))
(* |;;;| "Here to COPY an XREF Image Object.")
(SELECTQ (IMAGESTREAMTYPE TARGET.STREAM)
(TEXT (APPLY* (IMAGEOBJPROP IMAGE.OBJ 'GETFN)
TARGET.STREAM
(LIST (|fetch| OBJECTDATUM |of| IMAGE.OBJ)
(IMAGEOBJPROP IMAGE.OBJ 'REFERENCE.BY))))
(ERROR "Unknown TARGET stream type" (IMAGESTREAMTYPE TARGET.STREAM)))))
(XREF.BUTTONEVENTINFN
(LAMBDA (XREFOBJ STREAM SELECTION RELX RELY WINDOW HOSTSTREAM BUTTON)
(LAMBDA (XREFOBJ STREAM SELECTION RELX RELY WINDOW TSTREAM BUTTON)
(* \; "Edited 28-Feb-2025 23:34 by rmk")
(* \; "Edited 25-Feb-2025 14:38 by rmk")
(* \; "Edited 21-Feb-2025 10:08 by rmk")
(* \; "Edited 20-Apr-2024 12:56 by rmk")
(* \; "Edited 16-Mar-2024 07:55 by rmk")
(* \; "Edited 26-Dec-2023 11:56 by rmk")
@ -164,54 +170,62 @@
(LET ((XREF.TAG (|fetch| OBJECTDATUM |of| XREFOBJ))
(XREF.DISPLAY (IMAGEOBJPROP XREFOBJ 'REFERENCE.BY)))
(TEDIT.PROMPTPRINT STREAM (CONCAT "Reference to \"" XREF.TAG "\" by " XREF.DISPLAY)
(TEDIT.PROMPTPRINT TSTREAM (CONCAT "Reference to \"" XREF.TAG "\" by " XREF.DISPLAY)
T)
(AND (MOUSESTATE MIDDLE)
(SELECTQ (MENU (|create| MENU
TITLE _ (CONCAT XREF.TAG " Menu")
ITEMS _ '(|Find Definition| |Change Reference| |Change Display|)
CENTERFLG _ T))
(|Find Definition|
(LET ((DEF (TSP.LIST.OF.OBJECTS (TEXTOBJ HOSTSTREAM)
(FUNCTION (LAMBDA (OBJ TAG)
(AND (NUMBEROBJP OBJ)
(EQ TAG (IMAGEOBJPROP OBJ 'TAG)))))
(IMAGEOBJPROP XREFOBJ 'OBJECTDATUM))))
(IF DEF
THEN (CL:WHEN (CDR DEF)
(TEDIT.PROMPTPRINT STREAM
"NOTE: Reference has multipled definitions!!" T))
(TEDIT.SETSEL HOSTSTREAM (CADR (CAR DEF))
1
'RIGHT NIL T 'INVERTED)
(AND NIL (TEDIT.SHOWSEL HOSTSTREAM T)
(TEDIT.NORMALIZECARET HOSTSTREAM))
(RETFROM (FUNCTION \\TEDIT.XYTOSEL)
(TEDIT.GETSEL HOSTSTREAM))
ELSE (TEDIT.PROMPTPRINT STREAM "Reference has no definition!" T))
NIL))
(|Change Reference|
(LET ((NEW.REFERENCE (GET.REF WINDOW STREAM)))
(AND NEW.REFERENCE (PROGN (|replace| OBJECTDATUM |of| XREFOBJ
|with| NEW.REFERENCE)
'CHANGED))))
(|Change Display|
(PROGN (IMAGEOBJPROP XREFOBJ 'REFERENCE.BY (GET.REFERENCE.BY WINDOW T))
(TEDIT.PROMPTPRINT STREAM "" T)
'CHANGED))
NIL)))))
(CL:WHEN (MOUSESTATE MIDDLE)
(SELECTQ (MENU (|create| MENU
TITLE _ (CONCAT XREF.TAG " Menu")
ITEMS _ '(|Find Definition| |Change Reference| |Change Display|)
CENTERFLG _ T))
(|Find Definition|
(LET ((CHNOS (TSP.LIST.OF.OBJECTS TSTREAM (FUNCTION (LAMBDA (OBJ CHNO TAG)
(AND
(NUMBEROBJP OBJ)
(EQ TAG
(IMAGEOBJPROP
OBJ
'TAG)))))
XREF.TAG
'CH#)))
(IF CHNOS
THEN (CL:WHEN (CDR CHNOS)
(TEDIT.PROMPTPRINT TSTREAM
"NOTE: Reference has multipled definitions!!" T))
(TEDIT.SELPROP SELECTION 'CH# (CAR CHNOS))
(* \; "SELECTION is the NEWSEL")
(TEDIT.SELPROP SELECTION 'LENGTH 1)
(TEDIT.SELPROP SELECTION 'SHADE BLACKSHADE)
(* \; "Inverted")
(\\TEDIT.FIXSEL SELECTION TSTREAM)
(TEDIT.SELPROP SELECTION 'SHADEHEIGHT 16384)
(RESETSAVE NIL `(TEDIT.NORMALIZECARET ,TSTREAM))
T
ELSE (TEDIT.PROMPTPRINT TSTREAM (CONCAT XREF.TAG
" reference has no definition!")
T T))
NIL))
(|Change Reference|
(LET ((NEW.REFERENCE (GET.REF TSTREAM)))
(CL:WHEN NEW.REFERENCE
(|replace| OBJECTDATUM |of| XREFOBJ |with| NEW.REFERENCE)
'CHANGED)))
(|Change Display|
(IMAGEOBJPROP XREFOBJ 'REFERENCE.BY (GET.REFERENCE.BY TSTREAM T))
(TEDIT.PROMPTCLEAR TSTREAM)
'CHANGED)
NIL)))))
(XREF.WHENDELETEDFN
(LAMBDA (IMOBJ TARG.WINDOW.STREAM) (* \; "Edited 15-Jul-2023 10:48 by rmk")
(LAMBDA (IMOBJ TSTREAM) (* \; "Edited 22-Feb-2025 23:00 by rmk")
(* \; "Edited 15-Jul-2023 10:48 by rmk")
(* |fsg| "29-Jul-87 16:35")
(* |;;| "Note that this function is NOT called when a Reference is deleted. It is called when a NGroup or Endnote is deleted.")
(LET ((WINDOW (\\TEDIT.MAINW TARG.WINDOW.STREAM)))
(TSP.PUTCODE (IMAGEOBJPROP IMOBJ 'TAG)
NIL WINDOW)
(AND (UPDATE? WINDOW)
(UPDATE.XREFS WINDOW)))))
(TSP.PUTCODE (IMAGEOBJPROP IMOBJ 'TAG)
NIL TSTREAM)
(CL:WHEN (UPDATE? TSTREAM)
(UPDATE.XREFS TSTREAM))))
(XREF.TEDIT-TO-TEX-FN
(LAMBDA (OBJ STREAM)
@ -229,38 +243,35 @@
)
(DEFINEQ
(xref.get.display.text
(lambda (obj) (* |fsg| "29-Jul-87 09:30")
(* |This| |function| |will| |first| |lookup| \a "TOOBJ" \, |in| |other|
 |words,| |the| |imageobject| |that| |the| xref |object| obj |is| |referencing.|
 |Then,| |if| |there| |is| |such| |an| |object,| \a |suitable| xref |display|
 |method| |is| |found| |using| xref.get.displayfn.
 i\f |such| \a |function| |is| |found,| |then| |it| |is| |applied| |to| toobj
 |and| \a |string| |to| |be| |displayed| |is| |returned.|)
(XREF.GET.DISPLAY.TEXT
(LAMBDA (OBJ) (* \; "Edited 28-Feb-2025 15:20 by rmk")
(* |fsg| "29-Jul-87 09:30")
(let ((toobj (xref.get.toobj (|fetch| objectdatum |of| obj)))
(reference.by (imageobjprop obj 'reference.by))
specific.displayfn)
(cond
(toobj (cond
((setq specific.displayfn (xref.get.displayfn toobj))
(apply* specific.displayfn toobj reference.by))
(t (ringbells)
(error "Unknown XREF display method" (tspobj.gettype toobj))
(* |;;| "This function will first lookup a 'TOOBJ' , in other words, the imageobject that the XREF object OBJ is referencing. Then, if there is such an object, a suitable XREF display method is found using XREF.GET.DISPLAYFN. If such a function is found, then it is applied to TOOBJ and a string to be displayed is returned.")
(LET ((TOOBJ (XREF.GET.TOOBJ (|fetch| OBJECTDATUM |of| OBJ)))
(REFERENCE.BY (IMAGEOBJPROP OBJ 'REFERENCE.BY))
SPECIFIC.DISPLAYFN)
(COND
(TOOBJ (COND
((SETQ SPECIFIC.DISPLAYFN (XREF.GET.DISPLAYFN TOOBJ))
(APPLY* SPECIFIC.DISPLAYFN TOOBJ REFERENCE.BY))
(T (RINGBELLS)
(ERROR "Unknown XREF display method" (TSPOBJ.GETTYPE TOOBJ))
"<Unknown Reference>")))
(t (concat "<Reference " (|fetch| objectdatum |of| obj)
"/" reference.by ">"))))))
(T (CONCAT "<Reference " (|fetch| OBJECTDATUM |of| OBJ)
"/" REFERENCE.BY ">"))))))
(XREF.GET.TOOBJ
(LAMBDA (TAG) (* \; "Edited 25-Jun-2024 11:59 by rmk")
(LAMBDA (TAG) (* \; "Edited 22-Feb-2025 22:38 by rmk")
(* \; "Edited 25-Jun-2024 11:59 by rmk")
(* \; "Edited 16-Mar-2024 07:49 by rmk")
(* |fsg| "13-Jul-87 11:13")
(DECLARE (USEDFREE TSTREAM))
(* |;;| "This function is called in a specific context where a reference must be displayed. It is called by an XREF object and should return the IMAGEOBJECT that the XREF object is referencing.")
(GETHASH TAG (WINDOWPROP (\\TEDIT.PRIMARYPANE TSTREAM)
'TSP.CODE.ARRAY))))
(GETHASH TAG (TMAXPROP TSTREAM 'TSP.CODE.ARRAY))))
(tspobj.gettype
(lambda (obj) (* |ss:| "27-Jun-87 16:36")
@ -268,96 +279,95 @@
)
(DEFINEQ
(update.xrefs
(lambda (window unupdating?) (* |fsg| "25-Sep-87 14:18")
(* * |Update| |all| |the| xref |objects| |in| |the| |window.|)
(UPDATE.XREFS
(LAMBDA (TSTREAM UNUPDATING?) (* \; "Edited 12-Aug-2025 09:07 by rmk")
(* \; "Edited 21-Feb-2025 00:29 by rmk")
(* |fsg| "25-Sep-87 14:18")
(let ((stream (textstream window))
(ref.list (tsp.list.of.objects (textobj window)
(function xrefp))))
(and ref.list (let ((textobj (textobj window)))
(tedit.promptprint stream (concat (cond
(unupdating? "Undoing Update of")
(t "Updating"))
" References...")
t)
(|for| ref |in| ref.list
|do| (let ((ref.tag (|fetch| objectdatum |of| (car ref))))
(cond
((or unupdating? (xref.get.toobj ref.tag))
(tedit.object.changed stream (car ref)))
(t (printout promptwindow t (concat
"Undefined Reference to \""
ref.tag
"\", delete it or just continte?"
)
t)
(flashwindow promptwindow)
(selectq (menu (|create| menu
title _ '|Undefined Ref|
items _ '(|Delete| |Continue|)
centerflg _ t))
(|Delete| (tedit.delete stream (cadr ref)
1))
nil)))))
(tedit.promptprint stream "done"))))))
(* |;;;| "Update all the XREF objects in the window.")
(insert.ref
(lambda (stream display.prev) (* |fsg| "25-Sep-87 10:24")
(let* ((window (\\tedit.mainw stream))
(code (get.ref window stream display.prev))
(ref (and code (xref code))))
(and ref (progn (imageobjprop ref 'reference.by (get.reference.by window))
(tedit.insert.object ref stream))))))
(LET ((REF.LIST (TSP.LIST.OF.OBJECTS TSTREAM (FUNCTION XREFP))))
(CL:WHEN REF.LIST
(TEDIT.PROMPTPRINT TSTREAM (CONCAT (COND
(UNUPDATING? "Undoing Update of")
(T "Updating"))
" References...")
T)
(|for| REF |in| REF.LIST
|do| (LET ((REF.TAG (|fetch| OBJECTDATUM |of| REF)))
(COND
((OR UNUPDATING? (XREF.GET.TOOBJ REF.TAG))
(TEDIT.OBJECT.CHANGED TSTREAM (CAR REF)))
(T (PRINTOUT PROMPTWINDOW T (CONCAT "Undefined Reference to \"" REF.TAG
"\", delete it or just continte?")
T)
(FLASHWINDOW PROMPTWINDOW)
(SELECTQ (MENU (|create| MENU
TITLE _ '|Undefined Ref|
ITEMS _ '(|Delete| |Continue|)
CENTERFLG _ T))
(|Delete| (TEDIT.DELETE TSTREAM (CADR REF)
1))
NIL)))))))))
(get.ref
(lambda (window stream display.prev) (* |fsg| " 2-Sep-87 11:24")
(* * i\f display.prev |is| |non-NIL| |then| |get| |the| |Reference| tag |from|
 \a |menu.| |Else| |prompt| |the| |user| |for| |the| tag |name.|)
(INSERT.REF
(LAMBDA (TSTREAM DISPLAY.PREV) (* \; "Edited 22-Feb-2025 16:32 by rmk")
(* |fsg| "25-Sep-87 10:24")
(LET* ((CODE (GET.REF TSTREAM DISPLAY.PREV))
(REF (AND CODE (XREF CODE))))
(CL:WHEN REF
(IMAGEOBJPROP REF 'REFERENCE.BY (GET.REFERENCE.BY TSTREAM))
(TEDIT.INSERT.OBJECT REF TSTREAM)))))
(cond
(display.prev (let ((prevrefs (tsp.list.refs window)))
(cond
(prevrefs (tedit.promptprint stream "" t)
(menu (|create| menu
title _ '|Reference Tags|
items _ (sort prevrefs 'ualphorder)
menucolumns _ (fix (sqrt (length prevrefs)))
centerflg _ t)))
(t (tedit.promptprint stream "There are no References in this document."
t)))))
(t (mkatom (tedit.getinput stream "Reference to:"))))))
(GET.REF
(LAMBDA (TSTREAM DISPLAY.PREV) (* \; "Edited 22-Feb-2025 16:30 by rmk")
(* |fsg| " 2-Sep-87 11:24")
(get.reference.by
(lambda (window ask?) (* \; "Edited 29-Sep-87 15:24 by fsg")
(* |;;;| "If DISPLAY.PREV is non-NIL then get the Reference TAG from a menu. Else prompt the user for the TAG name.")
(* * |Get| |the| "Reference By" |value| |from| |the| |FreeMenu.|
 i\f ask? |is| t |or| |the| |FreeMenu| |value| |is| "Ask" |then| |pop| |up| \a
 |menu| |to| |get| |Value| |or| |Number.|)
(COND
(DISPLAY.PREV (LET ((PREVREFS (TSP.LIST.REFS TSTREAM)))
(COND
(PREVREFS (TEDIT.PROMPTPRINT TSTREAM "" T)
(MENU (|create| MENU
TITLE _ '|Reference Tags|
ITEMS _ (SORT PREVREFS 'UALPHORDER)
MENUCOLUMNS _ (FIX (SQRT (LENGTH PREVREFS)))
CENTERFLG _ T)))
(T (TEDIT.PROMPTPRINT TSTREAM
"There are no References in this document." T)))))
(T (MKATOM (TEDIT.GETINPUT TSTREAM "Reference to:"))))))
(let ((reference.by (cond
(ask? '|Ask|)
(t (fm.itemprop (fm.getitem 'defaultref nil (windowprop window
'imageobj.menuw))
'label)))))
(selectq reference.by
(|Ask| (or (menu (|create| menu
title _ '|Reference By|
centerflg _ t
items _ '(|Value| |Page|)))
(GET.REFERENCE.BY
(LAMBDA (TSTREAM ASK?) (* \; "Edited 22-Feb-2025 16:31 by rmk")
(* \; "Edited 29-Sep-87 15:24 by fsg")
(* |;;;| "Get the 'Reference By' value from the FreeMenu. If ASK? is T or the FreeMenu value is 'Ask' then pop up a menu to get Value or Number.")
(LET ((REFERENCE.BY (CL:IF ASK?
'|Ask|
(FM.ITEMPROP (FM.GETITEM 'DEFAULTREF NIL (TMAXPROP TSTREAM
'IMAGEOBJ.MENUW))
'LABEL))))
(SELECTQ REFERENCE.BY
(|Ask| (OR (MENU (|create| MENU
TITLE _ '|Reference By|
CENTERFLG _ T
ITEMS _ '(|Value| |Page|)))
'|Value|))
reference.by))))
REFERENCE.BY))))
(tsp.list.refs
(lambda (window) (* |ss:| "27-Jun-87 16:36")
(* * |Used| |to| |collect| |index| |references| |here| |but| |now| |use|
 index.list.refs |instead.|)
(TSP.LIST.REFS
(LAMBDA (TSTREAM) (* \; "Edited 22-Feb-2025 16:30 by rmk")
(* |ss:| "27-Jun-87 16:36")
(let ((reflist nil))
(maphash (windowprop window 'tsp.code.array)
(function (lambda (val ky)
(setq reflist (cons ky reflist)))))
reflist)))
(* |;;;| "Used to collect index references here but now use INDEX.LIST.REFS instead.")
(LET ((REFLIST NIL))
(MAPHASH (TMAXPROP TSTREAM 'TSP.CODE.ARRAY)
(FUNCTION (LAMBDA (VAL KY)
(SETQ REFLIST (CONS KY REFLIST)))))
REFLIST)))
(tsp.get.incode
(lambda (stream) (* |fsg| " 4-Aug-87 16:13")
@ -372,14 +382,17 @@
(or tag.id (tedit.promptprint stream "" t))
tag.id)))
(tsp.getcodeval
(lambda (code window) (* |ss:| "27-Jun-87 16:35")
(let ((tsp.code.array (windowprop window 'tsp.code.array)))
(gethash code tsp.code.array))))
(TSP.GETCODEVAL
(LAMBDA (CODE TSTREAM) (* \; "Edited 21-Feb-2025 10:17 by rmk")
(* |ss:| "27-Jun-87 16:35")
(LET ((TSP.CODE.ARRAY (TMAXPROP TSTREAM 'TSP.CODE.ARRAY)))
(GETHASH CODE TSP.CODE.ARRAY))))
(tsp.putcode
(lambda (code value window) (* |ss:| "27-Jun-87 16:36")
(puthash code value (list (windowprop window 'tsp.code.array)))))
(TSP.PUTCODE
(LAMBDA (CODE VALUE TSTREAM) (* \; "Edited 28-Feb-2025 00:42 by rmk")
(* \; "Edited 21-Feb-2025 10:17 by rmk")
(* |ss:| "27-Jun-87 16:36")
(PUTHASH CODE VALUE (TMAXPROP TSTREAM 'TSP.CODE.ARRAY))))
)
@ -388,21 +401,21 @@
(DEFINEQ
(xref.add.displayfn
(lambda (objtype name.of.function) (* |edited:| "22-Jan-87 21:08")
(* |Adds| |an| xref |display| |method| |for| |an| |imageobject| |of| |the|
 |given| |type.| |This| |means| |that| |the| |function| name.of.function |will|
 |be| |used| |to| |display| |text| |when| |an| xref |object| |references| |an|
 |imageobject| |of| |type| objtype.)
(XREF.ADD.DISPLAYFN
(LAMBDA (OBJTYPE NAME.OF.FUNCTION) (* \; "Edited 22-Feb-2025 23:41 by rmk")
(* |edited:| "22-Jan-87 21:08")
(puthash objtype name.of.function xref.display.methods)))
(* |;;| "Adds an XREF display method for an imageobject of the given type. This means that the function NAME.OF.FUNCTION will be used to display text when an XREF object references an imageobject of type OBJTYPE.")
(xref.get.displayfn
(lambda (obj) (* |edited:| "22-Jan-87 21:11")
(* |Returns| |the| xref |display|
 |method| |for| |an| |imageobject| obj.)
(gethash (|fetch| use |of| (|fetch| objectdatum |of| obj))
xref.display.methods)))
(PUTHASH OBJTYPE NAME.OF.FUNCTION XREF.DISPLAY.METHODS)))
(XREF.GET.DISPLAYFN
(LAMBDA (OBJ) (* \; "Edited 28-Feb-2025 15:17 by rmk")
(* |edited:| "22-Jan-87 21:11")
(* \;
 "Returns the XREF display method for an imageobject OBJ.")
(GETHASH (|fetch| USE |of| (|fetch| OBJECTDATUM |of| OBJ))
XREF.DISPLAY.METHODS)))
)
@ -428,16 +441,15 @@
(t (ngroup.xref.display.text template numstring))))
(t (concat "<" ref.type "/" reference.by ">"))))))
(ngroup.xref.display.text
(lambda (template numstring) (* |fsg| "29-Jul-87 10:24")
(* * |Return| |the| |display| |text| |value| |for| |an| |updated| |NGroup|
 |reference.|)
(NGROUP.XREF.DISPLAY.TEXT
(LAMBDA (TEMPLATE NUMSTRING) (* \; "Edited 26-Feb-2025 10:28 by rmk")
(* |fsg| "29-Jul-87 10:24")
(|with| ngtemplate template (cond
(ng.text-after (substring numstring 1 (minus (add1 (nchars
ng.text-after
)))))
(t numstring)))))
(* |;;;| "Return the display text value for an updated NGroup reference.")
(|with| NGTEMPLATE TEMPLATE (CL:IF NG.DELIMAFTER
(SUBSTRING NUMSTRING 1 (MINUS (ADD1 (NCHARS NG.DELIMAFTER))))
NUMSTRING))))
(note.xref.displayfn
(lambda (note.obj reference.by) (* |fsg| "29-Jul-87 10:35")
@ -478,14 +490,14 @@
(FILESLOAD (COMPILED SYSLOAD)
TMAX)
(DECLARE\: DONTCOPY
(FILEMAP (NIL (3626 11427 (XREF 3636 . 4203) (XREFP 4205 . 4592) (XREF.DISPLAYFN 4594 . 5028) (
XREF.IMAGEBOXFN 5030 . 5655) (XREF.PUTFN 5657 . 5903) (XREF.GETFN 5905 . 6583) (XREF.COPYFN 6585 .
7195) (XREF.BUTTONEVENTINFN 7197 . 10400) (XREF.WHENDELETEDFN 10402 . 10976) (XREF.TEDIT-TO-TEX-FN
10978 . 11425)) (11428 13552 (XREF.GET.DISPLAY.TEXT 11438 . 12722) (XREF.GET.TOOBJ 12724 . 13401) (
TSPOBJ.GETTYPE 13403 . 13550)) (13553 19927 (UPDATE.XREFS 13563 . 15946) (INSERT.REF 15948 . 16360) (
GET.REF 16362 . 17417) (GET.REFERENCE.BY 17419 . 18406) (TSP.LIST.REFS 18408 . 18860) (TSP.GET.INCODE
18862 . 19516) (TSP.GETCODEVAL 19518 . 19740) (TSP.PUTCODE 19742 . 19925)) (20019 20990 (
XREF.ADD.DISPLAYFN 20029 . 20543) (XREF.GET.DISPLAYFN 20545 . 20988)) (21050 23412 (
NGROUP.XREF.DISPLAYFN 21060 . 22020) (NGROUP.XREF.DISPLAY.TEXT 22022 . 22658) (NOTE.XREF.DISPLAYFN
22660 . 23410)))))
(FILEMAP (NIL (3695 12492 (XREF 3705 . 4272) (XREFP 4274 . 4661) (XREF.DISPLAYFN 4663 . 5135) (
XREF.IMAGEBOXFN 5137 . 5762) (XREF.PUTFN 5764 . 6010) (XREF.GETFN 6012 . 6690) (XREF.COPYFN 6692 .
7318) (XREF.BUTTONEVENTINFN 7320 . 11423) (XREF.WHENDELETEDFN 11425 . 12041) (XREF.TEDIT-TO-TEX-FN
12043 . 12490)) (12493 14620 (XREF.GET.DISPLAY.TEXT 12503 . 13729) (XREF.GET.TOOBJ 13731 . 14469) (
TSPOBJ.GETTYPE 14471 . 14618)) (14621 21003 (UPDATE.XREFS 14631 . 16503) (INSERT.REF 16505 . 16973) (
GET.REF 16975 . 18090) (GET.REFERENCE.BY 18092 . 19106) (TSP.LIST.REFS 19108 . 19626) (TSP.GET.INCODE
19628 . 20282) (TSP.GETCODEVAL 20284 . 20610) (TSP.PUTCODE 20612 . 21001)) (21095 22148 (
XREF.ADD.DISPLAYFN 21105 . 21622) (XREF.GET.DISPLAYFN 21624 . 22146)) (22208 24451 (
NGROUP.XREF.DISPLAYFN 22218 . 23178) (NGROUP.XREF.DISPLAY.TEXT 23180 . 23697) (NOTE.XREF.DISPLAYFN
23699 . 24449)))))
STOP

Binary file not shown.

Binary file not shown.