diff --git a/library/FILEBROWSER b/library/FILEBROWSER
index 6bccb058..f6894807 100644
--- a/library/FILEBROWSER
+++ b/library/FILEBROWSER
@@ -1,10 +1,10 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "XCL" BASE 10)
-(FILECREATED "21-Aug-2021 23:33:58" 
-|{DSK}<Users>kaplan>Local>medley3.5>git-medley>library>FILEBROWSER.;9| 263236 
+(FILECREATED "19-Sep-2021 18:08:05" 
+|{DSK}<Users>kaplan>Local>medley3.5>git-medley>library>FILEBROWSER.;9| 260675 
 
-      |changes| |to:|  (FNS FB.FIX-DIRECTORY-DATES)
+      |changes| |to:|  (FNS FB.EDITCOMMAND.ONEFILE)
 
-      |previous| |date:| "21-Aug-2021 23:08:34" 
+      |previous| |date:| "21-Aug-2021 23:33:58" 
 |{DSK}<Users>kaplan>Local>medley3.5>git-medley>library>FILEBROWSER.;7|)
 
 
@@ -22,11 +22,11 @@
                                                       (TERPRI T))))
               (FILES ATTACHEDWINDOW ICONW TABLEBROWSER)
               (P 
-                 (* |;;| "Set up for MODERNIZE windows, whether or not MODERNIZE is pre-loaded")
+                 (* |;;| "Set up for MODERNIZE windows, whether or not MODERNIZE is pre-loaded")
 
                  (MOVD? 'NILL 'TOTOPW.MODERNIZE))
               
-              (* |;;| "JDS 11/94 FB.ICONSPEC is now an INITVAR so we can create smaller ones in profiles for, e.g., laptops.")
+              (* |;;| "JDS 11/94 FB.ICONSPEC is now an INITVAR so we can create smaller ones in profiles for, e.g., laptops.")
 
               (INITVARS (FB.EXPUNGE?MENU)
                      (FB.BROWSERFONT DEFAULTFONT)
@@ -45,7 +45,7 @@
                                  (FB.PROMPTFONT LITTLEFONT)
                                  (FB.BROWSER.DIRECTORY.FONT BOLDFONT)))
               (P 
-                 (* |;;| "FONTSET fills in the variables in FONTVARS for us, so do it.")
+                 (* |;;| "FONTSET fills in the variables in FONTVARS for us, so do it.")
 
                  (FONTSET (FONTSET)))
               (ADDVARS (CACHEDMENUS FB.EXPUNGE?MENU))
@@ -170,16 +170,16 @@ You specify how many versions to keep.")))
               (VARS FB.VERSION.MENU.ITEMS FB.CLOSE.MENU.ITEMS FB.DEPTH.MENU.ITEMS FB.INFO.MENU.ITEMS
                     FB.DEFAULT.NAME.WIDTH FB.INFO.FIELDS FB.INFOSHADE FB.ITEMUNSELECTEDSHADE 
                     FB.ITEMSELECTEDSHADE))
-        (COMS                                                (* \; "Entries")
+        (COMS                                                (* \; "Entries")
               (COMMANDS "fb")
               (FNS FB FB.COPYBINARYCOMMAND FB.COPYTEXTCOMMAND FILEBROWSER FB.TABLEBROWSER 
                    FB.SELECTEDFILES FB.FETCHFILENAME FB.DIRECTORYP FB.PROMPTWPRINT FB.PROMPTW.FORMAT
                    FB.PROMPTFORINPUT FB.YES-OR-NO-P FB.ALLOW.ABORT \\FB.HARDCOPY.TOFILE.EXTENSION)
-                                                             (* \; "Setup")
+                                                             (* \; "Setup")
               (FNS FB.STARTUP FB.MAKERIGIDWINDOW)
               (FNS FB.PRINTFN FB.COPYFN))
-        (COMS                                                (* \; 
-                                                           "commands and major subfunctions")
+        (COMS                                                (* \; 
+                                                           "commands and major subfunctions")
               (FNS FB.MENU.WHENSELECTEDFN FB.COMMANDSELECTEDFN FB.SUBITEMP FB.MAKE.BROWSER.BUSY 
                    FB.FINISH.COMMAND FB.HANDLE.ABORT.BUTTON)
               (FNS FB.DELETECOMMAND FB.DELVERCOMMAND FB.IS.NOT.SUBDIRECTORY.ITEM FB.DELVER.FILES 
@@ -204,7 +204,7 @@ You specify how many versions to keep.")))
               (FNS FB.EXPUNGECOMMAND FB.NEWPATTERNCOMMAND FB.NEWINFOCOMMAND FB.DEPTHCOMMAND 
                    FB.SHAPECOMMAND FB.REMOVE.FILE FB.COUNT.FILE.CHANGE FB.SETNEWPATTERN 
                    FB.GET.NEWPATTERN FB.OPTIONSCOMMAND))
-        (COMS                                                (* \; "window functions")
+        (COMS                                                (* \; "window functions")
               (FNS FB.INFOMENU.SHADEINITIALSELECTIONS FB.INFO.ITEM.NAMED)
               (FNS FB.MAKECOUNTERWINDOW FB.COUNTERW.REDISPLAYFN FB.UPDATE.COUNTERS 
                    FB.DISPLAY.COUNTERS FB.COUNTER.STRING)
@@ -253,7 +253,7 @@ You specify how many versions to keep.")))
 (FILESLOAD ATTACHEDWINDOW ICONW TABLEBROWSER)
 
 
-(* |;;| "Set up for MODERNIZE windows, whether or not MODERNIZE is pre-loaded")
+(* |;;| "Set up for MODERNIZE windows, whether or not MODERNIZE is pre-loaded")
 
 
 (MOVD? 'NILL 'TOTOPW.MODERNIZE)
@@ -295,7 +295,7 @@ You specify how many versions to keep.")))
                           (FB.BROWSER.DIRECTORY.FONT BOLDFONT))
 
 
-(* |;;| "FONTSET fills in the variables in FONTVARS for us, so do it.")
+(* |;;| "FONTSET fills in the variables in FONTVARS for us, so do it.")
 
 
 (FONTSET (FONTSET))
@@ -1684,84 +1684,49 @@ Your deletions are thus ignored.")))
                ELSE (FB.FASTSEECOMMAND BROWSER KEY ITEM MENU)))))
 
 (FB.EDITCOMMAND.ONEFILE
-  (LAMBDA (BROWSER FILE OPTION ITEM MENU)              (* \; "Edited  8-Aug-2021 11:16 by rmk:")
-                                                           (* \; "Edited 27-Feb-2021 20:07 by rmk:")
-                                                             (* \; "Edited  1-Feb-88 19:00 by bvm:")
+  (LAMBDA (BROWSER FILE OPTION ITEM MENU)              (* \; "Edited 19-Sep-2021 18:07 by rmk:")
+                                                           (* \; "Edited 27-Feb-2021 20:07 by rmk:")
+                                                             (* \; "Edited  1-Feb-88 19:00 by bvm:")
 
-    (* |;;| "Called when we know that FILE is a file, not a directory, and that TEDIT exists.  If OPTION is READONLY, we don't want to edit, just view.  If FILE is a lisp sourcefile, we execute the font changes by COPY.TEXT.TO.IMAGE.")
+    (* |;;| "Called when we know that FILE is a file, not a directory, and that TEDIT exists.  If OPTION is READONLY, we don't want to edit, just view.  .")
 
-    (* |;;| "We clear the shade stuff here because we don't want the FB to come up on top of our see/edit region.  We don't factor it to the top because we want to do whatever heavy lifting (copying files) before.  Don't factor to the end because then it is too late--the TEDIT window was up and then buried.  (If TEDIT had a don'topen option, we could set things up, then change the shade, then open.  We could also do the manufactured title on the window before it shows.")
+    (* |;;| "We clear the shade stuff here because we don't want the FB to come up on top of our see/edit region.   Don't factor to the end because then it is too late--the TEDIT window was up and then buried.  (If TEDIT had a don'topen option, we could set things up, then change the shade, then open.  We could also do the manufactured title on the window before it shows.")
 
-    (CL:UNLESS OPTION (SETQ OPTION FB.DEFAULT.EDITOR))
-    (CL:MULTIPLE-VALUE-BIND
-     (IGNORE CONDITION)
-     (IGNORE-ERRORS
-      (LET ((ENV (LISPSOURCEFILEP FILE)))
-           (IF ENV
-               THEN (SELECTQ OPTION
-                            ((LISP NIL TEDIT) 
-                                              (* |;;| 
-"Asks to load prop and edits the coms.  We really don't want to use a text editor on a source file.")
+    (CL:UNLESS OPTION (SETQ OPTION FB.DEFAULT.EDITOR))       (* \; "Default editor is TEDIT. ")
 
-                                 
-                                 (* |;;| "The FUNCALL at the bottom is concerning.")
+    (* |;;| "Unshade the item before we create the TEDIT window, and tell FB.FINISH.COMMAND that we did that.  That way, the FB window won't pop up on top.")
 
-                                 (SHADEITEM ITEM MENU FB.ITEMUNSELECTEDSHADE)
-                                 (PUTMENUPROP MENU 'ITEMSHADE (CONS ITEM FB.ITEMUNSELECTEDSHADE))
-                                 (FB.EDITLISPFILE FILE BROWSER))
-                            (READONLY                        (* \; "READONLY on call from SEE")
-                                      (CL:WITH-OPEN-FILE
-                                       (STREAM FILE :DIRECTION :INPUT)
-                                       (LET ((NSTR (OPENTEXTSTREAM)))
-                                            (\\EXTERNALFORMAT STREAM ENV)
-                                            (COPY.TEXT.TO.IMAGE STREAM NSTR)
+    (SHADEITEM ITEM MENU FB.ITEMUNSELECTEDSHADE)
+    (PUTMENUPROP MENU 'ITEMSHADE (CONS ITEM FB.ITEMUNSELECTEDSHADE))
 
-                                 (* |;;| "Unshade the item before we create the TEDIT window, and tell FB.FINISH.COMMAND that we did that.  That way, the FB window won't pop up on top.")
+    (* |;;| "The particular item may be a subitem of the EDIT or SEE menu item, in which case we want to unshade that too.  Seems a little bruteforce")
 
-                                            (SHADEITEM ITEM MENU FB.ITEMUNSELECTEDSHADE)
-                                            (PUTMENUPROP MENU 'ITEMSHADE (CONS ITEM 
+    (CL:UNLESS (MEMBER ITEM (FETCH (MENU ITEMS) OF MENU))
+        (FOR I IN (FETCH (MENU ITEMS) OF MENU)
+           WHEN (MEMBER ITEM (CDR (SASSOC 'SUBITEMS I))) DO (SHADEITEM I MENU 
+                                                                           FB.ITEMUNSELECTEDSHADE)
+                                                                   (PUTMENUPROP MENU 'ITEMSHADE
+                                                                          (CONS I 
                                                                                FB.ITEMUNSELECTEDSHADE
-                                                                               ))
-                                            (WINDOWPROP (WFROMDS (TEXTSTREAM
-                                                                  (TEDIT NSTR NIL NIL
-                                                                         '(READONLY T))))
-                                                   'TITLE
-                                                   (CONCAT "SEE window for " (FULLNAME STREAM))))))
-                            (CL:FUNCALL OPTION (MKATOM FILE)))
-             ELSE (SELECTQ OPTION
-                          (READONLY 
+                                                                                ))))
+    (CL:MULTIPLE-VALUE-BIND (IGNORE CONDITION)
+           (IGNORE-ERRORS (SELECTQ OPTION
+                              (READONLY (TEDIT-SEE FILE))
+                              (LISP                          (* \; 
+"Original code allowed OPTION=NIL in thie branch, but NIL should have been coerced to TEDIT above.")
 
-                                 (* |;;| "From SEE command. We want to be able to scroll around in the content, can't do that if it isn't random access.  So in that case we do a secret NODIRCORE copy and look at that.")
+                                    (* |;;| "Asks to load prop and edits the coms, presumably with SEDIT.  We really don't want to use a text editor on a source file.")
 
-                                    (CL:WITH-OPEN-FILE
-                                     (STREAM FILE :DIRECTION :INPUT)
-                                     (LET ((NSTR))
-                                          (CL:UNLESS (RANDACCESSP STREAM)
-                                              (SETQ NSTR (OPENSTREAM
-                                                          '{NODIRCORE}
-                                                          'BOTH
-                                                          'NEW NIL (LIST (LIST 'TYPE
-                                                                               (GETFILEINFO
-                                                                                STREAM
-                                                                                'TYPE)))))
-                                              (COPYBYTES STREAM NSTR))
-                                          (SHADEITEM ITEM MENU FB.ITEMUNSELECTEDSHADE)
-                                          (PUTMENUPROP MENU 'ITEMSHADE (CONS ITEM 
-                                                                             FB.ITEMUNSELECTEDSHADE))
-                                          (WINDOWPROP (WFROMDS (TEXTSTREAM (TEDIT (OR NSTR STREAM)
-                                                                                  NIL NIL
-                                                                                  '(READONLY T))))
-                                                 'TITLE
-                                                 (CONCAT "SEE window for " (FULLNAME STREAM))))))
-                          ((TEDIT NIL) 
-                               (SHADEITEM ITEM MENU FB.ITEMUNSELECTEDSHADE)
-                               (PUTMENUPROP MENU 'ITEMSHADE (CONS ITEM FB.ITEMUNSELECTEDSHADE))
-                               (TEDIT (MKATOM FILE)))
-                          (LISP (FB.PROMPTW.FORMAT BROWSER 
-                                       "Failed because not a Lisp source file"))
-                          (CL:FUNCALL OPTION (MKATOM FILE))))))
-     (|if| CONDITION
-         |then| (FB.PROMPTW.FORMAT BROWSER "Failed because ~A" CONDITION)))))
+                                    (IF (LISPSOURCEFILEP FILE)
+                                        THEN (FB.EDITLISPFILE FILE BROWSER)
+                                      ELSE (FB.PROMPTW.FORMAT BROWSER 
+                                                      "Failed because not a Lisp source file")))
+                              (PROGN 
+                                     (* |;;| "Might just be a call to TEDIT (if OPTION = TEDIT)")
+
+                                     (CL:FUNCALL OPTION (MKATOM FILE)))))
+           (|if| CONDITION
+               |then| (FB.PROMPTW.FORMAT BROWSER "Failed because ~A" CONDITION)))))
 
 (FB.EDITLISPFILE
   (LAMBDA (FILE BROWSER)                               (* \; "Edited 21-Feb-2021 17:29 by rmk:")
@@ -3838,26 +3803,26 @@ then click Recompute"))))
 
 (RECORD INFOFIELD (INFONAME INFOLABEL INFOWIDTH INFOFORMAT INFOPROTOTYPE))
 
-(DATATYPE FBFILEDATA ((FILENAME POINTER)                 (* \; "Full name of this file")
-                          (FILEINFO POINTER)                 (* \; "Plist of attributes")
-                          (VERSIONLESSNAME POINTER)          (* \; "FILENAME sans version")
-                          (DIRECTORYP FLAG)                  (* \; "True if it's a directory line")
-                          (HASDIRPREFIX FLAG)                (* \; 
-                         "True if it has a directory prefix beyond that in common to all the files")
-                          (DIRECTORYFILEP FLAG)              (* \; 
-                                     "True if the \"file\" in this item is actually a subdirectory")
-                          (SIZE POINTER)                     (* \; "Size of file, for stats")
-                          (FILEDEPTH BYTE)                   (* \; 
-          "Number of levels of subdirectory beneath the main pattern--zero for files at that level")
-                          (SORTVALUE POINTER)                (* \; 
-                                                    "Cached value by which we are sorting the dir.")
-                          (SUBDIREND WORD)                   (* \; 
-                             "Index of last char in subdirectory, or zero if HASDIRPREFIX is false")
-                          (STARTOFPNAME WORD)                (* \; 
-            "Start of name for printing purposes.  Same as STARTOFNAME when browser sorted by name")
-                          (VERSION WORD)                     (* \; "Version, or zero if none")
-                          (STARTOFNAME WORD)                 (* \; 
-                                                           "Index beyond all directory fields")
+(DATATYPE FBFILEDATA ((FILENAME POINTER)                 (* \; "Full name of this file")
+                          (FILEINFO POINTER)                 (* \; "Plist of attributes")
+                          (VERSIONLESSNAME POINTER)          (* \; "FILENAME sans version")
+                          (DIRECTORYP FLAG)                  (* \; "True if it's a directory line")
+                          (HASDIRPREFIX FLAG)                (* \; 
+                         "True if it has a directory prefix beyond that in common to all the files")
+                          (DIRECTORYFILEP FLAG)              (* \; 
+                                     "True if the \"file\" in this item is actually a subdirectory")
+                          (SIZE POINTER)                     (* \; "Size of file, for stats")
+                          (FILEDEPTH BYTE)                   (* \; 
+          "Number of levels of subdirectory beneath the main pattern--zero for files at that level")
+                          (SORTVALUE POINTER)                (* \; 
+                                                    "Cached value by which we are sorting the dir.")
+                          (SUBDIREND WORD)                   (* \; 
+                             "Index of last char in subdirectory, or zero if HASDIRPREFIX is false")
+                          (STARTOFPNAME WORD)                (* \; 
+            "Start of name for printing purposes.  Same as STARTOFNAME when browser sorted by name")
+                          (VERSION WORD)                     (* \; "Version, or zero if none")
+                          (STARTOFNAME WORD)                 (* \; 
+                                                           "Index beyond all directory fields")
                           DUMMY)
                          (ACCESSFNS FBFILEDATA ((PRINTNAME (SUBSTRING (FETCH (FBFILEDATA FILENAME
                                                                                         )
@@ -3872,85 +3837,85 @@ then click Recompute"))))
                                                                                        ) OF
                                                                                          DATUM))))))
 
-(DATATYPE FILEBROWSER ((NOSUBDIRECTORIES FLAG)           (* \; 
-               "True if we don't want separate subdirectory lines -- subdirs then included in name")
-                           (NSPATTERN? FLAG)                 (* \; "True if host is an ns host")
-                           (SHOWUNDELETED? FLAG)             (* \; 
-                        "True if counter window should show `Undeleted' rather than `Total' counts")
-                           (PATTERNPARSED? FLAG)             (* \; 
-                                     "True if PREPAREDPATTERN, NAMESTART, DIRECTORYSTART are valid")
-                           (SORTBYDATE FLAG)                 (* \; 
-                                              "True if SORTATTRIBUTE is one of the date attributes")
-                           (FBREADY FLAG)                    (* \; "False while FB is enumerating.")
-                           (ABORTING FLAG)                   (* \; 
-                                                           "True if enumeration is being aborted")
-                           (FIXEDTITLE FLAG)                 (* \; "True if caller supplied title")
-                           (FBCOMPUTEDDEPTH BYTE)            (* \; 
-                                    "Depth at the time we enumerated directory (zero for infinite)")
-                           (FBDISPLAYEDDEPTH BYTE)           (* \; 
-                                            "Depth we are currently displaying (zero for infinite)")
-                           (TABLEBROWSER POINTER)            (* \; 
-                                           "Pointer to TABLEBROWSER object controlling the browser")
-                           (BROWSERWINDOW POINTER)           (* \; "Main window")
-                           (COUNTERWINDOW POINTER)           (* \; 
-                                                       "Window that counts files, pages, deletions")
-                           (HEADINGWINDOW POINTER)           (* \; 
-                                                         "Window with headings for browser columns")
-                           (INFOMENUW POINTER)               (* \; 
-                           "Window containing choices for info to be displayed, or NIL if none yet")
-                           (PROMPTWINDOW POINTER)            (* \; "GETPROMPTWINDOW BROWSERWINDOW")
-                           (INFODISPLAYED POINTER)           (* \; 
-                                                          "List of attribute specs to be displayed")
-                           (PATTERN POINTER)                 (* \; 
-                                                           "Directory pattern being enumerated")
-                           (PREPAREDPATTERN POINTER)         (* \; "DIRECTORY.MATCH.SETUP of same")
-                           (SEEWINDOW POINTER)               (* \; 
-                                                          "Primary window used by FAST SEE command")
-                           (BROWSERFONT POINTER)             (* \; "Font of BROWSERWINDOW")
-                           (SORTBY POINTER)                  (* \; 
-                                                         "Sorting function or NIL for default sort")
-                           (NAMESTART WORD)                  (* \; 
-                     "Index of first character in file name beyond the common prefix shared by all")
-                           (DIRECTORYSTART WORD)             (* \; 
-                                              "Index of first character of directory in file names")
-                           (INFOSTART WORD)                  (* \; 
-                                       "X position in browser where first col of info is displayed")
-                           (NAMEOVERHEAD WORD)               (* \; 
-                              "This plus width of name gives is how much to allow before INFOSTART")
-                           (OVERFLOWSPACING WORD)            (* \; 
-                                                 "Increment between sizes considered for INFOSTART")
+(DATATYPE FILEBROWSER ((NOSUBDIRECTORIES FLAG)           (* \; 
+               "True if we don't want separate subdirectory lines -- subdirs then included in name")
+                           (NSPATTERN? FLAG)                 (* \; "True if host is an ns host")
+                           (SHOWUNDELETED? FLAG)             (* \; 
+                        "True if counter window should show `Undeleted' rather than `Total' counts")
+                           (PATTERNPARSED? FLAG)             (* \; 
+                                     "True if PREPAREDPATTERN, NAMESTART, DIRECTORYSTART are valid")
+                           (SORTBYDATE FLAG)                 (* \; 
+                                              "True if SORTATTRIBUTE is one of the date attributes")
+                           (FBREADY FLAG)                    (* \; "False while FB is enumerating.")
+                           (ABORTING FLAG)                   (* \; 
+                                                           "True if enumeration is being aborted")
+                           (FIXEDTITLE FLAG)                 (* \; "True if caller supplied title")
+                           (FBCOMPUTEDDEPTH BYTE)            (* \; 
+                                    "Depth at the time we enumerated directory (zero for infinite)")
+                           (FBDISPLAYEDDEPTH BYTE)           (* \; 
+                                            "Depth we are currently displaying (zero for infinite)")
+                           (TABLEBROWSER POINTER)            (* \; 
+                                           "Pointer to TABLEBROWSER object controlling the browser")
+                           (BROWSERWINDOW POINTER)           (* \; "Main window")
+                           (COUNTERWINDOW POINTER)           (* \; 
+                                                       "Window that counts files, pages, deletions")
+                           (HEADINGWINDOW POINTER)           (* \; 
+                                                         "Window with headings for browser columns")
+                           (INFOMENUW POINTER)               (* \; 
+                           "Window containing choices for info to be displayed, or NIL if none yet")
+                           (PROMPTWINDOW POINTER)            (* \; "GETPROMPTWINDOW BROWSERWINDOW")
+                           (INFODISPLAYED POINTER)           (* \; 
+                                                          "List of attribute specs to be displayed")
+                           (PATTERN POINTER)                 (* \; 
+                                                           "Directory pattern being enumerated")
+                           (PREPAREDPATTERN POINTER)         (* \; "DIRECTORY.MATCH.SETUP of same")
+                           (SEEWINDOW POINTER)               (* \; 
+                                                          "Primary window used by FAST SEE command")
+                           (BROWSERFONT POINTER)             (* \; "Font of BROWSERWINDOW")
+                           (SORTBY POINTER)                  (* \; 
+                                                         "Sorting function or NIL for default sort")
+                           (NAMESTART WORD)                  (* \; 
+                     "Index of first character in file name beyond the common prefix shared by all")
+                           (DIRECTORYSTART WORD)             (* \; 
+                                              "Index of first character of directory in file names")
+                           (INFOSTART WORD)                  (* \; 
+                                       "X position in browser where first col of info is displayed")
+                           (NAMEOVERHEAD WORD)               (* \; 
+                              "This plus width of name gives is how much to allow before INFOSTART")
+                           (OVERFLOWSPACING WORD)            (* \; 
+                                                 "Increment between sizes considered for INFOSTART")
                            (DIGITWIDTH WORD)
-                           (TOTALFILES WORD)                 (* \; 
-                         "Total number of files, deleted files, pages, deleted pages at the moment")
+                           (TOTALFILES WORD)                 (* \; 
+                         "Total number of files, deleted files, pages, deleted pages at the moment")
                            (DELETEDFILES WORD)
                            (TOTALPAGES POINTER)
                            (DELETEDPAGES POINTER)
-                           (PAGECOUNT? POINTER)              (* \; 
-                          "True if INFOCHOICES includes SIZE or LENGTH, so that we can count pages")
-                           (COUNTERPOSITIONS POINTER)        (* \; 
-     "List of pairs (left right) describing regions where the values of the counters are displayed")
-                           (COUNTERPAGESTRING POINTER)       (* \; 
-                                                           "String to print after file/page count")
-                           (OVERFLOWWIDTHS POINTER)          (* \; 
-                 "List of (xpos occurrences) describing files whose names exceed default INFOSTART")
-                           (INFOMENUCHOICES POINTER)         (* \; 
-            "Selections user has made in Info window, not necessarily the info currently displayed")
-                           (UPDATEPROC POINTER)              (* \; 
-                                                           "Process doing an Update (Recompute)")
-                           (DEFAULTDIR POINTER)              (* \; 
-                                                 "Default directory for destination of Copy/Rename")
-                           (SORTATTRIBUTE POINTER)           (* \; 
-                                                     "Attribute being sorted on, or NIL if by name")
+                           (PAGECOUNT? POINTER)              (* \; 
+                          "True if INFOCHOICES includes SIZE or LENGTH, so that we can count pages")
+                           (COUNTERPOSITIONS POINTER)        (* \; 
+     "List of pairs (left right) describing regions where the values of the counters are displayed")
+                           (COUNTERPAGESTRING POINTER)       (* \; 
+                                                           "String to print after file/page count")
+                           (OVERFLOWWIDTHS POINTER)          (* \; 
+                 "List of (xpos occurrences) describing files whose names exceed default INFOSTART")
+                           (INFOMENUCHOICES POINTER)         (* \; 
+            "Selections user has made in Info window, not necessarily the info currently displayed")
+                           (UPDATEPROC POINTER)              (* \; 
+                                                           "Process doing an Update (Recompute)")
+                           (DEFAULTDIR POINTER)              (* \; 
+                                                 "Default directory for destination of Copy/Rename")
+                           (SORTATTRIBUTE POINTER)           (* \; 
+                                                     "Attribute being sorted on, or NIL if by name")
                            (SORTMENU POINTER)
-                           (FBLOCK POINTER)                  (* \; 
-                                                          "Lock acquired by filebrowser operations")
-                           (SORTINDEX WORD)                  (* \; 
-                                            "Index (zero-based) in file info of the sort attribute")
-                           (SIZEINDEX WORD)                  (* \; "Index of size attribute")
-                           (FBDEPTH POINTER)                 (* \; 
-                                                           "Enumeration depth, or NIL for default")
-                           (ABORTWINDOW POINTER)             (* \; 
-                            "Dotted pair of (abortwindow . menuw) for this browser's abort window.")
+                           (FBLOCK POINTER)                  (* \; 
+                                                          "Lock acquired by filebrowser operations")
+                           (SORTINDEX WORD)                  (* \; 
+                                            "Index (zero-based) in file info of the sort attribute")
+                           (SIZEINDEX WORD)                  (* \; "Index of size attribute")
+                           (FBDEPTH POINTER)                 (* \; 
+                                                           "Enumeration depth, or NIL for default")
+                           (ABORTWINDOW POINTER)             (* \; 
+                            "Dotted pair of (abortwindow . menuw) for this browser's abort window.")
                            DUMMY))
 )
 
@@ -4253,35 +4218,35 @@ FB.UNDELETEALLCOMMAND 69511 . 69790) (FB.UNDELETE.FILE 69792 . 70537)) (70540 94
 FB.COPY/RENAME.ONE 72023 . 74345) (FB.COPY/RENAME.MANY 74347 . 80567) (FB.MERGE.DIRECTORIES 80569 . 
 80987) (FB.GREATEST.PREFIX 80989 . 82345) (FB.MAYBE.INSERT.FILE 82347 . 89787) (FB.GET.NEW.FILE.SPEC 
 89789 . 93620) (FB.CANONICAL.DIRECTORY 93622 . 94719)) (94722 102506 (FB.HARDCOPYCOMMAND 94732 . 95862
-) (FB.HARDCOPY.TOFILE 95864 . 102504)) (102507 114945 (FB.EDITCOMMAND 102517 . 103318) (
-FB.EDITCOMMAND.ONEFILE 103320 . 109161) (FB.EDITLISPFILE 109163 . 110202) (FB.BROWSECOMMAND 110204 . 
-114943)) (114946 126739 (FB.FASTSEECOMMAND 114956 . 118406) (FB.FASTSEE.ONEFILE 118408 . 121437) (
-FB.SEEFULLFN 121439 . 125570) (FB.SEEBUTTONFN 125572 . 126737)) (126740 128486 (FB.LOADCOMMAND 126750
- . 127257) (FB.COMPILECOMMAND 127259 . 127797) (FB.OPERATE.ON.FILES 127799 . 128484)) (128487 176145 (
-FB.UPDATECOMMAND 128497 . 128722) (FB.FIX-DIRECTORY-DATES 128724 . 129331) (FB.MAYBE.EXPUNGE 129333 . 
-130328) (FB.UPDATEBROWSERITEMS 130330 . 143545) (FB.DATE 143547 . 144288) (FB.ADJUST.DATE.WIDTH 144290
- . 147258) (FB.SET.BROWSER.TITLE 147260 . 148117) (FB.MAYBE.WIDEN.NAMES 148119 . 150238) (
-FB.SET.DEFAULT.NAME.WIDTH 150240 . 151604) (FB.CREATE.FILEBUCKET 151606 . 158826) (
-FB.CHECK.NAME.LENGTH 158828 . 161249) (FB.ADD.FILEGROUP 161251 . 162778) (FB.INSERT.DIRECTORY 162780
- . 163018) (FB.MAKE.SUBDIRECTORY.ITEM 163020 . 164429) (FB.ADD.FILE 164431 . 165044) (FB.INSERT.FILE 
-165046 . 168458) (FB.ANALYZE.PATTERN 168460 . 173724) (FB.CANONICALIZE.PATTERN 173726 . 175038) (
-FB.GETALLFILEINFO 175040 . 176143)) (176146 184305 (FB.SORT.VERSIONS 176156 . 178927) (
-FB.DECREASING.VERSION 178929 . 179598) (FB.INCREASING.VERSION 179600 . 180221) (
-FB.NAMES.DECREASING.VERSION 180223 . 181258) (FB.NAMES.INCREASING.VERSION 181260 . 182257) (
-FB.DECREASING.NUMERIC.ATTR 182259 . 182939) (FB.INCREASING.NUMERIC.ATTR 182941 . 183615) (
-FB.ALPHABETIC.ATTR 183617 . 184303)) (184306 194148 (FB.SORTCOMMAND 184316 . 191146) (
-FB.INSERT.SUBDIRECTORIES 191148 . 191945) (FB.GET.SORT.MENU 191947 . 194146)) (194149 210238 (
-FB.EXPUNGECOMMAND 194159 . 196678) (FB.NEWPATTERNCOMMAND 196680 . 197078) (FB.NEWINFOCOMMAND 197080 . 
-199846) (FB.DEPTHCOMMAND 199848 . 201623) (FB.SHAPECOMMAND 201625 . 204967) (FB.REMOVE.FILE 204969 . 
-206790) (FB.COUNT.FILE.CHANGE 206792 . 208237) (FB.SETNEWPATTERN 208239 . 209409) (FB.GET.NEWPATTERN 
-209411 . 209995) (FB.OPTIONSCOMMAND 209997 . 210236)) (210273 211285 (
-FB.INFOMENU.SHADEINITIALSELECTIONS 210283 . 210930) (FB.INFO.ITEM.NAMED 210932 . 211283)) (211286 
-220752 (FB.MAKECOUNTERWINDOW 211296 . 212758) (FB.COUNTERW.REDISPLAYFN 212760 . 213347) (
-FB.UPDATE.COUNTERS 213349 . 215421) (FB.DISPLAY.COUNTERS 215423 . 220483) (FB.COUNTER.STRING 220485 . 
-220750)) (220753 225396 (FB.MAKEHEADINGWINDOW 220763 . 222311) (FB.HEADINGW.REDISPLAYFN 222313 . 
-222579) (FB.HEADINGW.RESHAPEFN 222581 . 222957) (FB.HEADINGW.DISPLAY 222959 . 225394)) (225397 229580 
-(FB.ICONFN 225407 . 225754) (FB.INFOMENU.WHENSELECTEDFN 225756 . 226486) (FB.CLOSEFN 226488 . 227691) 
-(FB.EXPUNGE?.MENU 227693 . 228105) (FB.AFTERCLOSEFN 228107 . 228468) (FB.CLOSE&EXPUNGE 228470 . 229578
-)) (229581 241639 (FB.HARDCOPY.DIRECTORY 229591 . 239948) (FB.HARDCOPY.PRINT.TITLE 239950 . 240276) (
-FB.HARDCOPY.MAXWIDTH 240278 . 241637)))))
+) (FB.HARDCOPY.TOFILE 95864 . 102504)) (102507 112384 (FB.EDITCOMMAND 102517 . 103318) (
+FB.EDITCOMMAND.ONEFILE 103320 . 106600) (FB.EDITLISPFILE 106602 . 107641) (FB.BROWSECOMMAND 107643 . 
+112382)) (112385 124178 (FB.FASTSEECOMMAND 112395 . 115845) (FB.FASTSEE.ONEFILE 115847 . 118876) (
+FB.SEEFULLFN 118878 . 123009) (FB.SEEBUTTONFN 123011 . 124176)) (124179 125925 (FB.LOADCOMMAND 124189
+ . 124696) (FB.COMPILECOMMAND 124698 . 125236) (FB.OPERATE.ON.FILES 125238 . 125923)) (125926 173584 (
+FB.UPDATECOMMAND 125936 . 126161) (FB.FIX-DIRECTORY-DATES 126163 . 126770) (FB.MAYBE.EXPUNGE 126772 . 
+127767) (FB.UPDATEBROWSERITEMS 127769 . 140984) (FB.DATE 140986 . 141727) (FB.ADJUST.DATE.WIDTH 141729
+ . 144697) (FB.SET.BROWSER.TITLE 144699 . 145556) (FB.MAYBE.WIDEN.NAMES 145558 . 147677) (
+FB.SET.DEFAULT.NAME.WIDTH 147679 . 149043) (FB.CREATE.FILEBUCKET 149045 . 156265) (
+FB.CHECK.NAME.LENGTH 156267 . 158688) (FB.ADD.FILEGROUP 158690 . 160217) (FB.INSERT.DIRECTORY 160219
+ . 160457) (FB.MAKE.SUBDIRECTORY.ITEM 160459 . 161868) (FB.ADD.FILE 161870 . 162483) (FB.INSERT.FILE 
+162485 . 165897) (FB.ANALYZE.PATTERN 165899 . 171163) (FB.CANONICALIZE.PATTERN 171165 . 172477) (
+FB.GETALLFILEINFO 172479 . 173582)) (173585 181744 (FB.SORT.VERSIONS 173595 . 176366) (
+FB.DECREASING.VERSION 176368 . 177037) (FB.INCREASING.VERSION 177039 . 177660) (
+FB.NAMES.DECREASING.VERSION 177662 . 178697) (FB.NAMES.INCREASING.VERSION 178699 . 179696) (
+FB.DECREASING.NUMERIC.ATTR 179698 . 180378) (FB.INCREASING.NUMERIC.ATTR 180380 . 181054) (
+FB.ALPHABETIC.ATTR 181056 . 181742)) (181745 191587 (FB.SORTCOMMAND 181755 . 188585) (
+FB.INSERT.SUBDIRECTORIES 188587 . 189384) (FB.GET.SORT.MENU 189386 . 191585)) (191588 207677 (
+FB.EXPUNGECOMMAND 191598 . 194117) (FB.NEWPATTERNCOMMAND 194119 . 194517) (FB.NEWINFOCOMMAND 194519 . 
+197285) (FB.DEPTHCOMMAND 197287 . 199062) (FB.SHAPECOMMAND 199064 . 202406) (FB.REMOVE.FILE 202408 . 
+204229) (FB.COUNT.FILE.CHANGE 204231 . 205676) (FB.SETNEWPATTERN 205678 . 206848) (FB.GET.NEWPATTERN 
+206850 . 207434) (FB.OPTIONSCOMMAND 207436 . 207675)) (207712 208724 (
+FB.INFOMENU.SHADEINITIALSELECTIONS 207722 . 208369) (FB.INFO.ITEM.NAMED 208371 . 208722)) (208725 
+218191 (FB.MAKECOUNTERWINDOW 208735 . 210197) (FB.COUNTERW.REDISPLAYFN 210199 . 210786) (
+FB.UPDATE.COUNTERS 210788 . 212860) (FB.DISPLAY.COUNTERS 212862 . 217922) (FB.COUNTER.STRING 217924 . 
+218189)) (218192 222835 (FB.MAKEHEADINGWINDOW 218202 . 219750) (FB.HEADINGW.REDISPLAYFN 219752 . 
+220018) (FB.HEADINGW.RESHAPEFN 220020 . 220396) (FB.HEADINGW.DISPLAY 220398 . 222833)) (222836 227019 
+(FB.ICONFN 222846 . 223193) (FB.INFOMENU.WHENSELECTEDFN 223195 . 223925) (FB.CLOSEFN 223927 . 225130) 
+(FB.EXPUNGE?.MENU 225132 . 225544) (FB.AFTERCLOSEFN 225546 . 225907) (FB.CLOSE&EXPUNGE 225909 . 227017
+)) (227020 239078 (FB.HARDCOPY.DIRECTORY 227030 . 237387) (FB.HARDCOPY.PRINT.TITLE 237389 . 237715) (
+FB.HARDCOPY.MAXWIDTH 237717 . 239076)))))
 STOP
diff --git a/library/FILEBROWSER.LCOM b/library/FILEBROWSER.LCOM
index eb9ea818..43fc3273 100644
Binary files a/library/FILEBROWSER.LCOM and b/library/FILEBROWSER.LCOM differ
diff --git a/library/TEDIT b/library/TEDIT
index 52195241..8381bd7b 100644
--- a/library/TEDIT
+++ b/library/TEDIT
@@ -1,14 +1,14 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
-(FILECREATED "19-Apr-2018 12:22:03" {DSK}<Users>kaplan>Local>medley3.5>lispcore>library>TEDIT.;2 140045 
+(FILECREATED "19-Sep-2021 17:08:56" {DSK}<Users>kaplan>Local>medley3.5>git-medley>library>TEDIT.;2 141945 
 
       changes to%:  (VARS TEDITCOMS)
 
-      previous date%: "21-Jun-99 20:00:16" 
-{DSK}<Users>kaplan>Local>medley3.5>lispcore>library>TEDIT.;1)
+      previous date%: "19-Apr-2018 12:22:03" 
+{DSK}<Users>kaplan>Local>medley3.5>git-medley>library>TEDIT.;1)
 
 
 (* ; "
-Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1995, 1999, 2018 by Venue & Xerox Corporation.  All rights reserved.
+Copyright (c) 1983-1993, 1995, 1999, 2018, 2021 by Venue & Xerox Corporation.
 ")
 
 (PRETTYCOMPRINT TEDITCOMS)
@@ -24,40 +24,40 @@ Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993,
               (TEDIT.DEFAULT.PROPS NIL)
               (TEDIT.STARTUP.MONITORLOCK (CREATE.MONITORLOCK 'TEDIT.STARTUP))
               (TEDIT.RESTART.MENU (\CREATE.TEDIT.RESTART.MENU))
-                                                             (* ; 
-                                            "Original was (CREATE MENU ITEMS _ '(NewEditProcess)).")
-                                                             (* ; 
-                                                  "Changed by yabu.fx, for SUNLOADUP without DWIM.")
+                                                             (* ; 
+                                            "Original was (CREATE MENU ITEMS _ '(NewEditProcess)).")
+                                                             (* ; 
+                                                  "Changed by yabu.fx, for SUNLOADUP without DWIM.")
               )
         (GLOBALVARS TEDIT.TENTATIVE TEDIT.DEFAULT.PROPS)
-        (FNS \TEDIT2 COERCETEXTOBJ TEDIT TEDIT.CHARWIDTH TEDIT.COPY TEDIT.DELETE 
+        (FNS \TEDIT2 COERCETEXTOBJ TEDIT TEDIT-SEE TEDIT.CHARWIDTH TEDIT.COPY TEDIT.DELETE 
              TEDIT.DO.BLUEPENDINGDELETE TEDIT.INSERT TEDIT.KILL TEDIT.MAPLINES TEDIT.MAPPIECES 
              TEDIT.MOVE TEDIT.QUIT TEDIT.STRINGWIDTH TEDIT.\INSERT TEXTOBJ TEXTSTREAM \TEDIT.INCLUDE
              \TEDIT.INSERT.PIECES \TEDIT.MOVE.PIECEMAPFN \TEDIT.OBJECT.SHOWSEL \TEDIT.RESTARTFN 
              \TEDIT.CHARDELETE \TEDIT.COPY.PIECEMAPFN \TEDIT.DELETE \TEDIT.DIFFUSE.PARALOOKS 
              \TEDIT.FOREIGN.COPY? \TEDIT.QUIT \TEDIT.WORDDELETE \TEDIT1)
         (P (MOVD? 'NILL 'OBJECTOUTOFTEDIT))
-                                                             (* ; 
-                                  "HOOK for looked-string copy, etc. Used in \TEDIT.FOREIGN.COPY?.")
+                                                             (* ; 
+                                  "HOOK for looked-string copy, etc. Used in \TEDIT.FOREIGN.COPY?.")
         (COMS (FNS \CREATE.TEDIT.RESTART.MENU))
-                                                             (* ; 
-                                                    "Added by yabu.fx, for SUNLOADUP without DWIM.")
-        (COMS                                                (* ; "Debugging functions")
+                                                             (* ; 
+                                                    "Added by yabu.fx, for SUNLOADUP without DWIM.")
+        (COMS                                                (* ; "Debugging functions")
               (FNS PLCHAIN PRINTLINE SEEFILE))
-        (COMS                                                (* ; "Object-oriented editing")
+        (COMS                                                (* ; "Object-oriented editing")
               (FNS TEDIT.INSERT.OBJECT TEDIT.EDIT.OBJECT TEDIT.FIND.OBJECT TEDIT.FIND.OBJECT.SUBTREE
                    TEDIT.PUT.OBJECT TEDIT.GET.OBJECT TEDIT.OBJECT.CHANGED))
         (FILES TEDITFIND TEDITHISTORY TEDITFILE TEDITWINDOW TEDITSELECTION IMAGEOBJ TFBRAVO TEDITHCPY
                TEDITPAGE TEDITMENU TEDITFNKEYS)
-        (COMS                                                (* ; "TEDIT Support information")
+        (COMS                                                (* ; "TEDIT Support information")
               (E (SETQ TEDITSYSTEMDATE (DATE)))
               (VARS TEDITSYSTEMDATE (TEDITSUPPORT "TEditSupport.PA"))
               (FNS MAKETEDITFORM)
               (P (ADDTOVAR LAFITESPECIALFORMS ("TEdit Report" 'MAKETEDITFORM 
                                                          "Report a problem with TEdit"))
                  (SETQ LAFITEFORMSMENU NIL)))
-        (COMS                                                (* ; 
-                         "LISTFILES Interface, so the system can decide if a file is a TEdit file.")
+        (COMS                                                (* ; 
+                         "LISTFILES Interface, so the system can decide if a file is a TEdit file.")
               (ADDVARS (PRINTFILETYPES (TEDIT (TEST \TEDIT.FORMATTEDP1)
                                               (EXTENSION (TEDIT])
 
@@ -327,6 +327,43 @@ Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993,
                     (TTY.PROCESS PROC)))
                 (RETURN PROC])
 
+(TEDIT-SEE
+  [LAMBDA (FILE WINDOW)                                 (* ; "Edited 19-Sep-2021 09:40 by rmk:")
+                                                            (* ; "Edited 27-Feb-2021 20:07 by rmk:")
+                                                             (* ; "Edited  1-Feb-88 19:00 by bvm:")
+
+    (* ;; "See FILE in a scrollable READONLY TEDIT window.  If FILE is a LISP source file, copy first to a temporary NODIRCORE image file that interpretes the fontchange characters rather than showing black boxes.")
+
+    (CL:WITH-OPEN-FILE (STREAM FILE :DIRECTION :INPUT)
+           (LET ((SEESTREAM STREAM)
+                 ENV TSTREAM)
+
+                (* ;; "No need to fiddle with a TEDIT file")
+
+                (IF (\TEDIT.FORMATTEDP1 STREAM)
+                  ELSEIF (SETQ ENV (LISPSOURCEFILEP STREAM))
+                    THEN 
+
+                          (* ;; "Lisp source file")
+
+                          (\EXTERNALFORMAT STREAM ENV)
+                          (SETQ SEESTREAM (OPENTEXTSTREAM))
+                          (COPY.TEXT.TO.IMAGE STREAM SEESTREAM)
+                  ELSE 
+
+                        (* ;; "Not a Lisp source file and not a Tedit file.  If it is not random access, we copy it so we can scroll around.")
+
+                        (CL:UNLESS (RANDACCESSP STREAM)
+                            [SETQ SEESTREAM (OPENSTREAM '{NODIRCORE} 'BOTH 'NEW
+                                                   `([TYPE ,(GETFILEINFO STREAM 'TYPE]
+                                                     (FORMAT ,(\EXTERNALFORMAT STREAM]
+                            (COPYBYTES STREAM SEESTREAM)))
+                [SETQ TSTREAM (TEXTSTREAM (TEDIT SEESTREAM WINDOW NIL '(READONLY T]
+                (WINDOWPROP (WFROMDS TSTREAM)
+                       'TITLE
+                       (CONCAT "SEE window for " (FULLNAME STREAM)))
+                (FULLNAME STREAM])
+
 (TEDIT.CHARWIDTH
   [LAMBDA (CH FONT TERMSA)                                   (* jds "22-OCT-83 19:32")
           
@@ -2192,7 +2229,7 @@ Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993,
 (* ; "TEDIT Support information")
 
 
-(RPAQQ TEDITSYSTEMDATE "19-Apr-2018 12:22:04")
+(RPAQQ TEDITSYSTEMDATE "19-Sep-2021 17:08:56")
 
 (RPAQ TEDITSUPPORT "TEditSupport.PA")
 (DEFINEQ
@@ -2216,21 +2253,21 @@ Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993,
 (ADDTOVAR PRINTFILETYPES (TEDIT (TEST \TEDIT.FORMATTEDP1)
                                     (EXTENSION (TEDIT))))
 (PUTPROPS TEDIT COPYRIGHT ("Venue & Xerox Corporation" 1983 1984 1985 1986 1987 1988 1989 1990 1991 
-1992 1993 1995 1999 2018))
+1992 1993 1995 1999 2018 2021))
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (4382 115216 (\TEDIT2 4392 . 7143) (COERCETEXTOBJ 7145 . 15921) (TEDIT 15923 . 20892) (
-TEDIT.CHARWIDTH 20894 . 22918) (TEDIT.COPY 22920 . 31356) (TEDIT.DELETE 31358 . 32048) (
-TEDIT.DO.BLUEPENDINGDELETE 32050 . 35117) (TEDIT.INSERT 35119 . 40649) (TEDIT.KILL 40651 . 42208) (
-TEDIT.MAPLINES 42210 . 43609) (TEDIT.MAPPIECES 43611 . 44567) (TEDIT.MOVE 44569 . 54353) (TEDIT.QUIT 
-54355 . 56355) (TEDIT.STRINGWIDTH 56357 . 57028) (TEDIT.\INSERT 57030 . 59055) (TEXTOBJ 59057 . 60182)
- (TEXTSTREAM 60184 . 61799) (\TEDIT.INCLUDE 61801 . 65701) (\TEDIT.INSERT.PIECES 65703 . 75618) (
-\TEDIT.MOVE.PIECEMAPFN 75620 . 77699) (\TEDIT.OBJECT.SHOWSEL 77701 . 81330) (\TEDIT.RESTARTFN 81332 . 
-83327) (\TEDIT.CHARDELETE 83329 . 87291) (\TEDIT.COPY.PIECEMAPFN 87293 . 90518) (\TEDIT.DELETE 90520
- . 98038) (\TEDIT.DIFFUSE.PARALOOKS 98040 . 100804) (\TEDIT.FOREIGN.COPY? 100806 . 104533) (
-\TEDIT.QUIT 104535 . 107681) (\TEDIT.WORDDELETE 107683 . 112516) (\TEDIT1 112518 . 115214)) (115330 
-115446 (\CREATE.TEDIT.RESTART.MENU 115340 . 115444)) (115545 119234 (PLCHAIN 115555 . 115829) (
-PRINTLINE 115831 . 118595) (SEEFILE 118597 . 119232)) (119275 138918 (TEDIT.INSERT.OBJECT 119285 . 
-128362) (TEDIT.EDIT.OBJECT 128364 . 130620) (TEDIT.FIND.OBJECT 130622 . 131515) (
-TEDIT.FIND.OBJECT.SUBTREE 131517 . 132323) (TEDIT.PUT.OBJECT 132325 . 133984) (TEDIT.GET.OBJECT 133986
- . 137185) (TEDIT.OBJECT.CHANGED 137187 . 138916)) (139196 139559 (MAKETEDITFORM 139206 . 139557)))))
+  (FILEMAP (NIL (4327 117111 (\TEDIT2 4337 . 7088) (COERCETEXTOBJ 7090 . 15866) (TEDIT 15868 . 20837) (
+TEDIT-SEE 20839 . 22787) (TEDIT.CHARWIDTH 22789 . 24813) (TEDIT.COPY 24815 . 33251) (TEDIT.DELETE 
+33253 . 33943) (TEDIT.DO.BLUEPENDINGDELETE 33945 . 37012) (TEDIT.INSERT 37014 . 42544) (TEDIT.KILL 
+42546 . 44103) (TEDIT.MAPLINES 44105 . 45504) (TEDIT.MAPPIECES 45506 . 46462) (TEDIT.MOVE 46464 . 
+56248) (TEDIT.QUIT 56250 . 58250) (TEDIT.STRINGWIDTH 58252 . 58923) (TEDIT.\INSERT 58925 . 60950) (
+TEXTOBJ 60952 . 62077) (TEXTSTREAM 62079 . 63694) (\TEDIT.INCLUDE 63696 . 67596) (\TEDIT.INSERT.PIECES
+ 67598 . 77513) (\TEDIT.MOVE.PIECEMAPFN 77515 . 79594) (\TEDIT.OBJECT.SHOWSEL 79596 . 83225) (
+\TEDIT.RESTARTFN 83227 . 85222) (\TEDIT.CHARDELETE 85224 . 89186) (\TEDIT.COPY.PIECEMAPFN 89188 . 
+92413) (\TEDIT.DELETE 92415 . 99933) (\TEDIT.DIFFUSE.PARALOOKS 99935 . 102699) (\TEDIT.FOREIGN.COPY? 
+102701 . 106428) (\TEDIT.QUIT 106430 . 109576) (\TEDIT.WORDDELETE 109578 . 114411) (\TEDIT1 114413 . 
+117109)) (117225 117341 (\CREATE.TEDIT.RESTART.MENU 117235 . 117339)) (117440 121129 (PLCHAIN 117450
+ . 117724) (PRINTLINE 117726 . 120490) (SEEFILE 120492 . 121127)) (121170 140813 (TEDIT.INSERT.OBJECT 
+121180 . 130257) (TEDIT.EDIT.OBJECT 130259 . 132515) (TEDIT.FIND.OBJECT 132517 . 133410) (
+TEDIT.FIND.OBJECT.SUBTREE 133412 . 134218) (TEDIT.PUT.OBJECT 134220 . 135879) (TEDIT.GET.OBJECT 135881
+ . 139080) (TEDIT.OBJECT.CHANGED 139082 . 140811)) (141091 141454 (MAKETEDITFORM 141101 . 141452)))))
 STOP
diff --git a/library/TEDIT.LCOM b/library/TEDIT.LCOM
index 6cbc1b6c..15e0271e 100644
Binary files a/library/TEDIT.LCOM and b/library/TEDIT.LCOM differ
diff --git a/library/TEDITHCPY b/library/TEDITHCPY
index 75206ae5..1e187a48 100644
--- a/library/TEDITHCPY
+++ b/library/TEDITHCPY
@@ -1,11 +1,12 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
-(FILECREATED "28-Jun-2021 12:35:45" 
-{DSK}<Users>kaplan>Local>medley3.5>git-medley>library>TEDITHCPY.;2 105754 
+(FILECREATED "20-Sep-2021 11:12:06" 
+{DSK}<Users>kaplan>Local>medley3.5>git-medley>library>TEDITHCPY.;4 105838 
 
-      changes to%:  (FNS \TEDIT.HARDCOPY.FORMATLINE)
+      changes to%:  (FNS TEDIT.HARDCOPYFN)
+                    (VARS TEDITHCPYCOMS)
 
-      previous date%: "25-Aug-94 10:54:07" 
-{DSK}<Users>kaplan>Local>medley3.5>git-medley>library>TEDITHCPY.;1)
+      previous date%: "20-Sep-2021 11:06:37" 
+{DSK}<Users>kaplan>Local>medley3.5>git-medley>library>TEDITHCPY.;3)
 
 
 (* ; "
@@ -14,41 +15,40 @@ Copyright (c) 1983-1994, 2021 by Venue & Xerox Corporation.
 
 (PRETTYCOMPRINT TEDITHCPYCOMS)
 
-(RPAQQ TEDITHCPYCOMS
+(RPAQQ TEDITHCPYCOMS 
        ((FILES TEDITDCL)
         (DECLARE%: EVAL@COMPILE DONTCOPY (CONSTANTS (\SCRATCHLEN 64))
                (FILES (LOADCOMP)
                       TEDITDCL))
         (COMS 
-              (* ;; "Generic interface functions and common code")
+              (* ;; "Generic interface functions and common code")
 
               (FNS TEDIT.HARDCOPY TEDIT.HCPYFILE \TEDIT.HARDCOPY.DISPLAYLINE 
                    \TEDIT.HARDCOPY.FORMATLINE \DOFORMATTING.HARDCOPY \TEDIT.HARDCOPY.MODIFYLOOKS 
                    \TEDIT.HCPYLOOKS.UPDATE \TEDIT.HCPYFMTSPEC \TEDIT.INTEGER.IMAGEBOX))
         (COMS 
-              (* ;; "Functions for scaling distances and regions as needed during hardcopy.")
+              (* ;; "Functions for scaling distances and regions as needed during hardcopy.")
 
               (FNS \TEDIT.SCALE \TEDIT.SCALEREGION))
         (COMS 
-              (* ;; "PRESS-specific code")
+              (* ;; "PRESS-specific code")
 
               (VARS (TEDIT.DEFAULTPAGEREGION (CREATEREGION 2794 1905 16256 23495)))
-                                                             (* ; 
-                                                           "0.75 inches from bottom, 1 from top")
+                                                             (* ; 
+                                                           "0.75 inches from bottom, 1 from top")
               )
         [COMS 
-              (* ;; "Support for the window-menu's HARDCOPY button, LISTFILES, etc.")
+              (* ;; "Support for the window-menu's HARDCOPY button, LISTFILES, etc.")
 
               (FNS TEDIT.HARDCOPYFN \TEDIT.HARDCOPY \TEDIT.PRESS.HARDCOPY)
-              (P (LISTPUT (ASSOC 'CONVERSION (ASSOC 'INTERPRESS PRINTFILETYPES))
-                        'TEDIT
-                        (FUNCTION \TEDIT.HARDCOPY)))
+              [P (LET [(IPVALUES (ASSOC 'CONVERSION (ASSOC 'INTERPRESS PRINTFILETYPES]
+                      (COND (IPVALUES                        (* ; 
+                                        "Only install INTERPRESS printing if INTERPRESS is loaded.")
+                                   (LISTPUT IPVALUES 'TEDIT (FUNCTION \TEDIT.HARDCOPY]
               (P (LET [(PRESSVALUES (ASSOC 'CONVERSION (ASSOC 'PRESS PRINTFILETYPES]
-                      (COND (PRESSVALUES                     (* ; 
-                                                  "Only install PRESS printing if PRESS is loaded.")
-                                   (LISTPUT PRESSVALUES 'TEDIT (FUNCTION \TEDIT.PRESS.HARDCOPY]
+                      (COND (PRESSVALUES (LISTPUT PRESSVALUES 'TEDIT (FUNCTION \TEDIT.PRESS.HARDCOPY]
         (COMS 
-              (* ;; "vars for Japanese Line Break")
+              (* ;; "vars for Japanese Line Break")
 
               [VARS (TEDIT.DONT.BREAK.CHARS '(8482 8483 8491 8492 8508 8525 8539 8537 8535 9249 9251
                                                    9253 9255 9257 9283 9315 9317 9319 9326 9505 9507
@@ -56,7 +56,7 @@ Copyright (c) 1983-1994, 2021 by Venue & Xerox Corporation.
                     (TEDIT.DONT.LAST.CHARS '(8524 8538 8536 8534]
               (GLOBALVARS TEDIT.DONT.BREAK.CHARS TEDIT.DONT.LAST.CHARS))
         (COMS 
-              (* ;; "Support for hardcopying several files as one document")
+              (* ;; "Support for hardcopying several files as one document")
 
               (FNS TEDIT-BOOK))))
 
@@ -1512,22 +1512,22 @@ Copyright (c) 1983-1994, 2021 by Venue & Xerox Corporation.
 (DEFINEQ
 
 (TEDIT.HARDCOPYFN
-  [LAMBDA (WINDOW IMAGESTREAM)                          (* ; "Edited 12-Jun-90 18:35 by mitani")
+  [LAMBDA (WINDOW IMAGESTREAM)                          (* ; "Edited 20-Sep-2021 11:12 by rmk:")
 
-    (* ;; 
- "This is the TEdit HARDCOPYFN, hooking into the system's standard Hardcopy window-menu operation.")
+    (* ;; 
+ "This is the TEdit HARDCOPYFN, hooking into the system's standard Hardcopy window-menu operation.")
 
     (PROG ((TEXTOBJ (TEXTOBJ WINDOW))
            (TEXTSTREAM (TEXTSTREAM WINDOW)))
 
-     (* ;; "TEXTSTREAM is bound here so we don't drop the steam on the floor if the window goes away, since the TEXTOBJ only has an XPOINTER to the stream in it.  Please don't remove this binding!")
+     (* ;; "TEXTSTREAM is bound here so we don't drop the steam on the floor if the window goes away, since the TEXTOBJ only has an XPOINTER to the stream in it.  Please don't remove this binding!")
 
           (RESETLST
               [RESETSAVE (\TEDIT.MARKACTIVE TEXTOBJ)
                      '(AND (\TEDIT.MARKINACTIVE OLDVALUE]
               (replace (TEXTOBJ EDITOPACTIVE) of TEXTOBJ with 'Hardcopy)
-              (TEDIT.FORMAT.HARDCOPY TEXTOBJ IMAGESTREAM)))  (* ; "Build the hardcopy")
-    ])
+                                                             (* ; "Build the hardcopy")
+              (TEDIT.FORMAT.HARDCOPY TEXTOBJ IMAGESTREAM))])
 
 (\TEDIT.HARDCOPY
   [LAMBDA (FILE PFILE)                                  (* ; "Edited 12-Jun-90 18:35 by mitani")
@@ -1562,24 +1562,24 @@ Copyright (c) 1983-1994, 2021 by Venue & Xerox Corporation.
         PFILE)])
 )
 
-(LISTPUT (ASSOC 'CONVERSION (ASSOC 'INTERPRESS PRINTFILETYPES))
-       'TEDIT
-       (FUNCTION \TEDIT.HARDCOPY))
+[LET [(IPVALUES (ASSOC 'CONVERSION (ASSOC 'INTERPRESS PRINTFILETYPES]
+     (COND
+        (IPVALUES                                            (* ; 
+                                        "Only install INTERPRESS printing if INTERPRESS is loaded.")
+               (LISTPUT IPVALUES 'TEDIT (FUNCTION \TEDIT.HARDCOPY]
 
 [LET [(PRESSVALUES (ASSOC 'CONVERSION (ASSOC 'PRESS PRINTFILETYPES]
      (COND
-        (PRESSVALUES                                         (* ; 
-                                                  "Only install PRESS printing if PRESS is loaded.")
-               (LISTPUT PRESSVALUES 'TEDIT (FUNCTION \TEDIT.PRESS.HARDCOPY]
+        (PRESSVALUES (LISTPUT PRESSVALUES 'TEDIT (FUNCTION \TEDIT.PRESS.HARDCOPY]
 
 
 
 (* ;; "vars for Japanese Line Break")
 
 
-(RPAQQ TEDIT.DONT.BREAK.CHARS (8482 8483 8491 8492 8508 8525 8539 8537 8535 9249 9251 9253 9255 
-                                        9257 9283 9315 9317 9319 9326 9505 9507 9509 9511 9513 9539 
-                                        9571 9573 9575 9582))
+(RPAQQ TEDIT.DONT.BREAK.CHARS 
+       (8482 8483 8491 8492 8508 8525 8539 8537 8535 9249 9251 9253 9255 9257 9283 9315 9317 9319 
+             9326 9505 9507 9509 9511 9513 9539 9571 9573 9575 9582))
 
 (RPAQQ TEDIT.DONT.LAST.CHARS (8524 8538 8536 8534))
 (DECLARE%: DOEVAL@COMPILE DONTCOPY
@@ -1612,11 +1612,11 @@ Copyright (c) 1983-1994, 2021 by Venue & Xerox Corporation.
 (PUTPROPS TEDITHCPY COPYRIGHT ("Venue & Xerox Corporation" 1983 1984 1985 1986 1987 1988 1989 1990 
 1991 1992 1993 1994 2021))
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (3088 99806 (TEDIT.HARDCOPY 3098 . 4349) (TEDIT.HCPYFILE 4351 . 6425) (
-\TEDIT.HARDCOPY.DISPLAYLINE 6427 . 20572) (\TEDIT.HARDCOPY.FORMATLINE 20574 . 67896) (
-\DOFORMATTING.HARDCOPY 67898 . 81191) (\TEDIT.HARDCOPY.MODIFYLOOKS 81193 . 83600) (
-\TEDIT.HCPYLOOKS.UPDATE 83602 . 94210) (\TEDIT.HCPYFMTSPEC 94212 . 99232) (\TEDIT.INTEGER.IMAGEBOX 
-99234 . 99804)) (99895 100979 (\TEDIT.SCALE 99905 . 100199) (\TEDIT.SCALEREGION 100201 . 100977)) (
-101222 103719 (TEDIT.HARDCOPYFN 101232 . 102083) (\TEDIT.HARDCOPY 102085 . 102994) (
-\TEDIT.PRESS.HARDCOPY 102996 . 103717)) (104701 105604 (TEDIT-BOOK 104711 . 105602)))))
+  (FILEMAP (NIL (3137 99855 (TEDIT.HARDCOPY 3147 . 4398) (TEDIT.HCPYFILE 4400 . 6474) (
+\TEDIT.HARDCOPY.DISPLAYLINE 6476 . 20621) (\TEDIT.HARDCOPY.FORMATLINE 20623 . 67945) (
+\DOFORMATTING.HARDCOPY 67947 . 81240) (\TEDIT.HARDCOPY.MODIFYLOOKS 81242 . 83649) (
+\TEDIT.HCPYLOOKS.UPDATE 83651 . 94259) (\TEDIT.HCPYFMTSPEC 94261 . 99281) (\TEDIT.INTEGER.IMAGEBOX 
+99283 . 99853)) (99944 101028 (\TEDIT.SCALE 99954 . 100248) (\TEDIT.SCALEREGION 100250 . 101026)) (
+101271 103822 (TEDIT.HARDCOPYFN 101281 . 102186) (\TEDIT.HARDCOPY 102188 . 103097) (
+\TEDIT.PRESS.HARDCOPY 103099 . 103820)) (104785 105688 (TEDIT-BOOK 104795 . 105686)))))
 STOP
diff --git a/library/TEDITHCPY.LCOM b/library/TEDITHCPY.LCOM
index e19a4269..ad683311 100644
Binary files a/library/TEDITHCPY.LCOM and b/library/TEDITHCPY.LCOM differ
diff --git a/library/TEDITWINDOW b/library/TEDITWINDOW
index 0892f601..ae1a86b5 100644
--- a/library/TEDITWINDOW
+++ b/library/TEDITWINDOW
@@ -1,11 +1,11 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
-(FILECREATED "24-Aug-2021 23:30:39" 
-{DSK}<Users>kaplan>Local>medley3.5>git-medley>library>TEDITWINDOW.;3 185251 
+(FILECREATED "19-Sep-2021 23:11:04" 
+{DSK}<Users>kaplan>Local>medley3.5>git-medley>library>TEDITWINDOW.;10 186372 
 
-      changes to%:  (FNS \TEDIT.BUTTONEVENTFN TEXTSTREAM.TITLE \TEDIT.ORIGINAL.WINDOW.TITLE)
+      changes to%:  (FNS \TEDIT.SCROLLFN)
 
-      previous date%: "21-Jun-99 20:00:42" 
-{DSK}<Users>kaplan>Local>medley3.5>git-medley>library>TEDITWINDOW.;1)
+      previous date%: "19-Sep-2021 22:58:18" 
+{DSK}<Users>kaplan>Local>medley3.5>git-medley>library>TEDITWINDOW.;9)
 
 
 (* ; "
@@ -29,29 +29,29 @@ Copyright (c) 1983-1991, 1993-1994, 1999, 2021 by John Sybalsky & Xerox Corporat
                \TEDIT.UNSPLITCURSOR \TEDIT.MAKESPLITCURSOR)
         (INITVARS (TEDIT.DEFAULT.WINDOW NIL))
         (GLOBALVARS TEDIT.DEFAULT.WINDOW)
-        (COMS                                                (* ; 
-                                                 "User-level %"is this a TEdit window?%" function.")
+        (COMS                                                (* ; 
+                                                 "User-level %"is this a TEdit window?%" function.")
               (FNS TEDITWINDOWP))
-        (COMS                                                (* ; "User-typein support")
+        (COMS                                                (* ; "User-typein support")
               (FNS TEDIT.GETINPUT \TEDIT.MAKEFILENAME))
-        (COMS                                                (* ; "Attached Prompt window support.")
+        (COMS                                                (* ; "Attached Prompt window support.")
               (FNS TEDIT.PROMPTPRINT TEDIT.PROMPTFLASH \TEDIT.PROMPT.PAGEFULLFN)
               (INITVARS (TEDIT.PROMPT.FONT (FONTCREATE 'GACHA 10))
                      (TEDIT.PROMPTWINDOW.HEIGHT NIL))
               (GLOBALVARS TEDIT.PROMPT.FONT TEDIT.PROMPTWINDOW.HEIGHT))
-        (COMS                                                (* ; "Title creation and update")
+        (COMS                                                (* ; "Title creation and update")
               (FNS TEXTSTREAM.TITLE \TEDIT.ORIGINAL.WINDOW.TITLE \TEDIT.WINDOW.TITLE 
                    \TEXTSTREAM.FILENAME))
-        (COMS                                                (* ; "Screen updating utilities")
+        (COMS                                                (* ; "Screen updating utilities")
               (FNS TEDIT.DEACTIVATE.WINDOW \TEDIT.REPAINTFN \TEDIT.RESHAPEFN \TEDIT.SCROLLFN))
-        (COMS                                                (* ; "Process-world interfaces")
+        (COMS                                                (* ; "Process-world interfaces")
               (FNS \TEDIT.PROCIDLEFN \TEDIT.PROCENTRYFN \TEDIT.PROCEXITFN))
         (COMS (INITVARS (\CARETRATE 333))
-                                                             (* ; 
-                                                           "Caret handler;  stolen from CHAT.")
+                                                             (* ; 
+                                                           "Caret handler;  stolen from CHAT.")
               (FNS \EDIT.DOWNCARET \EDIT.FLIPCARET TEDIT.FLASHCARET \EDIT.UPCARET 
                    TEDIT.NORMALIZECARET \SETCARET \TEDIT.CARET))
-        [COMS                                                (* ; "Menu interfacing")
+        [COMS                                                (* ; "Menu interfacing")
               (FNS TEDIT.ADD.MENUITEM TEDIT.DEFAULT.MENUFN TEDIT.REMOVE.MENUITEM \TEDIT.CREATEMENU 
                    \TEDIT.MENU.WHENHELDFN \TEDIT.MENU.WHENSELECTEDFN)
               (GLOBALVARS TEDIT.DEFAULT.MENU)
@@ -79,21 +79,21 @@ Copyright (c) 1983-1991, 1993-1994, 1999, 2021 by John Sybalsky & Xerox Corporat
                                                             '(TEdit '(TEDIT)
                                                                     "Opens a TEdit window for use."]
                                                  (SETQ BackgroundMenu NIL]
-        (COMS                                                (* ; "titled icon info")
+        (COMS                                                (* ; "titled icon info")
               (FILES ICONW)
               (BITMAPS TEDITICON TEDITMASK)
               (INITVARS (TEDIT.ICON.FONT (FONTCREATE 'HELVETICA 8 'BOLD))
                      [TEDIT.ICON.TITLE.REGION (CONS 16 (CONS 4 (CONS 64 (CONS 77 NIL]
-                                                             (* ; 
-                        "Original was (create REGION BOTTOM _ 4 LEFT _ 16 WIDTH _ 64 HEIGHT _ 77).")
-                                                             (* ; 
-                                                  "Changed by yabu.fx, for SUNLOADUP without DWIM.")
+                                                             (* ; 
+                        "Original was (create REGION BOTTOM _ 4 LEFT _ 16 WIDTH _ 64 HEIGHT _ 77).")
+                                                             (* ; 
+                                                  "Changed by yabu.fx, for SUNLOADUP without DWIM.")
                      [TEDIT.TITLED.ICON.TEMPLATE (CONS TEDITICON (CONS TEDITMASK (CONS 
                                                                               TEDIT.ICON.TITLE.REGION
                                                                                        NIL]
-                                                             (* ; "Original was (create TITLEDICON ICON _ TEDITICON MASK _ TEDITMASK TITLEREG _ TEDIT.ICON.TITLE.REGION).")
-                                                             (* ; 
-                                                  "Changed by yabu.fx, for SUNLOADUP without DWIM.")
+                                                             (* ; "Original was (create TITLEDICON ICON _ TEDITICON MASK _ TEDITMASK TITLEREG _ TEDIT.ICON.TITLE.REGION).")
+                                                             (* ; 
+                                                  "Changed by yabu.fx, for SUNLOADUP without DWIM.")
                      ])
 
 (FILESLOAD TEDITDCL)
@@ -454,342 +454,345 @@ Copyright (c) 1983-1991, 1993-1994, 1999, 2021 by John Sybalsky & Xerox Corporat
                                    (PROCESSP (WINDOWPROP W 'PROCESS])
 
 (\TEDIT.BUTTONEVENTFN
-  [LAMBDA (W STREAM)                                    (* ; "Edited 24-Aug-2021 23:30 by rmk:")
+  [LAMBDA (W STREAM)                                    (* ; "Edited 19-Sep-2021 22:58 by rmk:")
 
-    (* ;; "Handle button events for a TEdit window")
+    (* ;; "Handle button events for a TEdit window.  If no button is down, we got control on button-up transition, so ignore it.")
 
-    (AND STREAM (SETQ STREAM (TEXTOBJ STREAM)))
-    (PROG* ((OSEL NIL)
-            (SEL NIL)
-            [TEXTOBJ (OR STREAM (WINDOWPROP W 'TEXTOBJ]
-            (DS (WINDOWPROP W 'DSP))
-            USERFN
-            (GLOBALSEL TEDIT.SELECTION)
-            (X (LASTMOUSEX W))
-            (Y (LASTMOUSEY W))
-            (CLIPREGION (DSPCLIPPINGREGION NIL W))
-            (SELOPERATION 'NORMAL)
-            (SELFN (TEXTPROP TEXTOBJ 'SELFN))
-            (EXTENDFLG NIL)
-            (OLDX -32000)
-            (OLDY -32000)
-            SELFINALFN PROC NOSEL)
-           (COND
-              ((NOT (MOUSESTATE (OR LEFT MIDDLE RIGHT)))     (* ; 
-                       "No button is down -- we got control on button-up transition, so ignore it.")
-               (RETURN))
-              (TEDIT.SELPENDING                              (* ; 
-                     "There is already a selection in progress.  Don't allow another to interfere.")
-                     (RETURN)))
-           (replace (SELECTION CH#) of TEDIT.SCRATCHSELECTION with 0)
-                                                             (* ; 
-                     "Mark the user-visible scratch selection fresh, so changes can be detected...")
-           (COND
-              [[OR (NOT TEXTOBJ)
-                   (fetch (TEXTOBJ EDITFINISHEDFLG) of TEXTOBJ)
-                   (AND (NOT (WINDOWPROP W 'PROCESS))
-                        (NOT (TEXTPROP TEXTOBJ 'READONLY))
-                        (NOT (SHIFTDOWNP 'SHIFT))
-                        (NOT (SHIFTDOWNP 'CTRL))
-                        (NOT (SHIFTDOWNP 'META))
-                        (NOT (KEYDOWNP 'MOVE))
-                        (NOT (KEYDOWNP 'COPY]                (* ; "There's no edit session behind this window.  You can only do window ops, or re-establish a session.")
-               (TOTOPW W)
-               (COND
-                  ((\TEDIT.MOUSESTATE RIGHT)                 (* ; 
-                                                        "Right button gets the window command menu")
-                   (DOWINDOWCOM W))
-                  ((AND TEXTOBJ (NOT (TEXTPROP TEXTOBJ 'READONLY))
-                        (NOT (TEXTPROP TEXTOBJ 'SELECTONLY))
-                        [NOT (PROCESSP (WINDOWPROP W 'PROCESS]
-                        (\TEDIT.MOUSESTATE MIDDLE))          (* ; 
-                                "Middle button on a dead window gives a menu for re-starting TEDIT")
-                   (COND
-                      ((EQ (MENU TEDIT.RESTART.MENU)
-                           'NewEditProcess)
-                       (replace (TEXTOBJ EDITOPACTIVE) of TEXTOBJ with NIL)
-                       (TEDIT (fetch (TEXTOBJ STREAMHINT) of TEXTOBJ)
-                              W]
-              [(IGREATERP Y (fetch TOP of CLIPREGION))
-                                                             (* ; 
-                                     "It's not inside the window's REAL region, so call on a menu.")
-               (TOTOPW W)
+    (TOTOPW W)
 
-               (* ;; "RMK:  This comment was originally just after the DON'T below, which generated a value-of-comment used message.")
+    (* ;; "RMK: 2021/9 TOTOPW was in (almost) all the conditional branches, I moved it up so that it always happens, even if the click is perhaps in a menu.  There were cases where a second click in the window was needed to bring it above an overlapping window that it was under.  I think perhaps it was because the mouse button may not have been seen as down on the first click, so it would return before it raised the window.  But that was really bizarre--maybe the click was to see what was obscured by the overlapping window.")
 
-               (* ;; "HAD BEEN:  (COND ((AND (SETQ PROC (WINDOWPROP W 'PROCESS)) (PROCESSP PROC)) ; This window has a live process behind it;  go evaluate the button fn there. (PROCESS.APPLY PROC USERFN (LIST W))) (T ; Otherwise, create a new process to handle the menu. (ADD.PROCESS (LIST USERFN (KWOTE W)))))")
+    (CL:WHEN (AND (MOUSESTATE (OR LEFT MIDDLE RIGHT))
+                  (NOT TEDIT.SELPENDING))
 
-               (COND
-                  ((\TEDIT.MOUSESTATE RIGHT)
-                   (DOWINDOWCOM W))
-                  ((MOUSESTATE (OR LEFT MIDDLE))
-                   (AND TEXTOBJ (SETQ USERFN (WINDOWPROP W 'TEDIT.TITLEMENUFN))
-                        (NEQ USERFN 'DON'T)
-                        (ADD.PROCESS (LIST USERFN (KWOTE W]
-              ((AND TEXTOBJ (EQ (fetch (TEXTOBJ MOUSEREGION) of TEXTOBJ)
-                                'WINDOW))                    (* ; 
-                    "We're in the window-ops region of the window.  Do a window split or something")
-               (\TEDIT.WINDOW.OPS TEXTOBJ W))
-              ((AND TEXTOBJ (NOT (fetch (TEXTOBJ EDITOPACTIVE) of TEXTOBJ)))
-                                                             (* ; 
-           "Usual case -- he's really selecting something.  And there's nothing else going on now.")
-               (TOTOPW W)                                    (* ; 
-                          "Move the editing window to the top, so he can select wherever he wants.")
-               (\CARET.DOWN)                                 (* ; 
-                                                       "Make sure the caret isn't being displayed.")
-               (RESETLST
-                   (RESETSAVE TEDIT.SELPENDING TEXTOBJ)
+        (* ;; "(RMK:  old comment): Bail out if the mouse isn't down or there is a pending selection--don't want another selection to interfere.")
 
-                   (* ;; "Tell all TEdits not to run, since there is a selection in progress.  This is reset to NIL on return from here, to re-enable TEdit runs.")
+        (AND STREAM (SETQ STREAM (TEXTOBJ STREAM)))
+        [LET* ((OSEL NIL)
+               (SEL NIL)
+               [TEXTOBJ (OR STREAM (WINDOWPROP W 'TEXTOBJ]
+               (DS (WINDOWPROP W 'DSP))
+               USERFN
+               (GLOBALSEL TEDIT.SELECTION)
+               (X (LASTMOUSEX W))
+               (Y (LASTMOUSEY W))
+               (CLIPREGION (DSPCLIPPINGREGION NIL W))
+               (SELOPERATION 'NORMAL)
+               (SELFN (TEXTPROP TEXTOBJ 'SELFN))
+               (EXTENDFLG NIL)
+               (OLDX -32000)
+               (OLDY -32000)
+               SELFINALFN PROC NOSEL)
+              (replace (SELECTION CH#) of TEDIT.SCRATCHSELECTION with 0)
+                                                             (* ; 
+                     "Mark the user-visible scratch selection fresh, so changes can be detected...")
+              (COND
+                 [[OR (NOT TEXTOBJ)
+                      (fetch (TEXTOBJ EDITFINISHEDFLG) of TEXTOBJ)
+                      (AND (NOT (WINDOWPROP W 'PROCESS))
+                           (NOT (TEXTPROP TEXTOBJ 'READONLY))
+                           (NOT (SHIFTDOWNP 'SHIFT))
+                           (NOT (SHIFTDOWNP 'CTRL))
+                           (NOT (SHIFTDOWNP 'META))
+                           (NOT (KEYDOWNP 'MOVE))
+                           (NOT (KEYDOWNP 'COPY]             (* ; "There's no edit session behind this window.  You can only do window ops, or re-establish a session.")
+                  (COND
+                     ((\TEDIT.MOUSESTATE RIGHT)              (* ; 
+                                                        "Right button gets the window command menu")
+                      (DOWINDOWCOM W))
+                     ((AND TEXTOBJ (NOT (TEXTPROP TEXTOBJ 'READONLY))
+                           (NOT (TEXTPROP TEXTOBJ 'SELECTONLY))
+                           [NOT (PROCESSP (WINDOWPROP W 'PROCESS]
+                           (\TEDIT.MOUSESTATE MIDDLE))       (* ; 
+                                "Middle button on a dead window gives a menu for re-starting TEDIT")
+                      (COND
+                         ((EQ (MENU TEDIT.RESTART.MENU)
+                              'NewEditProcess)
+                          (replace (TEXTOBJ EDITOPACTIVE) of TEXTOBJ with NIL)
+                          (TEDIT (fetch (TEXTOBJ STREAMHINT) of TEXTOBJ)
+                                 W]
+                 [(IGREATERP Y (fetch TOP of CLIPREGION))
+                                                             (* ; 
+                                     "It's not inside the window's REAL region, so call on a menu.")
 
-                   (RESETSAVE (for CARET inside (fetch (TEXTOBJ CARET) of TEXTOBJ)
-                                 do (replace TCCARET of CARET with (\CARET.CREATE
-                                                                                    BXHICARET)))
-                          (LIST '\TEDIT.CARET (fetch (TEXTOBJ CARET) of TEXTOBJ)))
-                                                             (* ; 
-                                   "Then make the caret be the special, tall one so he can see it.")
-                   (COND
-                      ((KEYDOWNP 'COPY)                      (* ; 
-                                                      "In a read-only document, you can only copy.")
-                       (SETQ GLOBALSEL TEDIT.SHIFTEDSELECTION)
-                       (SETQ OSEL (fetch (TEXTOBJ SHIFTEDSEL) of TEXTOBJ))
-                       (SETQ SELOPERATION 'COPY))
-                      ((AND (KEYDOWNP 'MOVE)
-                            (NOT (fetch (TEXTOBJ TXTREADONLY) of TEXTOBJ)))
-                                                             (* ; 
-                                                          "The MOVE key is down, so set MOVE mode.")
-                       (SETQ GLOBALSEL TEDIT.MOVESELECTION)
-                       (SETQ OSEL (fetch (TEXTOBJ MOVESEL) of TEXTOBJ))
-                       (SETQ SELOPERATION 'MOVE))
-                      [(SHIFTDOWNP 'SHIFT)                   (* ; 
-                                    "the SHIFT key is down;  mark this selection for COPY or MOVE.")
-                       (COND
-                          ((AND (SHIFTDOWNP 'CTRL)
-                                (NOT (fetch (TEXTOBJ TXTREADONLY) of TEXTOBJ)))
-                                                             (* ; "CTRL-SHIFT select means MOVE.")
-                           (SETQ GLOBALSEL TEDIT.MOVESELECTION)
-                           (SETQ OSEL (fetch (TEXTOBJ MOVESEL) of TEXTOBJ))
-                           (SETQ SELOPERATION 'MOVE))
-                          (T (SETQ GLOBALSEL TEDIT.SHIFTEDSELECTION)
-                             (SETQ OSEL (fetch (TEXTOBJ SHIFTEDSEL) of TEXTOBJ))
-                             (SETQ SELOPERATION 'COPY]
-                      ((SHIFTDOWNP 'META)                    (* ; 
-                                        "He's holding the meta key down , do a copylooks selection")
-                       (SETQ GLOBALSEL TEDIT.COPYLOOKSSELECTION)
-                       (SETQ OSEL (fetch (TEXTOBJ SHIFTEDSEL) of TEXTOBJ))
-                       (SETQ SELOPERATION 'COPYLOOKS))
-                      ((AND (SHIFTDOWNP 'CTRL)
-                            (NOT (fetch (TEXTOBJ TXTREADONLY) of TEXTOBJ)))
-                                                             (* ; 
-                                               "He's holding the control key down;  note the fact.")
-                       (\SHOWSEL (fetch (TEXTOBJ SEL) of TEXTOBJ)
-                              NIL NIL)
-                       (SETQ GLOBALSEL TEDIT.DELETESELECTION)
-                       [COND
-                          ((fetch (SELECTION SET) of (fetch (TEXTOBJ DELETESEL)
-                                                                of TEXTOBJ))
-                                                             (* ; 
-         "There's a pending delete selection.  Use it, and turn off the existing normal selection.")
-                           )
-                          (T                                 (* ; 
-                     "No existing delete selection.  Use the normal selection as a starting point.")
-                             (\COPYSEL (fetch (TEXTOBJ SEL) of TEXTOBJ)
-                                    (fetch (TEXTOBJ DELETESEL) of TEXTOBJ]
-                       (replace (SELECTION SET) of (fetch (TEXTOBJ SEL) of TEXTOBJ)
-                          with NIL)
+                  (* ;; "RMK:  This comment was originally just after the DON'T below, which generated a value-of-comment used message.")
 
-                       (* ;; "Remember to turn off the normal selection, since we'll be moving it to a new spot after the deletion.")
+                  (* ;; "HAD BEEN:  (COND ((AND (SETQ PROC (WINDOWPROP W 'PROCESS)) (PROCESSP PROC)) ; This window has a live process behind it;  go evaluate the button fn there. (PROCESS.APPLY PROC USERFN (LIST W))) (T ; Otherwise, create a new process to handle the menu. (ADD.PROCESS (LIST USERFN (KWOTE W)))))")
 
-                       (SETQ OSEL (fetch (TEXTOBJ DELETESEL) of TEXTOBJ))
-                       (SETQ SELOPERATION 'DELETE)
-                       (TEDIT.SET.SEL.LOOKS OSEL 'DELETE)
-                       (replace (TEXTOBJ BLUEPENDINGDELETE) of TEXTOBJ with NIL))
-                      (T (SETQ OSEL (fetch (TEXTOBJ SEL) of TEXTOBJ))
-                         (replace (TEXTOBJ BLUEPENDINGDELETE) of TEXTOBJ with NIL)
-                                                             (* ; "Reset the pending-delete flag.")
-                         ))
-                   (\COPYSEL OSEL GLOBALSEL)
-                   (bind (OSELOP _ SELOPERATION)
-                      while [OR (SHIFTDOWNP 'SHIFT)
-                                    (SHIFTDOWNP 'CTRL)
-                                    (SHIFTDOWNP 'META)
-                                    (KEYDOWNP 'MOVE)
-                                    (KEYDOWNP 'COPY)
-                                    (NOT (ZEROP (LOGAND LASTMOUSEBUTTONS 7]
-                      do                                 (* ; 
-                                                   "Poll the selection & display its current state")
-                            [COND
-                               ((ZEROP (LOGAND LASTMOUSEBUTTONS 7))
-                                                             (* ; 
-                                                  "No mouse buttons are down;  don't try anything.")
-                                (SETQ OLDX -32000)           (* ; 
-       "However, remember that pushing a mouse button is a change of status that we should notice.")
-                                )
-                               ((KEYDOWNP 'MOVE)             (* ; 
-                                             "the MOVE key is down;  mark this selection for MOVE.")
-                                (SETQ SELOPERATION 'MOVE))
-                               [(OR (SHIFTDOWNP 'SHIFT)
-                                    (KEYDOWNP 'COPY))        (* ; 
-                                    "the SHIFT key is down;  mark this selection for COPY or MOVE.")
-                                (COND
-                                   ((SHIFTDOWNP 'CTRL)       (* ; 
-                                              "He's holding down both ctrl and shift -- do a move.")
-                                    (SETQ SELOPERATION 'MOVE))
-                                   (T                        (* ; 
-                                                           "Just the SHIFT key.  It's a COPY")
-                                      (SETQ SELOPERATION 'COPY]
-                               ((SHIFTDOWNP 'META)           (* ; 
-                                                  "He's holding the meta key down;  note the fact.")
-                                (SETQ SELOPERATION 'COPYLOOKS))
-                               ((SHIFTDOWNP 'CTRL)           (* ; 
-                               "He's holding only the CTRL key -- mark the selection for deletion.")
-                                (SETQ SELOPERATION 'DELETE))
-                               (T                            (* ; 
-                                             "No key being held down;  revert to normal selection.")
-                                  (SETQ SELOPERATION 'NORMAL]
-                            (COND
-                               [(AND (OR [NOT (IEQP OLDX (SETQ X (LASTMOUSEX DS]
-                                         [NOT (IEQP OLDY (SETQ Y (LASTMOUSEY DS]
-                                         (NEQ OSELOP SELOPERATION))
-                                     (INSIDEP CLIPREGION X Y))
+                  (COND
+                     ((\TEDIT.MOUSESTATE RIGHT)
+                      (DOWINDOWCOM W))
+                     ((MOUSESTATE (OR LEFT MIDDLE))
+                      (AND TEXTOBJ (SETQ USERFN (WINDOWPROP W 'TEDIT.TITLEMENUFN))
+                           (NEQ USERFN 'DON'T)
+                           (ADD.PROCESS (LIST USERFN (KWOTE W]
+                 ((AND TEXTOBJ (EQ (fetch (TEXTOBJ MOUSEREGION) of TEXTOBJ)
+                                   'WINDOW))                 (* ; 
+                    "We're in the window-ops region of the window.  Do a window split or something")
+                  (\TEDIT.WINDOW.OPS TEXTOBJ W))
+                 ((AND TEXTOBJ (NOT (fetch (TEXTOBJ EDITOPACTIVE) of TEXTOBJ)))
+                                                             (* ; 
+           "Usual case -- he's really selecting something.  And there's nothing else going on now.")
+                  (\CARET.DOWN)                              (* ; 
+                                                       "Make sure the caret isn't being displayed.")
+                  (RESETLST
+                      (RESETSAVE TEDIT.SELPENDING TEXTOBJ)
 
-                                (* ;; "Only do selection if (1) the mouse is inside the window proper and (2) the mouse has moved, or the kind of selection has changed")
+                      (* ;; "Tell all TEdits not to run, since there is a selection in progress.  This is reset to NIL on return from here, to re-enable TEdit runs.")
 
-                                (* ;; "Must precede the scroll-region test, so that we don't try to scroll while the mouse is inside the main window, even if the scroll bar overlaps the window (at left edge of screen, say)")
+                      (RESETSAVE (for CARET inside (fetch (TEXTOBJ CARET) of TEXTOBJ)
+                                    do (replace TCCARET of CARET with (\CARET.CREATE
+                                                                                       BXHICARET)))
+                             (LIST '\TEDIT.CARET (fetch (TEXTOBJ CARET) of TEXTOBJ)))
+                                                             (* ; 
+                                   "Then make the caret be the special, tall one so he can see it.")
+                      (COND
+                         ((KEYDOWNP 'COPY)                   (* ; 
+                                                      "In a read-only document, you can only copy.")
+                          (SETQ GLOBALSEL TEDIT.SHIFTEDSELECTION)
+                          (SETQ OSEL (fetch (TEXTOBJ SHIFTEDSEL) of TEXTOBJ))
+                          (SETQ SELOPERATION 'COPY))
+                         ((AND (KEYDOWNP 'MOVE)
+                               (NOT (fetch (TEXTOBJ TXTREADONLY) of TEXTOBJ)))
+                                                             (* ; 
+                                                          "The MOVE key is down, so set MOVE mode.")
+                          (SETQ GLOBALSEL TEDIT.MOVESELECTION)
+                          (SETQ OSEL (fetch (TEXTOBJ MOVESEL) of TEXTOBJ))
+                          (SETQ SELOPERATION 'MOVE))
+                         [(SHIFTDOWNP 'SHIFT)                (* ; 
+                                    "the SHIFT key is down;  mark this selection for COPY or MOVE.")
+                          (COND
+                             ((AND (SHIFTDOWNP 'CTRL)
+                                   (NOT (fetch (TEXTOBJ TXTREADONLY) of TEXTOBJ)))
+                                                             (* ; "CTRL-SHIFT select means MOVE.")
+                              (SETQ GLOBALSEL TEDIT.MOVESELECTION)
+                              (SETQ OSEL (fetch (TEXTOBJ MOVESEL) of TEXTOBJ))
+                              (SETQ SELOPERATION 'MOVE))
+                             (T (SETQ GLOBALSEL TEDIT.SHIFTEDSELECTION)
+                                (SETQ OSEL (fetch (TEXTOBJ SHIFTEDSEL) of TEXTOBJ))
+                                (SETQ SELOPERATION 'COPY]
+                         ((SHIFTDOWNP 'META)                 (* ; 
+                                        "He's holding the meta key down , do a copylooks selection")
+                          (SETQ GLOBALSEL TEDIT.COPYLOOKSSELECTION)
+                          (SETQ OSEL (fetch (TEXTOBJ SHIFTEDSEL) of TEXTOBJ))
+                          (SETQ SELOPERATION 'COPYLOOKS))
+                         ((AND (SHIFTDOWNP 'CTRL)
+                               (NOT (fetch (TEXTOBJ TXTREADONLY) of TEXTOBJ)))
+                                                             (* ; 
+                                               "He's holding the control key down;  note the fact.")
+                          (\SHOWSEL (fetch (TEXTOBJ SEL) of TEXTOBJ)
+                                 NIL NIL)
+                          (SETQ GLOBALSEL TEDIT.DELETESELECTION)
+                          [COND
+                             ((fetch (SELECTION SET) of (fetch (TEXTOBJ DELETESEL)
+                                                                   of TEXTOBJ))
+                                                             (* ; 
+         "There's a pending delete selection.  Use it, and turn off the existing normal selection.")
+                              )
+                             (T                              (* ; 
+                     "No existing delete selection.  Use the normal selection as a starting point.")
+                                (\COPYSEL (fetch (TEXTOBJ SEL) of TEXTOBJ)
+                                       (fetch (TEXTOBJ DELETESEL) of TEXTOBJ]
+                          (replace (SELECTION SET) of (fetch (TEXTOBJ SEL) of TEXTOBJ
+                                                                     ) with NIL)
 
-                                (SETQ OLDX X)
-                                (SETQ OLDY Y)
-                                [COND
-                                   ((\TEDIT.MOUSESTATE LEFT) (* ; 
-                                                           "Left button is character selection")
-                                    (SETQ SEL (TEDIT.SELECT X Y TEXTOBJ (fetch (TEXTOBJ 
-                                                                                          MOUSEREGION
-                                                                                          )
-                                                                           of TEXTOBJ)
-                                                     NIL SELOPERATION W))
-                                    (SETQ EXTENDFLG NIL))
-                                   ((\TEDIT.MOUSESTATE MIDDLE)
-                                                             (* ; "Middle button is word selection")
-                                    (SETQ SEL (TEDIT.SELECT X Y TEXTOBJ (fetch (TEXTOBJ 
-                                                                                          MOUSEREGION
-                                                                                          )
-                                                                           of TEXTOBJ)
-                                                     T SELOPERATION W))
-                                    (SETQ EXTENDFLG NIL))
-                                   [(\TEDIT.MOUSESTATE RIGHT)(* ; "RIght button extends selections")
-                                    (COND
-                                       ((NEQ SELOPERATION OSELOP)
+                          (* ;; "Remember to turn off the normal selection, since we'll be moving it to a new spot after the deletion.")
 
-                                 (* ;; "Things changed since the last selection.  Grab the prior selection info, so that the extension is taken from the selection NOW being made, rather than the last existing old-type selection.")
-
-                                        (\COPYSEL OSEL GLOBALSEL)))
-                                    (COND
-                                       ((fetch (SELECTION SET) of GLOBALSEL)
-                                        (AND TEDIT.EXTEND.PENDING.DELETE (EQ SELOPERATION
-                                                                             'NORMAL)
-                                             (SETQ SELOPERATION 'PENDINGDEL)
-                                             (replace (TEXTOBJ BLUEPENDINGDELETE) of TEXTOBJ
-                                                with T)) (* ; 
-       "If TeditBluePendingDelete flag is set, then simulate Laurel's blue-pending-delete feature.")
-                                        (SETQ SEL (TEDIT.EXTEND.SEL X Y GLOBALSEL TEXTOBJ 
-                                                         SELOPERATION W))
-                                        (SETQ EXTENDFLG T]
-                                   (T                        (* ; 
-                        "The mouse buttons are up, leaving us with a pro-tem 'permanent' selection")
-                                      (\COPYSEL OSEL GLOBALSEL)
-                                                             (* ; 
-                       "And SEL is NOT SET ANY LONGER, so it won't get copied into OSEL down below")
-                                      (AND SEL (replace (SELECTION SET) of SEL with
-                                                                                       NIL]
-                                [COND
-                                   ((AND SEL (fetch (SELECTION SET) of SEL)
-                                         SELFN)              (* ; 
-                               "The selection was set, but there's a SELFN that has veto authority")
-                                    (COND
-                                       ((EQ (APPLY* SELFN TEXTOBJ SEL SELOPERATION 'TENTATIVE)
-                                            'DON'T)          (* ; 
-                                              "The selfn vetoed this selection, so mark it un-set.")
-                                        (replace (SELECTION SET) of SEL with NIL]
-                                (COND
-                                   ((\TEDIT.SEL.CHANGED? SEL OSEL OSELOP SELOPERATION)
-                                                             (* ; 
-             "Something interesting about the selection changed.  We have to re-display its image.")
-                                    (COND
-                                       ((OR (EQ SELOPERATION 'NORMAL)
-                                            (EQ SELOPERATION 'PENDINGDEL))
-                                                             (* ; 
-                        "For a normal selection, set the 'window last selected in' for the TEXTOBJ")
-                                        (replace (TEXTOBJ SELWINDOW) of TEXTOBJ with
-                                                                                        W)))
-                                    (SETQ OSEL (\TEDIT.REFRESH.SHOWSEL TEXTOBJ SEL OSEL OSELOP 
-                                                      SELOPERATION EXTENDFLG))
-                                    (SETQ OSELOP SELOPERATION))
-                                   ([AND OSEL (fetch (SELECTION SET) of OSEL)
-                                         (EQ (fetch (SELECTION SELKIND) of OSEL)
-                                             'VOLATILE)
-                                         (OR (NOT SEL)
-                                             (NOT (fetch (SELECTION SET) of SEL]
-
-                                 (* ;; "There is an old selection around, but it is VOLATILE -- i.e., it shouldn't last longer than something is pointing at it.  Turn it off.")
-
-                                    (\SHOWSEL OSEL NIL NIL)
-                                    (replace (SELECTION SET) of OSEL with NIL]
-                               ((IN/SCROLL/BAR? W LASTMOUSEX LASTMOUSEY)
-                                                             (* ; 
-                                    "If he moves to the scroll bar, let him scroll without trouble")
-                                (SCROLL.HANDLER W)))
-                            (BLOCK)                          (* ; "Give other processes a chance")
-                            (GETMOUSESTATE)                  (* ; "And get the new mouse info")
-                            (TEDIT.CURSORMOVEDFN W))
-                   (\COPYSEL OSEL GLOBALSEL)
-                   (COND
-                      ((fetch (SELECTION SET) of OSEL)
-                                                             (* ; 
-                                        "Only if a selection REALLY got made should we do this....")
-                       (SELECTQ SELOPERATION
-                           (COPY                             (* ; 
-           "A COPY selection -- set the copy flag, and see if this is a copy to a non-TEdit window")
-                                 (SETQ TEDIT.COPY.PENDING T)
-                                 (replace (SELECTION SET) of OSEL with NIL)
-                                                             (* ; 
-                                                "And turn off OSEL, to avoid spurious highlighting")
-                                 (\TEDIT.FOREIGN.COPY? GLOBALSEL)
-                                                             (* ; 
-                               "Maybe copy into the SYSBUF, if the recipient isn't a TEdit window.")
-                                 )
-                           (COPYLOOKS                        (* ; "A COPYLOOKS selection")
-                                      (SETQ TEDIT.COPYLOOKS.PENDING T)
-                                                             (* ; 
-                                                "And turn off OSEL, to avoid spurious highlighting")
-                                      (replace (SELECTION SET) of OSEL with NIL))
-                           (MOVE                             (* ; 
-                               "A MOVE selection -- set the flag to signal the TEdit command loop,")
-                                 (SETQ TEDIT.MOVE.PENDING T) (* ; 
-                                                "And turn off OSEL, to avoid spurious highlighting")
-                                 (replace (SELECTION SET) of OSEL with NIL))
-                           (DELETE (SETQ TEDIT.DEL.PENDING T)
-                                   (replace (SELECTION SET) of OSEL with NIL)
-                                                             (* ; 
-                                                "And turn off OSEL, to avoid spurious highlighting")
+                          (SETQ OSEL (fetch (TEXTOBJ DELETESEL) of TEXTOBJ))
+                          (SETQ SELOPERATION 'DELETE)
+                          (TEDIT.SET.SEL.LOOKS OSEL 'DELETE)
+                          (replace (TEXTOBJ BLUEPENDINGDELETE) of TEXTOBJ with NIL))
+                         (T (SETQ OSEL (fetch (TEXTOBJ SEL) of TEXTOBJ))
+                            (replace (TEXTOBJ BLUEPENDINGDELETE) of TEXTOBJ with NIL)
+                                                             (* ; "Reset the pending-delete flag.")
+                            ))
+                      (\COPYSEL OSEL GLOBALSEL)
+                      (bind (OSELOP _ SELOPERATION)
+                         while [OR (SHIFTDOWNP 'SHIFT)
+                                       (SHIFTDOWNP 'CTRL)
+                                       (SHIFTDOWNP 'META)
+                                       (KEYDOWNP 'MOVE)
+                                       (KEYDOWNP 'COPY)
+                                       (NOT (ZEROP (LOGAND LASTMOUSEBUTTONS 7]
+                         do                              (* ; 
+                                                   "Poll the selection & display its current state")
+                               [COND
+                                  ((ZEROP (LOGAND LASTMOUSEBUTTONS 7))
+                                                             (* ; 
+                                                  "No mouse buttons are down;  don't try anything.")
+                                   (SETQ OLDX -32000)        (* ; 
+       "However, remember that pushing a mouse button is a change of status that we should notice.")
                                    )
-                           (NORMAL                           (* ; 
-                                                 "This is a normal selection;  set the caret looks")
-                                   (replace (TEXTOBJ CARETLOOKS) of TEXTOBJ
-                                      with (\TEDIT.GET.INSERT.CHARLOOKS TEXTOBJ OSEL)))
-                           NIL)))
-                   (AND SELFN (APPLY* SELFN TEXTOBJ GLOBALSEL SELOPERATION 'FINAL))
-                                                             (* ; 
-                             "Give a user exit routine control, perhaps for logging of selections.")
-                   (for CARET inside (fetch (TEXTOBJ CARET) of TEXTOBJ)
-                      do (OR (fetch TCUP of CARET)
-                                 (\EDIT.FLIPCARET CARET T))))
-               (AND OSEL (fetch (SELECTION SET) of OSEL)
-                    (fetch (SELECTION SELOBJ) of OSEL)
-                    (SETQ SELFINALFN (IMAGEOBJPROP (fetch (SELECTION SELOBJ) of OSEL)
-                                            'WHENOPERATEDONFN))
-                    (APPLY* SELFINALFN (fetch (SELECTION SELOBJ) of OSEL)
-                           (WINDOWPROP W 'DSP)
-                           'SELECTED OSEL (fetch (TEXTOBJ STREAMHINT) of TEXTOBJ])
+                                  ((KEYDOWNP 'MOVE)          (* ; 
+                                             "the MOVE key is down;  mark this selection for MOVE.")
+                                   (SETQ SELOPERATION 'MOVE))
+                                  [(OR (SHIFTDOWNP 'SHIFT)
+                                       (KEYDOWNP 'COPY))     (* ; 
+                                    "the SHIFT key is down;  mark this selection for COPY or MOVE.")
+                                   (COND
+                                      ((SHIFTDOWNP 'CTRL)    (* ; 
+                                              "He's holding down both ctrl and shift -- do a move.")
+                                       (SETQ SELOPERATION 'MOVE))
+                                      (T                     (* ; 
+                                                           "Just the SHIFT key.  It's a COPY")
+                                         (SETQ SELOPERATION 'COPY]
+                                  ((SHIFTDOWNP 'META)        (* ; 
+                                                  "He's holding the meta key down;  note the fact.")
+                                   (SETQ SELOPERATION 'COPYLOOKS))
+                                  ((SHIFTDOWNP 'CTRL)        (* ; 
+                               "He's holding only the CTRL key -- mark the selection for deletion.")
+                                   (SETQ SELOPERATION 'DELETE))
+                                  (T                         (* ; 
+                                             "No key being held down;  revert to normal selection.")
+                                     (SETQ SELOPERATION 'NORMAL]
+                               (COND
+                                  [(AND (OR [NOT (IEQP OLDX (SETQ X (LASTMOUSEX DS]
+                                            [NOT (IEQP OLDY (SETQ Y (LASTMOUSEY DS]
+                                            (NEQ OSELOP SELOPERATION))
+                                        (INSIDEP CLIPREGION X Y))
+
+                                  (* ;; "Only do selection if (1) the mouse is inside the window proper and (2) the mouse has moved, or the kind of selection has changed")
+
+                                 (* ;; "Must precede the scroll-region test, so that we don't try to scroll while the mouse is inside the main window, even if the scroll bar overlaps the window (at left edge of screen, say)")
+
+                                   (SETQ OLDX X)
+                                   (SETQ OLDY Y)
+                                   [COND
+                                      ((\TEDIT.MOUSESTATE LEFT)
+                                                             (* ; 
+                                                           "Left button is character selection")
+                                       (SETQ SEL (TEDIT.SELECT X Y TEXTOBJ (fetch (TEXTOBJ 
+                                                                                          MOUSEREGION
+                                                                                             )
+                                                                              of TEXTOBJ)
+                                                        NIL SELOPERATION W))
+                                       (SETQ EXTENDFLG NIL))
+                                      ((\TEDIT.MOUSESTATE MIDDLE)
+                                                             (* ; "Middle button is word selection")
+                                       (SETQ SEL (TEDIT.SELECT X Y TEXTOBJ (fetch (TEXTOBJ 
+                                                                                          MOUSEREGION
+                                                                                             )
+                                                                              of TEXTOBJ)
+                                                        T SELOPERATION W))
+                                       (SETQ EXTENDFLG NIL))
+                                      [(\TEDIT.MOUSESTATE RIGHT)
+                                                             (* ; "RIght button extends selections")
+                                       (COND
+                                          ((NEQ SELOPERATION OSELOP)
+
+                                 (* ;; "Things changed since the last selection.  Grab the prior selection info, so that the extension is taken from the selection NOW being made, rather than the last existing old-type selection.")
+
+                                           (\COPYSEL OSEL GLOBALSEL)))
+                                       (COND
+                                          ((fetch (SELECTION SET) of GLOBALSEL)
+                                           (AND TEDIT.EXTEND.PENDING.DELETE (EQ SELOPERATION
+                                                                                'NORMAL)
+                                                (SETQ SELOPERATION 'PENDINGDEL)
+                                                (replace (TEXTOBJ BLUEPENDINGDELETE) of
+                                                                                         TEXTOBJ
+                                                   with T))
+                                                             (* ; 
+       "If TeditBluePendingDelete flag is set, then simulate Laurel's blue-pending-delete feature.")
+                                           (SETQ SEL (TEDIT.EXTEND.SEL X Y GLOBALSEL TEXTOBJ 
+                                                            SELOPERATION W))
+                                           (SETQ EXTENDFLG T]
+                                      (T                     (* ; 
+                        "The mouse buttons are up, leaving us with a pro-tem 'permanent' selection")
+                                         (\COPYSEL OSEL GLOBALSEL)
+                                                             (* ; 
+                       "And SEL is NOT SET ANY LONGER, so it won't get copied into OSEL down below")
+                                         (AND SEL (replace (SELECTION SET) of SEL
+                                                     with NIL]
+                                   [COND
+                                      ((AND SEL (fetch (SELECTION SET) of SEL)
+                                            SELFN)           (* ; 
+                               "The selection was set, but there's a SELFN that has veto authority")
+                                       (COND
+                                          ((EQ (APPLY* SELFN TEXTOBJ SEL SELOPERATION 'TENTATIVE)
+                                               'DON'T)       (* ; 
+                                              "The selfn vetoed this selection, so mark it un-set.")
+                                           (replace (SELECTION SET) of SEL with NIL]
+                                   (COND
+                                      ((\TEDIT.SEL.CHANGED? SEL OSEL OSELOP SELOPERATION)
+                                                             (* ; 
+             "Something interesting about the selection changed.  We have to re-display its image.")
+                                       (COND
+                                          ((OR (EQ SELOPERATION 'NORMAL)
+                                               (EQ SELOPERATION 'PENDINGDEL))
+                                                             (* ; 
+                        "For a normal selection, set the 'window last selected in' for the TEXTOBJ")
+                                           (replace (TEXTOBJ SELWINDOW) of TEXTOBJ
+                                              with W)))
+                                       (SETQ OSEL (\TEDIT.REFRESH.SHOWSEL TEXTOBJ SEL OSEL OSELOP 
+                                                         SELOPERATION EXTENDFLG))
+                                       (SETQ OSELOP SELOPERATION))
+                                      ([AND OSEL (fetch (SELECTION SET) of OSEL)
+                                            (EQ (fetch (SELECTION SELKIND) of OSEL)
+                                                'VOLATILE)
+                                            (OR (NOT SEL)
+                                                (NOT (fetch (SELECTION SET) of SEL]
+
+                                 (* ;; "There is an old selection around, but it is VOLATILE -- i.e., it shouldn't last longer than something is pointing at it.  Turn it off.")
+
+                                       (\SHOWSEL OSEL NIL NIL)
+                                       (replace (SELECTION SET) of OSEL with NIL]
+                                  ((IN/SCROLL/BAR? W LASTMOUSEX LASTMOUSEY)
+                                                             (* ; 
+                                    "If he moves to the scroll bar, let him scroll without trouble")
+                                   (SCROLL.HANDLER W)))
+                               (BLOCK)                       (* ; "Give other processes a chance")
+                               (GETMOUSESTATE)               (* ; "And get the new mouse info")
+                               (TEDIT.CURSORMOVEDFN W))
+                      (\COPYSEL OSEL GLOBALSEL)
+                      (COND
+                         ((fetch (SELECTION SET) of OSEL)
+                                                             (* ; 
+                                        "Only if a selection REALLY got made should we do this....")
+                          (SELECTQ SELOPERATION
+                              (COPY                          (* ; 
+           "A COPY selection -- set the copy flag, and see if this is a copy to a non-TEdit window")
+                                    (SETQ TEDIT.COPY.PENDING T)
+                                    (replace (SELECTION SET) of OSEL with NIL)
+                                                             (* ; 
+                                                "And turn off OSEL, to avoid spurious highlighting")
+                                    (\TEDIT.FOREIGN.COPY? GLOBALSEL)
+                                                             (* ; 
+                               "Maybe copy into the SYSBUF, if the recipient isn't a TEdit window.")
+                                    )
+                              (COPYLOOKS                     (* ; "A COPYLOOKS selection")
+                                         (SETQ TEDIT.COPYLOOKS.PENDING T)
+                                                             (* ; 
+                                                "And turn off OSEL, to avoid spurious highlighting")
+                                         (replace (SELECTION SET) of OSEL with NIL))
+                              (MOVE                          (* ; 
+                               "A MOVE selection -- set the flag to signal the TEdit command loop,")
+                                    (SETQ TEDIT.MOVE.PENDING T)
+                                                             (* ; 
+                                                "And turn off OSEL, to avoid spurious highlighting")
+                                    (replace (SELECTION SET) of OSEL with NIL))
+                              (DELETE (SETQ TEDIT.DEL.PENDING T)
+                                      (replace (SELECTION SET) of OSEL with NIL)
+                                                             (* ; 
+                                                "And turn off OSEL, to avoid spurious highlighting")
+                                      )
+                              (NORMAL                        (* ; 
+                                                 "This is a normal selection;  set the caret looks")
+                                      (replace (TEXTOBJ CARETLOOKS) of TEXTOBJ
+                                         with (\TEDIT.GET.INSERT.CHARLOOKS TEXTOBJ OSEL)))
+                              NIL)))
+                      (AND SELFN (APPLY* SELFN TEXTOBJ GLOBALSEL SELOPERATION 'FINAL))
+                                                             (* ; 
+                             "Give a user exit routine control, perhaps for logging of selections.")
+                      (for CARET inside (fetch (TEXTOBJ CARET) of TEXTOBJ)
+                         do (OR (fetch TCUP of CARET)
+                                    (\EDIT.FLIPCARET CARET T))))
+                  (AND OSEL (fetch (SELECTION SET) of OSEL)
+                       (fetch (SELECTION SELOBJ) of OSEL)
+                       (SETQ SELFINALFN (IMAGEOBJPROP (fetch (SELECTION SELOBJ) of OSEL)
+                                               'WHENOPERATEDONFN))
+                       (APPLY* SELFINALFN (fetch (SELECTION SELOBJ) of OSEL)
+                              (WINDOWPROP W 'DSP)
+                              'SELECTED OSEL (fetch (TEXTOBJ STREAMHINT) of TEXTOBJ])])
 
 (\TEDIT.WINDOW.OPS
   [LAMBDA (TEXTOBJ WINDOWTOSPLIT)                        (* ; "Edited 30-May-91 23:33 by jds")
@@ -1922,9 +1925,10 @@ Copyright (c) 1983-1991, 1993-1994, 1999, 2021 by John Sybalsky & Xerox Corporat
       ])
 
 (\TEDIT.SCROLLFN
-  [LAMBDA (W DX DY)                                      (* ; "Edited 31-May-91 13:32 by jds")
+  [LAMBDA (W DX DY)                                     (* ; "Edited 19-Sep-2021 23:10 by rmk:")
                                                              (* Handle scrolling of the edit 
                                                            window)
+    (TOTOPW W)
     (PROG* (WHEIGHT (TEXTOBJ (WINDOWPROP W 'TEXTOBJ))
                   (PRIORCR 0)
                   SELWASON SHIFTEDSELWASON MOVESELWASON DELETESELWASON (WREG (DSPCLIPPINGREGION
@@ -2826,25 +2830,25 @@ Copyright (c) 1983-1991, 1993-1994, 1999, 2021 by John Sybalsky & Xerox Corporat
 (PUTPROPS TEDITWINDOW COPYRIGHT ("John Sybalsky & Xerox Corporation" 1983 1984 1985 1986 1987 1988 
 1989 1990 1991 1993 1994 1999 2021))
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (7165 91937 (TEDIT.CREATEW 7175 . 8311) (\TEDIT.CREATEW.FROM.REGION 8313 . 9297) (
-TEDIT.CURSORMOVEDFN 9299 . 19951) (TEDIT.CURSOROUTFN 19953 . 20488) (TEDIT.WINDOW.SETUP 20490 . 22299)
- (TEDIT.MINIMAL.WINDOW.SETUP 22301 . 30090) (\TEDIT.ACTIVE.WINDOWP 30092 . 31073) (
-\TEDIT.BUTTONEVENTFN 31075 . 54913) (\TEDIT.WINDOW.OPS 54915 . 58718) (\TEDIT.EXPANDFN 58720 . 59123) 
-(\TEDIT.MAINW 59125 . 60414) (\TEDIT.PRIMARYW 60416 . 61628) (\TEDIT.COPYINSERTFN 61630 . 62601) (
-\TEDIT.NEWREGIONFN 62603 . 65070) (\TEDIT.SET.WINDOW.EXTENT 65072 . 71174) (\TEDIT.SHRINK.ICONCREATE 
-71176 . 73448) (\TEDIT.SHRINKFN 73450 . 74025) (\TEDIT.SPLITW 74027 . 80128) (\TEDIT.UNSPLITW 80130 . 
-85824) (\TEDIT.WINDOW.SETUP 85826 . 91546) (\SAFE.FIRST 91548 . 91935)) (93083 93990 (TEDITWINDOWP 
-93093 . 93988)) (94027 96523 (TEDIT.GETINPUT 94037 . 96020) (\TEDIT.MAKEFILENAME 96022 . 96521)) (
-96572 103023 (TEDIT.PROMPTPRINT 96582 . 99486) (TEDIT.PROMPTFLASH 99488 . 101443) (
-\TEDIT.PROMPT.PAGEFULLFN 101445 . 103021)) (103258 107320 (TEXTSTREAM.TITLE 103268 . 103889) (
-\TEDIT.ORIGINAL.WINDOW.TITLE 103891 . 105936) (\TEDIT.WINDOW.TITLE 105938 . 106608) (
-\TEXTSTREAM.FILENAME 106610 . 107318)) (107363 152087 (TEDIT.DEACTIVATE.WINDOW 107373 . 114522) (
-\TEDIT.REPAINTFN 114524 . 117381) (\TEDIT.RESHAPEFN 117383 . 123003) (\TEDIT.SCROLLFN 123005 . 152085)
-) (152129 154178 (\TEDIT.PROCIDLEFN 152139 . 153488) (\TEDIT.PROCENTRYFN 153490 . 153783) (
-\TEDIT.PROCEXITFN 153785 . 154176)) (154257 165257 (\EDIT.DOWNCARET 154267 . 154948) (\EDIT.FLIPCARET 
-154950 . 156485) (TEDIT.FLASHCARET 156487 . 157601) (\EDIT.UPCARET 157603 . 158056) (
-TEDIT.NORMALIZECARET 158058 . 164009) (\SETCARET 164011 . 164931) (\TEDIT.CARET 164933 . 165255)) (
-165291 179046 (TEDIT.ADD.MENUITEM 165301 . 167216) (TEDIT.DEFAULT.MENUFN 167218 . 176485) (
-TEDIT.REMOVE.MENUITEM 176487 . 177488) (\TEDIT.CREATEMENU 177490 . 177943) (\TEDIT.MENU.WHENHELDFN 
-177945 . 178715) (\TEDIT.MENU.WHENSELECTEDFN 178717 . 179044)))))
+  (FILEMAP (NIL (7117 93041 (TEDIT.CREATEW 7127 . 8263) (\TEDIT.CREATEW.FROM.REGION 8265 . 9249) (
+TEDIT.CURSORMOVEDFN 9251 . 19903) (TEDIT.CURSOROUTFN 19905 . 20440) (TEDIT.WINDOW.SETUP 20442 . 22251)
+ (TEDIT.MINIMAL.WINDOW.SETUP 22253 . 30042) (\TEDIT.ACTIVE.WINDOWP 30044 . 31025) (
+\TEDIT.BUTTONEVENTFN 31027 . 56017) (\TEDIT.WINDOW.OPS 56019 . 59822) (\TEDIT.EXPANDFN 59824 . 60227) 
+(\TEDIT.MAINW 60229 . 61518) (\TEDIT.PRIMARYW 61520 . 62732) (\TEDIT.COPYINSERTFN 62734 . 63705) (
+\TEDIT.NEWREGIONFN 63707 . 66174) (\TEDIT.SET.WINDOW.EXTENT 66176 . 72278) (\TEDIT.SHRINK.ICONCREATE 
+72280 . 74552) (\TEDIT.SHRINKFN 74554 . 75129) (\TEDIT.SPLITW 75131 . 81232) (\TEDIT.UNSPLITW 81234 . 
+86928) (\TEDIT.WINDOW.SETUP 86930 . 92650) (\SAFE.FIRST 92652 . 93039)) (94187 95094 (TEDITWINDOWP 
+94197 . 95092)) (95131 97627 (TEDIT.GETINPUT 95141 . 97124) (\TEDIT.MAKEFILENAME 97126 . 97625)) (
+97676 104127 (TEDIT.PROMPTPRINT 97686 . 100590) (TEDIT.PROMPTFLASH 100592 . 102547) (
+\TEDIT.PROMPT.PAGEFULLFN 102549 . 104125)) (104362 108424 (TEXTSTREAM.TITLE 104372 . 104993) (
+\TEDIT.ORIGINAL.WINDOW.TITLE 104995 . 107040) (\TEDIT.WINDOW.TITLE 107042 . 107712) (
+\TEXTSTREAM.FILENAME 107714 . 108422)) (108467 153208 (TEDIT.DEACTIVATE.WINDOW 108477 . 115626) (
+\TEDIT.REPAINTFN 115628 . 118485) (\TEDIT.RESHAPEFN 118487 . 124107) (\TEDIT.SCROLLFN 124109 . 153206)
+) (153250 155299 (\TEDIT.PROCIDLEFN 153260 . 154609) (\TEDIT.PROCENTRYFN 154611 . 154904) (
+\TEDIT.PROCEXITFN 154906 . 155297)) (155378 166378 (\EDIT.DOWNCARET 155388 . 156069) (\EDIT.FLIPCARET 
+156071 . 157606) (TEDIT.FLASHCARET 157608 . 158722) (\EDIT.UPCARET 158724 . 159177) (
+TEDIT.NORMALIZECARET 159179 . 165130) (\SETCARET 165132 . 166052) (\TEDIT.CARET 166054 . 166376)) (
+166412 180167 (TEDIT.ADD.MENUITEM 166422 . 168337) (TEDIT.DEFAULT.MENUFN 168339 . 177606) (
+TEDIT.REMOVE.MENUITEM 177608 . 178609) (\TEDIT.CREATEMENU 178611 . 179064) (\TEDIT.MENU.WHENHELDFN 
+179066 . 179836) (\TEDIT.MENU.WHENSELECTEDFN 179838 . 180165)))))
 STOP
diff --git a/library/TEDITWINDOW.LCOM b/library/TEDITWINDOW.LCOM
index 03de59c4..59c632ab 100644
Binary files a/library/TEDITWINDOW.LCOM and b/library/TEDITWINDOW.LCOM differ
diff --git a/sources/HARDCOPY b/sources/HARDCOPY
index 9d9c7909..145f90bb 100644
--- a/sources/HARDCOPY
+++ b/sources/HARDCOPY
@@ -1,11 +1,11 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
-(FILECREATED " 5-May-2021 19:41:55" 
-{DSK}<Users>kaplan>Local>medley3.5>git-medley2>sources>HARDCOPY.;9 103663 
+(FILECREATED "20-Sep-2021 10:59:58" 
+{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>HARDCOPY.;2 103730 
 
-      changes to%:  (FNS COPY.TEXT.TO.IMAGE)
+      changes to%:  (VARS HARDCOPYCOMS)
 
-      previous date%: "16-Apr-2018 22:15:08" 
-{DSK}<Users>kaplan>Local>medley3.5>git-medley2>sources>HARDCOPY.;8)
+      previous date%: " 5-May-2021 19:41:55" 
+{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>HARDCOPY.;1)
 
 
 (* ; "
@@ -15,46 +15,47 @@ Copyright (c) 1984-1993, 1999, 2018, 2021 by Venue & Xerox Corporation.
 (PRETTYCOMPRINT HARDCOPYCOMS)
 
 (RPAQQ HARDCOPYCOMS
-       [(COMS                                                (* ; "exported functionality")
+       [(COMS                                                (* ; "exported functionality")
               (FNS HARDCOPY.SOMEHOW HARDCOPYIMAGEW HARDCOPYIMAGEW.TOFILE HARDCOPYIMAGEW.TOPRINTER 
                    HARDCOPYREGION.TOFILE HARDCOPYREGION.TOPRINTER COPY.WINDOW.TO.BITMAP)
-                                                             (* ; "user interface jazz")
+                                                             (* ; "user interface jazz")
               (INITVARS (ChangeDefaultPrinter))
               (FNS MakeMenuOfPrinters PRINTERS.WHENSELECTEDFN MakeMenuOfImageTypes 
                    GetNewPrinterFromUser PopUpWindowAndGetAtom PopUpWindowAndGetList NewPrinter 
                    GetPrinterName GetImageFile FetchDefaultPrinter)
-                                                             (* ; "filename diddlers")
+                                                             (* ; "filename diddlers")
               (FNS ExtensionForPrintFileType PRINTFILETYPE.FROM.EXTENSION))
-        (COMS                                                (* ; 
-                                                           "Interface for PRINTERS and IMAGEFILES")
+        (COMS                                                (* ; 
+                                                           "Interface for PRINTERS and IMAGEFILES")
               (FNS DEFAULTPRINTER CAN.PRINT.DIRECTLY CONVERT.FILE.TO.TYPE.FOR.PRINTER EMPRESS 
                    HARDCOPYW LISTFILES1 PRINTER.BITMAPFILE PRINTER.BITMAPSCALE PRINTER.SCRATCH.FILE 
                    PRINTERPROP PRINTERSTATUS PRINTERTYPE PRINTERNAME PRINTFILEPROP PRINTFILETYPE 
                    \EXPECTED.FILE.TYPE SEND.FILE.TO.PRINTER)
               (FNS PRINTERDEVICE)
               [DECLARE%: DONTEVAL@LOAD DOCOPY (P (PRINTERDEVICE 'LPT]
-              (P                                             (* ; "for backward compatibility")
+              (P                                             (* ; "for backward compatibility")
                  (MOVD? 'NILL 'PRINTERMODE))
               (INITVARS (DEFAULTPRINTINGHOST)
                      (DEFAULTPRINTERTYPE 'INTERPRESS)
                      (EMPRESS.SCRATCH)
-                     (EMPRESS#SIDES T))
+                     (EMPRESS#SIDES T)
+                     (PRINTFILETYPES NIL))
               (GLOBALVARS DEFAULTPRINTINGHOST DEFAULTPRINTERTYPE EMPRESS#SIDES PRINTERTYPES 
                      PRINTFILETYPES))
-        (COMS                                                (* ; 
-                                                           "Converting text files to imagestreams")
+        (COMS                                                (* ; 
+                                                           "Converting text files to imagestreams")
               (INITVARS (TEXTDEFAULTTABS (LIST 20320))
                      (TEXTDEFAULTPAGEREGION (CREATEREGION 2794 1905 18415 24765)))
-                                                             (* ; 
-                                                "TEXTDEFAULTTABS Hack, mica equivalent of 8 inches")
+                                                             (* ; 
+                                                "TEXTDEFAULTTABS Hack, mica equivalent of 8 inches")
               (GLOBALVARS TEXTDEFAULTTABS TEXTDEFAULTPAGEREGION)
               (FNS TEXTTOIMAGEFILE COPY.TEXT.TO.IMAGE))
         (COMS (FNS \BLTSHADE.GENERICPRINTER)
-                                                             (* ; 
-                                                     "hack for printers that can't really BLTSHADE")
+                                                             (* ; 
+                                                     "hack for printers that can't really BLTSHADE")
               )
-        [COMS                                                (* ; 
-                                                "stuff to support hardcopy streams on the display.")
+        [COMS                                                (* ; 
+                                                "stuff to support hardcopy streams on the display.")
               (FNS MAKEHARDCOPYSTREAM UNMAKEHARDCOPYSTREAM HARDCOPYSTREAMTYPE \CHARWIDTH.HDCPYDISPLAY
                    \DSPFONT.HDCPYDISPLAY \DSPRIGHTMARGIN.HDCPYDISPLAY \DSPXPOSITION.HDCPYDISPLAY 
                    \DSPYPOSITION.HDCPYDISPLAY \STRINGWIDTH.HDCPYDISPLAY \STRINGWIDTH.HCPYDISPLAYAUX 
@@ -65,8 +66,8 @@ Copyright (c) 1984-1993, 1999, 2018, 2021 by Venue & Xerox Corporation.
                                                                 (IMICASPERPT 35]
               (DECLARE%: DONTCOPY DOEVAL@COMPILE (EXPORT (FUNCTIONS \MICASTOPTS)))
               (DECLARE%: DONTEVAL@LOAD DOCOPY (P (\HDCPYDISPLAYINIT]
-        [COMS                                                (* ; 
-                                       "Stuff to support MICA-unit hardcopy streams on the display")
+        [COMS                                                (* ; 
+                                       "Stuff to support MICA-unit hardcopy streams on the display")
               (FNS MAKEHARDCOPYMODESTREAM UNMAKEHARDCOPYMODESTREAM \BLTSHADE.HCPYMODE 
                    \BITBLT.HCPYMODE \BRUSHCONVERT.HCPYMODE \CHANGECHARSET.HCPYMODE 
                    \DASHINGCONVERT.HCPYMODE \CHARWIDTH.HCPYMODE \DRAWLINE.HCPYMODE 
@@ -649,7 +650,7 @@ Copyright (c) 1984-1993, 1999, 2018, 2021 by Venue & Xerox Corporation.
 (PRINTERDEVICE 'LPT)
 )
 
-                                                             (* ; "for backward compatibility")
+                                                             (* ; "for backward compatibility")
 
 (MOVD? 'NILL 'PRINTERMODE)
 
@@ -660,6 +661,8 @@ Copyright (c) 1984-1993, 1999, 2018, 2021 by Venue & Xerox Corporation.
 (RPAQ? EMPRESS.SCRATCH )
 
 (RPAQ? EMPRESS#SIDES T)
+
+(RPAQ? PRINTFILETYPES NIL)
 (DECLARE%: DOEVAL@COMPILE DONTCOPY
 
 (GLOBALVARS DEFAULTPRINTINGHOST DEFAULTPRINTERTYPE EMPRESS#SIDES PRINTERTYPES PRINTFILETYPES)
@@ -1085,39 +1088,39 @@ Copyright (c) 1984-1993, 1999, 2018, 2021 by Venue & Xerox Corporation.
 (PUTPROPS HARDCOPY COPYRIGHT ("Venue & Xerox Corporation" 1984 1985 1986 1987 1988 1989 1990 1991 1992
  1993 1999 2018 2021))
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (6141 10325 (HARDCOPY.SOMEHOW 6151 . 7509) (HARDCOPYIMAGEW 7511 . 7663) (
-HARDCOPYIMAGEW.TOFILE 7665 . 7973) (HARDCOPYIMAGEW.TOPRINTER 7975 . 8640) (HARDCOPYREGION.TOFILE 8642
- . 8940) (HARDCOPYREGION.TOPRINTER 8942 . 9564) (COPY.WINDOW.TO.BITMAP 9566 . 10323)) (10397 20947 (
-MakeMenuOfPrinters 10407 . 11632) (PRINTERS.WHENSELECTEDFN 11634 . 13376) (MakeMenuOfImageTypes 13378
- . 13896) (GetNewPrinterFromUser 13898 . 14326) (PopUpWindowAndGetAtom 14328 . 15713) (
-PopUpWindowAndGetList 15715 . 17281) (NewPrinter 17283 . 18231) (GetPrinterName 18233 . 18513) (
-GetImageFile 18515 . 20802) (FetchDefaultPrinter 20804 . 20945)) (20982 21520 (
-ExtensionForPrintFileType 20992 . 21185) (PRINTFILETYPE.FROM.EXTENSION 21187 . 21518)) (21575 37959 (
-DEFAULTPRINTER 21585 . 21745) (CAN.PRINT.DIRECTLY 21747 . 21903) (CONVERT.FILE.TO.TYPE.FOR.PRINTER 
-21905 . 22949) (EMPRESS 22951 . 23264) (HARDCOPYW 23266 . 26226) (LISTFILES1 26228 . 26401) (
-PRINTER.BITMAPFILE 26403 . 26650) (PRINTER.BITMAPSCALE 26652 . 26917) (PRINTER.SCRATCH.FILE 26919 . 
-27042) (PRINTERPROP 27044 . 27227) (PRINTERSTATUS 27229 . 27418) (PRINTERTYPE 27420 . 29729) (
-PRINTERNAME 29731 . 30033) (PRINTFILEPROP 30035 . 30226) (PRINTFILETYPE 30228 . 32172) (
-\EXPECTED.FILE.TYPE 32174 . 32956) (SEND.FILE.TO.PRINTER 32958 . 37957)) (37960 42942 (PRINTERDEVICE 
-37970 . 42940)) (43725 51926 (TEXTTOIMAGEFILE 43735 . 45925) (COPY.TEXT.TO.IMAGE 45927 . 51924)) (
-51927 53062 (\BLTSHADE.GENERICPRINTER 51937 . 53060)) (53190 71942 (MAKEHARDCOPYSTREAM 53200 . 54204) 
-(UNMAKEHARDCOPYSTREAM 54206 . 54890) (HARDCOPYSTREAMTYPE 54892 . 55171) (\CHARWIDTH.HDCPYDISPLAY 55173
- . 55604) (\DSPFONT.HDCPYDISPLAY 55606 . 57011) (\DSPRIGHTMARGIN.HDCPYDISPLAY 57013 . 57590) (
-\DSPXPOSITION.HDCPYDISPLAY 57592 . 57853) (\DSPYPOSITION.HDCPYDISPLAY 57855 . 58116) (
-\STRINGWIDTH.HDCPYDISPLAY 58118 . 58625) (\STRINGWIDTH.HCPYDISPLAYAUX 58627 . 60959) (\HDCPYBLTCHAR 
-60961 . 63496) (\HDCPYDISPLAY.FIX.XPOS 63498 . 63918) (\HDCPYDISPLAY.FIX.YPOS 63920 . 64340) (
-\HDCPYDISPLAYINIT 64342 . 65119) (\HDCPYDSPPRINTCHAR 65121 . 67281) (\SLOWHDCPYBLTCHAR 67283 . 70786) 
-(\CHANGECHARSET.HDCPYDISPLAY 70788 . 71940)) (72664 102961 (MAKEHARDCOPYMODESTREAM 72674 . 74583) (
-UNMAKEHARDCOPYMODESTREAM 74585 . 75663) (\BLTSHADE.HCPYMODE 75665 . 76112) (\BITBLT.HCPYMODE 76114 . 
-76736) (\BRUSHCONVERT.HCPYMODE 76738 . 76975) (\CHANGECHARSET.HCPYMODE 76977 . 78744) (
-\DASHINGCONVERT.HCPYMODE 78746 . 79009) (\CHARWIDTH.HCPYMODE 79011 . 79298) (\DRAWLINE.HCPYMODE 79300
- . 79612) (\DRAWCURVE.HCPYMODE 79614 . 80043) (\DRAWCIRCLE.HCPYMODE 80045 . 80440) (
-\DRAWELLIPSE.HCPYMODE 80442 . 80954) (\DSPFONT.HCPYMODE 80956 . 82112) (\DSPLEFTMARGIN.HCPYMODE 82114
- . 82698) (\DSPLINEFEED.HCPYMODE 82700 . 83110) (\DSPRIGHTMARGIN.HCPYMODE 83112 . 83741) (
-\DSPSPACEFACTOR.HCPYMODE 83743 . 84264) (\DSPXPOSITION.HCPYMODE 84266 . 84847) (\DSPYPOSITION.HCPYMODE
- 84849 . 85254) (\MOVETO.HCPYMODE 85256 . 85408) (\FONTCREATE.HCPYMODE.PRESS 85410 . 86422) (
-\CREATECHARSET.HCPYMODE.PRESS 86424 . 87395) (\FONTCREATE.HCPYMODE.INTERPRESS 87397 . 88431) (
-\CREATECHARSET.HCPYMODE.INTERPRESS 88433 . 89421) (\STRINGWIDTH.HCPYMODE 89423 . 89857) (
-\HCPYMODEBLTCHAR 89859 . 92828) (\HCPYMODEDISPLAYINIT 92830 . 95761) (\HCPYMODEDSPPRINTCHAR 95763 . 
-97944) (\SLOWHCPYMODEBLTCHAR 97946 . 101460) (\SFFixY.HCPYMODE 101462 . 102959)))))
+  (FILEMAP (NIL (6176 10360 (HARDCOPY.SOMEHOW 6186 . 7544) (HARDCOPYIMAGEW 7546 . 7698) (
+HARDCOPYIMAGEW.TOFILE 7700 . 8008) (HARDCOPYIMAGEW.TOPRINTER 8010 . 8675) (HARDCOPYREGION.TOFILE 8677
+ . 8975) (HARDCOPYREGION.TOPRINTER 8977 . 9599) (COPY.WINDOW.TO.BITMAP 9601 . 10358)) (10432 20982 (
+MakeMenuOfPrinters 10442 . 11667) (PRINTERS.WHENSELECTEDFN 11669 . 13411) (MakeMenuOfImageTypes 13413
+ . 13931) (GetNewPrinterFromUser 13933 . 14361) (PopUpWindowAndGetAtom 14363 . 15748) (
+PopUpWindowAndGetList 15750 . 17316) (NewPrinter 17318 . 18266) (GetPrinterName 18268 . 18548) (
+GetImageFile 18550 . 20837) (FetchDefaultPrinter 20839 . 20980)) (21017 21555 (
+ExtensionForPrintFileType 21027 . 21220) (PRINTFILETYPE.FROM.EXTENSION 21222 . 21553)) (21610 37994 (
+DEFAULTPRINTER 21620 . 21780) (CAN.PRINT.DIRECTLY 21782 . 21938) (CONVERT.FILE.TO.TYPE.FOR.PRINTER 
+21940 . 22984) (EMPRESS 22986 . 23299) (HARDCOPYW 23301 . 26261) (LISTFILES1 26263 . 26436) (
+PRINTER.BITMAPFILE 26438 . 26685) (PRINTER.BITMAPSCALE 26687 . 26952) (PRINTER.SCRATCH.FILE 26954 . 
+27077) (PRINTERPROP 27079 . 27262) (PRINTERSTATUS 27264 . 27453) (PRINTERTYPE 27455 . 29764) (
+PRINTERNAME 29766 . 30068) (PRINTFILEPROP 30070 . 30261) (PRINTFILETYPE 30263 . 32207) (
+\EXPECTED.FILE.TYPE 32209 . 32991) (SEND.FILE.TO.PRINTER 32993 . 37992)) (37995 42977 (PRINTERDEVICE 
+38005 . 42975)) (43792 51993 (TEXTTOIMAGEFILE 43802 . 45992) (COPY.TEXT.TO.IMAGE 45994 . 51991)) (
+51994 53129 (\BLTSHADE.GENERICPRINTER 52004 . 53127)) (53257 72009 (MAKEHARDCOPYSTREAM 53267 . 54271) 
+(UNMAKEHARDCOPYSTREAM 54273 . 54957) (HARDCOPYSTREAMTYPE 54959 . 55238) (\CHARWIDTH.HDCPYDISPLAY 55240
+ . 55671) (\DSPFONT.HDCPYDISPLAY 55673 . 57078) (\DSPRIGHTMARGIN.HDCPYDISPLAY 57080 . 57657) (
+\DSPXPOSITION.HDCPYDISPLAY 57659 . 57920) (\DSPYPOSITION.HDCPYDISPLAY 57922 . 58183) (
+\STRINGWIDTH.HDCPYDISPLAY 58185 . 58692) (\STRINGWIDTH.HCPYDISPLAYAUX 58694 . 61026) (\HDCPYBLTCHAR 
+61028 . 63563) (\HDCPYDISPLAY.FIX.XPOS 63565 . 63985) (\HDCPYDISPLAY.FIX.YPOS 63987 . 64407) (
+\HDCPYDISPLAYINIT 64409 . 65186) (\HDCPYDSPPRINTCHAR 65188 . 67348) (\SLOWHDCPYBLTCHAR 67350 . 70853) 
+(\CHANGECHARSET.HDCPYDISPLAY 70855 . 72007)) (72731 103028 (MAKEHARDCOPYMODESTREAM 72741 . 74650) (
+UNMAKEHARDCOPYMODESTREAM 74652 . 75730) (\BLTSHADE.HCPYMODE 75732 . 76179) (\BITBLT.HCPYMODE 76181 . 
+76803) (\BRUSHCONVERT.HCPYMODE 76805 . 77042) (\CHANGECHARSET.HCPYMODE 77044 . 78811) (
+\DASHINGCONVERT.HCPYMODE 78813 . 79076) (\CHARWIDTH.HCPYMODE 79078 . 79365) (\DRAWLINE.HCPYMODE 79367
+ . 79679) (\DRAWCURVE.HCPYMODE 79681 . 80110) (\DRAWCIRCLE.HCPYMODE 80112 . 80507) (
+\DRAWELLIPSE.HCPYMODE 80509 . 81021) (\DSPFONT.HCPYMODE 81023 . 82179) (\DSPLEFTMARGIN.HCPYMODE 82181
+ . 82765) (\DSPLINEFEED.HCPYMODE 82767 . 83177) (\DSPRIGHTMARGIN.HCPYMODE 83179 . 83808) (
+\DSPSPACEFACTOR.HCPYMODE 83810 . 84331) (\DSPXPOSITION.HCPYMODE 84333 . 84914) (\DSPYPOSITION.HCPYMODE
+ 84916 . 85321) (\MOVETO.HCPYMODE 85323 . 85475) (\FONTCREATE.HCPYMODE.PRESS 85477 . 86489) (
+\CREATECHARSET.HCPYMODE.PRESS 86491 . 87462) (\FONTCREATE.HCPYMODE.INTERPRESS 87464 . 88498) (
+\CREATECHARSET.HCPYMODE.INTERPRESS 88500 . 89488) (\STRINGWIDTH.HCPYMODE 89490 . 89924) (
+\HCPYMODEBLTCHAR 89926 . 92895) (\HCPYMODEDISPLAYINIT 92897 . 95828) (\HCPYMODEDSPPRINTCHAR 95830 . 
+98011) (\SLOWHCPYMODEBLTCHAR 98013 . 101527) (\SFFixY.HCPYMODE 101529 . 103026)))))
 STOP
diff --git a/sources/HARDCOPY.LCOM b/sources/HARDCOPY.LCOM
index 423b38bc..27e0ec85 100644
Binary files a/sources/HARDCOPY.LCOM and b/sources/HARDCOPY.LCOM differ
