diff --git a/internal/TEDIT-DEBUG b/internal/TEDIT-DEBUG
index f64ba90e..32b6966f 100644
--- a/internal/TEDIT-DEBUG
+++ b/internal/TEDIT-DEBUG
@@ -1,12 +1,12 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED "29-Jul-2025 11:42:21" {WMEDLEY}<internal>TEDIT-DEBUG.;174 138232 
+(FILECREATED "13-Oct-2025 16:52:28" {WMEDLEY}<internal>TEDIT-DEBUG.;175 138298 
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (FNS SPPRINT)
+      :CHANGES-TO (FNS SP)
 
-      :PREVIOUS-DATE " 3-Jun-2025 23:12:40" {WMEDLEY}<internal>TEDIT-DEBUG.;173)
+      :PREVIOUS-DATE "29-Jul-2025 11:42:21" {WMEDLEY}<internal>TEDIT-DEBUG.;174)
 
 
 (PRETTYCOMPRINT TEDIT-DEBUGCOMS)
@@ -455,7 +455,8 @@
 (DEFINEQ
 
 (SP
-  [LAMBDA (PC NP OFILE TOBJ FONT NOCR)                       (* ; "Edited 17-Apr-2025 13:37 by rmk")
+  [LAMBDA (PC NP OFILE TOBJ FONT NOCR)                       (* ; "Edited 13-Oct-2025 16:37 by rmk")
+                                                             (* ; "Edited 17-Apr-2025 13:37 by rmk")
                                                              (* ; "Edited 15-Apr-2025 13:53 by rmk")
                                                              (* ; "Edited 11-Apr-2025 12:15 by rmk")
                                                              (* ; "Edited 29-Mar-2025 22:34 by rmk")
@@ -475,8 +476,7 @@
 
     (* ;; "OFILE=T or TEDIT means Tedit stream.  NIL means primary output (usually T)")
 
-    (PROG ((TEXTOBJ (CL:IF (type? TEXTOBJ PC)
-                        PC
+    (PROG ((TEXTOBJ (OR (TEXTOBJ PC T)
                         (GTO TOBJ)))
            WTYPE TITLE)
           (if OFILE
@@ -2579,33 +2579,33 @@
 (ADDTOVAR LAMA )
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (5120 7679 (GTO 5130 . 5380) (GTS 5382 . 7153) (GTW 7155 . 7311) (GSEL 7313 . 7677)) (
-7712 8833 (TEST.TEMPLATE 7722 . 8831)) (8834 9769 (TESTACTION 8844 . 9767)) (9794 23609 (IPC 9804 . 
-11308) (ILINES 11310 . 13851) (ISEL 13853 . 14464) (ITS 14466 . 16190) (IPANES 16192 . 16427) (ITL 
-16429 . 16848) (IHIST 16850 . 19512) (IPCTB 19514 . 19940) (IMB 19942 . 20701) (ICL 20703 . 21404) (
-IPL 21406 . 21946) (ICARET 21948 . 22475) (INSPECTPIECES 22477 . 23607)) (23631 52299 (SP 23641 . 
-28685) (SL 28687 . 32522) (SSP 32524 . 34226) (SPF 34228 . 36758) (SLF 36760 . 45893) (SHOWLINE 45895
- . 49457) (SLL 49459 . 50206) (STBYTES 50208 . 51934) (SSEL 51936 . 52297)) (52300 64813 (STL 52310 . 
-61311) (CLEARTHISLINE 61313 . 61793) (CHARSLOTP 61795 . 63114) (\TLVALIDATE 63116 . 64811)) (64814 
-70187 (NTHPIECE 64824 . 65956) (NPIECES 65958 . 66823) (NTHPIECECHAR 66825 . 68133) (SELPIECE 68135 . 
-68577) (PIECENUM 68579 . 69298) (PCBYTES 69300 . 70185)) (70188 72662 (FILEBYTES 70198 . 71622) (
-TFILEBYTES 71624 . 72660)) (72663 73985 (TRELMOVE 72673 . 72916) (TSCROLL 72918 . 73084) (TSCROLL* 
-73086 . 73983)) (73986 77035 (TRY 73996 . 75265) (TEDITCLOSEW 75267 . 75610) (PARALASTWITHOUTEOL 75612
- . 76497) (FIXPARALAST 76499 . 77033)) (77036 91923 (SPPRINT 77046 . 83871) (SPPRINT.CHAR 83873 . 
-84857) (SPPRINT.OBJ 84859 . 87917) (SHOWPIECEBYTES 87919 . 89475) (CHECKPLENGTHS 89477 . 89934) (SBT 
-89936 . 91073) (COPYPCHAIN 91075 . 91921)) (91924 93985 (POSLINE 91934 . 93983)) (93986 94869 (
-PRESPLIT 93996 . 94867)) (94870 96583 (ALLTL 94880 . 96133) (NTHCHARSLOT 96135 . 96581)) (96609 106822
- (PLCHAIN 96619 . 97147) (PRINTLINE 97149 . 100139) (SL.GETLINES 100141 . 103434) (CHECKLINES 103436
- . 104416) (COLLECTLINES 104418 . 104670) (NTHLINE 104672 . 105677) (HEIGHT 105679 . 105967) (LINEBOTS
- 105969 . 106820)) (106823 109271 (IPC.DECODEARGS 106833 . 109269)) (109272 109865 (SPF1 109282 . 
-109863)) (109894 112272 (SLF.FATPLEN 109904 . 110763) (FILEPIECE 110765 . 112270)) (112305 113073 (
-SELTEDIT 112315 . 113071)) (113143 118755 (PPARA 113153 . 113575) (PRUN 113577 . 115053) (
-ADDLINEPOSITIONS 115055 . 116482) (SBR 116484 . 117138) (SBC 117140 . 118753)) (118812 120588 (OLDWI 
-118822 . 119197) (COMP 119199 . 119394) (DFR 119396 . 120586)) (120589 121622 (DFGV 120599 . 121125) (
-GDIRECTORIES 121127 . 121620)) (121623 128188 (TTEST 121633 . 126165) (LTEST 126167 . 127532) (THC 
-127534 . 128186)) (128502 129194 (SHOWSAFE 128512 . 129192)) (129247 129694 (MYH 129257 . 129692)) (
-129939 131034 (DFVENUE 129949 . 130828) (VSEE 130830 . 131032)) (131035 131489 (PTT 131045 . 131487)) 
-(131848 133429 (DEBUGOUTPUT.STREAM 131858 . 133427)) (133430 135746 (TEDIT-DEBUG 133440 . 135744)) (
-135747 136239 (HEXTOHILO 135757 . 136097) (CW 136099 . 136237)) (136240 137976 (TRENAME 136250 . 
-137974)))))
+  (FILEMAP (NIL (5115 7674 (GTO 5125 . 5375) (GTS 5377 . 7148) (GTW 7150 . 7306) (GSEL 7308 . 7672)) (
+7707 8828 (TEST.TEMPLATE 7717 . 8826)) (8829 9764 (TESTACTION 8839 . 9762)) (9789 23604 (IPC 9799 . 
+11303) (ILINES 11305 . 13846) (ISEL 13848 . 14459) (ITS 14461 . 16185) (IPANES 16187 . 16422) (ITL 
+16424 . 16843) (IHIST 16845 . 19507) (IPCTB 19509 . 19935) (IMB 19937 . 20696) (ICL 20698 . 21399) (
+IPL 21401 . 21941) (ICARET 21943 . 22470) (INSPECTPIECES 22472 . 23602)) (23626 52365 (SP 23636 . 
+28751) (SL 28753 . 32588) (SSP 32590 . 34292) (SPF 34294 . 36824) (SLF 36826 . 45959) (SHOWLINE 45961
+ . 49523) (SLL 49525 . 50272) (STBYTES 50274 . 52000) (SSEL 52002 . 52363)) (52366 64879 (STL 52376 . 
+61377) (CLEARTHISLINE 61379 . 61859) (CHARSLOTP 61861 . 63180) (\TLVALIDATE 63182 . 64877)) (64880 
+70253 (NTHPIECE 64890 . 66022) (NPIECES 66024 . 66889) (NTHPIECECHAR 66891 . 68199) (SELPIECE 68201 . 
+68643) (PIECENUM 68645 . 69364) (PCBYTES 69366 . 70251)) (70254 72728 (FILEBYTES 70264 . 71688) (
+TFILEBYTES 71690 . 72726)) (72729 74051 (TRELMOVE 72739 . 72982) (TSCROLL 72984 . 73150) (TSCROLL* 
+73152 . 74049)) (74052 77101 (TRY 74062 . 75331) (TEDITCLOSEW 75333 . 75676) (PARALASTWITHOUTEOL 75678
+ . 76563) (FIXPARALAST 76565 . 77099)) (77102 91989 (SPPRINT 77112 . 83937) (SPPRINT.CHAR 83939 . 
+84923) (SPPRINT.OBJ 84925 . 87983) (SHOWPIECEBYTES 87985 . 89541) (CHECKPLENGTHS 89543 . 90000) (SBT 
+90002 . 91139) (COPYPCHAIN 91141 . 91987)) (91990 94051 (POSLINE 92000 . 94049)) (94052 94935 (
+PRESPLIT 94062 . 94933)) (94936 96649 (ALLTL 94946 . 96199) (NTHCHARSLOT 96201 . 96647)) (96675 106888
+ (PLCHAIN 96685 . 97213) (PRINTLINE 97215 . 100205) (SL.GETLINES 100207 . 103500) (CHECKLINES 103502
+ . 104482) (COLLECTLINES 104484 . 104736) (NTHLINE 104738 . 105743) (HEIGHT 105745 . 106033) (LINEBOTS
+ 106035 . 106886)) (106889 109337 (IPC.DECODEARGS 106899 . 109335)) (109338 109931 (SPF1 109348 . 
+109929)) (109960 112338 (SLF.FATPLEN 109970 . 110829) (FILEPIECE 110831 . 112336)) (112371 113139 (
+SELTEDIT 112381 . 113137)) (113209 118821 (PPARA 113219 . 113641) (PRUN 113643 . 115119) (
+ADDLINEPOSITIONS 115121 . 116548) (SBR 116550 . 117204) (SBC 117206 . 118819)) (118878 120654 (OLDWI 
+118888 . 119263) (COMP 119265 . 119460) (DFR 119462 . 120652)) (120655 121688 (DFGV 120665 . 121191) (
+GDIRECTORIES 121193 . 121686)) (121689 128254 (TTEST 121699 . 126231) (LTEST 126233 . 127598) (THC 
+127600 . 128252)) (128568 129260 (SHOWSAFE 128578 . 129258)) (129313 129760 (MYH 129323 . 129758)) (
+130005 131100 (DFVENUE 130015 . 130894) (VSEE 130896 . 131098)) (131101 131555 (PTT 131111 . 131553)) 
+(131914 133495 (DEBUGOUTPUT.STREAM 131924 . 133493)) (133496 135812 (TEDIT-DEBUG 133506 . 135810)) (
+135813 136305 (HEXTOHILO 135823 . 136163) (CW 136165 . 136303)) (136306 138042 (TRENAME 136316 . 
+138040)))))
 STOP
diff --git a/internal/TEDIT-DEBUG.LCOM b/internal/TEDIT-DEBUG.LCOM
index e8e688c0..f3afda41 100644
Binary files a/internal/TEDIT-DEBUG.LCOM and b/internal/TEDIT-DEBUG.LCOM differ
diff --git a/library/PDFSTREAM b/library/PDFSTREAM
index bde1d1e2..bfb879d3 100644
--- a/library/PDFSTREAM
+++ b/library/PDFSTREAM
@@ -1,12 +1,12 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED "23-Aug-2025 10:53:33" {WMEDLEY}<library>PDFSTREAM.;70 15659  
+(FILECREATED "26-Nov-2025 11:37:30" {WMEDLEY}<library>PDFSTREAM.;90 18708  
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (FNS PDF.FONTSAVAILABLE)
+      :CHANGES-TO (VARS PDFSTREAMCOMS)
 
-      :PREVIOUS-DATE "30-Jul-2025 18:01:04" {WMEDLEY}<library>PDFSTREAM.;68)
+      :PREVIOUS-DATE "27-Sep-2025 16:55:27" {WMEDLEY}<library>PDFSTREAM.;89)
 
 
 (PRETTYCOMPRINT PDFSTREAMCOMS)
@@ -14,6 +14,8 @@
 (RPAQQ PDFSTREAMCOMS
        ((FILES (SYSLOAD)
                POSTSCRIPTSTREAM)
+        (INITVARS (PDFFONTCOERCIONS POSTSCRIPTFONTCOERCIONS)
+               (PDFCHARCOERCIONS POSTSCRIPTCHARCOERCIONS))
         [COMS                                                (* ; "Hook into hardcopy interface")
               [ADDVARS [PRINTERTYPES ((PDF)
                                       (CANPRINT (PDF))
@@ -25,7 +27,8 @@
                                                          ROTATION TITLE]
                      [PRINTFILETYPES (PDF (TEST PDFFILEP)
                                           (EXTENSION (PDF))
-                                          (CONVERSION (TEXT PDF.TEXT TEDIT PDF.TEDIT]
+                                          (CONVERSION (TEXT POSTSCRIPT.TEXT TEDIT TEDIT.TO.IMAGEFILE
+                                                            POSTSCRIPT PDF.POSTSCRIPT]
                      (IMAGESTREAMTYPES (PDF (OPENSTREAM OPEN-PDF-STREAM)
                                             (FONTCREATE POSTSCRIPT.FONTCREATE)
                                             (FONTSAVAILABLE PDF.FONTSAVAILABLE)
@@ -46,13 +49,20 @@
         (ALISTS (PDF-CONVERTER-TEMPLATES ps2pdf pstopdf))
         (GLOBALVARS PDFCONVERTER PDF-CONVERTER-TEMPLATES)
         (FNS OPEN-PDF-STREAM CLOSE-PDF-STREAM PS-TO-PDF)
+        (FNS PDF.POSTSCRIPT)
         (FNS SEE-PDF)
         (ADDVARS (FB.SEE.METHODS (PDFFILEP SEE-PDF)))
-        (FNS PDFCONVERTER)))
+        (FNS PDFCONVERTER)
+        (FNS \PDFINIT)
+        (P (\PDFINIT))))
 
 (FILESLOAD (SYSLOAD)
        POSTSCRIPTSTREAM)
 
+(RPAQ? PDFFONTCOERCIONS POSTSCRIPTFONTCOERCIONS)
+
+(RPAQ? PDFCHARCOERCIONS POSTSCRIPTCHARCOERCIONS)
+
 
 
 (* ; "Hook into hardcopy interface")
@@ -68,7 +78,8 @@
 
 (ADDTOVAR PRINTFILETYPES (PDF (TEST PDFFILEP)
                               (EXTENSION (PDF))
-                              (CONVERSION (TEXT PDF.TEXT TEDIT PDF.TEDIT))))
+                              (CONVERSION (TEXT POSTSCRIPT.TEXT TEDIT TEDIT.TO.IMAGEFILE POSTSCRIPT 
+                                                PDF.POSTSCRIPT))))
 
 (ADDTOVAR IMAGESTREAMTYPES (PDF (OPENSTREAM OPEN-PDF-STREAM)
                                 (FONTCREATE POSTSCRIPT.FONTCREATE)
@@ -82,33 +93,38 @@
 (DEFINEQ
 
 (PDFFILEP
-  [LAMBDA (FILE)                                             (* ; "Edited 23-Jun-2023 14:43 by rmk")
+  [LAMBDA (FILE)                                             (* ; "Edited 13-Sep-2025 23:24 by rmk")
+                                                             (* ; "Edited 23-Jun-2023 14:43 by rmk")
                                                              (* ; "Edited  5-Mar-93 21:40 by rmk:")
                                                              (* ; "Edited 14-Jan-93 10:56 by jds")
     (OR (CL:MEMBER (UNPACKFILENAME.STRING FILE 'EXTENSION)
                '("PDF")
                :TEST
                (FUNCTION STRING-EQUAL))
-        (CL:WHEN (STREAMP FILE)
-            (SETFILEPTR FILE 0)
-            (PROG1 (AND (EQ (BIN FILE)
-                            (CHARCODE %%))
-                        (EQ (BIN FILE)
-                            (CHARCODE P))
-                        (EQ (BIN FILE)
-                            (CHARCODE D))
-                        (EQ (BIN FILE)
-                            (CHARCODE F)))
-                   (SETFILEPTR FILE 0)))])
+        (RESETLST
+            [LET (STRM)
+                 [if (SETQ STRM (\GETSTREAM FILE 'INPUT T))
+                     then [RESETSAVE NIL `(PROGN (SETFILEPTR ,STRM ,(GETFILEPTR STRM]
+                          (SETFILEPTR STRM 0)
+                   else (RESETSAVE (SETQ STRM (OPENSTREAM FILE 'INPUT))
+                               `(PROGN (CLOSEF? OLDVALUE]
+                 (AND (EQ (BIN STRM)
+                          (CHARCODE %%))
+                      (EQ (BIN STRM)
+                          (CHARCODE P))
+                      (EQ (BIN STRM)
+                          (CHARCODE D))
+                      (EQ (BIN STRM)
+                          (CHARCODE F])])
 
 (PDF.HARDCOPYW
   [LAMBDA (PDFFILE BITMAP SCALEFACTOR REGION Landscape? TITLE)
+                                                             (* ; "Edited 19-Sep-2025 17:36 by rmk")
                                                              (* ; "Edited 24-Jul-2023 10:37 by rmk")
-                                                             (* ; "Edited 23-Jun-2023 13:28 by rmk")
-                                                             (* ; "Edited  6-Mar-2023 22:43 by rmk")
-    (LET ((PSTTMP (PACKFILENAME 'EXTENSION 'TMPPS 'BODY PDFFILE)))
-         (PS-TO-PDF (POSTSCRIPT.HARDCOPYW PSTTMP BITMAP SCALEFACTOR REGION Landscape? TITLE)
-                PDFFILE])
+                                                             (* ; "Edited 23-Jun-2023 13:28 by rmk")
+    (PS-TO-PDF (POSTSCRIPT.HARDCOPYW (OPENSTREAM '{NODIRCORE} 'OUTPUT)
+                      BITMAP SCALEFACTOR REGION Landscape? TITLE)
+           PDFFILE])
 
 (PDF.TEXT
   [LAMBDA (FILE PDFFILE FONTS HEADING TABS)                  (* ; "Edited  1-Oct-2023 15:24 by rmk")
@@ -120,11 +136,14 @@
                                                                                       ])
 
 (PDF.TEDIT
-  [LAMBDA (FILE PDFFILE)                                     (* ; "Edited 23-Jun-2023 13:22 by rmk")
-                                                             (* ; "Edited  7-Mar-2023 08:39 by rmk")
-    (LET ((TSTREAM (OPENTEXTSTREAM FILE)))
-         (TEDIT.FORMAT.HARDCOPY FILE PDFFILE T NIL NIL NIL 'PDF)
-         (CLOSEF TSTREAM])
+  [LAMBDA (FILE IMAGESTREAM IMAGETYPE OPTIONS)               (* ; "Edited 26-Sep-2025 23:02 by rmk")
+                                                             (* ; "Edited 19-Sep-2025 07:33 by rmk")
+
+    (* ;; "Make a scratch postscript stream, then convert it to a PDF that is stored in the caller's IMAGESTREAM (which may have been opened with some postscript preamble, which we discard)")
+
+    (PS-TO-PDF (TEDIT.TO.IMAGEFILE FILE (OPENSTREAM '{NODIRCORE} 'OUTPUT)
+                      'POSTSCRIPT OPTIONS)
+           IMAGESTREAM])
 
 (PDF.FONTSAVAILABLE
   [LAMBDA (FONTSPEC)                                         (* ; "Edited 23-Aug-2025 10:53 by rmk")
@@ -162,121 +181,156 @@
 (DEFINEQ
 
 (OPEN-PDF-STREAM
-  [LAMBDA (FILE OPTIONS)                                     (* ; "Edited  5-Jun-2025 08:41 by rmk")
+  [LAMBDA (FILE OPTIONS)                                     (* ; "Edited 14-Sep-2025 11:15 by rmk")
+                                                             (* ; "Edited  5-Jun-2025 08:41 by rmk")
                                                              (* ; "Edited 23-Feb-2025 12:18 by rmk")
                                                              (* ; "Edited 23-Sep-2023 15:38 by rmk")
                                                              (* ; "Edited 22-Sep-2023 11:04 by rmk")
                                                              (* ; "Edited 24-Jun-2023 14:49 by rmk")
 
-    (* ;; "Open a temporary PS file, but set it up so that at closing it gets converted to PDF using an operating-system utility (if available), and then gets renamed to the original intended filename.")
+    (* ;; "Open FILE as a postscript file, but with IMAGETYPE=PDF and a closefn that calls PS-TO-PDF after the PS file closefn.")
 
-    (* ;; "We have to stash the original filename someplace.  We could put it in the tmp filename and then parse it out, but then we would have to worry about how unix filenames might parse against our {, },  etc.  ")
-
-    (* ;; 
-    "Simplest thing for now is to just add an extra field at the end of the \POSTSCRIPTDATA record.")
-
-    (if [AND NIL (EQ 'LPT (FILENAMEFIELD FILE 'HOST]
-        then 
-             (* ;; "If FILE is on the LPT device, we could just ssume that it can be printed directly, no point in converting.  But then we would alo have to lie and give it a PDF extension so it thinks that we are heading to a PDF printer.")
-
-             (OPENPOSTSCRIPTSTREAM FILE OPTIONS)
-      elseif (EQ 'NULL (FILENAMEFIELD (TRUEFILENAME FILE)
-                              'HOST))
-        then 
-             (* ;; "Device NULL used by TMAX, maybe others, to get page number for table of contents, index.  Nothing to convert")
-
-             (OPENPOSTSCRIPTSTREAM FILE OPTIONS)
-      elseif (SETQ FILE (OR [AND (NEQ FILE T)
-                                 (OR (OUTFILEP FILE)
-                                     (OPENSTREAM FILE 'OUTPUT]
-                            (ERROR "PDF target file not found" FILE)))
-        then (CL:UNLESS (ASSOC (PDFCONVERTER)
-                               PDF-CONVERTER-TEMPLATES)
-                    (ERROR "Can't find a POSTSCRIPT-to-PDF converter"))
-             (LET ((PSSTREAM (OPENPOSTSCRIPTSTREAM (CONCAT "{UNIX}/tmp/medley-pdf-" (IDATE)
-                                                          "-"
-                                                          (RAND)
-                                                          ".ps")
-                                    OPTIONS)))
-                  (STREAMPROP PSSTREAM 'AFTERCLOSE (CONS (FUNCTION CLOSE-PDF-STREAM)))
-                  (STREAMPROP PSSTREAM 'PDFTARGETINFO FILE)
-                  PSSTREAM])
+    (DECLARE (GLOBALVARS \PDFIMAGEOPS))
+    (CL:UNLESS (ASSOC (PDFCONVERTER)
+                      PDF-CONVERTER-TEMPLATES)
+           (ERROR "Can't find a POSTSCRIPT-to-PDF converter"))
+    (LET ((STRM (OPENPOSTSCRIPTSTREAM FILE OPTIONS)))
+         (replace (STREAM IMAGEOPS) of STRM with \PDFIMAGEOPS)
+         STRM])
 
 (CLOSE-PDF-STREAM
-  [LAMBDA (PSSTREAM)                                         (* ; "Edited 22-Sep-2023 11:18 by rmk")
+  [LAMBDA (PSSTREAM)                                         (* ; "Edited 27-Sep-2025 14:02 by rmk")
+                                                             (* ; "Edited 19-Sep-2025 14:16 by rmk")
+                                                             (* ; "Edited 14-Sep-2025 12:16 by rmk")
+                                                             (* ; "Edited 22-Sep-2023 11:18 by rmk")
                                                              (* ; "Edited 24-Jul-2023 10:37 by rmk")
                                                              (* ; "Edited 17-Jul-2023 22:32 by rmk")
                                                              (* ; "Edited 24-Jun-2023 13:57 by rmk")
-
-    (* ;; "PSSTREAM is a postscript (maybe in tmp) rendition of what is intended to end up as a pdf.  If we are going directly to a printer, we can probably just pass it along without worrying about conversion.  In fact, in that case we probably should not have bothered even setting up the PDF stream.")
-
-    (* ;; "But for a file we execute the PDFCONVERTER as a shell command to make a pdf, and then we rename it to the intended filename")
-
-    (STREAMPROP PSSTREAM 'AFTERCLOSE NIL)                    (* ; 
-                                             "Maybe just remove  only CLOSE-PDF-STREAMfrom the list?")
-    (LET ((TARGETINFO (STREAMPROP PSSTREAM 'PDFTARGETINFO NIL)))
-         (CL:IF TARGETINFO
-             (RENAMEFILE (PS-TO-PDF PSSTREAM)
-                    TARGETINFO)
-             PSSTREAM)])
+                                                             (* ; 
+                                                             "Don't run again  for internal closing")
+    (CL:WHEN (IMAGESTREAMTYPE PSSTREAM 'PDF)                 (* ; 
+                                               "If it's still a PDF stream, it hasn't been converted")
+        (CLOSEPOSTSCRIPTSTREAM PSSTREAM)
+        (replace (STREAM IMAGEOPS) of PSSTREAM with \NOIMAGEOPS)
+                                                             (* ; 
+                                                             "Don't run again  for internal closing")
+        (CLOSEF? PSSTREAM)                                   (* ; "PS-TO-PDF wants it closed?")
+        (RESETLST
+            (LET (PDFSTREAM)                                 (* ; 
+                   "PS-TO-PDF returns a /tmp file if not given a PDFFILE, we copy it into our stream")
+                 [RESETSAVE (SETQ PDFSTREAM (OPENSTREAM (PS-TO-PDF (FULLNAME PSSTREAM)
+                                                               (OPENSTREAM '{NODIRCORE} 'OUTPUT))
+                                                   'INPUT))
+                        `(PROGN (DELFILE (CLOSEF? OLDVALUE]
+                 [RESETSAVE (SETQ PSSTREAM (OPENSTREAM PSSTREAM 'OUTPUT))
+                        `(PROGN (CLOSEF? OLDVALUE]
+                 (SETFILEPTR PSSTREAM 0)
+                 (SETFILEINFO PSSTREAM 'LENGTH 0)
+                 (COPYBYTES PDFSTREAM PSSTREAM 0 -1)
+                 (CLOSEF PSSTREAM))))])
 
 (PS-TO-PDF
-  [LAMBDA (PSFILE PDFFILE DONTDELETE)                        (* ; "Edited  1-Oct-2023 15:18 by rmk")
-                                                             (* ; "Edited 23-Sep-2023 22:54 by rmk")
+  [LAMBDA (PSFILE PDFFILE MAKEERRORFILE)                     (* ; "Edited 27-Sep-2025 16:51 by rmk")
+                                                             (* ; "Edited 19-Sep-2025 14:14 by rmk")
+                                                             (* ; "Edited 14-Sep-2025 09:44 by rmk")
+                                                             (* ; "Edited  1-Oct-2023 15:18 by rmk")
                                                              (* ; "Edited 23-Jul-2023 22:30 by rmk")
-                                                             (* ; "Edited 24-Jun-2023 15:01 by rmk")
                                                              (* ; "Edited 16-Jul-2022 13:06 by rmk")
-                                                             (* ; "Edited  8-Jul-2022 10:20 by rmk")
                                                              (* ; "Edited  7-May-2022 22:40 by rmk")
                                                             (* ; "Edited  7-Oct-2021 11:15 by rmk:")
 
-    (* ;; "PSFILE is the name of a closed PS file on a DSK/UNIX device.  This function uses the PDFCONVERTER utility to convert that to a parallel pdf file, which is then renamed to PDFFILE.  ")
+    (* ;; "PSFILE is a postscript file or stream whose contents are to be converted to a PDF-formatted file PDFFILE by means of a Shell PDFCONVERTER utility.")
 
-    (* ;; "DONTDELETE is just for debugging, keeps the /tmp/ files")
+    (* ;; "")
+
+    (* ;; "PSFILE may be a Medley filename or a stream that is recognized as a PS formatted file.  If its contents do not reside in the Unix file system, it will be copied to a /tmp/ file to be given to the Shell. The /tmp/ file may be deleted at the end.")
+
+    (* ;; "")
+
+    (* ;; "PDFFILE is NIL, a file name, or perhaps a stream to receive the pdf.")
+
+    (* ;; "     If NIL, a name is made by attaching PDF to PSFILE; a stream without a name goes to a scratch stream.")
+
+    (* ;; "")
 
-    (SETQ PSFILE (FULLNAME (TRUEFILENAME PSFILE)))
-    (CL:UNLESS (INFILEP PSFILE)
-           (ERROR "NO PS FILE TO CONVERT"))
     (CL:UNLESS (ASSOC (PDFCONVERTER)
                       PDF-CONVERTER-TEMPLATES)
-           (ERROR "A specified POSTSCRIPT-to-PDF converter cannot be found"))
-    (SETQ PDFFILE (if PDFFILE
-                      then (TRUEFILENAME PDFFILE)
-                    else (PACKFILENAME 'EXTENSION 'pdf 'BODY PSFILE)))
-    (LET ((ERRORFILE (PACKFILENAME 'EXTENSION 'error 'BODY PSFILE))
-          COMPLETIONCODE)
+           (ERROR "A POSTSCRIPT-to-PDF converter cannot be found for this system"))
+    (CL:UNLESS (POSTSCRIPTFILEP PSFILE)
+           (ERROR "NOT A POSTSCRIPT FILE" PSFILE))
+    (CL:UNLESS PDFFILE
+        (SETQ PDFFILE (if (STREAMP PSFILE)
+                          then (OPENSTREAM '{NODIRCORE} 'OUTPUT)
+                        else (PACKFILENAME 'VERSION NIL 'EXTENSION (CAR (EXTENSIONS.FOR.IMAGEFILETYPE
+                                                                         'PDF))
+                                    'BODY PSFILE))))
+    (CL:UNLESS (STREAMP PDFFILE)                             (* ; 
+                            "NOTE: if it doesn't eventually end up with PDF, the Shell won't open it")
+        [SETQ PDFFILE (PACKFILENAME 'BODY PDFFILE 'EXTENSION (CAR (EXTENSIONS.FOR.IMAGEFILETYPE
+                                                                   'PDF])
+    (RESETLST
+        [SETQ PDFFILE (CLOSEF (OPENSTREAM PDFFILE 'OUTPUT]   (* ; "Get the version etc")
 
-         (* ;; "PROCESS-COMMAND is currently from GITFNS.  Not sure whether ShellCommand in UNIXUTILS is appropriate.")
+        (* ;; "UNIX-FILE-NAME returns NIL if output doesn't reside in Unix, will copy an input file to /tmp if necessary.")
 
-         (* ;; 
-     "We have to map the filenames down to Unix conventions:  (not pseudohost or host, slashes, etc.")
+        (LET* ((PSNAMEU (UNIX-FILE-NAME PSFILE 'INPUT 'pdf))
+               (PDFNAMEU (UNIX-FILE-NAME PDFFILE 'OUTPUT))
+               (ERRORFILE (CL:IF MAKEERRORFILE
+                              (UNIX-FILE-NAME (OUTFILEP (PACKFILENAME 'HOST 'UNIX 'EXTENSION
+                                                               'error
+                                                               'BODY PDFNAMEU))
+                                     'OUTPUT)
+                              "/dev/null"))
+               COMPLETIONCODE)
 
-         [SETQ COMPLETIONCODE (PROCESS-COMMAND (CONCATLIST (SUBLIS
-                                                            `((PSFILE \, (SLASHIT (TRUEFILENAME
-                                                                                   PSFILE)
-                                                                                NIL T))
-                                                              (PDFFILE \, (SLASHIT (TRUEFILENAME
-                                                                                    PDFFILE)
-                                                                                 NIL T))
-                                                              (ERRORFILE \, (SLASHIT (TRUEFILENAME
-                                                                                      ERRORFILE)
-                                                                                   NIL T)))
-                                                            (ASSOC (PDFCONVERTER)
-                                                                   PDF-CONVERTER-TEMPLATES]
+              (* ;; "PROCESS-COMMAND is currently from GITFNS.  Not sure whether ShellCommand in UNIXUTILS is appropriate.")
 
-         (* ;; "Now use Medley names")
+              [SETQ COMPLETIONCODE (PROCESS-COMMAND (CONCATLIST (SUBLIS `((PSFILE \, PSNAMEU)
+                                                                          (PDFFILE \, PDFNAMEU)
+                                                                          (ERRORFILE \, ERRORFILE))
+                                                                       (ASSOC (PDFCONVERTER)
+                                                                              PDF-CONVERTER-TEMPLATES
+                                                                              ]
 
-         (CLOSEF? PSFILE)
-         (CL:UNLESS DONTDELETE (DELFILE PSFILE))
-         (CLOSEF? ERRORFILE)
-         (CL:WHEN (INFILEP ERRORFILE)
-             (CL:WHEN (IGREATERP (PROG1 (GETFILEINFO ERRORFILE 'LENGTH)
-                                     (CL:UNLESS DONTDELETE (DELFILE ERRORFILE)))
-                             0)
-                    (ERROR "Cannot create PDF file for " PDFFILE)))
-         (CL:WHEN (IGREATERP COMPLETIONCODE 0)
-                (ERROR "Cannot create PDF file for " PDFFILE))
-         PDFFILE])
+              (* ;; "Now use Medley names")
+
+              (CL:WHEN (IGREATERP COMPLETIONCODE 0)
+                  (CL:WHEN (AND MAKEERRORFILE (INFILEP ERRORFILE))
+                      (CLOSEF? ERRORFILE)
+                      (CL:WHEN (IGREATERP (GETFILEINFO ERRORFILE 'LENGTH)
+                                      0)
+                          (PRINTOUT T "See error file at " '%" ERRORFILE '%" T)))
+                  (ERROR "Cannot create PDF file for " PSFILE))
+              (if (STREAMP PDFFILE)
+                  then 
+                       (* ;; "Perhaps a scratch stream (NODIRCORE?)  to retrieve result. For sure it isn't in the unix file system")
+
+                       (OPENSTREAM PDFFILE 'OUTPUT)
+                       (SETFILEPTR PDFFILE 0)
+                       (SETFILEINFO PDFFILE 'LENGTH 0)
+                       (CLOSEF PDFFILE)
+                       (SETQ PDFNAMEU (PACKFILENAME 'HOST 'UNIX 'BODY PDFNAMEU))
+                       (PROG1 (COPYFILE PDFNAMEU PDFFILE)
+                              (DELFILE PDFNAMEU))
+                elseif (STRPOS "/tmp/" PDFNAMEU 1 NIL T)
+                  then 
+                       (* ;; "PDFILE must not have been in the Unix file system--a server or {CORE}?")
+
+                       (COPYFILE PDFNAMEU PDFFILE)
+                else 
+                     (* ;; 
+                     "PDFFILE presumably mapped to a Unix filesystem name, the Medley name is good.")
+
+                     (FULLNAME PDFFILE))))])
+)
+(DEFINEQ
+
+(PDF.POSTSCRIPT
+  [LAMBDA (PSFILE IMAGEFILE IMAGETYPE OPTIONS)               (* ; "Edited 18-Sep-2025 23:49 by rmk")
+
+    (* ;; "Can't pass OPTIONS, until the MAKEERROFILE flag goes away.")
+
+    (PS-TO-PDF PSFILE IMAGEFILE])
 )
 (DEFINEQ
 
@@ -304,9 +358,19 @@
                            (CAR (for TEMPLATE in PDF-CONVERTER-TEMPLATES
                                    thereis (ShellWhich (CAR TEMPLATE])
 )
+(DEFINEQ
+
+(\PDFINIT
+  [LAMBDA NIL                                                (* ; "Edited 14-Sep-2025 01:15 by rmk")
+    (SETQ \PDFIMAGEOPS (create IMAGEOPS using \POSTSCRIPTIMAGEOPS IMAGETYPE _ 'PDF IMCLOSEFN _
+                                              (FUNCTION CLOSE-PDF-STREAM])
+)
+
+(\PDFINIT)
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (3421 6457 (PDFFILEP 3431 . 4345) (PDF.HARDCOPYW 4347 . 4945) (PDF.TEXT 4947 . 5664) (
-PDF.TEDIT 5666 . 6033) (PDF.FONTSAVAILABLE 6035 . 6455)) (6897 14542 (OPEN-PDF-STREAM 6907 . 9628) (
-CLOSE-PDF-STREAM 9630 . 10917) (PS-TO-PDF 10919 . 14540)) (14543 15301 (SEE-PDF 14553 . 15299)) (15352
- 15636 (PDFCONVERTER 15362 . 15634)))))
+  (FILEMAP (NIL (3913 7493 (PDFFILEP 3923 . 5200) (PDF.HARDCOPYW 5202 . 5772) (PDF.TEXT 5774 . 6491) (
+PDF.TEDIT 6493 . 7069) (PDF.FONTSAVAILABLE 7071 . 7491)) (7933 17005 (OPEN-PDF-STREAM 7943 . 9093) (
+CLOSE-PDF-STREAM 9095 . 11443) (PS-TO-PDF 11445 . 17003)) (17006 17262 (PDF.POSTSCRIPT 17016 . 17260))
+ (17263 18021 (SEE-PDF 17273 . 18019)) (18072 18356 (PDFCONVERTER 18082 . 18354)) (18357 18669 (
+\PDFINIT 18367 . 18667)))))
 STOP
diff --git a/library/PDFSTREAM.LCOM b/library/PDFSTREAM.LCOM
index ed13f5a9..e2c2fc0a 100644
Binary files a/library/PDFSTREAM.LCOM and b/library/PDFSTREAM.LCOM differ
diff --git a/library/POSTSCRIPTSTREAM b/library/POSTSCRIPTSTREAM
index f088d9fe..2f005435 100644
--- a/library/POSTSCRIPTSTREAM
+++ b/library/POSTSCRIPTSTREAM
@@ -1,12 +1,12 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED "13-Oct-2025 18:05:08" {WMEDLEY}<library>POSTSCRIPTSTREAM.;55 260304 
+(FILECREATED "26-Nov-2025 14:33:44" {WMEDLEY}<library>POSTSCRIPTSTREAM.;57 260390 
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (FNS POSTSCRIPT.FONTCREATE)
+      :CHANGES-TO (VARS POSTSCRIPTSTREAMCOMS)
 
-      :PREVIOUS-DATE " 9-Oct-2025 21:16:27" {WMEDLEY}<library>POSTSCRIPTSTREAM.;53)
+      :PREVIOUS-DATE "13-Oct-2025 18:05:08" {WMEDLEY}<library>POSTSCRIPTSTREAM.;55)
 
 
 (PRETTYCOMPRINT POSTSCRIPTSTREAMCOMS)
@@ -154,6 +154,7 @@
                                           (OPTIMA (PALATINO 1))
                                           (TITAN (COURIER 1))
                                           (* (* 1]
+               (POSTSCRIPTCHARCOERCIONS NIL)
                (\POSTSCRIPT.MAX.WILD.FONTSIZE 72))
         [COMS (FNS POSTSCRIPTSEND)
               (ADDVARS (PRINTERTYPES ((POSTSCRIPT)
@@ -4335,6 +4336,8 @@
          (TITAN (COURIER 1))
          (* (* 1))))
 
+(RPAQ? POSTSCRIPTCHARCOERCIONS NIL)
+
 (RPAQ? \POSTSCRIPT.MAX.WILD.FONTSIZE 72)
 (DEFINEQ
 
@@ -4424,39 +4427,39 @@
 (ADDTOVAR LAMA POSTSCRIPT.PUTCOMMAND)
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (23388 33596 (POSTSCRIPT.INIT 23398 . 30202) (POSTSCRIPT.PUTRGBCOLOR 30204 . 31226) (
-\PSC.COLOR.TO.RGB 31228 . 33594)) (34582 69900 (PSCFONT.READFONT 34592 . 36500) (PSCFONT.SPELLFILE 
-36502 . 37315) (PSCFONT.COERCEFILE 37317 . 38889) (PSCFONTFROMCACHE.SPELLFILE 38891 . 39876) (
-PSCFONTFROMCACHE.COERCEFILE 39878 . 41530) (PSCFONT.WRITEFONT 41532 . 42547) (READ-AFM-FILE 42549 . 
-48420) (CONVERT-AFM-FILES 48422 . 49634) (POSTSCRIPT.GETFONTID 49636 . 51031) (POSTSCRIPT.FONTCREATE 
-51033 . 63927) (\POSTSCRIPT.SPECIALFONT.SCALEDWIDTHS 63929 . 66326) (POSTSCRIPT.FONTSAVAILABLE 66328
- . 68511) (POSTSCRIPT.FONTEXISTS? 68513 . 69898)) (69901 79624 (OPENPOSTSCRIPTSTREAM 69911 . 79290) (
-CLOSEPOSTSCRIPTSTREAM 79292 . 79622)) (79669 86491 (POSTSCRIPT.HARDCOPYW 79679 . 82786) (
-POSTSCRIPT.TEDIT 82788 . 83240) (POSTSCRIPT.TEXT 83242 . 83829) (POSTSCRIPTFILEP 83831 . 85319) (
-MAKEEPSFILE 85321 . 86489)) (86492 130066 (POSTSCRIPT.BITMAPSCALE 86502 . 88958) (
-POSTSCRIPT.CLOSESTRING 88960 . 89513) (POSTSCRIPT.ENDPAGE 89515 . 90406) (POSTSCRIPT.OUTSTR 90408 . 
-91625) (POSTSCRIPT.PUTBITMAPBYTES 91627 . 100098) (POSTSCRIPT.PUTCOMMAND 100100 . 101089) (
-POSTSCRIPT.SET-FAKE-LANDSCAPE 101091 . 105611) (POSTSCRIPT.SHOWACCUM 105613 . 107768) (
-POSTSCRIPT.STARTPAGE 107770 . 110302) (\POSTSCRIPTTAB 110304 . 111101) (\PS.BOUTFIXP 111103 . 112383) 
-(\PS.SCALEHACK 112385 . 115028) (\PS.SCALEREGION 115030 . 115590) (\SCALEDBITBLT.PSC 115592 . 119902) 
-(\SETPOS.PSC 119904 . 120385) (\SETXFORM.PSC 120387 . 122971) (\STRINGWIDTH.PSC 122973 . 123446) (
-\SWITCHFONTS.PSC 123448 . 128940) (\TERPRI.PSC 128942 . 130064)) (130101 183957 (\BITBLT.PSC 130111 . 
-130663) (\BLTSHADE.PSC 130665 . 135326) (\CHARWIDTH.PSC 135328 . 135835) (\CREATECHARSET.PSC 135837 . 
-137193) (\DRAWARC.PSC 137195 . 139573) (\DRAWCIRCLE.PSC 139575 . 141826) (\DRAWCURVE.PSC 141828 . 
-145672) (\DRAWELLIPSE.PSC 145674 . 148038) (\DRAWLINE.PSC 148040 . 150780) (\DRAWPOINT.PSC 150782 . 
-151358) (\DRAWPOLYGON.PSC 151360 . 154489) (\DSPBOTTOMMARGIN.PSC 154491 . 155178) (
-\DSPCLIPPINGREGION.PSC 155180 . 156555) (\DSPCOLOR.PSC 156557 . 157488) (\DSPFONT.PSC 157490 . 161127)
- (\DSPLEFTMARGIN.PSC 161129 . 161815) (\DSPLINEFEED.PSC 161817 . 162407) (\DSPPUSHSTATE.PSC 162409 . 
-163869) (\DSPPOPSTATE.PSC 163871 . 167356) (\DSPRESET.PSC 167358 . 168023) (\DSPRIGHTMARGIN.PSC 168025
- . 168714) (\DSPROTATE.PSC 168716 . 169715) (\DSPSCALE.PSC 169717 . 170669) (\DSPSCALE2.PSC 170671 . 
-171511) (\DSPSPACEFACTOR.PSC 171513 . 172434) (\DSPTOPMARGIN.PSC 172436 . 173007) (\DSPTRANSLATE.PSC 
-173009 . 175040) (\DSPXPOSITION.PSC 175042 . 175606) (\DSPYPOSITION.PSC 175608 . 176199) (
-\FILLCIRCLE.PSC 176201 . 178426) (\FILLPOLYGON.PSC 178428 . 181665) (\FIXLINELENGTH.PSC 181667 . 
-182986) (\MOVETO.PSC 182988 . 183758) (\NEWPAGE.PSC 183760 . 183955)) (184013 206159 (
-\POSTSCRIPT.CHANGECHARSET 184023 . 184741) (\POSTSCRIPT.OUTCHARFN 184743 . 197013) (
-\POSTSCRIPT.PRINTSLUG 197015 . 198739) (\POSTSCRIPT.SPECIALOUTCHARFN 198741 . 201092) (\UPDATE.PSC 
-201094 . 202340) (\POSTSCRIPT.ACCENTFN 202342 . 203284) (\POSTSCRIPT.ACCENTPAIR 203286 . 206157)) (
-206257 207902 (\PSC.SPACEDISP 206267 . 206546) (\PSC.SPACEWID 206548 . 207167) (\PSC.SYMBOLS 207169 . 
-207900)) (208011 211002 (\POSTSCRIPT.NSHASH 208021 . 211000)) (256412 257118 (POSTSCRIPTSEND 256422 . 
-257116)))))
+  (FILEMAP (NIL (23433 33641 (POSTSCRIPT.INIT 23443 . 30247) (POSTSCRIPT.PUTRGBCOLOR 30249 . 31271) (
+\PSC.COLOR.TO.RGB 31273 . 33639)) (34627 69945 (PSCFONT.READFONT 34637 . 36545) (PSCFONT.SPELLFILE 
+36547 . 37360) (PSCFONT.COERCEFILE 37362 . 38934) (PSCFONTFROMCACHE.SPELLFILE 38936 . 39921) (
+PSCFONTFROMCACHE.COERCEFILE 39923 . 41575) (PSCFONT.WRITEFONT 41577 . 42592) (READ-AFM-FILE 42594 . 
+48465) (CONVERT-AFM-FILES 48467 . 49679) (POSTSCRIPT.GETFONTID 49681 . 51076) (POSTSCRIPT.FONTCREATE 
+51078 . 63972) (\POSTSCRIPT.SPECIALFONT.SCALEDWIDTHS 63974 . 66371) (POSTSCRIPT.FONTSAVAILABLE 66373
+ . 68556) (POSTSCRIPT.FONTEXISTS? 68558 . 69943)) (69946 79669 (OPENPOSTSCRIPTSTREAM 69956 . 79335) (
+CLOSEPOSTSCRIPTSTREAM 79337 . 79667)) (79714 86536 (POSTSCRIPT.HARDCOPYW 79724 . 82831) (
+POSTSCRIPT.TEDIT 82833 . 83285) (POSTSCRIPT.TEXT 83287 . 83874) (POSTSCRIPTFILEP 83876 . 85364) (
+MAKEEPSFILE 85366 . 86534)) (86537 130111 (POSTSCRIPT.BITMAPSCALE 86547 . 89003) (
+POSTSCRIPT.CLOSESTRING 89005 . 89558) (POSTSCRIPT.ENDPAGE 89560 . 90451) (POSTSCRIPT.OUTSTR 90453 . 
+91670) (POSTSCRIPT.PUTBITMAPBYTES 91672 . 100143) (POSTSCRIPT.PUTCOMMAND 100145 . 101134) (
+POSTSCRIPT.SET-FAKE-LANDSCAPE 101136 . 105656) (POSTSCRIPT.SHOWACCUM 105658 . 107813) (
+POSTSCRIPT.STARTPAGE 107815 . 110347) (\POSTSCRIPTTAB 110349 . 111146) (\PS.BOUTFIXP 111148 . 112428) 
+(\PS.SCALEHACK 112430 . 115073) (\PS.SCALEREGION 115075 . 115635) (\SCALEDBITBLT.PSC 115637 . 119947) 
+(\SETPOS.PSC 119949 . 120430) (\SETXFORM.PSC 120432 . 123016) (\STRINGWIDTH.PSC 123018 . 123491) (
+\SWITCHFONTS.PSC 123493 . 128985) (\TERPRI.PSC 128987 . 130109)) (130146 184002 (\BITBLT.PSC 130156 . 
+130708) (\BLTSHADE.PSC 130710 . 135371) (\CHARWIDTH.PSC 135373 . 135880) (\CREATECHARSET.PSC 135882 . 
+137238) (\DRAWARC.PSC 137240 . 139618) (\DRAWCIRCLE.PSC 139620 . 141871) (\DRAWCURVE.PSC 141873 . 
+145717) (\DRAWELLIPSE.PSC 145719 . 148083) (\DRAWLINE.PSC 148085 . 150825) (\DRAWPOINT.PSC 150827 . 
+151403) (\DRAWPOLYGON.PSC 151405 . 154534) (\DSPBOTTOMMARGIN.PSC 154536 . 155223) (
+\DSPCLIPPINGREGION.PSC 155225 . 156600) (\DSPCOLOR.PSC 156602 . 157533) (\DSPFONT.PSC 157535 . 161172)
+ (\DSPLEFTMARGIN.PSC 161174 . 161860) (\DSPLINEFEED.PSC 161862 . 162452) (\DSPPUSHSTATE.PSC 162454 . 
+163914) (\DSPPOPSTATE.PSC 163916 . 167401) (\DSPRESET.PSC 167403 . 168068) (\DSPRIGHTMARGIN.PSC 168070
+ . 168759) (\DSPROTATE.PSC 168761 . 169760) (\DSPSCALE.PSC 169762 . 170714) (\DSPSCALE2.PSC 170716 . 
+171556) (\DSPSPACEFACTOR.PSC 171558 . 172479) (\DSPTOPMARGIN.PSC 172481 . 173052) (\DSPTRANSLATE.PSC 
+173054 . 175085) (\DSPXPOSITION.PSC 175087 . 175651) (\DSPYPOSITION.PSC 175653 . 176244) (
+\FILLCIRCLE.PSC 176246 . 178471) (\FILLPOLYGON.PSC 178473 . 181710) (\FIXLINELENGTH.PSC 181712 . 
+183031) (\MOVETO.PSC 183033 . 183803) (\NEWPAGE.PSC 183805 . 184000)) (184058 206204 (
+\POSTSCRIPT.CHANGECHARSET 184068 . 184786) (\POSTSCRIPT.OUTCHARFN 184788 . 197058) (
+\POSTSCRIPT.PRINTSLUG 197060 . 198784) (\POSTSCRIPT.SPECIALOUTCHARFN 198786 . 201137) (\UPDATE.PSC 
+201139 . 202385) (\POSTSCRIPT.ACCENTFN 202387 . 203329) (\POSTSCRIPT.ACCENTPAIR 203331 . 206202)) (
+206302 207947 (\PSC.SPACEDISP 206312 . 206591) (\PSC.SPACEWID 206593 . 207212) (\PSC.SYMBOLS 207214 . 
+207945)) (208056 211047 (\POSTSCRIPT.NSHASH 208066 . 211045)) (256498 257204 (POSTSCRIPTSEND 256508 . 
+257202)))))
 STOP
diff --git a/library/POSTSCRIPTSTREAM.LCOM b/library/POSTSCRIPTSTREAM.LCOM
index c29c0a4f..54529f31 100644
Binary files a/library/POSTSCRIPTSTREAM.LCOM and b/library/POSTSCRIPTSTREAM.LCOM differ
diff --git a/library/UNIXPRINT b/library/UNIXPRINT
index ef61abe4..f6596ff3 100644
--- a/library/UNIXPRINT
+++ b/library/UNIXPRINT
@@ -1,16 +1,15 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED "20-Jan-2023 22:44:05" {DSK}<home>frank>il>medley>gmedley>library>UNIXPRINT.;4 13651  
+(FILECREATED "13-Sep-2025 20:28:22" 
+{DSK}<Users>kaplan>Local>medley3.5>working-medley>library>UNIXPRINT.;4 13582  
 
-      :CHANGES-TO (VARS UNIXPRINTCOMS)
+      :EDIT-BY rmk
 
-      :PREVIOUS-DATE "18-Jan-2023 13:28:36" {DSK}<home>frank>il>medley>gmedley>library>UNIXPRINT.;3
-)
+      :CHANGES-TO (FNS UnixPrint)
 
+      :PREVIOUS-DATE "13-Sep-2025 20:27:21" 
+{DSK}<Users>kaplan>Local>medley3.5>working-medley>library>UNIXPRINT.;3)
 
-(* ; "
-Copyright (c) 1990-1993, 1995, 1997, 1999, 2001, 2018, 2023 by Venue.
-")
 
 (PRETTYCOMPRINT UNIXPRINTCOMS)
 
@@ -48,7 +47,9 @@ Copyright (c) 1990-1993, 1995, 1997, 1999, 2001, 2018, 2023 by Venue.
                             (CDR x])
 
 (UnixPrint
-  [LAMBDA (HOST FILE PRINTOPTIONS)                          (* ; "Edited  7-Dec-2001 14:55 by rmk:")
+  [LAMBDA (HOST FILE PRINTOPTIONS)                           (* ; "Edited 13-Sep-2025 20:28 by rmk")
+                                                             (* ; "Edited 11-Sep-2025 20:48 by rmk")
+                                                            (* ; "Edited  7-Dec-2001 14:55 by rmk:")
                                                            (* ; "Edited 20-May-92 14:13 by nilsson")
 
     (* ;; "Given a print FILE, use the Unix %"lpr%" command to spool it to a printer.")
@@ -88,58 +89,56 @@ Copyright (c) 1990-1993, 1995, 1997, 1999, 2001, 2018, 2023 by Venue.
 
      (* ;; "The temp file's name will be of the form medleyprint.<idate>, so all such files can be found for deletion on a subsequent call after a certain amount of time (2 minutes) has gone by.  If we delete immediately, it may happen before lpr has done its thing.  ")
 
-     (CL:MULTIPLE-VALUE-BIND (tmpstream tmpname)
-         (UnixTempFile 'medleyprint.)
-       (COND
-          (tmpstream 
+     (CL:MULTIPLE-VALUE-BIND
+      (tmpstream tmpname)
+      (UnixTempFile 'medleyprint.)
+      (COND
+         (tmpstream 
 
-                 (* ;; "First, copy the lisp file to /tmp so lpr can find it.")
+                (* ;; "First, copy the lisp file to /tmp so lpr can find it.")
 
-                 [CL:WITH-OPEN-STREAM
-                  (out tmpstream)
-                  (CL:WITH-OPEN-STREAM
-                   (in (OPENSTREAM FILE 'INPUT))
-                   (printout PROMPTWINDOW .TAB0 0 "Spooling output to Unix printer"
-                          (COND
-                             (PRINTER (CONCAT " '" PRINTER "'"))
-                             (T ""))
-                          "...")
-                   (IF NSIDES
-                       THEN 
-                            (* ;; "Have to put magic simplex/duplex stuff in the tmp file itself, after the first line, cause there is no other way to control some duplex printers.")
+                [CL:WITH-OPEN-STREAM
+                 (out tmpstream)
+                 (CL:WITH-OPEN-STREAM
+                  (in (OPENSTREAM FILE 'INPUT))
+                  (printout PROMPTWINDOW .TAB0 0 "Sending output to Unix printer" (OR PRINTER "")
+                         "...")
+                  (IF NSIDES
+                      THEN 
+                           (* ;; "Have to put magic simplex/duplex stuff in the tmp file itself, after the first line, cause there is no other way to control some duplex printers.")
 
-                            (BIND C SAWCR
-                               DO (SETQ C (BIN in))
-                                  (IF (MEMB C (CHARCODE (CR LF)))
-                                      THEN (BOUT out C)
-                                           (SETQ SAWCR T)
-                                    ELSEIF SAWCR
-                                      THEN 
-                                           (* ;; "First char of 2nd line:  nonCR/LF after CR/LF")
+                           (BIND C SAWCR
+                              DO (SETQ C (BIN in))
+                                 (IF (MEMB C (CHARCODE (CR LF)))
+                                     THEN (BOUT out C)
+                                          (SETQ SAWCR T)
+                                   ELSEIF SAWCR
+                                     THEN 
+                                          (* ;; "First char of 2nd line:  nonCR/LF after CR/LF")
 
-                                           (* ;; "Put out simplex header, then print character in C")
+                                          (* ;; "Put out simplex header, then print character in C")
 
-                                           (PRINTOUT out "%%BeginSetup" T)
-                                           (PRINTOUT out "[{" T "%%%%BeginFeature: *Duplex Simplex" T
-                                                  "<< /Duplex " (CL:IF (EQ NSIDES 1)
-                                                                    "false"
-                                                                    "true")
-                                                  " /Tumble false >> setpagedevice" T 
-                                                  "%%%%EndFeature" T "} stopped cleartomark" T)
-                                           (PRINTOUT out "%%EndSetup" T)
-                                           (BOUT out C)
-                                           (COPYCHARS in out (GETFILEPTR in)
-                                                  -1)
-                                           (RETURN)
-                                    ELSE (BOUT out C)))
-                     ELSE (COPYCHARS in out 0 -1]
+                                          (PRINTOUT out "%%BeginSetup" T)
+                                          (PRINTOUT out "[{" T "%%%%BeginFeature: *Duplex Simplex" T
+                                                 "<< /Duplex " (CL:IF (EQ NSIDES 1)
+                                                                   "false"
+                                                                   "true")
+                                                 " /Tumble false >> setpagedevice" T "%%%%EndFeature"
+                                                 T "} stopped cleartomark" T)
+                                          (PRINTOUT out "%%EndSetup" T)
+                                          (BOUT out C)
+                                          (COPYCHARS in out (GETFILEPTR in)
+                                                 -1)
+                                          (RETURN)
+                                   ELSE (BOUT out C)))
+                    ELSE (COPYCHARS in out 0 -1]
 
-                 (* ;; "Now make Unix print the /tmp file.")
+                (* ;; "Now make Unix print the /tmp file.")
 
-                 (ShellCommand (UnixPrintCommand PRINTER COPIES NAME tmpname)
-                        PROMPTWINDOW)
-                 (printout PROMPTWINDOW "done" T))
-          (T (ERROR "Couldn't create unix temp file"))))]
+                (ShellCommand (UnixPrintCommand PRINTER COPIES NAME tmpname)
+                       PROMPTWINDOW)
+                (printout PROMPTWINDOW "done" T))
+         (T (ERROR "Couldn't create unix temp file"]
     T])
 
 (UnixShellQuote
@@ -303,9 +302,8 @@ Copyright (c) 1990-1993, 1995, 1997, 1999, 2001, 2018, 2023 by Venue.
 
 (ADDTOVAR LAMA )
 )
-(PUTPROPS UNIXPRINT COPYRIGHT ("Venue" 1990 1991 1992 1993 1995 1997 1999 2001 2018 2023))
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (1389 11216 (InstallUnixPrinter 1399 . 1991) (UnixPrint 1993 . 6875) (UnixShellQuote 
-6877 . 8306) (UnixTempFile 8308 . 9531) (UnixPrintCommand 9533 . 11214)) (11550 13243 (
-UnixPrintCommand 11560 . 13241)))))
+  (FILEMAP (NIL (1354 11238 (InstallUnixPrinter 1364 . 1956) (UnixPrint 1958 . 6897) (UnixShellQuote 
+6899 . 8328) (UnixTempFile 8330 . 9553) (UnixPrintCommand 9555 . 11236)) (11572 13265 (
+UnixPrintCommand 11582 . 13263)))))
 STOP
diff --git a/library/UNIXPRINT.DFASL b/library/UNIXPRINT.DFASL
index ecfaa505..44fc136b 100644
Binary files a/library/UNIXPRINT.DFASL and b/library/UNIXPRINT.DFASL differ
diff --git a/library/sketch/SKETCH-OPS b/library/sketch/SKETCH-OPS
index 506f20db..90871971 100644
--- a/library/sketch/SKETCH-OPS
+++ b/library/sketch/SKETCH-OPS
@@ -1,12 +1,12 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED " 5-Dec-2023 00:08:46" {WMEDLEY}<library>sketch>SKETCH-OPS.;1 221752 
+(FILECREATED "29-Nov-2025 21:49:05" {WMEDLEY}<library>sketch>SKETCH-OPS.;8 220561 
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (RECORDS AFFINETRANSFORMATION SKHISTEVENT SKEVENTTYPE SKETCHVIEW)
+      :CHANGES-TO (FNS SK.UNDO.LAST)
 
-      :PREVIOUS-DATE " 3-May-2023 21:06:28" {WMEDLEY}<library>sketch>SKETCHOPS.;2)
+      :PREVIOUS-DATE " 6-Nov-2025 23:30:20" {WMEDLEY}<library>sketch>SKETCH-OPS.;6)
 
 
 (PRETTYCOMPRINT SKETCH-OPSCOMS)
@@ -17,9 +17,8 @@
         (COMS 
               (* ;; "miscellaneous utility functions")
 
-              (FNS SK.FONTNAMELIST SCALE.REGION.OUT SK.SCALE.POSITION.INTO.VIEWER 
-                   SK.SCALE.POSITION.INTO.VIEWER.EXACT SK.MAKE.POSITION.INTEGER 
-                   SCALE.POSITION.INTO.SKETCHW UNSCALE UNSCALE.REGION)
+              (FNS SCALE.REGION.OUT SK.SCALE.POSITION.INTO.VIEWER SK.SCALE.POSITION.INTO.VIEWER.EXACT
+                   SK.MAKE.POSITION.INTEGER SCALE.POSITION.INTO.SKETCHW UNSCALE UNSCALE.REGION)
               
               (* ;; "misc IO functions")
 
@@ -45,9 +44,8 @@
                     (FNS SKETCHW.HARDCOPYFN SK.LIST.IMAGE SK.HARDCOPYIMAGEW)
                     (FNS SK.DO.HARDCOPYIMAGEW.TOFILE SK.HARDCOPYIMAGEW.TOFILE 
                          SK.HARDCOPYIMAGEW.TOPRINTER SK.LIST.IMAGE.ON.FILE)
-                    (FNS \SK.LIST.PAGE.IMAGE SK.GetImageFile SK.PRINTER.FILE.CANDIDATE.NAME 
-                         SK.SET.HARDCOPY.MODE SK.UNSET.HARDCOPY.MODE SK.UPDATE.AFTER.HARDCOPY 
-                         DEFAULTPRINTINGIMAGETYPE SK.SWITCH.REGION.X.AND.Y)
+                    (FNS \SK.LIST.PAGE.IMAGE SK.PRINTER.FILE.CANDIDATE.NAME SK.SET.HARDCOPY.MODE 
+                         SK.UNSET.HARDCOPY.MODE SK.UPDATE.AFTER.HARDCOPY SK.SWITCH.REGION.X.AND.Y)
                     (CONSTANTS MICASPERPT IMICASPERPT PTSPERMICA)))
         (COMS 
               (* ;; "fns to implement transformations on the elements")
@@ -140,8 +138,8 @@
                    SK.NAME.CURRENT.VIEW SKETCH.ADD.VIEW SK.RESTORE.VIEW SK.FORGET.VIEW)
               (DECLARE%: DONTCOPY (RECORDS SKETCHVIEW)))
         (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY (FILES (LOADCOMP)
-                                                                SKETCH SKETCHELEMENTS SKETCHOBJ 
-                                                                SKETCHEDIT INTERPRESS))
+                                                                SKETCH SKETCH-ELEMENTS SKETCH-OBJ 
+                                                                SKETCH-EDIT INTERPRESS))
         (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA)
                                                                              (NLAML)
                                                                              (LAMA STATUSPRINT])
@@ -157,12 +155,6 @@
 
 (DEFINEQ
 
-(SK.FONTNAMELIST
-  [LAMBDA (FONTDESC)                                         (* rrb " 2-NOV-83 21:00")
-    (LIST (FONTPROP FONTDESC 'FAMILY)
-          (FONTPROP FONTDESC 'SIZE)
-          (FONTPROP FONTDESC 'FACE])
-
 (SCALE.REGION.OUT
   [LAMBDA (REGION SCALE)                                     (* rrb "30-Dec-85 17:24")
 
@@ -700,7 +692,8 @@
 (DEFINEQ
 
 (SKETCHW.HARDCOPYFN
-  [LAMBDA (SKETCHW OPENIMAGESTREAM)                          (* ; "Edited 20-Aug-92 13:33 by jds")
+  [LAMBDA (SKETCHW OPENIMAGESTREAM)                          (* ; "Edited  3-Nov-2025 19:55 by rmk")
+                                                             (* ; "Edited 20-Aug-92 13:33 by jds")
                                                              (* ; 
                                                              "dumps the sketch onto OPENIMAGESTREAM.")
                                                              (* ; 
@@ -728,7 +721,9 @@
 
      (* ;; "PAGETOSKETCHFACTOR is the factor to multiply the page coordinates by to get into sketch coordinates.")
 
-          (STATUSPRINT SKETCHW "Hardcopying ...")
+          (STATUSPRINT SKETCHW "Hardcopying" (CL:UNLESS (STREAMP (FULLNAME OPENIMAGESTREAM))
+                                                 (CONCAT " to " (FULLNAME OPENIMAGESTREAM)))
+                 " ...")
           [STREAMPROP OPENIMAGESTREAM 'PRINTOPTIONS (APPEND (LIST 'DOCUMENT.NAME (OR (SKETCH.TITLE
                                                                                       SKETCHW)
                                                                                      "A Sketch"))
@@ -950,15 +945,12 @@
 (DEFINEQ
 
 (SK.DO.HARDCOPYIMAGEW.TOFILE
-  [LAMBDA (W)                                                (* rrb " 5-May-86 13:38")
-                                                             (* sketch version of 
-                                                             HARDCOPYIMAGEW.TOFILE that accepts a 
-                                                             candidate file name.)
-    (RESETFORM (TTY.PROCESS (THIS.PROCESS))
-           (LET [(FILE&TYPE (SK.GetImageFile (SK.PRINTER.FILE.CANDIDATE.NAME W]
-                (COND
-                   (FILE&TYPE (HARDCOPY.SOMEHOW W (CAR FILE&TYPE)
-                                     (CDR FILE&TYPE])
+  [LAMBDA (W)                                                (* ; "Edited  4-Nov-2025 21:47 by rmk")
+                                                             (* ; "Edited  3-Nov-2025 16:17 by rmk")
+                                                             (* rrb " 5-May-86 13:38")
+                                                             (* ; 
+                        "sketch version of HARDCOPYIMAGEW.TOFILE that accepts a candidate file name.")
+    (HARDCOPY.SOMEHOW W (GetImageFile (SK.PRINTER.FILE.CANDIDATE.NAME W])
 
 (SK.HARDCOPYIMAGEW.TOFILE
   [LAMBDA (SKW)                                              (* rrb " 5-May-86 13:34")
@@ -981,16 +973,16 @@
            'SketchHardcopy])
 
 (SK.LIST.IMAGE.ON.FILE
-  [LAMBDA (SKETCHW)                                          (* rrb " 5-May-86 13:39")
+  [LAMBDA (SKETCHW)                                          (* ; "Edited  4-Nov-2025 21:46 by rmk")
+                                                             (* ; "Edited  3-Nov-2025 16:20 by rmk")
+                                                             (* rrb " 5-May-86 13:39")
 
-         (* makes a file suitable for the default printing host of the current sketch.
-         Pretty dumb about file names.)
+    (* ;; "makes a file suitable for the default printing host of the current sketch.  Pretty dumb about file names.")
 
-    (RESETFORM (TTY.PROCESS (THIS.PROCESS))
-           (LET [(FILE&TYPE (SK.GetImageFile (SK.PRINTER.FILE.CANDIDATE.NAME SKETCHW]
-                (COND
-                   (FILE&TYPE (SK.LIST.IMAGE SKETCHW (CAR FILE&TYPE)
-                                     (CDR FILE&TYPE])
+    (LET [(FILE&TYPE (GetImageFile (SK.PRINTER.FILE.CANDIDATE.NAME SKETCHW]
+         (CL:WHEN FILE&TYPE
+             (SK.LIST.IMAGE SKETCHW (CAR FILE&TYPE)
+                    (CDR FILE&TYPE)))])
 )
 (DEFINEQ
 
@@ -1027,46 +1019,22 @@
                                    PAGETOSKETCHFACTOR OPENIMAGESTREAM T))
               (DRAW.LOCAL.SKETCH SKETCHX OPENIMAGESTREAM REGIONONPAGE])
 
-(SK.GetImageFile
-  [LAMBDA (CANDIDATE)                                        (* rrb " 5-May-86 10:41")
-                                                             (* version of GetImageFile that takes 
-                                                             a candidate name.)
-    (PROG ((FILE (PopUpWindowAndGetAtom "File name (CR to abort): " CANDIDATE))
-           PRINTFILETYPE FILETYPEMENU EXTENSIONSUPPLIED EXTENSIONFORTYPE)
-          (COND
-             ((NULL FILE)
-              (RETURN)))
-          (SETQ FILETYPEMENU (MakeMenuOfImageTypes "File type?"))
-          (COND
-             ((SETQ PRINTFILETYPE (PRINTFILETYPE.FROM.EXTENSION FILE))
-              (RETURN (CONS FILE PRINTFILETYPE)))
-             (T (SETQ PRINTFILETYPE (MENU FILETYPEMENU))
-                (COND
-                   ((NULL PRINTFILETYPE)
-                    (RETURN))
-                   (T (RETURN (CONS FILE PRINTFILETYPE])
-
 (SK.PRINTER.FILE.CANDIDATE.NAME
-  [LAMBDA (VIEWER)                                           (* rrb " 5-May-86 13:30")
+  [LAMBDA (VIEWER)                                           (* ; "Edited  3-Nov-2025 16:05 by rmk")
+                                                             (* rrb " 5-May-86 13:30")
+
+    (* ;; "Returns the preferred printer file name for a viewer.")
+
+    (* ;; "RMK:  Original had IP built in in some way, odd conditions, plus an unbound variable.  I assume that the extension of the filename is something like .SKETCH and not usually .IP (or now .PDF).  And that therefore the intent is really that the result should have the extension that the deffaultprinting host can print directly.")
 
          (* * returns the preferred printer file name for a viewer)
 
-    (PROG ((FILENAME (SK.OUTPUT.FILE.NAME (SKETCH.TITLE VIEWER)))
-           EXTENSION PRINTEXTENSION)
-          (OR FILENAME (RETURN))
-          [COND
-             ((EQ (SELECTQ (SETQ PRINTEXTENSION (DEFAULTPRINTINGIMAGETYPE))
-                      (INTERPRESS (SETQ PRINTEXTENSION 'IP))
-                      NIL)
-                  (FILENAMEFIELD FILENAME 'EXTENSION))
-
-         (* file name has a printer extension for some reason, propose either a null 
-         extension or hdcpy extension.)
-
-              (COND
-                 (PRINTEXTENSION (SETQ PRINTEREXTENSION NIL))
-                 (T (SETQ PRINTEREXTENSION 'HDCPY]
-          (RETURN (PACKFILENAME 'EXTENSION PRINTEXTENSION 'BODY FILENAME])
+    (LET ((FILENAME (SK.OUTPUT.FILE.NAME (SKETCH.TITLE VIEWER)))
+          PRINTEXTENSION)
+         (CL:WHEN [AND FILENAME (SETQ PRINTEXTENSION (CAR (EXTENSIONS.FOR.IMAGEFILETYPE (
+                                                                                   CAN.PRINT.DIRECTLY
+                                                                                         ]
+             (PACKFILENAME 'EXTENSION PRINTEXTENSION 'BODY FILENAME))])
 
 (SK.SET.HARDCOPY.MODE
   [LAMBDA (SKETCHW IMAGETYPE)                                (* rrb "28-Oct-85 16:43")
@@ -1121,15 +1089,6 @@
            (VIEWER.SCALE SKETCHW))
     (REDISPLAYW SKETCHW])
 
-(DEFAULTPRINTINGIMAGETYPE
-  [LAMBDA NIL                                                (* rrb "20-Mar-85 12:45")
-                                                             (* returns the image type of the 
-                                                             default printer.)
-                                                             (* code copied from OPENIMAGESTREAM)
-    (CAR (MKLIST (PRINTERPROP (PRINTERTYPE (OR (CAR (LISTP DEFAULTPRINTINGHOST))
-                                               DEFAULTPRINTINGHOST))
-                        'CANPRINT])
-
 (SK.SWITCH.REGION.X.AND.Y
   [LAMBDA (REGION)                                           (* rrb " 3-Sep-85 14:50")
                                                              (* switchs the X and Y dimensions of a 
@@ -1145,7 +1104,7 @@
 
 (RPAQQ IMICASPERPT 35)
 
-(RPAQQ PTSPERMICA 0.02834646)
+(RPAQQ PTSPERMICA 0.028346457)
 
 
 (CONSTANTS MICASPERPT IMICASPERPT PTSPERMICA)
@@ -2884,10 +2843,12 @@ If you meant this, you should use the TWO PT TRANSFORM.")
                   (STATUSPRINT SKW "Element subsequently modified, can't undo"])
 
 (SK.UNDO.LAST
-  [LAMBDA (SKW)                                              (* rrb " 5-Dec-85 17:19")
-                                                             (* undoes the first not yet undone 
-                                                             history event.)
+  [LAMBDA (SKW)                                              (* ; "Edited 29-Nov-2025 21:48 by rmk")
+                                                             (* rrb " 5-Dec-85 17:19")
+                                                             (* ; 
+                                                     "undoes the first not yet undone history event.")
     (SKED.CLEAR.SELECTION SKW)
+    (CLEARPROMPTWINDOW SKW)
     (PROG [EVENT UNDOFN (HISTLST (WINDOWPROP SKW 'SKETCHHISTORY]
           (COND
              ((NULL HISTLST)
@@ -2905,8 +2866,8 @@ If you meant this, you should use the TWO PT TRANSFORM.")
                              do (RETURN HISTEVENT)))
               (COND
                  ((APPLY* UNDOFN (fetch (SKHISTEVENT EVENTARGS) of EVENT)
-                         SKW EVENT)                          (* only add to history list if 
-                                                             something happened.)
+                         SKW EVENT)                          (* ; 
+                                                    "only add to history list if something happened.")
                   (STATUSPRINT SKW (SK.UNDO.NAME EVENT)
                          " event undone.")
                   (replace (SKHISTEVENT UNDONE?) of EVENT with T)
@@ -4094,7 +4055,7 @@ It can be either larger or smaller than the present window size.")
 (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY 
 
 (FILESLOAD (LOADCOMP)
-       SKETCH SKETCHELEMENTS SKETCHOBJ SKETCHEDIT INTERPRESS)
+       SKETCH SKETCH-ELEMENTS SKETCH-OBJ SKETCH-EDIT INTERPRESS)
 )
 (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS 
 
@@ -4105,85 +4066,84 @@ It can be either larger or smaller than the present window size.")
 (ADDTOVAR LAMA STATUSPRINT)
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (9853 14154 (SK.FONTNAMELIST 9863 . 10085) (SCALE.REGION.OUT 10087 . 11068) (
-SK.SCALE.POSITION.INTO.VIEWER 11070 . 11826) (SK.SCALE.POSITION.INTO.VIEWER.EXACT 11828 . 12370) (
-SK.MAKE.POSITION.INTEGER 12372 . 13040) (SCALE.POSITION.INTO.SKETCHW 13042 . 13434) (UNSCALE 13436 . 
-13564) (UNSCALE.REGION 13566 . 14152)) (14190 17888 (STATUSPRINT 14200 . 15562) (CLEARPROMPTWINDOW 
-15564 . 15971) (CLOSEPROMPTWINDOW 15973 . 16470) (MYGETPROMPTWINDOW 16472 . 17171) (PROMPT.GETINPUT 
-17173 . 17886)) (17946 28977 (SK.SEND.TO.BOTTOM 17956 . 18295) (SK.BRING.TO.TOP 18297 . 18665) (
-SK.SWITCH.PRIORITIES 18667 . 18993) (SK.SEL.AND.CHANGE.PRIORITY 18995 . 19563) (
-SK.SEL.AND.SWITCH.PRIORITIES 19565 . 21332) (SK.SORT.ELTS.BY.PRIORITY 21334 . 22055) (
-SK.SORT.GELTS.BY.PRIORITY 22057 . 22636) (SORT.CHANGESPECS.BY.NEW.PRIORITY 22638 . 23326) (
-SORT.CHANGESPECS.BY.OLD.PRIORITY 23328 . 24016) (SK.SEND.ELEMENTS.TO.BOTTOM 24018 . 25689) (
-SK.BRING.ELEMENTS.TO.TOP 25691 . 27375) (SK.COPY.GLOBAL.ELEMENT.AND.PROPERTY.LIST 27377 . 28975)) (
-28978 31834 (SK.ELEMENT.PRIORITY 28988 . 29316) (SK.SET.ELEMENT.PRIORITY 29318 . 30262) (
-SK.POP.NEXT.PRIORITY 30264 . 30607) (SK.PRIORITY.CELL 30609 . 30814) (SK.HIGH.PRIORITY 30816 . 31319) 
-(SK.LOW.PRIORITY 31321 . 31832)) (31897 38700 (DRAW.LOCAL.SKETCH 31907 . 32909) (SET.PRIORITYIMPORTANT
- 32911 . 33479) (SK.FIGUREIMAGE 33481 . 38698)) (38744 57418 (SKETCHW.HARDCOPYFN 38754 . 45959) (
-SK.LIST.IMAGE 45961 . 57068) (SK.HARDCOPYIMAGEW 57070 . 57416)) (57419 59376 (
-SK.DO.HARDCOPYIMAGEW.TOFILE 57429 . 58103) (SK.HARDCOPYIMAGEW.TOFILE 58105 . 58467) (
-SK.HARDCOPYIMAGEW.TOPRINTER 58469 . 58831) (SK.LIST.IMAGE.ON.FILE 58833 . 59374)) (59377 67301 (
-\SK.LIST.PAGE.IMAGE 59387 . 61819) (SK.GetImageFile 61821 . 62751) (SK.PRINTER.FILE.CANDIDATE.NAME 
-62753 . 63672) (SK.SET.HARDCOPY.MODE 63674 . 65059) (SK.UNSET.HARDCOPY.MODE 65061 . 65479) (
-SK.UPDATE.AFTER.HARDCOPY 65481 . 66189) (DEFAULTPRINTINGIMAGETYPE 66191 . 66781) (
-SK.SWITCH.REGION.X.AND.Y 66783 . 67299)) (67539 80436 (SK.SEL.AND.TRANSFORM 67549 . 67899) (
-SK.TRANSFORM.ELEMENTS 67901 . 69156) (SK.TRANSFORM.ITEM 69158 . 69959) (SK.TRANSFORM.ELEMENT 69961 . 
-70419) (SK.TRANSFORM.POINT 70421 . 70771) (SK.TRANSFORM.POINT.LIST 70773 . 70994) (SK.TRANSFORM.REGION
- 70996 . 73182) (SK.PUT.ELTS.ON.GRID 73184 . 73662) (SK.TRANSFORM.GLOBAL.ELEMENTS 73664 . 74166) (
-GLOBALELEMENTP 74168 . 74459) (SKETCH.LIST.OF.ELEMENTSP 74461 . 74765) (SK.TRANSFORM.SCALE.FACTOR 
-74767 . 76460) (SK.TRANSFORM.BRUSH 76462 . 76929) (SK.TRANSFORM.ARROWHEADS 76931 . 78522) (SCALE.BRUSH
- 78524 . 80434)) (80437 100629 (TWO.PT.TRANSFORMATION.INPUTFN 80447 . 83220) (SK.TWO.PT.TRANSFORM.ELTS
- 83222 . 83627) (SK.SEL.AND.TWO.PT.TRANSFORM 83629 . 84220) (SK.APPLY.AFFINE.TRANSFORM 84222 . 85341) 
-(SK.COMPUTE.TWO.PT.TRANSFORMATION 85343 . 89681) (SK.COMPUTE.SLOPE 89683 . 90448) (
-SK.THREE.PT.TRANSFORM.ELTS 90450 . 90861) (SK.COMPUTE.THREE.PT.TRANSFORMATION 90863 . 95400) (
-SK.SEL.AND.THREE.PT.TRANSFORM 95402 . 95999) (THREE.PT.TRANSFORMATION.INPUTFN 96001 . 100627)) (100630
- 104657 (SK.COPY.AND.TWO.PT.TRANSFORM.ELTS 100640 . 101059) (SK.SEL.COPY.AND.TWO.PT.TRANSFORM 101061
- . 101682) (SK.COPY.AND.THREE.PT.TRANSFORM.ELTS 101684 . 102113) (SK.SEL.COPY.AND.THREE.PT.TRANSFORM 
-102115 . 102739) (SK.COPY.AND.TRANSFORM.ELEMENTS 102741 . 103785) (SK.COPY.AND.TRANSFORM.ITEM 103787
- . 104655)) (106785 109980 (SK.SHOWMARKS 106795 . 107695) (MARKPOINT 107697 . 108417) (SK.MARKHOTSPOTS
- 108419 . 109494) (SK.MARK.SELECTION 109496 . 109978)) (110509 117287 (SK.SELECT.ITEM 110519 . 113179)
- (IN.SKETCH.ELT? 113181 . 115567) (SK.MARK.HOTSPOT 115569 . 116051) (SK.MARK.POSITION 116053 . 116490)
- (SK.SELECT.ELT 116492 . 116919) (SK.DESELECT.ELT 116921 . 117285)) (117430 130244 (SK.HOTSPOT.CACHE 
-117440 . 117784) (SK.HOTSPOT.CACHE.FOR.OPERATION 117786 . 119141) (SK.BUILD.CACHE 119143 . 119966) (
-SK.ELEMENT.PROTECTED? 119968 . 120561) (SK.HAS.SOME.HOTSPOTS 120563 . 121017) (SK.SET.HOTSPOT.CACHE 
-121019 . 121374) (SK.CREATE.HOTSPOT.CACHE 121376 . 121826) (SK.ELTS.FROM.HOTSPOT 121828 . 122668) (
-SK.ADD.HOTSPOTS.TO.CACHE 122670 . 123071) (SK.ADD.HOTSPOTS.TO.CACHE1 123073 . 123619) (
-SK.ADD.HOTSPOT.TO.CACHE 123621 . 125497) (SK.REMOVE.HOTSPOTS.FROM.CACHE 125499 . 125902) (
-SK.REMOVE.HOTSPOTS.FROM.CACHE1 125904 . 126422) (SK.REMOVE.HOTSPOT.FROM.CACHE 126424 . 126987) (
-SK.REMOVE.VALUE.FROM.CACHE.BUCKET 126989 . 127958) (SK.FIND.CACHE.BUCKET 127960 . 128549) (
-SK.ADD.VALUE.TO.CACHE.BUCKET 128551 . 130242)) (130272 149715 (SK.SET.GRID 130282 . 130703) (
-SK.DISPLAY.GRID 130705 . 131254) (SK.DISPLAY.GRID.POINTS 131256 . 131452) (SK.REMOVE.GRID.POINTS 
-131454 . 132257) (SK.TAKE.DOWN.GRID 132259 . 132570) (SK.SHOW.GRID 132572 . 136186) (SK.GRIDFACTOR 
-136188 . 136709) (SK.TURN.GRID.ON 136711 . 137039) (SK.TURN.GRID.OFF 137041 . 137399) (
-SK.MAKE.GRID.LARGER 137401 . 138133) (SK.MAKE.GRID.SMALLER 138135 . 138888) (SK.CHANGE.GRID 138890 . 
-139338) (GRID.FACTOR1 139340 . 139697) (LEASTPOWEROF2GT 139699 . 140473) (GREATESTPOWEROF2LT 140475 . 
-141090) (SK.DEFAULT.GRIDFACTOR 141092 . 141645) (SK.PUT.ON.GRID 141647 . 142205) (MAP.WINDOW.ONTO.GRID
- 142207 . 142641) (MAP.SCREEN.ONTO.GRID 142643 . 143131) (MAP.GLOBAL.PT.ONTO.GRID 143133 . 143515) (
-MAP.GLOBAL.REGION.ONTO.GRID 143517 . 145234) (MAP.WINDOW.POINT.ONTO.GLOBAL.GRID 145236 . 145779) (
-MAP.WINDOW.ONTO.GLOBAL.GRID 145781 . 146166) (SK.UPDATE.GRIDFACTOR 146168 . 146804) (
-SK.MAP.FROM.WINDOW.TO.GLOBAL.GRID 146806 . 147344) (SK.MAP.INPUT.PT.TO.GLOBAL 147346 . 148563) (
-SK.MAP.FROM.WINDOW.TO.NEAREST.GRID 148565 . 149713)) (149855 158278 (SK.ADD.HISTEVENT 149865 . 151000)
- (SK.SEL.AND.UNDO 151002 . 153916) (SK.UNDO.LAST 153918 . 155995) (SK.UNDO.NAME 155997 . 156501) (
-SKEVENTTYPEFNS 156503 . 156853) (SK.TYPE.OF.FIRST.ARG 156855 . 158276)) (158279 158965 (SK.DELETE.UNDO
- 158289 . 158718) (SK.ADD.UNDO 158720 . 158963)) (158966 165748 (SK.CHANGE.UNDO 158976 . 160959) (
-SK.ELT.IN.SKETCH? 160961 . 161215) (SK.CHANGE.REDO 161217 . 163085) (SK.MOVE.UNDO 163087 . 164480) (
-SK.MOVE.REDO 164482 . 165746)) (165749 167848 (SK.UNDO.UNDO 165759 . 167025) (SK.UNDO.MENULABEL 167027
- . 167422) (SK.LABEL.FROM.TYPE 167424 . 167846)) (168698 176540 (SHOW.GLOBAL.COORDS 168708 . 169257) (
-LOCATOR.CLOSEFN 169259 . 169544) (SKETCHW.FROM.LOCATOR 169546 . 169954) (SKETCHW.UPDATE.LOCATORS 
-169956 . 170542) (LOCATOR.UPDATE 170544 . 171302) (UPDATE.GLOBAL.LOCATOR 171304 . 172105) (
-UPDATE.GLOBALCOORD.LOCATOR 172107 . 172684) (ADD.GLOBAL.DISPLAY 172686 . 173603) (
-ADD.GLOBAL.GRIDDED.DISPLAY 173605 . 173864) (CREATE.GLOBAL.DISPLAYER 173866 . 174943) (
-UPDATE.GLOBAL.GRIDDED.COORD.LOCATOR 174945 . 176538)) (176747 189234 (DISPLAYREADCOLORHLSLEVELS 176757
- . 177593) (DISPLAYREADCOLORLEVEL 177595 . 178630) (DRAWREADCOLORBOX 178632 . 179621) (
-READ.CHANGE.COLOR 179623 . 179840) (READCOLOR1 179842 . 182756) (READCOLORCOMMANDMENUSELECTEDFN 182758
- . 183125) (READCOLOR2 183127 . 189232)) (189235 190694 (CREATE.CNS.MENU 189245 . 190692)) (190971 
-193681 (SK.ABSWXOFFSET 190981 . 191275) (SK.ABSWYOFFSET 191277 . 191571) (
-SK.UNSCALE.POSITION.FROM.VIEWER 191573 . 192142) (SK.SCALE.REGION 192144 . 193679)) (193720 208718 (
-VIEWER.SCALE 193730 . 194039) (SKETCH.ZOOM 194041 . 195076) (SAME.ASPECT.RATIO 195078 . 196442) (
-SKETCH.DO.ZOOM 196444 . 197649) (SKETCH.NEW.VIEW 197651 . 198166) (ZOOM.UPDATE.ELT 198168 . 199061) (
-SK.UPDATE.AFTER.SCALE.CHANGE 199063 . 200932) (SKETCH.AUTOZOOM 200934 . 205354) (
-SKETCH.GLOBAL.REGION.ZOOM 205356 . 208716)) (209355 221267 (SKETCH.HOME 209365 . 209892) (SK.FRAME.IT 
-209894 . 210486) (SK.FRAME.WINDOW.TO.SKETCH 210488 . 214334) (SK.MOVE.TO.VIEW 214336 . 215750) (
-SK.NAME.CURRENT.VIEW 215752 . 216862) (SKETCH.ADD.VIEW 216864 . 217957) (SK.RESTORE.VIEW 217959 . 
-219835) (SK.FORGET.VIEW 219837 . 221265)))))
+  (FILEMAP (NIL (9706 13783 (SCALE.REGION.OUT 9716 . 10697) (SK.SCALE.POSITION.INTO.VIEWER 10699 . 11455
+) (SK.SCALE.POSITION.INTO.VIEWER.EXACT 11457 . 11999) (SK.MAKE.POSITION.INTEGER 12001 . 12669) (
+SCALE.POSITION.INTO.SKETCHW 12671 . 13063) (UNSCALE 13065 . 13193) (UNSCALE.REGION 13195 . 13781)) (
+13819 17517 (STATUSPRINT 13829 . 15191) (CLEARPROMPTWINDOW 15193 . 15600) (CLOSEPROMPTWINDOW 15602 . 
+16099) (MYGETPROMPTWINDOW 16101 . 16800) (PROMPT.GETINPUT 16802 . 17515)) (17575 28606 (
+SK.SEND.TO.BOTTOM 17585 . 17924) (SK.BRING.TO.TOP 17926 . 18294) (SK.SWITCH.PRIORITIES 18296 . 18622) 
+(SK.SEL.AND.CHANGE.PRIORITY 18624 . 19192) (SK.SEL.AND.SWITCH.PRIORITIES 19194 . 20961) (
+SK.SORT.ELTS.BY.PRIORITY 20963 . 21684) (SK.SORT.GELTS.BY.PRIORITY 21686 . 22265) (
+SORT.CHANGESPECS.BY.NEW.PRIORITY 22267 . 22955) (SORT.CHANGESPECS.BY.OLD.PRIORITY 22957 . 23645) (
+SK.SEND.ELEMENTS.TO.BOTTOM 23647 . 25318) (SK.BRING.ELEMENTS.TO.TOP 25320 . 27004) (
+SK.COPY.GLOBAL.ELEMENT.AND.PROPERTY.LIST 27006 . 28604)) (28607 31463 (SK.ELEMENT.PRIORITY 28617 . 
+28945) (SK.SET.ELEMENT.PRIORITY 28947 . 29891) (SK.POP.NEXT.PRIORITY 29893 . 30236) (SK.PRIORITY.CELL 
+30238 . 30443) (SK.HIGH.PRIORITY 30445 . 30948) (SK.LOW.PRIORITY 30950 . 31461)) (31526 38329 (
+DRAW.LOCAL.SKETCH 31536 . 32538) (SET.PRIORITYIMPORTANT 32540 . 33108) (SK.FIGUREIMAGE 33110 . 38327))
+ (38373 57317 (SKETCHW.HARDCOPYFN 38383 . 45858) (SK.LIST.IMAGE 45860 . 56967) (SK.HARDCOPYIMAGEW 
+56969 . 57315)) (57318 59321 (SK.DO.HARDCOPYIMAGEW.TOFILE 57328 . 57925) (SK.HARDCOPYIMAGEW.TOFILE 
+57927 . 58289) (SK.HARDCOPYIMAGEW.TOPRINTER 58291 . 58653) (SK.LIST.IMAGE.ON.FILE 58655 . 59319)) (
+59322 65974 (\SK.LIST.PAGE.IMAGE 59332 . 61764) (SK.PRINTER.FILE.CANDIDATE.NAME 61766 . 62937) (
+SK.SET.HARDCOPY.MODE 62939 . 64324) (SK.UNSET.HARDCOPY.MODE 64326 . 64744) (SK.UPDATE.AFTER.HARDCOPY 
+64746 . 65454) (SK.SWITCH.REGION.X.AND.Y 65456 . 65972)) (66213 79110 (SK.SEL.AND.TRANSFORM 66223 . 
+66573) (SK.TRANSFORM.ELEMENTS 66575 . 67830) (SK.TRANSFORM.ITEM 67832 . 68633) (SK.TRANSFORM.ELEMENT 
+68635 . 69093) (SK.TRANSFORM.POINT 69095 . 69445) (SK.TRANSFORM.POINT.LIST 69447 . 69668) (
+SK.TRANSFORM.REGION 69670 . 71856) (SK.PUT.ELTS.ON.GRID 71858 . 72336) (SK.TRANSFORM.GLOBAL.ELEMENTS 
+72338 . 72840) (GLOBALELEMENTP 72842 . 73133) (SKETCH.LIST.OF.ELEMENTSP 73135 . 73439) (
+SK.TRANSFORM.SCALE.FACTOR 73441 . 75134) (SK.TRANSFORM.BRUSH 75136 . 75603) (SK.TRANSFORM.ARROWHEADS 
+75605 . 77196) (SCALE.BRUSH 77198 . 79108)) (79111 99303 (TWO.PT.TRANSFORMATION.INPUTFN 79121 . 81894)
+ (SK.TWO.PT.TRANSFORM.ELTS 81896 . 82301) (SK.SEL.AND.TWO.PT.TRANSFORM 82303 . 82894) (
+SK.APPLY.AFFINE.TRANSFORM 82896 . 84015) (SK.COMPUTE.TWO.PT.TRANSFORMATION 84017 . 88355) (
+SK.COMPUTE.SLOPE 88357 . 89122) (SK.THREE.PT.TRANSFORM.ELTS 89124 . 89535) (
+SK.COMPUTE.THREE.PT.TRANSFORMATION 89537 . 94074) (SK.SEL.AND.THREE.PT.TRANSFORM 94076 . 94673) (
+THREE.PT.TRANSFORMATION.INPUTFN 94675 . 99301)) (99304 103331 (SK.COPY.AND.TWO.PT.TRANSFORM.ELTS 99314
+ . 99733) (SK.SEL.COPY.AND.TWO.PT.TRANSFORM 99735 . 100356) (SK.COPY.AND.THREE.PT.TRANSFORM.ELTS 
+100358 . 100787) (SK.SEL.COPY.AND.THREE.PT.TRANSFORM 100789 . 101413) (SK.COPY.AND.TRANSFORM.ELEMENTS 
+101415 . 102459) (SK.COPY.AND.TRANSFORM.ITEM 102461 . 103329)) (105459 108654 (SK.SHOWMARKS 105469 . 
+106369) (MARKPOINT 106371 . 107091) (SK.MARKHOTSPOTS 107093 . 108168) (SK.MARK.SELECTION 108170 . 
+108652)) (109183 115961 (SK.SELECT.ITEM 109193 . 111853) (IN.SKETCH.ELT? 111855 . 114241) (
+SK.MARK.HOTSPOT 114243 . 114725) (SK.MARK.POSITION 114727 . 115164) (SK.SELECT.ELT 115166 . 115593) (
+SK.DESELECT.ELT 115595 . 115959)) (116104 128918 (SK.HOTSPOT.CACHE 116114 . 116458) (
+SK.HOTSPOT.CACHE.FOR.OPERATION 116460 . 117815) (SK.BUILD.CACHE 117817 . 118640) (
+SK.ELEMENT.PROTECTED? 118642 . 119235) (SK.HAS.SOME.HOTSPOTS 119237 . 119691) (SK.SET.HOTSPOT.CACHE 
+119693 . 120048) (SK.CREATE.HOTSPOT.CACHE 120050 . 120500) (SK.ELTS.FROM.HOTSPOT 120502 . 121342) (
+SK.ADD.HOTSPOTS.TO.CACHE 121344 . 121745) (SK.ADD.HOTSPOTS.TO.CACHE1 121747 . 122293) (
+SK.ADD.HOTSPOT.TO.CACHE 122295 . 124171) (SK.REMOVE.HOTSPOTS.FROM.CACHE 124173 . 124576) (
+SK.REMOVE.HOTSPOTS.FROM.CACHE1 124578 . 125096) (SK.REMOVE.HOTSPOT.FROM.CACHE 125098 . 125661) (
+SK.REMOVE.VALUE.FROM.CACHE.BUCKET 125663 . 126632) (SK.FIND.CACHE.BUCKET 126634 . 127223) (
+SK.ADD.VALUE.TO.CACHE.BUCKET 127225 . 128916)) (128946 148389 (SK.SET.GRID 128956 . 129377) (
+SK.DISPLAY.GRID 129379 . 129928) (SK.DISPLAY.GRID.POINTS 129930 . 130126) (SK.REMOVE.GRID.POINTS 
+130128 . 130931) (SK.TAKE.DOWN.GRID 130933 . 131244) (SK.SHOW.GRID 131246 . 134860) (SK.GRIDFACTOR 
+134862 . 135383) (SK.TURN.GRID.ON 135385 . 135713) (SK.TURN.GRID.OFF 135715 . 136073) (
+SK.MAKE.GRID.LARGER 136075 . 136807) (SK.MAKE.GRID.SMALLER 136809 . 137562) (SK.CHANGE.GRID 137564 . 
+138012) (GRID.FACTOR1 138014 . 138371) (LEASTPOWEROF2GT 138373 . 139147) (GREATESTPOWEROF2LT 139149 . 
+139764) (SK.DEFAULT.GRIDFACTOR 139766 . 140319) (SK.PUT.ON.GRID 140321 . 140879) (MAP.WINDOW.ONTO.GRID
+ 140881 . 141315) (MAP.SCREEN.ONTO.GRID 141317 . 141805) (MAP.GLOBAL.PT.ONTO.GRID 141807 . 142189) (
+MAP.GLOBAL.REGION.ONTO.GRID 142191 . 143908) (MAP.WINDOW.POINT.ONTO.GLOBAL.GRID 143910 . 144453) (
+MAP.WINDOW.ONTO.GLOBAL.GRID 144455 . 144840) (SK.UPDATE.GRIDFACTOR 144842 . 145478) (
+SK.MAP.FROM.WINDOW.TO.GLOBAL.GRID 145480 . 146018) (SK.MAP.INPUT.PT.TO.GLOBAL 146020 . 147237) (
+SK.MAP.FROM.WINDOW.TO.NEAREST.GRID 147239 . 148387)) (148529 157084 (SK.ADD.HISTEVENT 148539 . 149674)
+ (SK.SEL.AND.UNDO 149676 . 152590) (SK.UNDO.LAST 152592 . 154801) (SK.UNDO.NAME 154803 . 155307) (
+SKEVENTTYPEFNS 155309 . 155659) (SK.TYPE.OF.FIRST.ARG 155661 . 157082)) (157085 157771 (SK.DELETE.UNDO
+ 157095 . 157524) (SK.ADD.UNDO 157526 . 157769)) (157772 164554 (SK.CHANGE.UNDO 157782 . 159765) (
+SK.ELT.IN.SKETCH? 159767 . 160021) (SK.CHANGE.REDO 160023 . 161891) (SK.MOVE.UNDO 161893 . 163286) (
+SK.MOVE.REDO 163288 . 164552)) (164555 166654 (SK.UNDO.UNDO 164565 . 165831) (SK.UNDO.MENULABEL 165833
+ . 166228) (SK.LABEL.FROM.TYPE 166230 . 166652)) (167504 175346 (SHOW.GLOBAL.COORDS 167514 . 168063) (
+LOCATOR.CLOSEFN 168065 . 168350) (SKETCHW.FROM.LOCATOR 168352 . 168760) (SKETCHW.UPDATE.LOCATORS 
+168762 . 169348) (LOCATOR.UPDATE 169350 . 170108) (UPDATE.GLOBAL.LOCATOR 170110 . 170911) (
+UPDATE.GLOBALCOORD.LOCATOR 170913 . 171490) (ADD.GLOBAL.DISPLAY 171492 . 172409) (
+ADD.GLOBAL.GRIDDED.DISPLAY 172411 . 172670) (CREATE.GLOBAL.DISPLAYER 172672 . 173749) (
+UPDATE.GLOBAL.GRIDDED.COORD.LOCATOR 173751 . 175344)) (175553 188040 (DISPLAYREADCOLORHLSLEVELS 175563
+ . 176399) (DISPLAYREADCOLORLEVEL 176401 . 177436) (DRAWREADCOLORBOX 177438 . 178427) (
+READ.CHANGE.COLOR 178429 . 178646) (READCOLOR1 178648 . 181562) (READCOLORCOMMANDMENUSELECTEDFN 181564
+ . 181931) (READCOLOR2 181933 . 188038)) (188041 189500 (CREATE.CNS.MENU 188051 . 189498)) (189777 
+192487 (SK.ABSWXOFFSET 189787 . 190081) (SK.ABSWYOFFSET 190083 . 190377) (
+SK.UNSCALE.POSITION.FROM.VIEWER 190379 . 190948) (SK.SCALE.REGION 190950 . 192485)) (192526 207524 (
+VIEWER.SCALE 192536 . 192845) (SKETCH.ZOOM 192847 . 193882) (SAME.ASPECT.RATIO 193884 . 195248) (
+SKETCH.DO.ZOOM 195250 . 196455) (SKETCH.NEW.VIEW 196457 . 196972) (ZOOM.UPDATE.ELT 196974 . 197867) (
+SK.UPDATE.AFTER.SCALE.CHANGE 197869 . 199738) (SKETCH.AUTOZOOM 199740 . 204160) (
+SKETCH.GLOBAL.REGION.ZOOM 204162 . 207522)) (208161 220073 (SKETCH.HOME 208171 . 208698) (SK.FRAME.IT 
+208700 . 209292) (SK.FRAME.WINDOW.TO.SKETCH 209294 . 213140) (SK.MOVE.TO.VIEW 213142 . 214556) (
+SK.NAME.CURRENT.VIEW 214558 . 215668) (SKETCH.ADD.VIEW 215670 . 216763) (SK.RESTORE.VIEW 216765 . 
+218641) (SK.FORGET.VIEW 218643 . 220071)))))
 STOP
diff --git a/library/sketch/SKETCH-OPS.LCOM b/library/sketch/SKETCH-OPS.LCOM
index e7b27488..00f42f0f 100644
Binary files a/library/sketch/SKETCH-OPS.LCOM and b/library/sketch/SKETCH-OPS.LCOM differ
diff --git a/library/tedit/TEDIT-HCPY b/library/tedit/TEDIT-HCPY
index a112833e..0348a30a 100644
--- a/library/tedit/TEDIT-HCPY
+++ b/library/tedit/TEDIT-HCPY
@@ -1,12 +1,12 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED "10-Sep-2025 19:05:00" {WMEDLEY}<library>tedit>TEDIT-HCPY.;179 30623  
+(FILECREATED "19-Sep-2025 17:08:05" {WMEDLEY}<library>TEDIT>TEDIT-HCPY.;186 30742  
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (VARS TEDIT-HCPYCOMS)
+      :CHANGES-TO (FNS TEDIT.HARDCOPYFN)
 
-      :PREVIOUS-DATE " 9-Sep-2025 21:52:28" {WMEDLEY}<library>tedit>TEDIT-HCPY.;177)
+      :PREVIOUS-DATE "19-Sep-2025 08:35:34" {WMEDLEY}<library>TEDIT>TEDIT-HCPY.;185)
 
 
 (PRETTYCOMPRINT TEDIT-HCPYCOMS)
@@ -74,50 +74,55 @@
                  "Can't HARDCOPY:  No print server specified." T])
 
 (\TEDIT.PRINT.MENU
-  [LAMBDA (TSTREAM)                                          (* ; "Edited 28-Jun-2024 22:09 by rmk")
+  [LAMBDA (TSTREAM)                                          (* ; "Edited 19-Sep-2025 07:43 by rmk")
+                                                             (* ; "Edited 28-Jun-2024 22:09 by rmk")
                                                              (* ; "Edited 25-Jun-2023 13:16 by rmk")
                                                              (* ; "Edited  6-Jun-2023 17:48 by rmk")
     (LET ((W (GETTOBJ (TEXTOBJ TSTREAM)
-                    PRIMARYPANE)))
+                    PRIMARYPANE))
+          FILE&TYPE)
          (SELECTQ [MENU (create MENU
                                ITEMS _ '(("Print to a file" 'FILE 
                                               "Puts image on a file; prompts for filename and format"
                                                 )
                                          ("Send to a printer" 'PRINTER 
                                                 "Sends image to a printer of your choosing"]
-             (FILE (HARDCOPYIMAGEW.TOFILE W))
-             (PRINTER (HARDCOPYIMAGEW.TOPRINTER W))
+             (FILE (CL:WHEN (SETQ FILE&TYPE (GetImageFile W))
+                       (TEDIT.TO.IMAGEFILE W (CAR FILE&TYPE)
+                              (CDR FILE&TYPE))))
+             (PRINTER [SEND.FILE.TO.PRINTER (TEXTSTREAM W)
+                             (GetPrinterName)
+                             `(HEADING ,(GETTEXTPROP W 'FILENAME])
              NIL])
 
 (TEDIT.HCPYFILE
-  [LAMBDA (TSTREAM FILE BREAKPAGETITLE)                      (* ; "Edited 29-Jun-2024 16:33 by rmk")
+  [LAMBDA (TSTREAM FILE BREAKPAGETITLE)                      (* ; "Edited 18-Sep-2025 11:21 by rmk")
+                                                             (* ; "Edited 29-Jun-2024 16:33 by rmk")
                                                              (* ; "Edited  4-Oct-2022 09:23 by rmk")
-                                                             (* ; "Edited  1-Oct-2022 22:12 by rmk")
-                                                            (* ; "Edited 12-Jun-90 18:36 by mitani")
+                                                             (* ; "Edited  1-Oct-2022 22:12 by rmk")
+
+    (* ;; "Not sure that this is ever called.  Not documented.")
+                                                            (* ; "Edited 12-Jun-90 18:36 by mitani")
 
     (* ;; "Create a hardcopy-format FILE from the text on TSTREAM, with the file type depending on what the default printer is.")
 
-    (LET ([IMAGETYPE (CAR (PRINTERPROP (PRINTERTYPE)
-                                 'CANPRINT]
-          (TEXTOBJ (TEXTOBJ TSTREAM))
-          FILENM TXTFILE)
-         (CL:WHEN [SETQ FILENM (OR FILE (\TEDIT.MAKEFILENAME
-                                         (TEDIT.GETINPUT TEXTOBJ (CONCAT IMAGETYPE " file name:  ")
-                                                (COND
-                                                   ((type? STREAM (SETQ TXTFILE (fetch (TEXTOBJ
-                                                                                        TXTFILE)
-                                                                                   of TEXTOBJ)))
+    (LET ((IMAGETYPE DEFAULTPRINTERTYPE)
+          TXTFILE)
+         (CL:UNLESS FILE
+             [SETQ FILE (\TEDIT.MAKEFILENAME (TEDIT.GETINPUT TSTREAM (CONCAT IMAGETYPE 
+                                                                            " file name:  ")
+                                                    (CL:WHEN (SETQ TXTFILE (GETTEXTPROP TSTREAM
+                                                                                  'FILENAME))
                                                              (* ; 
                                                              "There was a file, so supply default")
-                                                    (PACKFILENAME 'VERSION NIL 'EXTENSION
-                                                           (OR (CAR (PRINTFILETYPE IMAGETYPE
-                                                                           'EXTENSION))
-                                                               'HCPY)
-                                                           'BODY
-                                                           (fetch (STREAM FULLFILENAME) of TXTFILE]
-             (if FILENM
-                 then (TEDIT.FORMAT.HARDCOPY TSTREAM FILENM T BREAKPAGETITLE NIL NIL IMAGETYPE)
-               else (TEDIT.PROMPTPRINT TSTREAM "No hardcopy file--aborted" T T)))])
+                                                        (PACKFILENAME 'VERSION NIL 'EXTENSION
+                                                               (CAR (EXTENSIONS.FOR.IMAGEFILETYPE
+                                                                     IMAGETYPE))
+                                                               'BODY TXTFILE))])
+         (if FILE
+             then [TEDIT.TO.IMAGEFILE TSTREAM FILE IMAGETYPE `(BREAKPAGEFILENAME `BREAKPAGETITLE]
+           else (TEDIT.PROMPTPRINT TSTREAM "No hardcopy file--aborted" T T)
+                NIL])
 
 (\TEDIT.HARDCOPY.DISPLAYLINE
   [LAMBDA (TSTREAM LINE REGION PRSTREAM FORMATTINGSTATE)     (* ; "Edited 21-Apr-2025 19:02 by rmk")
@@ -420,7 +425,9 @@
 (DEFINEQ
 
 (TEDIT.HARDCOPYFN
-  [LAMBDA (WINDOW IMAGESTREAM)                               (* ; "Edited 13-Dec-2024 22:33 by rmk")
+  [LAMBDA (WINDOW IMAGEFILE IMAGETYPE)                       (* ; "Edited 19-Sep-2025 13:49 by rmk")
+                                                             (* ; "Edited 12-Sep-2025 21:50 by rmk")
+                                                             (* ; "Edited 13-Dec-2024 22:33 by rmk")
                                                              (* ; "Edited 29-Jun-2024 14:42 by rmk")
                                                              (* ; "Edited 20-Mar-2024 10:49 by rmk")
                                                              (* ; "Edited 25-Sep-2023 16:29 by rmk")
@@ -430,15 +437,11 @@
     (* ;; 
    "This is the TEdit HARDCOPYFN, hooking into the system's standard Hardcopy window-menu operation.")
 
-    (LET ((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!")
-
-         (TEDIT.FORMAT.HARDCOPY (CL:IF (FGETTOBJ (TEXTOBJ WINDOW)
-                                              MENUFLG)
-                                    (\TEDIT.MAINW WINDOW)
-                                    WINDOW)
-                IMAGESTREAM])
+    (TEDIT.TO.IMAGEFILE (CL:IF (FGETTOBJ (TEXTOBJ WINDOW)
+                                      MENUFLG)
+                            (\TEDIT.MAINW WINDOW)
+                            WINDOW)
+           IMAGEFILE IMAGETYPE])
 
 (\TEDIT.HARDCOPYFILEFN
   [LAMBDA (W EXT)                                            (* ; "Edited 25-Sep-2023 16:19 by rmk")
@@ -505,11 +508,11 @@
          (CLOSEF DOC])
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (2652 25209 (TEDIT.HARDCOPY 2662 . 3795) (\TEDIT.PRINT.MENU 3797 . 4763) (TEDIT.HCPYFILE
- 4765 . 6939) (\TEDIT.HARDCOPY.DISPLAYLINE 6941 . 16164) (\TEDIT.HARDCOPY.FORMATLINE.HEADINGS 16166 . 
-17895) (\TEDIT.HARDCOPY.MODIFYLOOKS 17897 . 20078) (\TEDIT.HCPYFMTSPEC 20080 . 23538) (
-\TEDIT.INTEGER.IMAGEBOX 23540 . 24211) (\TEDIT.DISPLAY.DIACRITIC 24213 . 25207)) (25284 26114 (
-\TEDIT.SCALEREGION 25294 . 26112)) (26367 29180 (TEDIT.HARDCOPYFN 26377 . 27682) (
-\TEDIT.HARDCOPYFILEFN 27684 . 28245) (\TEDIT.POSTSCRIPT.HARDCOPY 28247 . 29178)) (29799 30600 (
-TEDIT-BOOK 29809 . 30598)))))
+  (FILEMAP (NIL (2653 25392 (TEDIT.HARDCOPY 2663 . 3796) (\TEDIT.PRINT.MENU 3798 . 5139) (TEDIT.HCPYFILE
+ 5141 . 7122) (\TEDIT.HARDCOPY.DISPLAYLINE 7124 . 16347) (\TEDIT.HARDCOPY.FORMATLINE.HEADINGS 16349 . 
+18078) (\TEDIT.HARDCOPY.MODIFYLOOKS 18080 . 20261) (\TEDIT.HCPYFMTSPEC 20263 . 23721) (
+\TEDIT.INTEGER.IMAGEBOX 23723 . 24394) (\TEDIT.DISPLAY.DIACRITIC 24396 . 25390)) (25467 26297 (
+\TEDIT.SCALEREGION 25477 . 26295)) (26550 29299 (TEDIT.HARDCOPYFN 26560 . 27801) (
+\TEDIT.HARDCOPYFILEFN 27803 . 28364) (\TEDIT.POSTSCRIPT.HARDCOPY 28366 . 29297)) (29918 30719 (
+TEDIT-BOOK 29928 . 30717)))))
 STOP
diff --git a/library/tedit/TEDIT-HCPY.LCOM b/library/tedit/TEDIT-HCPY.LCOM
index 9c76df19..55a52469 100644
Binary files a/library/tedit/TEDIT-HCPY.LCOM and b/library/tedit/TEDIT-HCPY.LCOM differ
diff --git a/library/tedit/TEDIT-PAGE b/library/tedit/TEDIT-PAGE
index 5e5cef71..af52c28e 100644
--- a/library/tedit/TEDIT-PAGE
+++ b/library/tedit/TEDIT-PAGE
@@ -1,12 +1,14 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED " 5-Jun-2025 08:24:12" {WMEDLEY}<library>tedit>TEDIT-PAGE.;222 134861 
+(FILECREATED "27-Sep-2025 16:25:26" 
+{DSK}<Users>kaplan>Local>medley3.5>working-medley>library>TEDIT>TEDIT-PAGE.;234 133685 
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (FNS TEDIT.FORMAT.HARDCOPY)
+      :CHANGES-TO (FNS TEDIT.TO.IMAGEFILE)
 
-      :PREVIOUS-DATE "11-May-2025 15:03:00" {WMEDLEY}<library>tedit>TEDIT-PAGE.;221)
+      :PREVIOUS-DATE "19-Sep-2025 22:09:03" 
+{DSK}<Users>kaplan>Local>medley3.5>working-medley>library>TEDIT>TEDIT-PAGE.;232)
 
 
 (PRETTYCOMPRINT TEDIT-PAGECOMS)
@@ -50,7 +52,7 @@
                                                          72 72 NIL 1)
                                                   (TEDIT.SINGLE.PAGEFORMAT T 540 756 NIL 'RIGHT 72 72
                                                          72 72 NIL 1]
-        (FNS TEDIT.FORMAT.HARDCOPY)
+        (FNS TEDIT.FORMAT.HARDCOPY TEDIT.TO.IMAGEFILE)
         (COMS 
               (* ;; "Perform page layout, based on a regular expression of typed regions.")
 
@@ -632,20 +634,16 @@
 (DEFINEQ
 
 (TEDIT.FORMAT.HARDCOPY
-  [LAMBDA (TEXTSTREAM FILE DONTSEND BREAKPAGETITLE SERVER PRINTOPTIONS IMAGETYPE FIRSTPG# STARTPG 
-                 ENDPG QUIET)                                (* ; "Edited  5-Jun-2025 08:24 by rmk")
+  [LAMBDA (TEXTSTREAM IMAGESTREAM DONTSEND BREAKPAGETITLE SERVER PRINTOPTIONS IMAGETYPE FIRSTPG# 
+                 STARTPG ENDPG QUIET)                        (* ; "Edited 19-Sep-2025 22:04 by rmk")
+                                                             (* ; "Edited 18-Sep-2025 10:11 by rmk")
+                                                             (* ; "Edited 12-Sep-2025 23:54 by rmk")
+                                                             (* ; "Edited  5-Jun-2025 08:24 by rmk")
                                                              (* ; "Edited 22-Apr-2025 08:12 by rmk")
-                                                             (* ; "Edited 23-Feb-2025 09:59 by rmk")
                                                              (* ; "Edited 30-Aug-2024 15:45 by rmk")
-                                                             (* ; "Edited 10-Jul-2024 23:34 by rmk")
-                                                             (* ; "Edited 29-Jun-2024 10:32 by rmk")
                                                              (* ; "Edited  5-Apr-2024 08:01 by rmk")
-                                                             (* ; "Edited 16-Mar-2024 09:31 by rmk")
-                                                             (* ; "Edited  7-Mar-2024 12:34 by rmk")
                                                              (* ; "Edited 19-Jan-2024 23:39 by rmk")
-                                                             (* ; "Edited 24-Dec-2023 14:10 by rmk")
                                                              (* ; "Edited 15-Nov-2023 23:56 by rmk")
-                                                             (* ; "Edited 22-Sep-2023 20:38 by rmk")
                                                              (* ; "Edited  4-Jul-2023 11:16 by rmk")
                                                              (* ; "Edited  2-Oct-2022 00:00 by rmk")
                                                              (* ; 
@@ -662,117 +660,111 @@
                                          `(PROGN (CLOSEF? OLDVALUE]
                                   TEXTSTREAM
                            else (ERROR TEXTSTREAM "is not a Tedit stream")))
-        (PROG ((TEXTOBJ (FTEXTOBJ TEXTSTREAM))
-               [FORMATTINGSTATE (create PAGEFORMATTINGSTATE
-                                       PAGE# _ (FIXP FIRSTPG#)
-                                       FIRSTPAGE _ T
-                                       STATE _ FIRSTPG#
-                                       MINPAGE# _ STARTPG
-                                       MAXPAGE# _ (OR ENDPG 65535)
-                                       CHNO _ 1
-                                       PAGEHEADINGS _ (LIST NIL NIL)
-                                       PAGE#GENERATOR _ (AND (LISTP FIRSTPG#)
-                                                             (CDR FIRSTPG#))
-                                       PAGE#TEXT _ (AND (LISTP FIRSTPG#)
-                                                        (CAR FIRSTPG#]
-               PRSTREAM PAGEREGION SCRATCHFILE NPAGES WASOPEN TARGETFILENAME)
-              (CL:WHEN (EQ 'DON'T (APPLY* (OR (GETTEXTPROP TEXTOBJ 'BEFOREHARDCOPYFN)
-                                              (FUNCTION NILL))
-                                         TEXTSTREAM))        (* ; 
+        (CL:UNLESS BREAKPAGETITLE
+            (SETQ BREAKPAGETITLE (if (LISTGET PRINTOPTIONS 'DOCUMENT.NAME)
+                                   elseif (GETTEXTPROP TEXTSTREAM 'FILENAME)
+                                   elseif [AND (GETTEXTPROP TEXTSTREAM 'FILESTREAM)
+                                               (FULLNAME (GETTEXTPROP TEXTSTREAM 'FILESTREAM]
+                                   else "TEdit Hardcopy Output")))
+        [TEDIT.TO.IMAGEFILE TEXTSTREAM IMAGESTREAM (OR IMAGETYPE DEFAULTPRINTERTYPE)
+               `(,@PRINTOPTIONS FIRSTPG# ,FIRSTPG# STARTPG ,STARTPG ENDPG ,ENDPG QUIET ,QUIET 
+                       BREAKPAGEFILENAME ,BREAKPAGETITLE])])
+
+(TEDIT.TO.IMAGEFILE
+  [LAMBDA (TSTREAM IMAGEFILE IMAGETYPE OPTIONS)              (* ; "Edited 27-Sep-2025 14:05 by rmk")
+                                                             (* ; "Edited 19-Sep-2025 22:08 by rmk")
+
+    (* ;; "Format a document for hardcopy.  Returns the number of pages printed (not the final page number!).  Returns NIL if the before-print-fn said not to print.")
+
+    (* ;; "TSTREAM is either already a textstream or somehow denotes a tedit-formatted file, otherwise an error. ")
+
+    (RESETLST
+        (SETQ TSTREAM (if (TEXTSTREAM TSTREAM T)
+                        elseif (TEDIT.FORMATTEDFILEP TSTREAM)
+                          then [RESETSAVE (SETQ TSTREAM (OPENTEXTSTREAM TSTREAM))
+                                      `(PROGN (CLOSEF? OLDVALUE]
+                               TSTREAM
+                        else (ERROR TSTREAM "is not a Tedit stream")))
+        (CL:UNLESS IMAGEFILE
+            (CL:WHEN (GETTEXTPROP TSTREAM 'FILENAME)
+                [SETQ IMAGEFILE (PACKFILENAME 'VERSION NIL 'EXTENSION (CAR (
+                                                                         EXTENSIONS.FOR.IMAGEFILETYPE
+                                                                            IMAGETYPE))
+                                       'BODY
+                                       (GETTEXTPROP TSTREAM 'FILENAME]))
+        (PROG* ((FIRSTPG# (LISTGET OPTIONS 'FIRSTPG#))
+                (TEXTOBJ (FTEXTOBJ TSTREAM))
+                [FORMATTINGSTATE (create PAGEFORMATTINGSTATE
+                                        PAGE# _ (FIXP FIRSTPG#)
+                                        FIRSTPAGE _ T
+                                        STATE _ FIRSTPG#
+                                        MINPAGE# _ (LISTGET OPTIONS 'STARTPG)
+                                        MAXPAGE# _ (OR (LISTGET OPTIONS 'ENDPG)
+                                                       65535)
+                                        CHNO _ 1
+                                        PAGEHEADINGS _ (LIST NIL NIL)
+                                        PAGE#GENERATOR _ (AND (LISTP FIRSTPG#)
+                                                              (CDR FIRSTPG#))
+                                        PAGE#TEXT _ (AND (LISTP FIRSTPG#)
+                                                         (CAR FIRSTPG#]
+                IMAGESTREAM PAGEREGION SCRATCHFILE NPAGES)
+               (CL:WHEN (EQ 'DON'T (APPLY* (OR (GETTEXTPROP TEXTOBJ 'BEFOREHARDCOPYFN)
+                                               (FUNCTION NILL))
+                                          TSTREAM))          (* ; 
                                                  "Do pre-hardcopy processing as indicated, or refuse")
-                  (RETURN))
-              [RESETSAVE (\TEDIT.MARKACTIVE TEXTOBJ "Hardcopy")
-                     '(PROGN (\TEDIT.MARKINACTIVE OLDVALUE]
-              (SETQ PAGEREGION (FGETTOBJ TEXTOBJ TXTPAGEFRAMES))
-              (SETPFS FORMATTINGSTATE PRESSREGION TEDIT.DEFAULTPAGEREGION)
+                   (RETURN))
+               [RESETSAVE (\TEDIT.MARKACTIVE TEXTOBJ "Hardcopy")
+                      '(PROGN (\TEDIT.MARKINACTIVE OLDVALUE]
+               (SETQ PAGEREGION (FGETTOBJ TEXTOBJ TXTPAGEFRAMES))
+               (SETPFS FORMATTINGSTATE PRESSREGION TEDIT.DEFAULTPAGEREGION)
                                                              (* ; 
                                                              "Print in the usual region on the page")
-              (CL:UNLESS BREAKPAGETITLE
-                  [SETQ BREAKPAGETITLE (COND
-                                          ((LISTGET PRINTOPTIONS 'DOCUMENT.NAME))
-                                          ([OR (NOT (FGETTOBJ TEXTOBJ TXTFILE))
-                                               (STRINGP (FGETTOBJ TEXTOBJ TXTFILE))
-                                               (type? STREAM (fetch (STREAM FULLNAME)
-                                                                of (FGETTOBJ TEXTOBJ TXTFILE)))
-                                               (STRINGP (fetch (STREAM FULLNAME)
-                                                           of (FGETTOBJ TEXTOBJ TXTFILE]
-                                                             (* ; 
-                        "This isn't a real file, so print a generic name on the document break page.")
-                                           "TEdit Hardcopy Output")
-                                          (T                 (* ; 
-                                          "It's a real file, so use the file name on the break page.")
-                                             (fetch (STREAM FULLNAME) of (FGETTOBJ TEXTOBJ TXTFILE])
-              [SETQ SCRATCHFILE (OR FILE (PRINTER.SCRATCH.FILE (TEXTSTREAM TEXTSTREAM]
-              (RESETLST                                      (* ; 
-                                           "Set up to do the user's cleanup on the way out, as well.")
-                  (CL:UNLESS QUIET (TEDIT.PROMPTPRINT TEXTOBJ "Formatting for print..." T))
-                  [COND
-                     ((AND FILE (OPENP FILE)
-                           (IMAGESTREAMTYPE FILE))           (* ; 
-             "The file he handed us is already an image-type file.  Just append the new stuff to it.")
-                      (SETQ WASOPEN T)
-                      (SETQ PRSTREAM FILE))
-                     (T                                      (* ; 
-                                                    "T'wasn't an image stream, so let's open us one.")
-                        (RESETSAVE (SETQ PRSTREAM (OPENIMAGESTREAM
-                                                   SCRATCHFILE
-                                                   [OR IMAGETYPE (SETQ IMAGETYPE
-                                                                  (CAR (PRINTERPROP (PRINTERTYPE
-                                                                                     SERVER)
-                                                                              'CANPRINT]
-                                                   (LIST 'FONT (FONTCREATE 'TERMINAL 10)
-                                                         'BREAKPAGEFILENAME BREAKPAGETITLE)))
-                               '(AND RESETSTATE (DELFILE (CLOSEF? OLDVALUE]
-                                                             (* ; 
-                                                "So we close and delete the file in case of trouble.")
+               (SETQ IMAGESTREAM (OR (IMAGESTREAMP IMAGEFILE)
+                                     (OPENIMAGESTREAM [OR IMAGEFILE (SETQ IMAGEFILE
+                                                                     (OPENSTREAM "{NODIRCORE}"
+                                                                            'OUTPUT]
+                                            IMAGETYPE OPTIONS)))
 
-                  (* ;; "The right margin must be big enough to prevent line wrap on landscaped 14 inch paper, with Postscript's scaling of .01-point increments. (~ 101,000).  This will cause a performance hit.  Sigh.  JDS 9/5/89")
+         (* ;; "The right margin must be big enough to prevent line wrap on landscaped 14 inch paper, with Postscript's scaling of .01-point increments. (~ 101,000).  This will cause a performance hit.  Sigh.  JDS 9/5/89")
 
-                  (DSPRIGHTMARGIN 131072 PRSTREAM)
-                  (while (ILEQ (GETPFS FORMATTINGSTATE CHNO)
-                               (FGETTOBJ TEXTOBJ TEXTLEN))
-                     do 
-                        (* ;; "Format pages according to the existing layout:")
+               (DSPRIGHTMARGIN 131072 IMAGESTREAM)
+               (while (ILEQ (GETPFS FORMATTINGSTATE CHNO)
+                            (FGETTOBJ TEXTOBJ TEXTLEN))
+                  do 
+                     (* ;; "Format pages according to the existing layout:")
 
-                        (\TEDIT.FORMATBOX TEXTSTREAM PRSTREAM (GETPFS FORMATTINGSTATE CHNO)
-                               PAGEREGION FORMATTINGSTATE IMAGETYPE)
-                        (CL:WHEN (EQ (GETPFS FORMATTINGSTATE STATE)
-                                     :NEW-PAGE-LAYOUT)
+                     (\TEDIT.FORMATBOX TSTREAM IMAGESTREAM (GETPFS FORMATTINGSTATE CHNO)
+                            PAGEREGION FORMATTINGSTATE IMAGETYPE)
+                     (CL:WHEN (EQ (GETPFS FORMATTINGSTATE STATE)
+                                  :NEW-PAGE-LAYOUT)
 
-                            (* ;; "New page layout got specified.  Prepare to re-enter the formatting code and skip to the equivalent page in the new format.")
+                         (* ;; "New page layout got specified.  Prepare to re-enter the formatting code and skip to the equivalent page in the new format.")
 
-                            (SETQ PAGEREGION (GETPFS FORMATTINGSTATE NEWPAGELAYOUT))
+                         (SETQ PAGEREGION (GETPFS FORMATTINGSTATE NEWPAGELAYOUT))
 
-                            (* ;; "Set up the formatting state so code knows we're looking for an equivalent page, and which page it is. (The SUB1 is because we counted an extra page for the page on which the new payout was detected.)")
+                         (* ;; "Set up the formatting state so code knows we're looking for an equivalent page, and which page it is. (The SUB1 is because we counted an extra page for the page on which the new payout was detected.)")
 
-                            (SETPFS FORMATTINGSTATE REQUIREDREGIONTYPE (SUB1 (GETPFS FORMATTINGSTATE
-                                                                                    PAGECOUNT)))
-                            (SETPFS FORMATTINGSTATE PAGECOUNT 0)
-                            (SETPFS FORMATTINGSTATE STATE :SEARCHING-FOR-EQUIVALENT-PAGE)))
-                  (SETQ TARGETFILENAME (STREAMPROP PRSTREAM 'PDFTARGETINFO))
-                  (CL:UNLESS WASOPEN                         (* ; 
-                                            "Only if we created the image stream should we close it.")
-                      (SETQ PRSTREAM (CLOSEF PRSTREAM))
-                      (CL:UNLESS DONTSEND
-                          (SEND.FILE.TO.PRINTER PRSTREAM SERVER (APPEND PRINTOPTIONS
-                                                                       (LIST 'DOCUMENT.NAME 
-                                                                             BREAKPAGETITLE)))))
-                  (CL:UNLESS FILE (DELFILE SCRATCHFILE))
-                  (APPLY* (OR (GETTEXTPROP TEXTOBJ 'AFTERHARDCOPYFN)
-                              (FUNCTION NILL))
-                         TEXTSTREAM))
-              (SETQ NPAGES (GETPFS FORMATTINGSTATE PAGECOUNT))
-              (CL:UNLESS QUIET
-                  (TEDIT.PROMPTPRINT TEXTOBJ (CONCAT NPAGES " page" (CL:IF (EQ 1 NPAGES)
-                                                                        ""
-                                                                        "s")
-                                                    " printed"
-                                                    (CL:IF (EQ FILE SCRATCHFILE)
-                                                        (CONCAT " to " (OR TARGETFILENAME
-                                                                           (FULLNAME FILE)))
-                                                        ""))
-                         T))
-              (RETURN NPAGES)))])
+                         (SETPFS FORMATTINGSTATE REQUIREDREGIONTYPE (SUB1 (GETPFS FORMATTINGSTATE 
+                                                                                 PAGECOUNT)))
+                         (SETPFS FORMATTINGSTATE PAGECOUNT 0)
+                         (SETPFS FORMATTINGSTATE STATE :SEARCHING-FOR-EQUIVALENT-PAGE)))
+               (APPLY* (OR (GETTEXTPROP TEXTOBJ 'AFTERHARDCOPYFN)
+                           (FUNCTION NILL))
+                      TSTREAM)
+               (SETQ NPAGES (GETPFS FORMATTINGSTATE PAGECOUNT))
+               (CL:UNLESS (LISTGET OPTIONS 'QUIET)
+                   (TEDIT.PROMPTPRINT TSTREAM [CONCAT NPAGES " page" (CL:IF (EQ 1 NPAGES)
+                                                                         ""
+                                                                         "s")
+                                                     (if (PRINTERNAME IMAGESTREAM)
+                                                         then (CONCAT " printed on " (PRINTERNAME
+                                                                                      IMAGESTREAM))
+                                                       elseif (STREAMP (FULLNAME IMAGESTREAM))
+                                                         then " printed"
+                                                       else (CONCAT " on " (PSEUDOFILENAME
+                                                                            (FULLNAME IMAGESTREAM]
+                          T))
+               (RETURN (CLOSEF IMAGESTREAM))))])
 )
 
 
@@ -2101,18 +2093,19 @@
                         (RETURN (DREMOVE NIL $$VAL])
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (12139 15751 (\TEDIT.PARSE.PAGEFRAMES 12149 . 13928) (\TEDIT.PUT.PAGEFRAMES 13930 . 
-14754) (\TEDIT.UNPARSE.PAGEFRAMES 14756 . 15749)) (15814 37831 (TEDIT.SINGLE.PAGEFORMAT 15824 . 26817)
- (TEDIT.COMPOUND.PAGEFORMAT 26819 . 27798) (TEDIT.PAGEFORMAT 27800 . 35089) (TEDIT.GET.PAGEFORMAT 
-35091 . 37829)) (38118 48925 (TEDIT.FORMAT.HARDCOPY 38128 . 48923)) (49012 102264 (\TEDIT.FORMATBOX 
-49022 . 62446) (\TEDIT.FORMATHEADING 62448 . 67094) (\TEDIT.FORMATPAGE 67096 . 76285) (
-\TEDIT.FORMATTEXTBOX 76287 . 92800) (\TEDIT.FORMATFOLIO 92802 . 98119) (\TEDIT.FORMAT.FOUNDBOX? 98121
- . 100160) (\TEDIT.SKIP.SPECIALCOND 100162 . 102262)) (102344 107399 (\TEDIT.HARDCOPY.PAGEHEADINGS 
-102354 . 107397)) (107508 115559 (\TEDIT.HARDCOPY-COLUMN-END 107518 . 115557)) (115604 120545 (
-SCALEPAGEUNITS 115614 . 116755) (SCALEPAGEXUNITS 116757 . 117527) (SCALEPAGEYUNITS 117529 . 118300) (
-\TEDIT.PAPERHEIGHT 118302 . 119237) (\TEDIT.PAPERWIDTH 119239 . 120543)) (120961 124529 (ROMANNUMERALS
- 120971 . 124527)) (124568 131834 (TEDIT.PAGENO.CREATE 124578 . 124954) (\TEDIT.PAGENO.OBJINIT 124956
- . 126239) (\TEDIT.PAGENO.BUTTONEVENTINFN 126241 . 127307) (\TEDIT.PAGENO.IMAGEBOXFN 127309 . 129459) 
-(\TEDIT.PAGENO.DISPLAYFN 129461 . 131111) (\TEDIT.PAGENO.GETFN 131113 . 131505) (\TEDIT.PAGENO.PUTFN 
-131507 . 131832)) (131899 134838 (\TEDIT.FORMAT.FOOTNOTE 131909 . 134836)))))
+  (FILEMAP (NIL (12237 15849 (\TEDIT.PARSE.PAGEFRAMES 12247 . 14026) (\TEDIT.PUT.PAGEFRAMES 14028 . 
+14852) (\TEDIT.UNPARSE.PAGEFRAMES 14854 . 15847)) (15912 37929 (TEDIT.SINGLE.PAGEFORMAT 15922 . 26915)
+ (TEDIT.COMPOUND.PAGEFORMAT 26917 . 27896) (TEDIT.PAGEFORMAT 27898 . 35187) (TEDIT.GET.PAGEFORMAT 
+35189 . 37927)) (38216 47749 (TEDIT.FORMAT.HARDCOPY 38226 . 41261) (TEDIT.TO.IMAGEFILE 41263 . 47747))
+ (47836 101088 (\TEDIT.FORMATBOX 47846 . 61270) (\TEDIT.FORMATHEADING 61272 . 65918) (
+\TEDIT.FORMATPAGE 65920 . 75109) (\TEDIT.FORMATTEXTBOX 75111 . 91624) (\TEDIT.FORMATFOLIO 91626 . 
+96943) (\TEDIT.FORMAT.FOUNDBOX? 96945 . 98984) (\TEDIT.SKIP.SPECIALCOND 98986 . 101086)) (101168 
+106223 (\TEDIT.HARDCOPY.PAGEHEADINGS 101178 . 106221)) (106332 114383 (\TEDIT.HARDCOPY-COLUMN-END 
+106342 . 114381)) (114428 119369 (SCALEPAGEUNITS 114438 . 115579) (SCALEPAGEXUNITS 115581 . 116351) (
+SCALEPAGEYUNITS 116353 . 117124) (\TEDIT.PAPERHEIGHT 117126 . 118061) (\TEDIT.PAPERWIDTH 118063 . 
+119367)) (119785 123353 (ROMANNUMERALS 119795 . 123351)) (123392 130658 (TEDIT.PAGENO.CREATE 123402 . 
+123778) (\TEDIT.PAGENO.OBJINIT 123780 . 125063) (\TEDIT.PAGENO.BUTTONEVENTINFN 125065 . 126131) (
+\TEDIT.PAGENO.IMAGEBOXFN 126133 . 128283) (\TEDIT.PAGENO.DISPLAYFN 128285 . 129935) (
+\TEDIT.PAGENO.GETFN 129937 . 130329) (\TEDIT.PAGENO.PUTFN 130331 . 130656)) (130723 133662 (
+\TEDIT.FORMAT.FOOTNOTE 130733 . 133660)))))
 STOP
diff --git a/library/tedit/TEDIT-PAGE.LCOM b/library/tedit/TEDIT-PAGE.LCOM
index 42cbcaf3..48af16b5 100644
Binary files a/library/tedit/TEDIT-PAGE.LCOM and b/library/tedit/TEDIT-PAGE.LCOM differ
diff --git a/library/tedit/TEDIT-SCREEN b/library/tedit/TEDIT-SCREEN
index c6bc2df1..fba40237 100644
--- a/library/tedit/TEDIT-SCREEN
+++ b/library/tedit/TEDIT-SCREEN
@@ -1,12 +1,12 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED "19-Oct-2025 00:07:29" {WMEDLEY}<library>TEDIT>TEDIT-SCREEN.;910 186445 
+(FILECREATED "21-Nov-2025 16:36:15" {WMEDLEY}<library>TEDIT>TEDIT-SCREEN.;913 186644 
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (FNS \TEDIT.FORMATLINE.HORIZONTAL)
+      :CHANGES-TO (FNS \TEDIT.FORMATLINE)
 
-      :PREVIOUS-DATE " 7-Aug-2025 12:51:00" {WMEDLEY}<library>TEDIT>TEDIT-SCREEN.;909)
+      :PREVIOUS-DATE "26-Oct-2025 17:10:29" {WMEDLEY}<library>TEDIT>TEDIT-SCREEN.;912)
 
 
 (PRETTYCOMPRINT TEDIT-SCREENCOMS)
@@ -654,17 +654,16 @@
 
 (\TEDIT.FORMATLINE
   [LAMBDA (TSTREAM CH#1 LINE REGION IMAGESTREAM FORMATTINGSTATE)
+                                                             (* ; "Edited 21-Nov-2025 16:36 by rmk")
                                                              (* ; "Edited  7-Aug-2025 12:49 by rmk")
                                                              (* ; "Edited 27-Apr-2025 11:24 by rmk")
                                                              (* ; "Edited 21-Apr-2025 19:03 by rmk")
-                                                             (* ; "Edited 11-Apr-2025 20:18 by rmk")
                                                              (* ; "Edited 29-Mar-2025 11:39 by rmk")
                                                              (* ; "Edited  6-Mar-2025 11:42 by rmk")
                                                              (* ; "Edited  8-Feb-2025 23:36 by rmk")
                                                              (* ; "Edited 24-Dec-2024 22:15 by rmk")
                                                              (* ; "Edited 23-Nov-2024 00:03 by rmk")
                                                              (* ; "Edited 31-Oct-2024 15:32 by rmk")
-                                                             (* ; "Edited 26-Oct-2024 10:51 by rmk")
                                                              (* ; "Edited  2-Sep-2024 16:06 by rmk")
                                                              (* ; "Edited  4-Aug-2024 18:07 by rmk")
                                                              (* ; "Edited 21-May-2024 14:45 by rmk")
@@ -704,9 +703,11 @@
 
     (* ;; "")
 
+    (CL:UNLESS LINE
+        (SETQ LINE (create LINEDESCRIPTOR)))
     (CL:UNLESS IMAGESTREAM
         (SETQ IMAGESTREAM (WINDOWPROP (\TEDIT.PRIMARYPANE TSTREAM)
-                                 'DSP)))                     (* ; "For lower image objects?")
+                                 'DSP)))
     (PROG ((TEXTOBJ (FTEXTOBJ TSTREAM))
            (OFFSET 0)
            (TRUEASCENT -1)
@@ -718,17 +719,11 @@
            (OVERHANG 0)
            (SPACELEFT 0)
            (TX 0)
-           (BOXSTREAM IMAGESTREAM)
            CHARLOOKS THISLINE LINETYPE WIDTH WMARGIN SCALE PARALOOKS RIGHTMARGIN HASKERN PC CHARSLOT
            PREVSP 1STLN CHNOB FORCED-END CHNO LX1 TX TXB FONT CHARSLOTB TABPENDING PREVHYPH PREVDHYPH
            START-OF-PIECE UNBREAKABLE OLDPIECE OLDPCCHARSLEFT OLDCARETLOOKS FIRSTSEPR)
           (DECLARE (SPECVARS TEXTOBJ LINETYPE CHARLOOKS CHNO OFFSET ASCENTC DESCENTC FONT 
                           START-OF-PIECE HASKERN UNBREAKABLE))
-          (CL:UNLESS LINE
-
-              (* ;; "Not needed until the end, but then we might not get the starting values for WRIGHT and WBOTTOM, if those change from piece to piece--check this.")
-
-              (SETQ LINE (create LINEDESCRIPTOR)))
           (SETQ THISLINE (FGETTOBJ TEXTOBJ THISLINE))
 
      (* ;; 
@@ -899,9 +894,9 @@
                        (* ;; "If this isn't TRUEHARDCOPY, we want to do the imageobject in the displaystream with displaystream coordinates, because we don't know what internal size computations the imageobject might make based on its displaystream and fonts.  But we do have to down-scale WIDTH (right margin) back to the units of the display stream.")
 
                        (SETQ BOX (APPLY* (IMAGEOBJPROP CH 'IMAGEBOXFN)
-                                        CH BOXSTREAM TX (CL:IF (EQ LINETYPE 'HARDCOPYDISPLAY)
-                                                            (SCALEDOWN SCALE WIDTH)
-                                                            WIDTH)
+                                        CH IMAGESTREAM TX (CL:IF (EQ LINETYPE 'HARDCOPYDISPLAY)
+                                                              (SCALEDOWN SCALE WIDTH)
+                                                              WIDTH)
                                         TSTREAM))
                        (IMAGEOBJPROP CH 'BOUNDBOX BOX)
                        (SETQ TRUEASCENT (IMAX TRUEASCENT (IPLUS (IDIFFERENCE (fetch (IMAGEBOX YSIZE)
@@ -2295,7 +2290,9 @@
                            1)])
 
 (\TEDIT.UPDATE.LINES
-  [LAMBDA (TSTREAM REASON FIRSTCHANGEDCHNO NCHARSCHANGED)    (* ; "Edited 26-Apr-2025 19:19 by rmk")
+  [LAMBDA (TSTREAM REASON FIRSTCHANGEDCHNO NCHARSCHANGED)    (* ; "Edited 26-Oct-2025 17:10 by rmk")
+                                                             (* ; "Edited 24-Oct-2025 12:57 by rmk")
+                                                             (* ; "Edited 26-Apr-2025 19:19 by rmk")
                                                              (* ; "Edited 21-Apr-2025 20:30 by rmk")
                                                              (* ; "Edited  9-Apr-2025 12:59 by rmk")
                                                              (* ; "Edited  6-Apr-2025 14:23 by rmk")
@@ -2325,7 +2322,7 @@
     (LET ((TEXTOBJ (FTEXTOBJ TSTREAM)))
          (CL:UNLESS (FGETTOBJ TEXTOBJ TXTDON'TUPDATE)
              (\TEDIT.NOSEL TSTREAM)
-             (for PANE LASTVALID NEXTVALID LASTGAPLINE BITMAPLINES (LASTCHANGEDCHNO
+             [for PANE LASTVALID NEXTVALID LASTGAPLINE BITMAPLINES (LASTCHANGEDCHNO
                                                                     _
                                                                     (SUB1 (IPLUS FIRSTCHANGEDCHNO 
                                                                                  NCHARSCHANGED)))
@@ -2335,38 +2332,41 @@
                                ((CHANGED LOOKS) 
                                     0)
                                (\TEDIT.THELP "BAD REASONS FOR VALID LINES"))) inpanes TEXTOBJ
-                when (SETQ LASTVALID (\TEDIT.LASTVALIDLINE FIRSTCHANGEDCHNO LASTCHANGEDCHNO PANE 
-                                            TSTREAM))
                 do 
                    (* ;; 
                  "Create/format/position/display new lines between LASTVALID and NEXTVALID exclusive")
 
-                   (SETQ NEXTVALID (\TEDIT.NEXTVALIDLINE LASTCHANGEDCHNO PANE TSTREAM))
-                   (CL:UNLESS (ZEROP DELTA)                  (* ; 
+                   (SETQ LASTVALID (\TEDIT.LASTVALIDLINE FIRSTCHANGEDCHNO LASTCHANGEDCHNO PANE 
+                                          TSTREAM))
+                   (if LASTVALID
+                       then (SETQ NEXTVALID (\TEDIT.NEXTVALIDLINE LASTCHANGEDCHNO PANE TSTREAM))
+                            (CL:UNLESS (ZEROP DELTA)         (* ; 
                                               "Adjust the character numbers of the lower valid lines")
-                       (for L inlines NEXTVALID do (add (FGETLD L LCHAR1)
-                                                        DELTA)
-                                                   (add (FGETLD L LCHARLAST)
-                                                        DELTA))) 
+                                (for L inlines NEXTVALID do (add (FGETLD L LCHAR1)
+                                                                 DELTA)
+                                                            (add (FGETLD L LCHARLAST)
+                                                                 DELTA))) 
 
-                   (* ;; "MEASURED.LINES creates, measures, and links the lines from LASTVALID to the last pre-NEXTVALID character, without displaying.  They may be in the bitmap.")
+                            (* ;; "MEASURED.LINES creates, measures, and links the lines from LASTVALID to the last pre-NEXTVALID character, without displaying.  They may be in the bitmap.")
 
-                   [SETQ LASTGAPLINE (\TEDIT.MEASURED.LINES LASTVALID PANE TSTREAM
-                                            (CL:IF NEXTVALID
-                                                (SUB1 (FGETLD NEXTVALID LCHAR1))
-                                                (TEXTLEN TEXTOBJ))] 
+                            [SETQ LASTGAPLINE (\TEDIT.MEASURED.LINES LASTVALID PANE TSTREAM
+                                                     (CL:IF NEXTVALID
+                                                         (SUB1 (FGETLD NEXTVALID LCHAR1))
+                                                         (TEXTLEN TEXTOBJ))] 
 
-                   (* ;; 
+                            (* ;; 
             "The chain that ended at LASTVALID now continues thru LASTGAPLINE to NEXVALID and below.")
 
-                   (LINKLD LASTGAPLINE NEXTVALID)
-                   (if NEXTVALID
-                       then (SETQ BITMAPLINES (\TEDIT.BITMAPLINES PANE NEXTVALID))
-                     else (\TEDIT.SUFFIXLINE.CREATE PANE TSTREAM LASTGAPLINE)) 
+                            (LINKLD LASTGAPLINE NEXTVALID)
+                            (if NEXTVALID
+                                then (SETQ BITMAPLINES (\TEDIT.BITMAPLINES PANE NEXTVALID))
+                              else (\TEDIT.SUFFIXLINE.CREATE PANE TSTREAM LASTGAPLINE)) 
 
-                   (* ;; "If LASTVALID is not visible (above the pane), make sure that its NEXT is linked to the PANE's prefix")
+                            (* ;; "If LASTVALID is not visible (above the pane), make sure that its NEXT is linked to the PANE's prefix")
 
-                   (\TEDIT.SHIFTLINES LASTVALID PANE TSTREAM BITMAPLINES)))])
+                            (\TEDIT.SHIFTLINES LASTVALID PANE TSTREAM BITMAPLINES)
+                     else                                    (* ; "No lines left in this pane")
+                          (\TEDIT.SCROLLCH.TOP TSTREAM PANE (SUB1 FIRSTCHANGEDCHNO])])
 
 (\TEDIT.PANE.CREATELINES
   [LAMBDA (TSTREAM PANE LCHARLAST YBOT)                      (* ; "Edited 28-Jul-2025 23:23 by rmk")
@@ -2863,21 +2863,21 @@
                  (\TEDIT.LINE.TALLP LINE PHEIGHT))))])
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (26225 28441 (\TEDIT.LINEDESCRIPTOR.DEFPRINT 26235 . 28439)) (35895 119880 (
-\TEDIT.FORMATLINE 35905 . 71392) (\TEDIT.FORMATLINE.SETUP.PARA 71394 . 76560) (
-\TEDIT.FORMATLINE.HORIZONTAL 76562 . 81379) (\TEDIT.FORMATLINE.VERTICAL 81381 . 83832) (
-\TEDIT.FORMATLINE.JUSTIFY 83834 . 89855) (\TEDIT.FORMATLINE.TABS 89857 . 97885) (\TEDIT.SCALE.TABS 
-97887 . 98678) (\TEDIT.FORMATLINE.PURGE.SPACES 98680 . 100107) (\TEDIT.FORMATLINE.FLUSH.SOFTHYPHEN 
-100109 . 101186) (\TEDIT.FORMATLINE.EMPTY 101188 . 106008) (\TEDIT.FORMATLINE.UPDATELOOKS 106010 . 
-112191) (\TEDIT.FORMATLINE.LASTLEGAL 112193 . 115643) (\TEDIT.LINES.ABOVE 115645 . 119256) (
-\TEDIT.CHNO.TO.YTOP 119258 . 119878)) (120157 140737 (\TEDIT.DISPLAYLINE 120167 . 132677) (
-\TEDIT.DISPLAYLINE.TABS 132679 . 135483) (\TEDIT.LINECACHE 135485 . 136213) (\TEDIT.CREATE.LINECACHE 
-136215 . 137051) (\TEDIT.BLTCHAR 137053 . 139680) (\TEDIT.DIACRITIC.SHIFT 139682 . 140735)) (141352 
-186422 (\TEDIT.BACKFORMAT 141362 . 143916) (\TEDIT.PREVIOUS.LINEBREAK 143918 . 146721) (
-\TEDIT.UPDATE.LINES 146723 . 152438) (\TEDIT.PANE.CREATELINES 152440 . 154730) (
-\TEDIT.SUFFIXLINE.CREATE 154732 . 156347) (\TEDIT.LINES.BELOW 156349 . 160959) (\TEDIT.MEASURED.LINES 
-160961 . 162970) (\TEDIT.VALID.LASTCHNOS 162972 . 166748) (\TEDIT.VALID.NEXTCHNOS 166750 . 170224) (
-\TEDIT.LASTVALIDLINE 170226 . 174897) (\TEDIT.NEXTVALIDLINE 174899 . 177869) (
-\TEDIT.CLEARPANE.BELOW.LINE 177871 . 179977) (\TEDIT.INSERTLINE 179979 . 181365) (\TEDIT.LINE.BOTTOM 
-181367 . 184597) (\TEDIT.SHOW.AT.BOTTOMP 184599 . 185709) (\TEDIT.SHOW.AT.TOPP 185711 . 186420)))))
+  (FILEMAP (NIL (26214 28430 (\TEDIT.LINEDESCRIPTOR.DEFPRINT 26224 . 28428)) (35884 119488 (
+\TEDIT.FORMATLINE 35894 . 71000) (\TEDIT.FORMATLINE.SETUP.PARA 71002 . 76168) (
+\TEDIT.FORMATLINE.HORIZONTAL 76170 . 80987) (\TEDIT.FORMATLINE.VERTICAL 80989 . 83440) (
+\TEDIT.FORMATLINE.JUSTIFY 83442 . 89463) (\TEDIT.FORMATLINE.TABS 89465 . 97493) (\TEDIT.SCALE.TABS 
+97495 . 98286) (\TEDIT.FORMATLINE.PURGE.SPACES 98288 . 99715) (\TEDIT.FORMATLINE.FLUSH.SOFTHYPHEN 
+99717 . 100794) (\TEDIT.FORMATLINE.EMPTY 100796 . 105616) (\TEDIT.FORMATLINE.UPDATELOOKS 105618 . 
+111799) (\TEDIT.FORMATLINE.LASTLEGAL 111801 . 115251) (\TEDIT.LINES.ABOVE 115253 . 118864) (
+\TEDIT.CHNO.TO.YTOP 118866 . 119486)) (119765 140345 (\TEDIT.DISPLAYLINE 119775 . 132285) (
+\TEDIT.DISPLAYLINE.TABS 132287 . 135091) (\TEDIT.LINECACHE 135093 . 135821) (\TEDIT.CREATE.LINECACHE 
+135823 . 136659) (\TEDIT.BLTCHAR 136661 . 139288) (\TEDIT.DIACRITIC.SHIFT 139290 . 140343)) (140960 
+186621 (\TEDIT.BACKFORMAT 140970 . 143524) (\TEDIT.PREVIOUS.LINEBREAK 143526 . 146329) (
+\TEDIT.UPDATE.LINES 146331 . 152637) (\TEDIT.PANE.CREATELINES 152639 . 154929) (
+\TEDIT.SUFFIXLINE.CREATE 154931 . 156546) (\TEDIT.LINES.BELOW 156548 . 161158) (\TEDIT.MEASURED.LINES 
+161160 . 163169) (\TEDIT.VALID.LASTCHNOS 163171 . 166947) (\TEDIT.VALID.NEXTCHNOS 166949 . 170423) (
+\TEDIT.LASTVALIDLINE 170425 . 175096) (\TEDIT.NEXTVALIDLINE 175098 . 178068) (
+\TEDIT.CLEARPANE.BELOW.LINE 178070 . 180176) (\TEDIT.INSERTLINE 180178 . 181564) (\TEDIT.LINE.BOTTOM 
+181566 . 184796) (\TEDIT.SHOW.AT.BOTTOMP 184798 . 185908) (\TEDIT.SHOW.AT.TOPP 185910 . 186619)))))
 STOP
diff --git a/library/tedit/TEDIT-SCREEN.LCOM b/library/tedit/TEDIT-SCREEN.LCOM
index 12e95a86..ba69abb3 100644
Binary files a/library/tedit/TEDIT-SCREEN.LCOM and b/library/tedit/TEDIT-SCREEN.LCOM differ
diff --git a/library/tedit/TEDIT-STREAM b/library/tedit/TEDIT-STREAM
index c9360e8a..de978046 100644
--- a/library/tedit/TEDIT-STREAM
+++ b/library/tedit/TEDIT-STREAM
@@ -1,12 +1,12 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED "23-Sep-2025 08:19:29" {MEDLEY}<library>tedit>TEDIT-STREAM.;15 192029 
+(FILECREATED " 2-Dec-2025 17:50:45" {WMEDLEY}<library>tedit>TEDIT-STREAM.;930 194007 
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (FNS \TEDIT.TEXTINIT)
+      :CHANGES-TO (FNS OPENTEXTSTREAM \TEDIT.OPENTEXTFILE)
 
-      :PREVIOUS-DATE "20-Sep-2025 08:49:36" {MEDLEY}<library>tedit>TEDIT-STREAM.;14)
+      :PREVIOUS-DATE "19-Oct-2025 15:09:09" {WMEDLEY}<library>TEDIT>TEDIT-STREAM.;927)
 
 
 (PRETTYCOMPRINT TEDIT-STREAMCOMS)
@@ -83,10 +83,6 @@
                      (ADDVARS (INSPECTMACROS (TEXTOBJ \TEDIT.TEXTOBJ.PROPNAMES 
                                                     \TEDIT.TEXTOBJ.PROPFETCHFN 
                                                     \TEDIT.TEXTOBJ.PROPSTOREFN]
-        [COMS 
-              (* ;; "Support for error handling:  The old error handler for the stream-not-open error.  This is here, because you only want to do this ONCE, even if you load TEXT-STREAM multiple times (as, e.g., in development)")
-
-              (INITVARS (*TEDIT-OLD-STREAM-ERROR-HANDLER* (CONDITION-HANDLER 'XCL:STREAM-NOT-OPEN]
         (DECLARE%: DONTEVAL@LOAD DOCOPY (P (\TEDIT.TEXTINIT)))
         (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA)
                                                                              (NLAML)
@@ -126,7 +122,9 @@
               "The number of bytes in the UTF-8 encoding of all the Unicode characters in this piece")
                 [ACCESSFNS ((POBJ (AND (EQ OBJECT.PTYPE (PTYPE DATUM))
                                        (type? IMAGEOBJ (PCONTENTS DATUM))
-                                       (PCONTENTS DATUM]
+                                       (PCONTENTS DATUM))
+                                  (AND (EQ OBJECT.PTYPE (PTYPE DATUM))
+                                       (SETPC DATUM PCONTENTS NEWVALUE]
                 PFPOS _ 0 PLEN _ 0 PBYTELEN _ 0)
 
 (DATATYPE TEXTOBJ (
@@ -698,6 +696,8 @@
 (\TEDIT.TEXTBIN
   [LAMBDA (TSTREAM)
 
+    (* ;; "Edited 13-Oct-2025 17:16 by rmk")
+
     (* ;; "Edited 21-Oct-2024 00:26 by rmk")
 
     (* ;; "Edited  3-May-2024 14:57 by rmk")
@@ -767,7 +767,7 @@
                            (if (\ENDOFPIECEP PCCHARSLEFT)
                                then (SETQ PC (\TEDIT.INSTALL.PIECE TSTREAM (NEXTPIECE PC)
                                                     0))
-                             else (\TEDIT.INSTALL.FILEBUFFER TSTREAM (SUB1 PCCHARSLEFT))))
+                             else (\TEDIT.INSTALL.FILEBUFFER TSTREAM PCCHARSLEFT)))
                        (if (NOT PC)
                            then (STREAMOP 'ENDOFSTREAMOP TSTREAM TSTREAM)
                          elseif (ffetch (STREAM BINABLE) of TSTREAM)
@@ -1232,6 +1232,10 @@
 (OPENTEXTSTREAM
   [LAMBDA (TEXT WINDOW START/PROPS END PROPS)
 
+    (* ;; "Edited  2-Dec-2025 17:49 by rmk")
+
+    (* ;; "Edited 25-Sep-2025 21:30 by rmk")
+
     (* ;; "Edited  9-Sep-2025 22:07 by rmk")
 
     (* ;; "Edited 17-Feb-2025 08:57 by rmk")
@@ -1317,12 +1321,12 @@
                     (if TEXT
                         then                                 (* ; 
                                                              "Verify/open the file before the window")
-                             (SETQ TEXT (\TEDIT.OPENTEXTFILE TEXT PROPS))
+                             (SETQ TEXT (\TEDIT.OPENTEXTFILE TEXT PROPS T))
                              (FSETTOBJ TEXTOBJ TXTFILE TEXT)
                       else 
                            (* ;; "An empty document starts in an MCCS environment")
 
-                           (FPUTMULTI (FGETTOBJ TEXTOBJ DOCPROPS)
+                           (PUTMULTI (FGETTOBJ TEXTOBJ DOCPROPS)
                                   'CHARENCODING
                                   'MCCS)) 
 
@@ -1352,7 +1356,8 @@
              TSTREAM))])
 
 (COPYTEXTSTREAM
-  [LAMBDA (ORIGINAL CROSSCOPY)                               (* ; "Edited 21-Apr-2025 23:48 by rmk")
+  [LAMBDA (ORIGINAL CROSSCOPY)                               (* ; "Edited  5-Oct-2025 10:54 by rmk")
+                                                             (* ; "Edited 21-Apr-2025 23:48 by rmk")
                                                              (* ; "Edited  8-Feb-2025 20:10 by rmk")
                                                              (* ; "Edited 12-Jan-2025 12:16 by rmk")
                                                              (* ; "Edited 17-Mar-2024 12:41 by rmk")
@@ -1372,7 +1377,10 @@
 
     (LET* ((TSTREAM (TEXTSTREAM ORIGINAL))
            (TEXTOBJ (FTEXTOBJ TSTREAM))
-           [NEWSTREAM (OPENTEXTSTREAM NIL NIL NIL NIL (COPY (FGETTOBJ TEXTOBJ EDITPROPS]
+           [NEWSTREAM (OPENTEXTSTREAM NIL NIL NIL NIL (APPEND (COPY (FGETTOBJ TEXTOBJ EDITPROPS))
+                                                             (for DP in (FGETTOBJ TEXTOBJ DOCPROPS)
+                                                                collect (LIST (CAR DP)
+                                                                              (COPY (CDR DP]
            (NEWTEXTOBJ (FTEXTOBJ NEWSTREAM)))                (* ; 
                                    "Create an empty textstream into which the pieces can be hammered")
           (for PC NEWPC inpieces (\TEDIT.FIRSTPIECE TEXTOBJ)
@@ -1657,7 +1665,8 @@
          (SETTOBJ TEXTOBJ DEFAULTPARALOOKS PARALOOKS])
 
 (\TEDIT.OPENTEXTFILE
-  [LAMBDA (TEXT PROPS)                                       (* ; "Edited 16-Sep-2025 00:28 by rmk")
+  [LAMBDA (TEXT PROPS ERROR)                                 (* ; "Edited  2-Dec-2025 17:49 by rmk")
+                                                             (* ; "Edited 16-Sep-2025 00:28 by rmk")
                                                              (* ; "Edited  8-Sep-2025 21:52 by rmk")
                                                              (* ; "Edited 21-Nov-2024 11:38 by rmk")
                                                              (* ; "Edited 20-Dec-2023 10:49 by rmk")
@@ -1668,29 +1677,22 @@
                                                              (* ; "Edited 17-Sep-2023 21:29 by rmk")
     (CL:WHEN TEXT
         (if (\GETSTREAM TEXT 'INPUT T)
-          elseif (OR (LITATOM TEXT)
-                     (STRINGP TEXT)
-                     (CL:PATHNAMEP TEXT)
-                     (STREAMP TEXT))
-            then                                             (* ; "String detects empty extension")
-                 [RESETSAVE [SETQ TEXT (OPENSTREAM (if (STREAMP TEXT)
-                                                     elseif (OR (CL:PATHNAMEP TEXT)
-                                                                (FILENAMEFIELD.STRING TEXT
-                                                                       'EXTENSION))
-                                                       then (FINDFILE TEXT T)
-                                                     elseif (FINDFILE-WITH-EXTENSIONS TEXT NIL 
-                                                                   *TEDIT-EXTENSIONS*)
-                                                     else TEXT)
-                                              'INPUT
-                                              'OLD
-                                              `((TYPE TEXT)
-                                                (FORMAT ,(LISTGET PROPS 'FORMAT]
-                        '(PROGN (AND RESETSTATE (CLOSEF? OLDVALUE]
-                 TEXT
-          else 
-               (* ;; "Don't know what it is")
-
-               (ERROR TEXT " does not identify a Tedit document")))])
+          elseif [AND (OR (LITATOM TEXT)
+                          (STRINGP TEXT)
+                          (CL:PATHNAMEP TEXT)
+                          (STREAMP TEXT))
+                      (CAR (NLSETQ (OPENSTREAM (if (STREAMP TEXT)
+                                                 elseif (CL:PATHNAMEP TEXT)
+                                                   then (FINDFILE TEXT T)
+                                                 elseif (FINDFILE-WITH-EXTENSIONS TEXT NIL 
+                                                               *TEDIT-EXTENSIONS*)
+                                                 else TEXT)
+                                          'INPUT
+                                          'OLD
+                                          `((TYPE TEXT)
+                                            (FORMAT ,(LISTGET PROPS 'FORMAT]
+          elseif ERROR
+            then (ERROR "File not found:" TEXT)))])
 
 (\TEDIT.CREATE.TEXTSTREAM
   [LAMBDA (PROPS)                                            (* ; "Edited 28-Jul-2025 22:56 by rmk")
@@ -1751,7 +1753,7 @@
                 NEWSTREAM])
 
 (\TEDIT.TEXTINIT
-  [LAMBDA NIL                                                (* ; "Edited 23-Sep-2025 08:19 by rmk")
+  [LAMBDA NIL                                                (* ; "Edited 23-Sep-2025 21:03 by rmk")
                                                              (* ; "Edited 20-Sep-2025 08:48 by rmk")
                                                              (* ; "Edited 18-Sep-2025 14:52 by rmk")
                                                              (* ; "Edited 10-Jul-2025 11:28 by rmk")
@@ -1791,7 +1793,7 @@
     (* ;; "(FW8 WORD)")
 
     (SETQ \TEDITIMAGEOPS (create IMAGEOPS
-                                IMAGETYPE _ 'TEXT
+                                IMAGETYPE _ 'TEDIT
                                 IMXPOSITION _ (FUNCTION \TEDIT.TEXTDSPXPOSITION)
                                 IMYPOSITION _ (FUNCTION \TEDIT.TEXTDSPYPOSITION)
                                 IMLEFTMARGIN _ (FUNCTION \TEDIT.TEXTLEFTMARGIN)
@@ -1821,6 +1823,9 @@
            (FUNCTION \TEDIT.TEXTOUTCHARFN)
            (FUNCTION \TEDIT.TEXTFORMATBYTESTREAM)
            'CR NIL (FUNCTION \TEDIT.TEXTFORMATBYTESTRING))
+
+    (* ;; "Support for error handling:  The old error handler for the stream-not-open error.  ")
+
     (SETQ \TEDITFDEV (create FDEV
                             DEVICENAME _ 'TEDIT
                             RESETABLE _ T
@@ -1856,6 +1861,9 @@
                             TRUNCATEFILE _ (FUNCTION NILL)
                             WRITEPAGES _ (FUNCTION NILL)
                             DEFAULTEXTERNALFORMAT _ :TEXTSTREAM))
+                                                             (* ; 
+                          "Only load once, not every time TEDIT-STREAM is loaded e.g. in development")
+    (RPAQ? *TEDIT-OLD-STREAM-ERROR-HANDLER* (CONDITION-HANDLER 'XCL:STREAM-NOT-OPEN))
     (CL:SETF (CONDITION-HANDLER 'XCL:STREAM-NOT-OPEN)
            (FUNCTION (LAMBDA (CONDITION)
                        (LET ((STREAM (STREAM-ERROR-STREAM CONDITION)))
@@ -2100,28 +2108,34 @@
              (\TEDIT.INSTALL.PIECE TSTREAM PC (- CH# START-OF-PIECE)))])
 
 (\TEDIT.TEXTDSPXPOSITION
-  [LAMBDA (TSTREAM XPOSITION)                                (* ; "Edited 20-Sep-2025 08:30 by rmk")
+  [LAMBDA (TSTREAM XPOSITION)                                (* ; "Edited 20-Sep-2025 22:48 by rmk")
                                                              (* ; "Edited 25-Jun-2024 11:59 by rmk")
                                                              (* ; "Edited 17-Mar-2024 12:15 by rmk")
                                                             (* ; "Edited  3-Jan-2001 17:27 by rmk:")
                                                   (* ; 
                                      "Edited 24-Oct-88 23:09 by rmk:; Edited 26-Sep-85 16:30 by ajb:")
+    (* ;; "This doesn't make much sense for a character-oriented stream like a TEDIT stream.  If the stream is displayed in a window, this returns the window's current position, and changes it as well.  But that doesn't affect or particularly relate to the underlying sequence of characters.")
 
-    (* ;; 
-  "Simply returns the XPOSITION of the primary window's display stream, this is a read-only function")
+    (* ;; "If there is no window (an OPENTEXTSTREAM being written on by a printing algorithm, like the pretty printer for source files, this estimates the XPOSITION from the number of characters that have been printed on the line since the last TERPRI (= POSITION), assuming that they are all the width of the space (or the average charwidth).  And if XPOSITION is non-NIL, that is also translated into an estimated number of characters, and spaces are put out to get out to that position (essentially assuming that we are writing at the end of the file).  We can't go backwards.")
+
+    (* ;; "")
+
+    (* ;; "We could be more accurate by reading backwards to the last TERPRI, and not rely on POSITION.  And if we were going backwards, we could think of this as setting the caret position as close as possible to the specified XPOSITION,  But going forward, we still would have to fill in with spaces--and that's the PRETTYPRINT case.")
 
     (LET ((WINDOW (\TEDIT.PRIMARYPANE TSTREAM))
-          SPACEWIDTH)                                        (* ; 
+          SPACEWIDTH CHARPOS NSPACES)                        (* ; 
                                             "If there is no window, estimate from character position")
          (if WINDOW
              then (DSPXPOSITION XPOSITION WINDOW)
            else (SETQ SPACEWIDTH (CHARWIDTH (CHARCODE SPACE)
                                         TSTREAM))
-                (PROG1 (TIMES SPACEWIDTH (POSITION TSTREAM))
-                    (CL:WHEN (AND XPOSITION (IGEQ XPOSITION 0))
-                        (SPACES (IDIFFERENCE (QUOTIENT XPOSITION SPACEWIDTH)
-                                       (POSITION TSTREAM))
-                               TSTREAM)))])
+                (SETQ CHARPOS (POSITION TSTREAM))
+                (PROG1 (TIMES SPACEWIDTH CHARPOS)
+                    (CL:WHEN XPOSITION
+                        (SETQ NSPACES (IDIFFERENCE (FIXR (FQUOTIENT XPOSITION SPACEWIDTH))
+                                             CHARPOS))
+                        (CL:WHEN (IGREATERP NSPACES 0)
+                               (SPACES NSPACES TSTREAM))))])
 
 (\TEDIT.TEXTDSPYPOSITION
   [LAMBDA (TSTREAM YPOSITION)                                (* ; "Edited 25-Jun-2024 11:59 by rmk")
@@ -2970,7 +2984,8 @@
          OLDITEMS])
 
 (\TEDIT.TEXTPROP
-  [LAMBDA (TEXTOBJ PROP SETNEWVALUE NEWVALUE)                (* ; "Edited 17-Jul-2025 00:19 by rmk")
+  [LAMBDA (TEXTOBJ PROP SETNEWVALUE NEWVALUE)                (* ; "Edited  5-Oct-2025 10:15 by rmk")
+                                                             (* ; "Edited 17-Jul-2025 00:19 by rmk")
                                                              (* ; "Edited 16-Feb-2025 23:27 by rmk")
                                                              (* ; "Edited 15-Feb-2025 14:02 by rmk")
                                                              (* ; "Edited 22-Dec-2024 00:23 by rmk")
@@ -3056,32 +3071,42 @@
                     (CL:WHEN SETNEWVALUE (FSETTOBJ TEXTOBJ LOOPFN NEWVALUE))))
         (CHARFN (PROG1 (FGETTOBJ TEXTOBJ CHARFN)
                     (CL:WHEN SETNEWVALUE (FSETTOBJ TEXTOBJ CHARFN NEWVALUE))))
-        (PROG1 (LISTGET (FGETTOBJ TEXTOBJ EDITPROPS)
-                      PROP)
-            (CL:WHEN SETNEWVALUE
-                (CL:UNLESS (LISTP (FGETTOBJ TEXTOBJ EDITPROPS))
+        (OR (PROG1 (LISTGET (FGETTOBJ TEXTOBJ EDITPROPS)
+                          PROP)
+                (CL:WHEN SETNEWVALUE
+                    (CL:UNLESS (LISTP (FGETTOBJ TEXTOBJ EDITPROPS))
                                                              (* ; 
                                                  "Make sure we have a list to smash, no matter what.")
-                    (FSETTOBJ TEXTOBJ EDITPROPS (LIST PROP NIL)))
-                (LISTPUT (FGETTOBJ TEXTOBJ EDITPROPS)
-                       PROP NEWVALUE)))])
+                        (FSETTOBJ TEXTOBJ EDITPROPS (LIST PROP NIL)))
+                    (LISTPUT (FGETTOBJ TEXTOBJ EDITPROPS)
+                           PROP NEWVALUE)))
+            (PROG1 (GETMULTI (FGETTOBJ TEXTOBJ DOCPROPS)
+                          PROP)
+                (CL:WHEN SETNEWVALUE
+                    (PUTMULTI (FGETTOBJ TEXTOBJ DOCPROPS)
+                           PROP NEWVALUE)))])
 )
 (DEFINEQ
 
 (\TEDIT.TEXTOBJ.PROPNAMES
-  [LAMBDA (TEXTOBJ)                                          (* ; "Edited  4-Jul-2024 11:08 by rmk")
+  [LAMBDA (TEXTOBJ)                                          (* ; "Edited  5-Oct-2025 10:50 by rmk")
+                                                             (* ; "Edited  4-Jul-2024 11:08 by rmk")
                                                              (* ; "Edited 30-Jun-2024 09:04 by rmk")
 
     (* ;; "Stick the user properties at the end with --USERPROPS-- separator. INSPECTABLEFIELDNAMES does the sort for defined field names, the UFIELDS have to be sorted here.")
 
-    (LET ([TFIELDS (REMOVE 'EDITPROPS (INSPECTABLEFIELDNAMES (OR (RECLOOK 'TEXTOBJ)
+    (LET [[TFIELDS (REMOVE 'EDITPROPS (INSPECTABLEFIELDNAMES (OR (RECLOOK 'TEXTOBJ)
                                                                  (SYSRECLOOK1 'TEXTOBJ]
-          (UFIELDS (for X in (fetch (TEXTOBJ EDITPROPS) of TEXTOBJ) by (CDDR X) collect X)))
+          (EPROPS (for X in (fetch (TEXTOBJ EDITPROPS) of TEXTOBJ) by (CDDR X) collect X))
+          (DPROPS (for X in (fetch (TEXTOBJ DOCPROPS) of TEXTOBJ) collect (CAR X]
          (CL:UNLESS (OR (EQ T INSPECTDONTSORTFIELDS)
                         (MEMB 'TEXTOBJ INSPECTDONTSORTFIELDS))
-             (SETQ UFIELDS (SORT UFIELDS)))
-         (APPEND TFIELDS (CONS '--USERPROPS--)
-                UFIELDS])
+             (SETQ EPROPS (SORT EPROPS))
+             (SETQ DPROPS (SORT DPROPS)))
+         (APPEND TFIELDS (CONS '--EDITPROPS--)
+                EPROPS
+                (CONS '--DOCPROPS--)
+                DPROPS])
 
 (\TEDIT.TEXTOBJ.PROPFETCHFN
   [LAMBDA (TEXTOBJ PROPNAME)                                 (* ; "Edited  4-Jul-2024 11:53 by rmk")
@@ -3113,15 +3138,6 @@
 (ADDTOVAR INSPECTMACROS (TEXTOBJ \TEDIT.TEXTOBJ.PROPNAMES \TEDIT.TEXTOBJ.PROPFETCHFN 
                                \TEDIT.TEXTOBJ.PROPSTOREFN))
 )
-
-
-
-(* ;; 
-"Support for error handling:  The old error handler for the stream-not-open error.  This is here, because you only want to do this ONCE, even if you load TEXT-STREAM multiple times (as, e.g., in development)"
-)
-
-
-(RPAQ? *TEDIT-OLD-STREAM-ERROR-HANDLER* (CONDITION-HANDLER 'XCL:STREAM-NOT-OPEN))
 (DECLARE%: DONTEVAL@LOAD DOCOPY 
 
 (\TEDIT.TEXTINIT)
@@ -3135,34 +3151,34 @@
 (ADDTOVAR LAMA TEXTPROP)
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (36887 67703 (\TEDIT.TEXTBIN 36897 . 47647) (\TEDIT.TEXTPEEKBIN 47649 . 53199) (
-\TEDIT.TEXTBACKFILEPTR 53201 . 58874) (\TEDIT.TEXTBOUT 58876 . 63493) (\TEDIT.INSTALL.FILEBUFFER 63495
- . 67701)) (68601 72892 (\TEDIT.TEXTOUTCHARFN 68611 . 70167) (\TEDIT.TEXTINCCODEFN 70169 . 70908) (
-\TEDIT.TEXTBACKCCODEFN 70910 . 71502) (\TEDIT.TEXTFORMATBYTESTREAM 71504 . 72341) (
-\TEDIT.TEXTFORMATBYTESTRING 72343 . 72890)) (72939 84503 (OPENTEXTSTREAM 72949 . 79824) (
-COPYTEXTSTREAM 79826 . 83726) (TEDIT.STREAMCHANGEDP 83728 . 84030) (TXTFILE 84032 . 84501)) (84504 
-115746 (\TEDIT.REOPENTEXTSTREAM 84514 . 85866) (\TEDIT.OPENTEXTSTREAM.PIECES 85868 . 90796) (
-\TEDIT.OPENTEXTSTREAM.PROPS 90798 . 91900) (\TEDIT.OPENTEXTSTREAM.SETUP.SEL 91902 . 97143) (
-\TEDIT.OPENTEXTSTREAM.WINDOW 97145 . 99936) (\TEDIT.OPENTEXTSTREAM.DEFAULTLOOKS 99938 . 101877) (
-\TEDIT.OPENTEXTFILE 101879 . 104356) (\TEDIT.CREATE.TEXTSTREAM 104358 . 105505) (\TEDIT.REOPEN.STREAM 
-105507 . 107843) (\TEDIT.TEXTINIT 107845 . 115744)) (115784 116972 (\TEDIT.TTYBOUT 115794 . 116970)) (
-117090 137553 (\TEDIT.TEXTCLOSEF 117100 . 118424) (\TEDIT.TEXTDSPFONT 118426 . 119624) (
-\TEDIT.TEXTEOFP 119626 . 121381) (\TEDIT.TEXTGETEOFPTR 121383 . 121706) (\TEDIT.TEXTSETEOFPTR 121708
- . 122995) (\TEDIT.TEXTGETFILEPTR 122997 . 125832) (\TEDIT.TEXTSETFILEINFO 125834 . 126342) (
-\TEDIT.TEXTOPENF 126344 . 127275) (\TEDIT.TEXTSETEOF 127277 . 127893) (\TEDIT.TEXTSETFILEPTR 127895 . 
-130005) (\TEDIT.TEXTDSPXPOSITION 130007 . 131490) (\TEDIT.TEXTDSPYPOSITION 131492 . 132233) (
-\TEDIT.TEXTLEFTMARGIN 132235 . 132826) (\TEDIT.TEXTCOLOR 132828 . 133411) (\TEDIT.TEXTRIGHTMARGIN 
-133413 . 136702) (\TEDIT.TEXTDSPCHARWIDTH 136704 . 137008) (\TEDIT.TEXTDSPSTRINGWIDTH 137010 . 137316)
- (\TEDIT.TEXTDSPLINEFEED 137318 . 137551)) (137591 150204 (\TEDIT.NTHCHARCODE 137601 . 139052) (
-\TEDIT.PIECE.NTHCHARCODE 139054 . 142964) (\TEDIT.RPLCHARCODE 142966 . 144424) (
-\TEDIT.PIECE.RPLCHARCODE 144426 . 149849) (\TEDIT.NTHCHARLOOKS 149851 . 150202)) (151251 172345 (
-\TEDIT.DELETE.SELPIECES 151261 . 154886) (\TEDIT.INSERTCH 154888 . 162927) (\TEDIT.INSERTCH.HISTORY 
-162929 . 166393) (\TEDIT.INSERTEOL 166395 . 168220) (\TEDIT.INSERTCH.INSERTION 168222 . 171059) (
-\TEDIT.INSERTCH.EXTEND 171061 . 172343)) (172346 173850 (\TEDIT.NEXTCHANGEABLE.CHNO 172356 . 173071) (
-\TEDIT.LASTCHANGEABLE.CHNO 173073 . 173848)) (173851 175555 (\SETUPGETCH 173861 . 175553)) (175613 
-180071 (\TEDIT.INSTALL.PIECE 175623 . 180069)) (180109 189210 (TEXTPROP 180119 . 180466) (GETTEXTPROP 
-180468 . 180712) (PUTTEXTPROP 180714 . 180971) (GETTEXTPROPS 180973 . 181417) (PUTTEXTPROPS 181419 . 
-182323) (TEXTPROP.ADD 182325 . 182588) (\TEDIT.TEXTPROP 182590 . 189208)) (189211 191281 (
-\TEDIT.TEXTOBJ.PROPNAMES 189221 . 190173) (\TEDIT.TEXTOBJ.PROPFETCHFN 190175 . 190691) (
-\TEDIT.TEXTOBJ.PROPSTOREFN 190693 . 191279)))))
+  (FILEMAP (NIL (36705 67564 (\TEDIT.TEXTBIN 36715 . 47508) (\TEDIT.TEXTPEEKBIN 47510 . 53060) (
+\TEDIT.TEXTBACKFILEPTR 53062 . 58735) (\TEDIT.TEXTBOUT 58737 . 63354) (\TEDIT.INSTALL.FILEBUFFER 63356
+ . 67562)) (68462 72753 (\TEDIT.TEXTOUTCHARFN 68472 . 70028) (\TEDIT.TEXTINCCODEFN 70030 . 70769) (
+\TEDIT.TEXTBACKCCODEFN 70771 . 71363) (\TEDIT.TEXTFORMATBYTESTREAM 71365 . 72202) (
+\TEDIT.TEXTFORMATBYTESTRING 72204 . 72751)) (72800 84875 (OPENTEXTSTREAM 72810 . 79786) (
+COPYTEXTSTREAM 79788 . 84098) (TEDIT.STREAMCHANGEDP 84100 . 84402) (TXTFILE 84404 . 84873)) (84876 
+116145 (\TEDIT.REOPENTEXTSTREAM 84886 . 86238) (\TEDIT.OPENTEXTSTREAM.PIECES 86240 . 91168) (
+\TEDIT.OPENTEXTSTREAM.PROPS 91170 . 92272) (\TEDIT.OPENTEXTSTREAM.SETUP.SEL 92274 . 97515) (
+\TEDIT.OPENTEXTSTREAM.WINDOW 97517 . 100308) (\TEDIT.OPENTEXTSTREAM.DEFAULTLOOKS 100310 . 102249) (
+\TEDIT.OPENTEXTFILE 102251 . 104383) (\TEDIT.CREATE.TEXTSTREAM 104385 . 105532) (\TEDIT.REOPEN.STREAM 
+105534 . 107870) (\TEDIT.TEXTINIT 107872 . 116143)) (116183 117371 (\TEDIT.TTYBOUT 116193 . 117369)) (
+117489 139172 (\TEDIT.TEXTCLOSEF 117499 . 118823) (\TEDIT.TEXTDSPFONT 118825 . 120023) (
+\TEDIT.TEXTEOFP 120025 . 121780) (\TEDIT.TEXTGETEOFPTR 121782 . 122105) (\TEDIT.TEXTSETEOFPTR 122107
+ . 123394) (\TEDIT.TEXTGETFILEPTR 123396 . 126231) (\TEDIT.TEXTSETFILEINFO 126233 . 126741) (
+\TEDIT.TEXTOPENF 126743 . 127674) (\TEDIT.TEXTSETEOF 127676 . 128292) (\TEDIT.TEXTSETFILEPTR 128294 . 
+130404) (\TEDIT.TEXTDSPXPOSITION 130406 . 133109) (\TEDIT.TEXTDSPYPOSITION 133111 . 133852) (
+\TEDIT.TEXTLEFTMARGIN 133854 . 134445) (\TEDIT.TEXTCOLOR 134447 . 135030) (\TEDIT.TEXTRIGHTMARGIN 
+135032 . 138321) (\TEDIT.TEXTDSPCHARWIDTH 138323 . 138627) (\TEDIT.TEXTDSPSTRINGWIDTH 138629 . 138935)
+ (\TEDIT.TEXTDSPLINEFEED 138937 . 139170)) (139210 151823 (\TEDIT.NTHCHARCODE 139220 . 140671) (
+\TEDIT.PIECE.NTHCHARCODE 140673 . 144583) (\TEDIT.RPLCHARCODE 144585 . 146043) (
+\TEDIT.PIECE.RPLCHARCODE 146045 . 151468) (\TEDIT.NTHCHARLOOKS 151470 . 151821)) (152870 173964 (
+\TEDIT.DELETE.SELPIECES 152880 . 156505) (\TEDIT.INSERTCH 156507 . 164546) (\TEDIT.INSERTCH.HISTORY 
+164548 . 168012) (\TEDIT.INSERTEOL 168014 . 169839) (\TEDIT.INSERTCH.INSERTION 169841 . 172678) (
+\TEDIT.INSERTCH.EXTEND 172680 . 173962)) (173965 175469 (\TEDIT.NEXTCHANGEABLE.CHNO 173975 . 174690) (
+\TEDIT.LASTCHANGEABLE.CHNO 174692 . 175467)) (175470 177174 (\SETUPGETCH 175480 . 177172)) (177232 
+181690 (\TEDIT.INSTALL.PIECE 177242 . 181688)) (181728 191194 (TEXTPROP 181738 . 182085) (GETTEXTPROP 
+182087 . 182331) (PUTTEXTPROP 182333 . 182590) (GETTEXTPROPS 182592 . 183036) (PUTTEXTPROPS 183038 . 
+183942) (TEXTPROP.ADD 183944 . 184207) (\TEDIT.TEXTPROP 184209 . 191192)) (191195 193572 (
+\TEDIT.TEXTOBJ.PROPNAMES 191205 . 192464) (\TEDIT.TEXTOBJ.PROPFETCHFN 192466 . 192982) (
+\TEDIT.TEXTOBJ.PROPSTOREFN 192984 . 193570)))))
 STOP
diff --git a/library/tedit/TEDIT-STREAM.LCOM b/library/tedit/TEDIT-STREAM.LCOM
index 42aceda2..d9bbf246 100644
Binary files a/library/tedit/TEDIT-STREAM.LCOM and b/library/tedit/TEDIT-STREAM.LCOM differ
diff --git a/library/tedit/tedit-exports.all b/library/tedit/tedit-exports.all
index 7ad44b83..8f4f13bb 100644
--- a/library/tedit/tedit-exports.all
+++ b/library/tedit/tedit-exports.all
@@ -1,9 +1,11 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED "20-Sep-2025 11:04:51" 
-{DSK}<Users>kaplan>Local>medley3.5>working-medley>library>tedit>tedit-exports.all;242 52344  
+(FILECREATED "20-Oct-2025 11:20:51" 
+{DSK}<Users>kaplan>Local>medley3.5>working-medley>library>tedit>tedit-exports.all;243 52506  
 
-      :EDIT-BY rmk)
+      :EDIT-BY rmk
+
+      :PREVIOUS-DATE "20-Sep-2025 11:04:51" {WMEDLEY}<library>TEDIT>tedit-exports.all;242)
 
 
 (PRETTYCOMPRINT ((E (MAPC (MKLIST FROMFILES) (FUNCTION (LAMBDA (F) (MAPC (IMPORTFILE F FLG) (FUNCTION 
@@ -15,7 +17,7 @@ PRINT))))))))
 (PUTPROPS FTEXTOBJ MACRO ((X) (TEXTOBJ! (CL:IF (type? TEXTOBJ X) X (GETTSTR X TEXTOBJ)))))
 (GLOBALVARS CHECK-TEDIT-ASSERTIONS)
 (RPAQ? CHECK-TEDIT-ASSERTIONS T)
-(PUTPROP (QUOTE TEDIT) (QUOTE IMPORTDATE) (IDATE " 8-Sep-2025 22:10:20"))
+(PUTPROP (QUOTE TEDIT) (QUOTE IMPORTDATE) (IDATE "28-Sep-2025 11:35:06"))
 (RPAQQ \BTREEWORDSPERSLOT 4)
 (RPAQQ \BTREEMAXCOUNT 8)
 (CONSTANTS (\BTREEWORDSPERSLOT 4) (\BTREEMAXCOUNT 8))
@@ -258,7 +260,7 @@ NEXTAVAILABLECHARSLOT) of THISLINE))) (T $$STARTSLOT))) (SETQ $$CHARSLOTLIMIT (F
 ) by (PREVCHARSLOT I.V.) eachtime (SETQ CHAR (fetch (CHARSLOT CHAR) of I.V.)) (SETQ CHARW (fetch (
 CHARSLOT CHARW) of I.V.)) (SETQ CHARCL (fetch (CHARSLOT CHARCL) of I.V.)) repeatuntil (EQ I.V. 
 $$CHARSLOTLIMIT))))) T)
-(PUTPROP (QUOTE TEDIT-SCREEN) (QUOTE IMPORTDATE) (IDATE " 7-Aug-2025 12:51:00"))
+(PUTPROP (QUOTE TEDIT-SCREEN) (QUOTE IMPORTDATE) (IDATE "19-Oct-2025 00:07:29"))
 (DATATYPE PIECE ((* ; 
 "The piece describes either a string or part of a file.  , or a generalized OBJECT.") PCONTENTS (* ; 
 "The background source of data for this piece (stream, string, block, object, depending on the PTYPE)."
@@ -275,8 +277,8 @@ PNEW FLAG) (* ;
  XPOINTER) (* ; "Points to the PCTB tree-node that contains this piece.") (PCHARSET BYTE) (* ; 
 "High-order charset for FATFILE1 pieces") (PUTF8BYTESPERCHAR BYTE)) (* ; 
 "The number of bytes in the UTF-8 encoding of all the Unicode characters in this piece") (ACCESSFNS ((
-POBJ (AND (EQ OBJECT.PTYPE (PTYPE DATUM)) (type? IMAGEOBJ (PCONTENTS DATUM)) (PCONTENTS DATUM))))) 
-PFPOS _ 0 PLEN _ 0 PBYTELEN _ 0)
+POBJ (AND (EQ OBJECT.PTYPE (PTYPE DATUM)) (type? IMAGEOBJ (PCONTENTS DATUM)) (PCONTENTS DATUM)) (AND (
+EQ OBJECT.PTYPE (PTYPE DATUM)) (SETPC DATUM PCONTENTS NEWVALUE))))) PFPOS _ 0 PLEN _ 0 PBYTELEN _ 0)
 (DATATYPE TEXTOBJ ((* ;; 
 "This is where TEdit stores its state information, and internal data about the text being edited.") 
 PCTB (* ; "The piece table") TEXTLEN (* ; "# of chars in the text") PRIMARYPANE (* ; 
@@ -438,7 +440,7 @@ UTF8.PTYPE UTF16BE.PTYPE UTF16LE.PTYPE)) (STRING.PTYPES (LIST THINSTRING.PTYPE F
 BINABLE.PTYPES (LIST THINFILE.PTYPE THINSTRING.PTYPE)) (THIN.PTYPES (LIST THINFILE.PTYPE 
 THINSTRING.PTYPE)) (FAT.PTYPES (LIST FATFILE2.PTYPE FATSTRING.PTYPE FATFILE1.PTYPE)))
 (GLOBALVARS \TEXTIMAGEOPS \TEXTFDEV)
-(PUTPROP (QUOTE TEDIT-STREAM) (QUOTE IMPORTDATE) (IDATE "20-Sep-2025 08:49:36"))
+(PUTPROP (QUOTE TEDIT-STREAM) (QUOTE IMPORTDATE) (IDATE "19-Oct-2025 15:09:09"))
 (PUTPROPS \TEDIT.MOUSESTATE MACRO (BUTTON (* ;; 
 "Test to see if only the specified mouse button is down.  DOES NOT call GETMOUSESTATE, so the mouse-button info is the same as the last time it was called."
 ) (SELECTQ (CAR BUTTON) (LEFT (QUOTE (EQ LASTMOUSEBUTTONS 4))) (MIDDLE (QUOTE (EQ LASTMOUSEBUTTONS 1))
@@ -452,7 +454,7 @@ I in ARGS as J on ARGS when (NOT (STRINGP I)) collect (LIST (QUOTE OR) I (LIST (
 \BIN STREAM)) BITSPERWORD)))
 (PUTPROPS \SMALLPOUT MACRO (OPENLAMBDA (STREAM W) (* ; "Signed smallp, unlike \WOUT") (\BOUT STREAM (
 LOGAND 255 (LRSH W 8))) (\BOUT STREAM (LOGAND W 255))))
-(PUTPROP (QUOTE TEDIT-FILE) (QUOTE IMPORTDATE) (IDATE " 9-Sep-2025 21:49:43"))
+(PUTPROP (QUOTE TEDIT-FILE) (QUOTE IMPORTDATE) (IDATE "25-Sep-2025 21:32:46"))
 (PUTPROP (QUOTE TEDIT-OLDFILE) (QUOTE IMPORTDATE) (IDATE " 8-Sep-2025 22:10:10"))
 (DATATYPE CHARLOOKS ((* ;; "Describes the appearance (%"Looks%") of characters in a TEdit document.") 
 (* ;; "NOTE:  If fields change EQCLOOKS should change too.") CLFONT (* ; 
@@ -535,7 +537,7 @@ LINELEAD _ 0)
 (PUTPROPS FSETPLOOKS MACRO ((PLOOKS FIELD NEWVALUE) (freplace (PARALOOKS FIELD) of PLOOKS with 
 NEWVALUE)))
 (PUTPROPS PARALOOKS! MACRO ((PL) (\DTEST PL (QUOTE PARALOOKS))))
-(PUTPROP (QUOTE TEDIT-LOOKS) (QUOTE IMPORTDATE) (IDATE " 9-Sep-2025 21:55:31"))
+(PUTPROP (QUOTE TEDIT-LOOKS) (QUOTE IMPORTDATE) (IDATE " 6-Oct-2025 20:50:59"))
 (PUTPROP (QUOTE TEDIT-STYLES) (QUOTE IMPORTDATE) (IDATE "28-Jul-2025 23:25:43"))
 (DATATYPE TEDITCARET (TCNOWTIME (* Used to hold the current time, when checking to see if a transition
  is due) TCTHENTIME (* Time when the next transition is to take place) TCFORCEDDOWN (* TCFORCEDOWN = T
@@ -598,9 +600,9 @@ OR (CL:IF (TYPENAMEP $$BODY (QUOTE TEXTOBJ)) (FGETTOBJ $$BODY PRIMARYPANE) $$BOD
 GETPANEPROP (PANEPROPS P) NEXTPANE))) (GO $$OUT))) by (OR (GETPANEPROP (PANEPROPS I.V.) PREVPANE) (GO 
 $$OUT)))))
 (PUTPROPS ALLBUTTONSUP MACRO (NIL (ZEROP (LOGAND 7 LASTMOUSEBUTTONS))))
-(PUTPROP (QUOTE TEDIT-WINDOW) (QUOTE IMPORTDATE) (IDATE "18-Sep-2025 23:09:24"))
-(PUTPROP (QUOTE TEDIT-BUTTONS) (QUOTE IMPORTDATE) (IDATE "30-Apr-2025 14:09:18"))
-(PUTPROP (QUOTE TEDIT-MENU) (QUOTE IMPORTDATE) (IDATE "10-Sep-2025 17:08:43"))
+(PUTPROP (QUOTE TEDIT-WINDOW) (QUOTE IMPORTDATE) (IDATE "19-Oct-2025 15:13:01"))
+(PUTPROP (QUOTE TEDIT-BUTTONS) (QUOTE IMPORTDATE) (IDATE "19-Oct-2025 10:44:18"))
+(PUTPROP (QUOTE TEDIT-MENU) (QUOTE IMPORTDATE) (IDATE "19-Oct-2025 15:14:00"))
 (PUTPROP (QUOTE TEDIT-FIND) (QUOTE IMPORTDATE) (IDATE "21-Apr-2025 22:42:57"))
 (RPAQQ \TEDIT.TTCCODES ((NONE 0) (CHARDELETE 1) (WORDDELETE 2) (DELETE 3) (FUNCTIONCALL 4) (REDO 5) (
 UNDO 6) (CMD 7) (NEXT 8) (EXPAND 9) (CHARDELETE.FORWARD 10) (WORDDELETE.FORWARD 11) (PUNCT 20) (TEXT 
@@ -657,7 +659,7 @@ REGIONPARENT FULLXPOINTER) (* ; "The parent node for this box, for sub-boxes") R
 $$VALUES)) (PROG1 (CAR $$VALUES) (\,@ (FOR V IN (CAR ARGS) collect (COND (V (BQUOTE (SETQ (\, V) (POP 
 $$VALUES)))) (T (BQUOTE (SETQ $$VALUES (CDR $$VALUES))))))))))))
 (PUTPROPS TEDIT.VALUES MACRO (ARGS (BQUOTE (LIST (\,@ ARGS)))))
-(PUTPROP (QUOTE TEDIT-PAGE) (QUOTE IMPORTDATE) (IDATE "19-Sep-2025 22:09:03"))
+(PUTPROP (QUOTE TEDIT-PAGE) (QUOTE IMPORTDATE) (IDATE "27-Sep-2025 16:25:26"))
 (PUTPROP (QUOTE TEDIT-ABBREV) (QUOTE IMPORTDATE) (IDATE " 6-Sep-2025 00:10:45"))
 (PUTPROP (QUOTE TEDIT-TFBRAVO) (QUOTE IMPORTDATE) (IDATE " 7-Sep-2025 11:11:43"))
 (DECLARE%: DONTCOPY
diff --git a/sources/HARDCOPY b/sources/HARDCOPY
index 4011c002..dbb7e6cb 100644
--- a/sources/HARDCOPY
+++ b/sources/HARDCOPY
@@ -1,12 +1,14 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED "11-Sep-2025 17:08:34" {WMEDLEY}<sources>HARDCOPY.;47 148569 
+(FILECREATED " 4-Nov-2025 22:43:57" {WMEDLEY}<sources>HARDCOPY.;85 147281 
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (FNS PRINTERDEVICE.OPENFN)
+      :CHANGES-TO (FNS GetImageFile HARDCOPYIMAGEW.TOFILE CAN.PRINT.DIRECTLY HARDCOPY.SOMEHOW 
+                       CONVERT.FILE.TO.TYPE.FOR.PRINTER)
+                  (VARS HARDCOPYCOMS)
 
-      :PREVIOUS-DATE "11-Sep-2025 12:40:56" {WMEDLEY}<sources>HARDCOPY.;46)
+      :PREVIOUS-DATE " 4-Oct-2025 16:37:56" {WMEDLEY}<sources>HARDCOPY.;76)
 
 
 (PRETTYCOMPRINT HARDCOPYCOMS)
@@ -29,16 +31,15 @@
               (INITVARS (ChangeDefaultPrinter))
               (FNS MakeMenuOfPrinters PRINTERS.WHENSELECTEDFN MakeMenuOfImageTypes 
                    GetNewPrinterFromUser PopUpWindowAndGetAtom PopUpWindowAndGetList NewPrinter 
-                   GetPrinterName GetImageFile FetchDefaultPrinter)
-                                                             (* ; "filename diddlers")
-              (FNS EXTENSIONS.FOR.PRINTFILETYPE PRINTFILETYPE.FROM.EXTENSION))
+                   GetPrinterName GetImageFile FetchDefaultPrinter))
         (COMS                                                (* ; 
                                                              "Interface for PRINTERS and IMAGEFILES")
-              (FNS DEFAULTPRINTER CAN.PRINT.DIRECTLY CONVERT.FILE.TO.TYPE.FOR.PRINTER EMPRESS 
+              (FNS DEFAULTPRINTER CONVERT.FILE.TO.TYPE.FOR.PRINTER CAN.PRINT.DIRECTLY 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 PRINTERDEVICE.OPENFN PRINTERDEVICE.CLOSEFN)
+                   PRINTERPROP PRINTERSTATUS PRINTERTYPE PRINTERNAME PRINTFILETYPE 
+                   SEND.FILE.TO.PRINTER)
+              (FNS PRINTERDEVICE PRINTERDEVICE.OPENFN PRINTERDEVICE.CLOSEFN PRINTERDEVICEP 
+                   PRINTERNAME)
               [DECLARE%: DONTEVAL@LOAD DOCOPY (P (PRINTERDEVICE 'LPT]
               (INITVARS (DEFAULTPRINTINGHOST)
                      (DEFAULTPRINTERTYPE 'PDF)
@@ -124,61 +125,77 @@
 (DEFINEQ
 
 (HARDCOPY.SOMEHOW
-  [LAMBDA (WINDOW FILE PRINTERTYPE IMAGETYPE)                (* ; "Edited 26-Nov-96 15:59 by rmk:")
+  [LAMBDA (WINDOW IMAGEFILE IMAGETYPE)                       (* ; "Edited  3-Nov-2025 16:10 by rmk")
+                                                             (* ; "Edited 29-Sep-2025 23:54 by rmk")
+                                                             (* ; "Edited 19-Sep-2025 17:09 by rmk")
+                                                             (* ; "Edited 26-Nov-96 15:59 by rmk:")
                                                              (* ; "Edited 13-Nov-87 14:16 by Snow")
 
     (* ;; "Either run window's HARDCOPYFN or run HARDCOPYW.  The HARDCOPYFN can be a list of the form (fn heading) where heading=TITLE means use the window's title, otherwise using the non-nil heading.")
 
-    (LET ((HARDCOPYFN (WINDOWPROP WINDOW 'HARDCOPYFN))
-          HEADING)
-         (ALLOW.BUTTON.EVENTS)
-         (COND
-            ((NULL HARDCOPYFN)                               (* ; "knows how to default")
-             (HARDCOPYW WINDOW FILE NIL NIL NIL PRINTERTYPE))
-            (T (CL:WHEN (AND (LISTP HARDCOPYFN)
-                             (FNTYP (CAR HARDCOPYFN)))
-                   (SETQ HEADING (CADR HARDCOPYFN))
-                   (CL:WHEN (EQ HEADING 'TITLE)
-                       (SETQ HEADING (WINDOWPROP WINDOW 'TITLE)))
-                   (SETQ HARDCOPYFN (CAR HARDCOPYFN)))
-               (CL:WITH-OPEN-STREAM [IMAGESTREAM (OPENIMAGESTREAM FILE (OR IMAGETYPE PRINTERTYPE)
-                                                        (CL:WHEN HEADING
-                                                            `(HEADING ,HEADING))]
-                      (APPLY* HARDCOPYFN WINDOW IMAGESTREAM])
+    (* ;; 
+    "The information put in IMAGEFILE comes from WINDOW via the HARDCOPYFN, or the bitmap if no fn. ")
+
+    (* ;; "Value is the completed IMAGEFILE.")
+
+    (CL:WHEN IMAGEFILE
+        (CL:WHEN (AND (LISTP IMAGEFILE)
+                      (NULL IMAGETYPE))
+            (SETQ IMAGETYPE (CDR IMAGEFILE))
+            (SETQ IMAGEFILE (CAR IMAGEFILE)))
+        (LET ((HARDCOPYFN (WINDOWPROP WINDOW 'HARDCOPYFN))
+              HEADING)
+             (ALLOW.BUTTON.EVENTS)
+             (if (NULL HARDCOPYFN)
+                 then                                        (* ; "knows how to default")
+                      (HARDCOPYW WINDOW IMAGEFILE NIL NIL NIL IMAGETYPE)
+               else (CL:WHEN (AND (LISTP HARDCOPYFN)
+                                  (FNTYP (CAR HARDCOPYFN)))
+                        (SETQ HEADING (CADR HARDCOPYFN))
+                        (CL:WHEN (EQ HEADING 'TITLE)
+                            (SETQ HEADING (WINDOWPROP WINDOW 'TITLE)))
+                        (SETQ HARDCOPYFN (CAR HARDCOPYFN)))
+                    (CL:WITH-OPEN-STREAM [IMAGESTREAM (OPENIMAGESTREAM
+                                                       IMAGEFILE IMAGETYPE
+                                                       (CL:WHEN HEADING
+                                                           `(HEADING ,HEADING))]
+                           (APPLY* HARDCOPYFN WINDOW IMAGESTREAM IMAGETYPE)))
+             IMAGEFILE))])
 
 (HARDCOPYIMAGEW
-  [LAMBDA (W)                                                (* ; "Edited 26-Aug-87 14:08 by Snow")
+  [LAMBDA (W)                                                (* ; "Edited 19-Sep-2025 15:45 by rmk")
+                                                             (* ; "Edited 26-Aug-87 14:08 by Snow")
 
-(* ;;; "hardcopy this window to the DEFAULTPRINTINGHOST")
+(* ;;; "hardcopy this window to the DEFAULTPRINTINGHOST.  This is called from the Hardcopy item on the Window command menu.  Subitems specialize for printer vs file.")
 
-    (HARDCOPY.SOMEHOW W])
+    (HARDCOPYIMAGEW.TOPRINTER W T])
 
 (HARDCOPYIMAGEW.TOFILE
-  [LAMBDA (W)                                                (* ; "Edited 17-Jan-96 10:33 by rmk")
-    (LET ((FILE&TYPE (GetImageFile W)))
-         (if FILE&TYPE
-             then (HARDCOPY.SOMEHOW W (CAR FILE&TYPE)
-                         (CDR FILE&TYPE])
+  [LAMBDA (W)                                                (* ; "Edited  3-Nov-2025 16:23 by rmk")
+                                                             (* ; "Edited 17-Jan-96 10:33 by rmk")
+    (HARDCOPY.SOMEHOW W (GetImageFile W])
 
 (HARDCOPYIMAGEW.TOPRINTER
-  [LAMBDA (W)                                                (* ; "Edited 18-Oct-2022 18:45 by lmm")
+  [LAMBDA (W DEFAULTPRINTER)                                 (* ; "Edited 19-Sep-2025 15:54 by rmk")
+                                                             (* ; "Edited 18-Oct-2022 18:45 by lmm")
                                                              (* ; "Edited 22-Apr-98 16:19 by rmk:")
                                                              (* ; "Edited 11-Jul-90 13:55 by jds")
-    (LET ((PRINTERCHOICE (GetPrinterName))
-          PRINTERTYPE IMAGETYPE)
-         [COND
-            ((LISTP PRINTERCHOICE)                           (* ; 
+    (LET ((PRINTERCHOICE (CL:IF DEFAULTPRINTER
+                             DEFAULTPRINTINGHOST
+                             (GetPrinterName)))
+          PRINTERTYPE)
+         (if (LISTP PRINTERCHOICE)
+             then                                            (* ; 
                                             "Got back a list, which is (TYPE NAME).  Break it apart.")
-             (SETQ PRINTERTYPE (CAR PRINTERCHOICE))
-             (SETQ PRINTERCHOICE (CADR PRINTERCHOICE)))
-            (PRINTERCHOICE                                   (* ; "Got back just a name.")
-                   (SETQ PRINTERTYPE (PRINTERTYPE PRINTERCHOICE]
-         (SETQ PRINTERTYPE (PRINTERTYPE PRINTERCHOICE))
-         (COND
-            (PRINTERCHOICE (HARDCOPY.SOMEHOW W (CONCAT "{LPT}" PRINTERCHOICE)
-                                  PRINTERTYPE
-                                  (OR IMAGETYPE (CAR (PRINTERPROP PRINTERTYPE 'CANPRINT))
-                                      PRINTERTYPE])
+                  (SETQ PRINTERTYPE (CAR PRINTERCHOICE))
+                  (SETQ PRINTERCHOICE (CADR PRINTERCHOICE))
+           elseif PRINTERCHOICE
+             then                                            (* ; "Got back just a name.")
+                  (SETQ PRINTERTYPE (PRINTERTYPE PRINTERCHOICE)))
+         (CL:WHEN PRINTERCHOICE
+             (SEND.FILE.TO.PRINTER (HARDCOPY.SOMEHOW W (OPENSTREAM '{NODIRCORE} 'OUTPUT)
+                                          PRINTERTYPE)
+                    PRINTERCHOICE))])
 
 (HARDCOPYREGION.TOFILE
   [LAMBDA NIL                                                (* ; "Edited 26-Aug-87 14:08 by Snow")
@@ -401,38 +418,39 @@
     (MENU (MakeMenuOfPrinters "Which printer?"])
 
 (GetImageFile
-  [LAMBDA (W)                                                (* ; "Edited 10-Sep-2025 14:50 by rmk")
-                                                             (* ; "Edited 27-Apr-98 16:44 by rmk:")
+  [LAMBDA (FILEORW)                                          (* ; "Edited  4-Nov-2025 22:43 by rmk")
+                                                             (* ; "Edited  3-Nov-2025 19:52 by rmk")
+                                                             (* ; "Edited 19-Sep-2025 08:07 by rmk")
+                                                             (* ; "Edited 10-Sep-2025 14:50 by rmk")
                                                              (* ; "Edited 18-Jan-96 11:17 by ")
                                                              (* ; "Edited 17-Jan-96 10:42 by rmk")
-    (PROG (FILE PRINTFILETYPE FILETYPEMENU)
 
-     (* ;; "Strip candidate version so overwrites must be explicitly indicated each time.  Use previous file as candidate, and if no previous one, apply function associated with the window to the window and the extension associated with the defaultprinting host.  Such a function on a TEDIT window, for example, could suggest the image-type file named after the underlying TEDIT file.")
+    (* ;; " If FILEORW is a window, its HARDCOPY properties are used to create the menu's candidate filename. Otherwise, it is taken to already be the candidate.  Returns NIL if the imagefile/type are not determined.")
 
-          [SETQ FILE (PopUpWindowAndGetAtom
-                      "File name (Clear to abort): "
-                      (OR [AND (WINDOWPROP W 'HARDCOPYFILE)
-                               (PACKFILENAME 'VERSION NIL 'BODY (WINDOWPROP W 'HARDCOPYFILE]
-                          (AND (WINDOWPROP W 'HARDCOPYFILEFN)
-                               (APPLY* (WINDOWPROP W 'HARDCOPYFILEFN)
-                                      W
-                                      (CAR (EXTENSIONS.FOR.PRINTFILETYPE (OR (CADDR (LISTP (
-                                                                                       DEFAULTPRINTER
-                                                                                            )))
-                                                                             (PRINTERTYPE]
-          (CL:UNLESS (AND FILE (SETQ FILE (OUTFILEP FILE)))  (* ; "Keep directory etc for reuse")
-              (RETURN))
-          (WINDOWPROP W 'HARDCOPYFILE FILE)                  (* ; 
-                                                             "Save previous input for next candidate")
-          (SETQ FILETYPEMENU (MakeMenuOfImageTypes "File type?"))
-          (COND
-             ((SETQ PRINTFILETYPE (PRINTFILETYPE.FROM.EXTENSION FILE))
-              (RETURN (CONS FILE PRINTFILETYPE)))
-             (T (SETQ PRINTFILETYPE (MENU FILETYPEMENU))
-                (COND
-                   ((NULL PRINTFILETYPE)
-                    (RETURN))
-                   (T (RETURN (CONS FILE PRINTFILETYPE])
+    (LET (IMAGEFILE IMAGEFILETYPE)
+
+         (* ;; "Strip candidate version so overwrites must be explicitly indicated each time.  Use previous file as candidate, and if no previous one, apply function associated with the window to the window and the extension associated with the defaultprinting host.  Such a function on a TEDIT window, for example, could suggest the image-type file named after the underlying TEDIT file.")
+
+         (SETQ IMAGEFILE (PopUpWindowAndGetAtom "File name (Clear to abort): "
+                                (if (WINDOWP FILEORW)
+                                    then (CLEARW (GETPROMPTWINDOW FILEORW))
+                                         [if (WINDOWPROP FILEORW 'HARDCOPYFILE)
+                                             then (PACKFILENAME 'VERSION NIL 'BODY
+                                                         (WINDOWPROP FILEORW 'HARDCOPYFILE))
+                                           elseif (WINDOWPROP FILEORW 'HARDCOPYFILEFN)
+                                             then (APPLY* (WINDOWPROP FILEORW 'HARDCOPYFILEFN)
+                                                         FILEORW
+                                                         (CAR (EXTENSIONS.FOR.IMAGEFILETYPE (
+                                                                                          PRINTERTYPE
+                                                                                             ]
+                                  else FILEORW)))
+         (CL:WHEN [AND IMAGEFILE (SETQ IMAGEFILE (OUTFILEP IMAGEFILE))
+                       (SETQ IMAGEFILETYPE (OR (IMAGEFILETYPE.FROM.EXTENSION IMAGEFILE)
+                                               (MENU (MakeMenuOfImageTypes "File type?"]
+             (CL:WHEN (WINDOWP FILEORW)                      (* ; 
+                                                             "Save full name less version for reuse")
+                 (WINDOWPROP FILEORW 'HARDCOPYFILE (PACKFILENAME 'VERSION NIL 'BODY IMAGEFILE)))
+             (CONS IMAGEFILE IMAGEFILETYPE))])
 
 (FetchDefaultPrinter
   [LAMBDA NIL                                                (* ; "Edited 26-Aug-87 14:11 by Snow")
@@ -445,26 +463,6 @@
 
 
 
-(* ; "filename diddlers")
-
-(DEFINEQ
-
-(EXTENSIONS.FOR.PRINTFILETYPE
-  [LAMBDA (TYPE)                                             (* ; "Edited 10-Sep-2025 14:43 by rmk")
-                                                             (* ; "Edited 26-Aug-87 14:11 by Snow")
-    (DECLARE (GLOBALVARS PRINTFILETYPES))
-    (CAR (MKLIST (GETMULTI PRINTFILETYPES TYPE 'EXTENSION])
-
-(PRINTFILETYPE.FROM.EXTENSION
-  [LAMBDA (FILE)                                             (* ; "Edited 26-Aug-87 14:11 by Snow")
-                                                             (* ; 
-                                         "return the imagestream type corresponding to the extension")
-    (bind [EXT _ (U-CASE (FILENAMEFIELD FILE 'EXTENSION] for TYPE in PRINTFILETYPES
-       when [FMEMB EXT (CADR (ASSOC 'EXTENSION (CDR TYPE] do (RETURN (CAR TYPE])
-)
-
-
-
 (* ; "Interface for PRINTERS and IMAGEFILES")
 
 (DEFINEQ
@@ -476,36 +474,29 @@
         (CAR DEFAULTPRINTINGHOST))
        (T DEFAULTPRINTINGHOST])
 
-(CAN.PRINT.DIRECTLY
-  [LAMBDA (PRINTERTYPE FILETYPE)                             (* ; "Edited 26-Aug-87 14:11 by Snow")
-    (FMEMB FILETYPE (PRINTERPROP PRINTERTYPE 'CANPRINT])
-
 (CONVERT.FILE.TO.TYPE.FOR.PRINTER
-  [LAMBDA (FILE FILETYPE PRINTERTYPE HEADING PRINTOPTIONS)   (* ; "Edited 24-Sep-2023 15:25 by rmk")
+  [LAMBDA (FILE FILETYPE PRINTERTYPE HEADING PRINTOPTIONS)   (* ; "Edited 29-Oct-2025 18:50 by rmk")
+                                                             (* ; "Edited 24-Sep-2023 15:25 by rmk")
                                                              (* ; "Edited 14-Sep-2023 22:58 by rmk")
                                                              (* ; "Edited 29-Dec-88 15:39 by jds")
 
-    (* ;; "Convert FILE to the kind of hardcopy file (Interpress, Press, 4045HQ, etc) appropriate to PRINTERTYPE.")
+    (* ;; "Convert FILE to the kind of hardcopy file (PDF, Interpress, Press, 4045HQ, etc) appropriate to PRINTERTYPE. FILETYPE is ignored here (old interface), CONVERT.TO.IMAGEFILE figures it out.")
 
-    (SETQ FILETYPE (OR FILETYPE 'TEXT))
-    (PROG [(SCRATCH (CLOSEF (OPENSTREAM (PRINTER.SCRATCH.FILE FILE PRINTERTYPE)
-                                   'OUTPUT
-                                   'NEW]                     (* ; 
-    "Doing the open & close gets us a guaranteed version number, so that all files are truly unique.")
-          (APPLY* (OR (LISTGET (PRINTERPROP PRINTERTYPE 'CONVERSION)
-                             FILETYPE)
-                      (for CANPRINT in (PRINTERPROP PRINTERTYPE 'CANPRINT) bind CONVERTER
-                         when (SETQ CONVERTER (LISTGET (PRINTFILEPROP CANPRINT 'CONVERSION)
-                                                     FILETYPE)) do (RETURN CONVERTER))
-                      (ERROR (CONCAT "Can't convert a " FILETYPE " for a " PRINTERTYPE " printer")
-                             (FULLNAME FILE)))
-                 FILE SCRATCH (LISTGET PRINTOPTIONS 'FONTS)
-                 HEADING NIL PRINTOPTIONS)
-          (RESETSAVE NIL (LIST [FUNCTION (LAMBDA (SCRATCH)
-                                           (CLOSEF? SCRATCH)
-                                           (DELFILE SCRATCH]
-                               SCRATCH))
-          (RETURN SCRATCH])
+    (* ;; "FILETYPE")
+
+    (CL:WHEN HEADING
+        (push PRINTOPTIONS 'HEADING HEADING))
+    (for CANPRINT IMAGEFILE in (PRINTERPROP PRINTERTYPE 'CANPRINT)
+       when (SETQ IMAGEFILE (CONVERT.TO.IMAGEFILE FILE NIL CANPRINT PRINTOPTIONS T))
+       do (RETURN IMAGEFILE])
+
+(CAN.PRINT.DIRECTLY
+  [LAMBDA (PRINTERTYPE IMAGEFILETYPE)                        (* ; "Edited  3-Nov-2025 15:46 by rmk")
+                                                             (* ; "Edited 26-Aug-87 14:11 by Snow")
+    (LET [(CANPRINT (PRINTERPROP (OR PRINTERTYPE (PRINTERTYPE DEFAULTPRINTINGHOST))
+                           'CANPRINT]
+         (CAR (OR (AND IMAGEFILETYPE (FMEMB IMAGEFILETYPE CANPRINT))
+                  CANPRINT])
 
 (EMPRESS
   [LAMBDA (FILE %#COPIES HOST HEADING %#SIDES PRINTOPTIONS)  (* ; "Edited 26-Aug-87 14:17 by Snow")
@@ -519,6 +510,9 @@
 
 (HARDCOPYW
   [LAMBDA (WINDOW/BITMAP/REGION FILE HOST SCALEFACTOR ROTATION PRINTERTYPE HARDCOPYTITLE)
+                                                             (* ; "Edited 27-Sep-2025 07:42 by rmk")
+                                                             (* ; "Edited 19-Sep-2025 17:59 by rmk")
+                                                             (* ; "Edited 18-Sep-2025 11:12 by rmk")
                                                              (* ; "Edited 31-Aug-89 10:05 by jds")
 
     (* ;; "Makes a hard copy of a window, bitmap, or region of the screen.")
@@ -527,78 +521,64 @@
 
     (* ;; "WINDOW/BITMAP/REGION can be a WINDOW, a REGION, a BITMAP, or NIL = select region.  If FILE supplied, output goes there.  If HOST supplied, it is printed.  If neither FILE nor HOST supplied, default is to print; if HARDCOPYTITLE is supplied it will be used as the document title of the hardcopy file created.  If it isn't, 'Window Image' is used.")
 
-    (PROG (PRINTHOST BITMAP SCREENREGION REGION FULLFILE)
-          (SETQ PRINTHOST HOST)
-          [COND
-             ((WINDOWP WINDOW/BITMAP/REGION)
-              (SETQ BITMAP (COPY.WINDOW.TO.BITMAP WINDOW/BITMAP/REGION)))
-             ((BITMAPP WINDOW/BITMAP/REGION)
-              (SETQ BITMAP WINDOW/BITMAP/REGION))
-             ((type? REGION WINDOW/BITMAP/REGION)
-              (SETQ BITMAP (SCREENBITMAP))
-              (SETQ REGION WINDOW/BITMAP/REGION))
-             (T (SETQ SCREENREGION (GETSCREENREGION))
-                (SETQ BITMAP (SCREENBITMAP (fetch (SCREENREGION SCREEN) of SCREENREGION)))
-                (SETQ REGION (fetch (SCREENREGION REGION) of SCREENREGION]
+    (PROG (PRINTHOST BITMAP SCREENREGION REGION BITMAPFILE)
+          [SETQ BITMAP (if (WINDOWP WINDOW/BITMAP/REGION)
+                           then (COPY.WINDOW.TO.BITMAP WINDOW/BITMAP/REGION)
+                         elseif (BITMAPP WINDOW/BITMAP/REGION)
+                           then (SETQ BITMAP WINDOW/BITMAP/REGION)
+                         elseif (type? REGION WINDOW/BITMAP/REGION)
+                           then (SETQ REGION WINDOW/BITMAP/REGION)
+                                (SCREENBITMAP)
+                         else (SETQ SCREENREGION (GETSCREENREGION))
+                              (SETQ REGION (fetch (SCREENREGION REGION) of SCREENREGION))
+                              (SCREENBITMAP (fetch (SCREENREGION SCREEN) of SCREENREGION]
       RETRY
-          (COND
-             [PRINTERTYPE (COND
-                             [PRINTHOST (COND
-                                           ((NOT (EQ PRINTERTYPE (PRINTERTYPE PRINTHOST)))
-                                            (ERROR PRINTHOST (CONCAT "not of printer type " 
-                                                                    PRINTERTYPE))
-                                            (GO RETRY]
-                             (FILE                           (* ; 
+          (SETQ PRINTHOST HOST)
+          (if PRINTERTYPE
+              then (if PRINTHOST
+                       then (CL:UNLESS (EQ PRINTERTYPE (PRINTERTYPE PRINTHOST))
+                                (ERROR PRINTHOST (CONCAT "not of printer type " PRINTERTYPE))
+                                (GO RETRY))
+                     elseif FILE
+                       then                                  (* ; 
                                                           "don't need a PRINTHOST if you give a file")
-                                   )
-                             [(SETQ PRINTHOST (find HOST inside DEFAULTPRINTINGHOST
-                                                 suchthat (EQ PRINTERTYPE (PRINTERTYPE HOST]
-                             (T (ERROR 
-                                 "Can't find a printing host in DEFAULTPRINTINGHOST that is of type "
-                                       PRINTERTYPE)
-                                (GO RETRY]
-             (PRINTHOST (SETQ PRINTERTYPE (PRINTERTYPE PRINTHOST)))
-             (DEFAULTPRINTINGHOST (SETQ PRINTHOST (DEFAULTPRINTER))
-                    (SETQ PRINTERTYPE (PRINTERTYPE PRINTHOST)))
-             [FILE (COND
-                      ((NOT (SETQ PRINTERTYPE (PRINTFILETYPE FILE T)))
+                     elseif [SETQ PRINTHOST (find HOST inside DEFAULTPRINTINGHOST
+                                               suchthat (EQ PRINTERTYPE (PRINTERTYPE HOST]
+                     else (ERROR "Can't find a printing host in DEFAULTPRINTINGHOST that is of type "
+                                 PRINTERTYPE)
+                          (GO RETRY))
+            elseif PRINTHOST
+              then (SETQ PRINTERTYPE (PRINTERTYPE PRINTHOST))
+            elseif DEFAULTPRINTINGHOST
+              then (SETQ PRINTHOST (DEFAULTPRINTER))
+                   (SETQ PRINTERTYPE (PRINTERTYPE PRINTHOST))
+            elseif FILE
+              then (CL:UNLESS (SETQ PRINTERTYPE (IMAGEFILETYPE FILE T))
                        (ERROR FILE "Can't tell what kind of print file to produce -- PRINTERTYPE, DEFAULTPRINTERTYPE, DEFAULTPRINTINGHOST all NIL"
                               )
-                       (GO RETRY]
-             (T (ERROR "Can't tell where to send window image -- HOST, DEFAULTPRINTINGHOST are NIL")
-                (GO RETRY)))
-          [COND
-             ((NOT SCALEFACTOR)
-              [SETQ SCALEFACTOR (COND
-                                   (REGION (PRINTER.BITMAPSCALE (fetch (REGION WIDTH) of REGION)
-                                                  (fetch (REGION HEIGHT) of REGION)
-                                                  PRINTERTYPE PRINTHOST))
-                                   (T (PRINTER.BITMAPSCALE (fetch (BITMAP BITMAPWIDTH) of BITMAP)
-                                             (fetch (BITMAP BITMAPHEIGHT) of BITMAP)
-                                             PRINTERTYPE PRINTHOST]
-              (COND
-                 ((LISTP SCALEFACTOR)
+                       (GO RETRY))
+            else (ERROR "Can't tell where to send window image -- HOST, DEFAULTPRINTINGHOST are NIL")
+                 (GO RETRY))
+          (CL:UNLESS SCALEFACTOR
+              (SETQ SCALEFACTOR (if REGION
+                                    then (PRINTER.BITMAPSCALE (fetch (REGION WIDTH) of REGION)
+                                                (fetch (REGION HEIGHT) of REGION)
+                                                PRINTERTYPE PRINTHOST)
+                                  else (PRINTER.BITMAPSCALE (fetch (BITMAP BITMAPWIDTH) of BITMAP)
+                                              (fetch (BITMAP BITMAPHEIGHT) of BITMAP)
+                                              PRINTERTYPE PRINTHOST)))
+              (CL:WHEN (LISTP SCALEFACTOR)
                   (SETQ ROTATION (CDR SCALEFACTOR))
-                  (SETQ SCALEFACTOR (CAR SCALEFACTOR]
-          (SETQ FULLFILE (PRINTER.BITMAPFILE (OR FILE (PRINTER.SCRATCH.FILE))
-                                PRINTERTYPE BITMAP SCALEFACTOR REGION ROTATION (OR HARDCOPYTITLE 
-                                                                                   "Window Image")))
-          [COND
-             ((OR HOST (NULL FILE))
-              (ADD.PROCESS `[PROGN [,(PRINTERPROP PRINTERTYPE 'SEND)
-                                    ',(COND
-                                         ((LISTP PRINTHOST)
-                                          (CADR PRINTHOST))
-                                         (T PRINTHOST))
-                                    ',FULLFILE
-                                    '(DELETE ,(NULL FILE)
-                                            DOCUMENT.NAME
-                                            ,(OR HARDCOPYTITLE "Window Image"]
-                                   ,(AND (NULL FILE)
-                                         `(DELFILE ',FULLFILE]
-                     'NAME
-                     'HARDCOPYW]
-          (RETURN (AND FILE FULLFILE])
+                  (SETQ SCALEFACTOR (CAR SCALEFACTOR))))
+          (SETQ BITMAPFILE (PRINTER.BITMAPFILE (OR FILE (OPENSTREAM '{NODIRCORE} 'OUTPUT))
+                                  PRINTERTYPE BITMAP SCALEFACTOR REGION ROTATION (OR HARDCOPYTITLE 
+                                                                                     "Window Image"))
+           )
+          (CL:WHEN (OR HOST (NULL FILE))
+              [SEND.FILE.TO.PRINTER BITMAPFILE HOST '(DELETE ,(NULL FILE)
+                                                            DOCUMENT.NAME
+                                                            ,(OR HARDCOPYTITLE "Window Image"])
+          (RETURN (AND FILE BITMAPFILE])
 
 (LISTFILES1
   [LAMBDA (FILE PRINTOPTIONS)                                (* ; "Edited 26-Aug-87 14:17 by Snow")
@@ -621,8 +601,13 @@
                          WIDTH HEIGHT HOST])
 
 (PRINTER.SCRATCH.FILE
-  [LAMBDA (FULLFILE)                                         (* ; "Edited 26-Aug-87 14:20 by Snow")
-    '{SCRATCH}PRINTER-SCRATCH-FILE])
+  [LAMBDA (PRINTER IMAGETYPE)                                (* ; "Edited 19-Sep-2025 14:49 by rmk")
+    (CONCAT "{" (OR (PRINTERDEVICEP PRINTER)
+                    'LPT)
+           "}"
+           (CL:IF IMAGETYPE
+               (CONCAT "." IMAGETYPE)
+               "")])
 
 (PRINTERPROP
   [LAMBDA (PRINTERTYPE PROP)                                 (* ; "Edited 26-Aug-87 14:20 by Snow")
@@ -636,7 +621,8 @@
          (AND STATUSFN (APPLY* STATUSFN PRINTER])
 
 (PRINTERTYPE
-  [LAMBDA (HOST)                                             (* ; "Edited 27-Apr-98 16:16 by rmk:")
+  [LAMBDA (HOST PREFERRED)                                   (* ; "Edited 19-Sep-2025 10:18 by rmk")
+                                                             (* ; "Edited 27-Apr-98 16:16 by rmk:")
                                                            (* ; "Edited 15-Feb-91 14:14 by gadener")
 
     (* ;; "Attempt to deduce the printer type of HOST.")
@@ -646,15 +632,16 @@
              (SETQ HOST (DEFAULTPRINTER)))
         NIL)
     (COND
-       [(CAR (LISTP HOST))
+       ((LISTP HOST)
 
-        (* ;; "Is a pair (type hostname) or maybe a triple of the form (printertype hostname preferred-imagetype).  Check that type is one we know about.")
+        (* ;; "A pair (type hostname) or maybe a triple of the form (printertype hostname preferred-imagetype).  Check that type is one we know about.")
 
-        (LET ((TYPE (CAR HOST)))
-             (COND
-                ((for X in PRINTERTYPES thereis (EQMEMB TYPE (CAR X)))
-                 TYPE)
-                (T (ERROR "Undefined printer-type:" TYPE]
+        (LET [(TYPE (OR (AND PREFERRED (CADDR HOST))
+                        (CAR HOST]
+             (SETQ HOST (CADR HOST))
+             (CL:UNLESS (for X in PRINTERTYPES thereis (EQMEMB TYPE (CAR X)))
+                    (ERROR "Undefined printer-type:" TYPE))
+             TYPE))
        ((NULL HOST)
         DEFAULTPRINTERTYPE)
        ((GETPROP (MKATOM HOST)
@@ -662,12 +649,12 @@
        ((GETPROP (SETQ HOST (OR (CANONICAL.HOSTNAME HOST)
                                 HOST))
                'PRINTERTYPE))
-       [(for TYPE in PRINTERTYPES bind FN when (AND (SETQ FN (CDR (ASSOC 'HOSTNAMEP TYPE)))
-                                                    (APPLY* (CAR FN)
-                                                           HOST)) do 
+       [(for TYPE FN in PRINTERTYPES when (AND (SETQ FN (CDR (ASSOC 'HOSTNAMEP TYPE)))
+                                               (APPLY* (CAR FN)
+                                                      HOST)) do 
                                                              (* ; 
                       "Try the predicates for each printer type for recognizing their own host names")
-                                                                     (RETURN (CAAR TYPE]
+                                                                (RETURN (CAAR TYPE]
        [(for PRINTER in (MKLIST DEFAULTPRINTINGHOST) do 
 
                                                       (* ;; 
@@ -688,143 +675,93 @@
        (T DEFAULTPRINTERTYPE])
 
 (PRINTERNAME
-  [LAMBDA (PRINTER-SPEC)                                     (* ; "Edited 26-Nov-86 13:51 by hdj")
+  [LAMBDA (PRINTER)                                          (* ; "Edited 19-Sep-2025 09:59 by rmk")
 
-    (* ;; "takes a printer-spec (in form (type printer-name) or just printer-name) and returns printer-name.  returns nil for null arg.")
+    (* ;; 
+    "If PRINTER designates a printer (a printer-spec or stream/filename, returns the printer's name.")
 
-    (AND PRINTER-SPEC (if (LISTP PRINTER-SPEC)
-                          then (CADR PRINTER-SPEC)
-                        else PRINTER-SPEC])
+    (* ;; "Takes a printer-spec (in form (type printer-name) or just printer-name) and returns printer-name.  returns nil for null arg.")
 
-(PRINTFILEPROP
-  [LAMBDA (PRINTFILETYPE PROP)                               (* ; "Edited 26-Aug-87 14:22 by Snow")
-    (for X in PRINTFILETYPES when (EQMEMB PRINTFILETYPE (CAR X))
-       do (RETURN (CADR (ASSOC PROP (CDR X])
+    (CL:WHEN (LISTP PRINTER)
+        (SETQ PRINTER (CADR PRINTER)))
+    (CL:WHEN (PRINTERDEVICEP PRINTER)
+        [LET (FDEV)
+             (if (AND (STREAMP PRINTER)
+                      (STREAMPROP PRINTER 'PRINTERNAME))
+               else (SETQ FDEV (TRUEDEVICE PRINTER))
+                    (if (EQ 'LPT (fetch (FDEV DEVICENAME) of FDEV))
+                        then (FILENAMEFIELD PRINTER 'NAME)
+                      else (fetch (FDEV DEVICENAME) of FDEV])])
 
 (PRINTFILETYPE
-  [LAMBDA (FILE DONTOPEN)                                    (* ; "Edited  3-Mar-93 14:34 by rmk:")
-                                                             (* ; "Edited 22-Aug-92 14:27 by jds")
-                                                             (* ; "Edited 26-Aug-87 14:22 by Snow")
-    (COND
-       ((IMAGESTREAMP FILE)
-        (IMAGESTREAMTYPE FILE))
-       (T (LET* [(HOST (FILENAMEFIELD FILE 'HOST))
-                 (TYPE (GETFILEINFO FILE 'TYPE]
-                (COND
-                   ((AND TYPE (ASSOC TYPE PRINTFILETYPES))
-
-                    (* ;; "Type is in PRINTFILETYPES, so it's OK.")
-
-                    TYPE)
-                   ((PRINTFILETYPE.FROM.EXTENSION FILE))
-                   [(NOT DONTOPEN)
-                    (RESETLST
-                        [COND
-                           ((STRINGP FILE)                   (* ; 
-                                     "Yecch, OPENP of a string interprets string as a string stream!")
-                            (SETQ FILE (MKATOM FILE]
-                        [COND
-                           ((NOT (OPENP FILE 'INPUT))        (* ; 
-                                    "Open file so testers don't have to repeatedly open and close it")
-                            (SETQ FILE (OPENSTREAM FILE 'INPUT))
-                            (RESETSAVE NIL (LIST 'CLOSEF? FILE]
-                        [COND
-                           ((RANDACCESSP FILE)
-                            (for TYPE in PRINTFILETYPES
-                               when (CAR (NLSETQ (APPLY* (CADR (ASSOC 'TEST (CDR TYPE)))
-                                                        FILE))) do (RETURN (CAR TYPE])]
-                   ((EQ TYPE 'TEXT)
-
-                    (* ;; "This is AFTER the above clauses, so we catch PS files, which are type TEXT.  Other formats might be lost as well....")
-
-                    TYPE])
-
-(\EXPECTED.FILE.TYPE
-  [LAMBDA (FILE)                                             (* ; "Edited 28-Jun-99 16:36 by rmk:")
-                                                             (* ; "Edited 27-Oct-90 18:14 by nm")
-
-    (* ;; "rmk:   This is called by SEND.FILE.TO.PRINTER to somehow guess the TYPE parameter of the file in Maiko.  I don't see the point of this.  Eventually, the call to this function and even its definition should be removed, but nuking it is just as effective.")
-
-    (AND NIL (EQ \MACHINETYPE \MAIKO)
-         FileTypeConfirmFlg
-         (LET [(HOST (UNPACKFILENAME.STRING FILE 'HOST]
-              (AND (OR (STRING-EQUAL HOST "DSK")
-                       (STRING-EQUAL HOST "UNIX"))
-                   `((TYPE ,(\UFSGetPrintFileType FILE])
+  [LAMBDA (FILE DONTOPEN)                                    (* ; "Edited 18-Sep-2025 11:22 by rmk")
+                                                             (* ; "For backward compatibility")
+    (IMAGEFILETYPE FILE DONTOPEN])
 
 (SEND.FILE.TO.PRINTER
-  [LAMBDA (FILE HOST PRINTOPTIONS)                           (* ; "Edited 21-Jan-93 11:34 by jds")
+  [LAMBDA (FILE HOST PRINTOPTIONS)                           (* ; "Edited 27-Sep-2025 07:43 by rmk")
+                                                             (* ; "Edited 25-Sep-2025 21:34 by rmk")
+                                                             (* ; "Edited 20-Sep-2025 13:23 by rmk")
+                                                             (* ; "Edited 19-Sep-2025 00:15 by rmk")
+                                                             (* ; "Edited 13-Sep-2025 23:39 by rmk")
+                                                             (* ; "Edited 21-Jan-93 11:34 by jds")
 
-    (* ;; "Returns file name if successful, NIL if not.  The RESETLST makes sure the scratch file, if any, is deleted.")
+    (* ;; "Returns file name if successful, NIL if not.  T")
 
+    (CL:UNLESS (STREAMP FILE)
+        (SETQ FILE (FINDFILE FILE T)))
     (RESETLST
-        [PROG (FULLFILE STRM FILETYPE PRINTERTYPE PFILE)
-              [RESETSAVE NIL `(,(COND
-                                   [(LISTGET PRINTOPTIONS 'DELETE)
-                                    (FUNCTION (LAMBDA (STREAM)
-                                                (CLOSEF? STREAM)
-                                                (DELFILE (FULLNAME STREAM]
-                                   (T (FUNCTION CLOSEF?)))
-                               ,(SETQ STRM (if (AND (STREAMP FILE)
-                                                    (OPENP FILE 'INPUT))
-                                               then 
+        (LET ((IMAGETYPE (LISTGET PRINTOPTIONS 'IMAGETYPE))
+              PRINTERTYPE SENDFN HEADING PRINTER CONVERTED)
 
-                                 (* ;; "Don't re-open it if it was previously open.  (Some gibberish here about %"cause caller (PRINTERDEVICE) really wants us to use the same stream, which has the BEINGPRINTED property.%")")
+             (* ;; "If IMAGETYPE is specified as what should be sent to the printer, we first make sure that FILE is of that type, and then we use that type to find the printer, if it wasn't also clearly specified.")
 
-                                                    FILE
-                                             else (OPENSTREAM FILE 'INPUT 'OLD (\EXPECTED.FILE.TYPE
-                                                                                FILE]
-                                                             (* ; "Do we need to convert the FILE ?")
-              (SETQ FULLFILE (FULLNAME (SETQ PFILE STRM)))   (* ; 
-           "Do the FULLNAME on the open stream, as FULLNAME sometimes returns NIL on just a filename")
-              (SETQ FILETYPE (PRINTFILETYPE STRM))           (* ; 
-                          "Find out what kind of file this is, so we can figure out how to print it.")
-          RETRY
-              [COND
-                 [[OR HOST (SETQ HOST (for X on PRINTOPTIONS by (CDDR X)
-                                         when (MEMB (U-CASE (CAR X))
-                                                    '(HOST SERVER)) do (RETURN (CADR X]
-                  (SETQ PRINTERTYPE (PRINTERTYPE HOST))
-                  (COND
-                     ((CAN.PRINT.DIRECTLY PRINTERTYPE FILETYPE)
-                                                             (* ; "IS OK, NO CONVERSION")
-                      )
-                     (T (SETQ PFILE (CONVERT.FILE.TO.TYPE.FOR.PRINTER STRM FILETYPE PRINTERTYPE
-                                           (LISTGET PRINTOPTIONS 'HEADING)
-                                           PRINTOPTIONS]
-                 ((NULL DEFAULTPRINTINGHOST)
-                  (ERROR "DEFAULTPRINTINGHOST and HOST arg are NIL; don't know where to print " 
-                         FULLFILE)
-                  (GO RETRY))
-                 ([AND FILETYPE (for X inside (OR DEFAULTPRINTINGHOST '(NIL))
-                                   when (CAN.PRINT.DIRECTLY (SETQ PRINTERTYPE (PRINTERTYPE X))
-                                               FILETYPE) do (RETURN (SETQ HOST X]
-                                                             (* ; "no conversion necessary")
-                  )
-                 (T (SETQ PFILE (CONVERT.FILE.TO.TYPE.FOR.PRINTER STRM FILETYPE [SETQ PRINTERTYPE
-                                                                                 (PRINTERTYPE
-                                                                                  (SETQ HOST (
-                                                                                       DEFAULTPRINTER
-                                                                                              ]
-                                       (LISTGET PRINTOPTIONS 'HEADING)
-                                       PRINTOPTIONS]
-              (COND
-                 ([NLISTP (SETQ PFILE (CL:FUNCALL (OR (PRINTERPROP PRINTERTYPE 'SEND)
-                                                      (ERROR (CONCAT "Don't know how to send to a " 
-                                                                    PRINTERTYPE)
-                                                             HOST))
-                                             (COND
-                                                ((LISTP HOST)
-                                                 (CADR HOST))
-                                                (T HOST))
-                                             PFILE
-                                             (APPEND PRINTOPTIONS '(%#COPIES 1)
-                                                    (LIST 'DOCUMENT.NAME FULLFILE]
-                  (RETURN FULLFILE))
-                 (T (LISPXPRIN1 (CDR PFILE)
-                           T)
-                    (LISPXTERPRI T)
-                    (RETURN NIL])])
+             (if (AND IMAGETYPE (NEQ IMAGETYPE (IMAGEFILETYPE FILE)))
+                 then (SETQ FILE (CONVERT.TO.IMAGEFILE FILE NIL IMAGETYPE PRINTOPTIONS))
+               else (SETQ IMAGETYPE (IMAGEFILETYPE FILE)))
+
+             (* ;; "")
+
+             (SETQ PRINTER (if (EQUAL HOST DEFAULTPRINTINGHOST)
+                               then DEFAULTPRINTINGHOST
+                             elseif (AND HOST (PRINTERDEVICEP HOST))
+                             elseif (for X on PRINTOPTIONS by (CDDR X)
+                                       when (MEMB (U-CASE (CAR X))
+                                                  '(HOST SERVER)) do (RETURN (CADR X)))
+                             elseif (find X inside (OR DEFAULTPRINTINGHOST '(NIL))
+                                       suchthat (CAN.PRINT.DIRECTLY (PRINTERTYPE X)
+                                                       IMAGETYPE))
+                             elseif (find X inside (OR DEFAULTPRINTINGHOST '(NIL))
+                                       suchthat (thereis CPT in (PRINTERPROP (PRINTERTYPE X)
+                                                                       'CANPRINT)
+                                                   suchthat (LISTGET (CAR (GETMULTI PRINTFILETYPES 
+                                                                                 CPT 'CONVERSION))
+                                                                   IMAGETYPE)))
+                             else (ERROR "Can't find printer for " FILE)))
+             (SETQ PRINTERTYPE (PRINTERTYPE PRINTER))
+             (CL:UNLESS (SETQ SENDFN (PRINTERPROP PRINTERTYPE 'SEND))
+                 (ERROR (CONCAT "Don't know how to send to a " PRINTERTYPE " printer")
+                        PRINTER))
+             [SETQ HEADING (SELECTQ (LISTGET PRINTOPTIONS 'HEADING)
+                               (T NIL)
+                               (NIL (CONCAT FILE "     " (GETFILEINFO FILE 'CREATIONDATE)))
+                               (LISTGET PRINTOPTIONS 'HEADING]
+                                                             (* (ADD.PROCESS (BQUOTE
+                                                             ((\, SENDFN) (QUOTE (\,
+                                                             (CL:IF (LISTP PRINTHOST)
+                                                             (CADR PRINTHOST) PRINTHOST)))
+                                                             (QUOTE (\, BITMAPFILE))))
+                                                             (QUOTE NAME) (QUOTE HARDCOPYW)))
+             (CL:WHEN [APPLY* SENDFN (CL:IF (LISTP PRINTER)
+                                         (CADR PRINTER)
+                                         PRINTER)
+                             (CL:IF (CAN.PRINT.DIRECTLY PRINTERTYPE IMAGETYPE)
+                                 FILE
+                                 (SETQ CONVERTED (CONVERT.TO.IMAGEFILE FILE NIL PRINTERTYPE)))
+                             `(HEADING ,HEADING ,@PRINTOPTIONS %#COPIES 1 DOCUMENTNAME ,FILE]
+                 (CL:WHEN (AND CONVERTED (LISTGET PRINTOPTIONS 'DELETE))
+                        (DELFILE CONVERTED))
+                 FILE)))])
 )
 (DEFINEQ
 
@@ -853,9 +790,14 @@
          STRM])
 
 (PRINTERDEVICE.CLOSEFN
-  [LAMBDA (STREAM)                                           (* ; "Edited 11-Sep-2025 12:37 by rmk")
-    (LET [(SDEV (fetch (STREAM DEVICE) of STREAM))
-          (PRINTOPTIONS (STREAMPROP STREAM 'PRINTOPTIONS]
+  [LAMBDA (STREAM)                                           (* ; "Edited  4-Oct-2025 16:37 by rmk")
+                                                             (* ; "Edited 28-Sep-2025 14:46 by rmk")
+                                                             (* ; "Edited 20-Sep-2025 13:40 by rmk")
+                                                             (* ; "Edited 19-Sep-2025 11:51 by rmk")
+                                                             (* ; "Edited 11-Sep-2025 12:37 by rmk")
+    (LET ((SDEV (fetch (STREAM DEVICE) of STREAM))
+          (PRINTOPTIONS (STREAMPROP STREAM 'PRINTOPTIONS))
+          IMAGETYPE PRINTERNAME)
 
          (* ;; 
          "Get PRINTOPTIONS property before closing the stream, in case the closing throws them away")
@@ -864,38 +806,70 @@
 
          (* ;; "If we could save away and get at the previous CLOSEFILE method (e.g.  by an FDEVPROP), this could be replaced by the generic (FDEVOP (QUOTE CLOSEFILE) SDEV STREAM).  We know that SDEV is a CORE device, we call \CORE.CLOSEFILE directly")
 
-         (COND
-            [(AND (NOT RESETSTATE)
+         (if (AND (NOT RESETSTATE)
                   (OPENP STREAM 'OUTPUT)
                   (IGREATERP (GETEOFPTR STREAM)
                          0))
+             then 
+                  (* ;; "Close and send to printer only if open for output.  If open for input, then we must already have started printing.  Don't close until after getting EOF ptr.")
 
-             (* ;; "Close and send to printer only if open for output.  If open for input, then we must already have started printing.  Don't close until after getting EOF ptr.")
-
-             (\CORE.CLOSEFILE STREAM)
-             (replace (STREAM ACCESS) of STREAM with NIL)    (* ; 
+                  (\CORE.CLOSEFILE STREAM)                   (* ; 
+                             "Closing prevents this function from being called again on this stream.")
+                  (replace (STREAM ACCESS) of STREAM with NIL) 
+                                                             (* ; 
                                   "Hack, cause this is usually done later in the generic \CLOSEFILE.")
+                  (change (fetch (FDEV OPENFILELST) of SDEV)
+                         (REMOVE STREAM DATUM)) 
 
-             (* ;; "The PRINTERNAME might be marked explicitly on the stream.  Otherwise let SEND.FILE.TO.PRINTER choose the host if it is the generic printer LPT, or use the name in the devicename field.")
+                  (* ;; "The PRINTERNAME might be marked explicitly on the stream.  Otherwise let SEND.FILE.TO.PRINTER choose the host.")
 
-             (SEND.FILE.TO.PRINTER STREAM (IF (STREAMPROP STREAM 'PRINTERNAME)
-                                            ELSEIF (NEQ 'LPT (fetch (FDEV DEVICENAME) of SDEV))
-                                              THEN (fetch (FDEV DEVICENAME) of SDEV)
-                                            ELSE [LET ((NAME (fetch (STREAM FULLNAME) of STREAM))
-                                                       POS POS2)
-                                                      (AND (SETQ POS (STRPOS "}" NAME))
-                                                           (SETQ POS2 (STRPOS "." NAME (ADD1 POS)))
-                                                           (SUBATOM NAME (ADD1 POS)
-                                                                  (SUB1 POS2]
-                                                 NIL)
-                    (APPEND '(DELETE T)
-                           PRINTOPTIONS
-                           '(HEADING T]
-            (T 
-               (* ;; "Error while creating the file, if the user had wrapped a RESETLST/CLOSEF around his code.  Presumably, he doesn't want the file printed")
+                  (SETQ PRINTERNAME (PRINTERNAME STREAM))
+                  [SETQ IMAGETYPE (if (EQ (CHARCODE %.)
+                                          (CHCON1 (FULLNAME)))
+                                      then (PROG1 (SUBATOM PRINTERNAME 2)
+                                                  (SETQ PRINTERNAME NIL))
+                                    elseif (FILENAMEFIELD STREAM 'EXTENSION]
+                  (SEND.FILE.TO.PRINTER STREAM PRINTERNAME `(,@PRINTOPTIONS IMAGETYPE ,IMAGETYPE 
+                                                                   HEADING T))
+                  (FDEVOP 'DELETEFILE SDEV STREAM SDEV T)
+           else 
+                (* ;; "Error while creating the file, if the user had wrapped a RESETLST/CLOSEF around his code.  Presumably, he doesn't want the file printed")
 
-               (\CORE.CLOSEFILE STREAM)
-               (FDEVOP 'DELETEFILE SDEV STREAM SDEV T])
+                (\CORE.CLOSEFILE STREAM])
+
+(PRINTERDEVICEP
+  [LAMBDA (X)                                                (* ; "Edited 19-Sep-2025 14:47 by rmk")
+    (if (OR (NULL X)
+            (STRING.EQUAL X ""))
+        then 'LPT
+      else (CL:WHEN (LISTP X)
+               (SETQ X (CADR X)))
+           (CL:WHEN (OR (LITATOM X)
+                        (STRINGP X)
+                        (STREAMP X))
+               (LET [(FDEV (CAR (NLSETQ (TRUEDEVICE X]
+                    (CL:WHEN (AND FDEV (EQ (FUNCTION PRINTERDEVICE.OPENFN)
+                                           (fetch (FDEV OPENFILE) of FDEV)))
+                        (fetch (FDEV DEVICENAME) of FDEV))))])
+
+(PRINTERNAME
+  [LAMBDA (PRINTER)                                          (* ; "Edited 19-Sep-2025 09:59 by rmk")
+
+    (* ;; 
+    "If PRINTER designates a printer (a printer-spec or stream/filename, returns the printer's name.")
+
+    (* ;; "Takes a printer-spec (in form (type printer-name) or just printer-name) and returns printer-name.  returns nil for null arg.")
+
+    (CL:WHEN (LISTP PRINTER)
+        (SETQ PRINTER (CADR PRINTER)))
+    (CL:WHEN (PRINTERDEVICEP PRINTER)
+        [LET (FDEV)
+             (if (AND (STREAMP PRINTER)
+                      (STREAMPROP PRINTER 'PRINTERNAME))
+               else (SETQ FDEV (TRUEDEVICE PRINTER))
+                    (if (EQ 'LPT (fetch (FDEV DEVICENAME) of FDEV))
+                        then (FILENAMEFIELD PRINTER 'NAME)
+                      else (fetch (FDEV DEVICENAME) of FDEV])])
 )
 (DECLARE%: DONTEVAL@LOAD DOCOPY 
 
@@ -940,45 +914,25 @@
 (DEFINEQ
 
 (TEXTTOIMAGEFILE
-  [LAMBDA (FILE IMAGEFILE IMAGETYPE FONTS HEADING TABS OPTIONS)
+  [LAMBDA (FILE IMAGEFILE IMAGETYPE OPTIONS)                 (* ; "Edited 28-Sep-2025 11:52 by rmk")
+                                                             (* ; "Edited 18-Sep-2025 23:17 by rmk")
+                                                             (* ; "Edited 17-Sep-2025 22:47 by rmk")
                                                              (* ; "Edited 26-Aug-87 14:23 by Snow")
-
-(* ;;; "Generic function for converting PSPOOL format text files into image files")
-
     (RESETLST
-        [PROG (IMAGESTREAM INPUT-STREAM INPUT-FILENAME)      (* ; 
-                                                          "FONTARRAY is an array of font-descriptors")
-              [RESETSAVE [SETQ INPUT-STREAM (OPENSTREAM FILE 'INPUT 'OLD 8 '((SEQUENTIAL T]
-                     '(PROGN (CLOSEF? OLDVALUE]
-              (SETQ INPUT-FILENAME (FULLNAME INPUT-STREAM))
-
-         (* ;; "Strip off the extension if we are generating the name from the INFILE, so that OPENIMAGESTREAM can pack on the appropriate extension")
-
-              [RESETSAVE [SETQ IMAGESTREAM
-                          (OPENIMAGESTREAM (OR IMAGEFILE (PACKFILENAME 'EXTENSION NIL 'VERSION NIL
-                                                                'BODY INPUT-FILENAME))
-                                 IMAGETYPE
-                                 (APPEND [AND (NEQ HEADING T)
-                                              (LIST 'HEADING (OR HEADING (CONCAT INPUT-FILENAME 
-                                                                                "     "
-                                                                                (GETFILEINFO
-                                                                                 INPUT-STREAM
-                                                                                 'CREATIONDATE]
-                                        (APPEND (LIST 'DOCUMENT.NAME INPUT-FILENAME 'TABS TABS
-                                                      'FONTS FONTS)
-                                               OPTIONS]
-                     '(AND RESETSTATE (DELFILE (CLOSEF? OLDVALUE]
-                                                             (* ; "Make \BIN return NIL on EOS")
-              (COPY.TEXT.TO.IMAGE INPUT-STREAM IMAGESTREAM FONTS TABS)
-              (RETURN (LIST (CLOSEF INPUT-STREAM)
-                            (CLOSEF IMAGESTREAM])])
+        (CL:UNLESS (GETSTREAM FILE 'INPUT T)
+            [RESETSAVE (SETQ FILE (OPENSTREAM FILE 'INPUT))
+                   `(PROGN (CLOSEF? OLDVALUE])
+        (LET ((IMAGESTREAM (OPENIMAGESTREAM IMAGEFILE IMAGETYPE OPTIONS)))
+             (COPY.TEXT.TO.IMAGE FILE IMAGESTREAM (LISTGET OPTIONS 'FONTS)
+                    (LISTGET OPTIONS 'TABS))
+             (CLOSEF? IMAGESTREAM)))])
 
 (COPY.TEXT.TO.IMAGE
-  [LAMBDA (INFILE IMAGESTREAM FONTS TABS)                    (* ; "Edited  3-Mar-2023 23:46 by rmk")
+  [LAMBDA (INFILE IMAGESTREAM FONTS TABS)                    (* ; "Edited 28-Sep-2025 11:46 by rmk")
+                                                             (* ; "Edited  3-Mar-2023 23:46 by rmk")
                                                              (* ; "Edited 20-Jul-2022 17:14 by rmk")
                                                             (* ; "Edited  8-Oct-2021 22:23 by rmk:")
                                                              (* ; "Edited 10-Apr-95 21:23 by rmk:")
-
     (* ;; "Copy text to an image stream, obeying PSPOOL control characters")
 
     (LET*
@@ -986,9 +940,9 @@
       (RIGHTMAR (DSPRIGHTMARGIN NIL IMAGESTREAM))
       (FONTARRAY (FONTMAPARRAY FONTS))
       (MAXFONT (ARRAYSIZE FONTARRAY))
-      (INSTRM (GETSTREAM INFILE 'INPUT))
+      [INSTRM (OR (GETSTREAM INFILE 'INPUT T)
+                  (OPENSTREAM INFILE 'INPUT]
       DEFTAB C FC (EOSP (GETFILEINFO INSTRM 'ENDOFSTREAMOP]
-
      (* ;; 
  "RMK:  EOS function changed to NILL from ZERO. 0 in low-order bits is OK in UNICODE, when we switch")
 
@@ -1007,7 +961,6 @@
            (T
             (SELCHARQ C
                  (^F                                         (* ; "Font shift")
-
                      (* ;; 
                      "For FX-XP-9 printer:SETXY interpress command to avoid printer's BUG(Take)")
 
@@ -1020,7 +973,6 @@
                                   (\OUTCHAR IMAGESTREAM (CHARCODE ^F))
                                   (\OUTCHAR IMAGESTREAM (CHARCODE ^T))
                                   (RETURN))
-
                               (* ;; "DEFAULTTAB is now a constant defined here as 36 = 1/2 inch.  Maybe that should be scaled by the stream's scale factor vis a vis points, not related to the current font.  If you are tabbing for alignment, you wouldn't want it to be ragged based on what font one line is in compare to another.      TEXTDEFAULTTAB is a hack that should be removed.")
 
                               [SETQ FC
@@ -2424,40 +2376,38 @@
 (ADDTOVAR LAMA )
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (6508 12346 (HARDCOPY.SOMEHOW 6518 . 7884) (HARDCOPYIMAGEW 7886 . 8107) (
-HARDCOPYIMAGEW.TOFILE 8109 . 8417) (HARDCOPYIMAGEW.TOPRINTER 8419 . 9666) (HARDCOPYREGION.TOFILE 9668
- . 10210) (HARDCOPYREGION.TOPRINTER 10212 . 11325) (COPY.WINDOW.TO.BITMAP 11327 . 12344)) (12418 24340
- (MakeMenuOfPrinters 12428 . 13960) (PRINTERS.WHENSELECTEDFN 13962 . 15585) (MakeMenuOfImageTypes 
-15587 . 16406) (GetNewPrinterFromUser 16408 . 16850) (PopUpWindowAndGetAtom 16852 . 18303) (
-PopUpWindowAndGetList 18305 . 19875) (NewPrinter 19877 . 21376) (GetPrinterName 21378 . 21666) (
-GetImageFile 21668 . 24088) (FetchDefaultPrinter 24090 . 24338)) (24375 25249 (
-EXTENSIONS.FOR.PRINTFILETYPE 24385 . 24741) (PRINTFILETYPE.FROM.EXTENSION 24743 . 25247)) (25304 45688
- (DEFAULTPRINTER 25314 . 25554) (CAN.PRINT.DIRECTLY 25556 . 25752) (CONVERT.FILE.TO.TYPE.FOR.PRINTER 
-25754 . 27491) (EMPRESS 27493 . 28068) (HARDCOPYW 28070 . 33072) (LISTFILES1 33074 . 33251) (
-PRINTER.BITMAPFILE 33253 . 33642) (PRINTER.BITMAPSCALE 33644 . 34128) (PRINTER.SCRATCH.FILE 34130 . 
-34300) (PRINTERPROP 34302 . 34552) (PRINTERSTATUS 34554 . 34829) (PRINTERTYPE 34831 . 37401) (
-PRINTERNAME 37403 . 37824) (PRINTFILEPROP 37826 . 38082) (PRINTFILETYPE 38084 . 40040) (
-\EXPECTED.FILE.TYPE 40042 . 40832) (SEND.FILE.TO.PRINTER 40834 . 45686)) (45689 50126 (PRINTERDEVICE 
-45699 . 46676) (PRINTERDEVICE.OPENFN 46678 . 47398) (PRINTERDEVICE.CLOSEFN 47400 . 50124)) (50482 
-51040 (SCALEREGION 50492 . 51038)) (51264 59509 (TEXTTOIMAGEFILE 51274 . 53470) (COPY.TEXT.TO.IMAGE 
-53472 . 59507)) (59571 61314 (\BLTSHADE.GENERICPRINTER 59581 . 61312)) (61381 98547 (
-MAKEHARDCOPYSTREAM 61391 . 63107) (UNMAKEHARDCOPYSTREAM 63109 . 64039) (HARDCOPYSTREAMTYPE 64041 . 
-64448) (\CHARWIDTH.HDCPYDISPLAY 64450 . 65270) (\DSPFONT.HDCPYDISPLAY 65272 . 68067) (
-\DSPRIGHTMARGIN.HDCPYDISPLAY 68069 . 68924) (\DSPXPOSITION.HDCPYDISPLAY 68926 . 69301) (
-\DSPYPOSITION.HDCPYDISPLAY 69303 . 69678) (\STRINGWIDTH.HDCPYDISPLAY 69680 . 70635) (
-\STRINGWIDTH.HCPYDISPLAYAUX 70637 . 75977) (\HDCPYBLTCHAR 75979 . 80876) (\HDCPYDISPLAY.FIX.XPOS 80878
- . 81635) (\HDCPYDISPLAY.FIX.YPOS 81637 . 82378) (\HDCPYDISPLAYINIT 82380 . 84070) (\HDCPYDSPPRINTCHAR
- 84072 . 89985) (\SLOWHDCPYBLTCHAR 89987 . 96603) (\CHANGECHARSET.HDCPYDISPLAY 96605 . 98545)) (98862 
-148413 (MAKEHARDCOPYMODESTREAM 98872 . 101593) (UNMAKEHARDCOPYMODESTREAM 101595 . 103185) (
-\HCPYDISPLAYIMAGEOPS 103187 . 106007) (\BLTSHADE.HCPYMODE 106009 . 106675) (\BITBLT.HCPYMODE 106677 . 
-107425) (\BRUSHCONVERT.HCPYMODE 107427 . 107976) (\CHANGECHARSET.HCPYMODE 107978 . 111240) (
-\DASHINGCONVERT.HCPYMODE 111242 . 111583) (\CHARWIDTH.HCPYMODE 111585 . 112022) (\DRAWLINE.HCPYMODE 
-112024 . 112553) (\DRAWCURVE.HCPYMODE 112555 . 113142) (\DRAWCIRCLE.HCPYMODE 113144 . 113629) (
-\DRAWELLIPSE.HCPYMODE 113631 . 114315) (\DSPFONT.HCPYMODE 114317 . 117001) (\DSPLEFTMARGIN.HCPYMODE 
-117003 . 117745) (\DSPLINEFEED.HCPYMODE 117747 . 118380) (\DSPRIGHTMARGIN.HCPYMODE 118382 . 119450) (
-\DSPSPACEFACTOR.HCPYMODE 119452 . 120227) (\DSPXPOSITION.HCPYMODE 120229 . 121247) (
-\DSPYPOSITION.HCPYMODE 121249 . 121899) (\MOVETO.HCPYMODE 121901 . 122115) (\FONTCREATE.HCPYMODE 
-122117 . 124074) (\CREATECHARSET.HCPYMODE 124076 . 125799) (\STRINGWIDTH.HCPYMODE 125801 . 126596) (
-\HCPYMODEBLTCHAR 126598 . 132348) (\HCPYMODEDSPPRINTCHAR 132350 . 138284) (\SLOWHCPYMODEBLTCHAR 138286
- . 144915) (\SFFixY.HCPYMODE 144917 . 148411)))))
+  (FILEMAP (NIL (6497 13569 (HARDCOPY.SOMEHOW 6507 . 8743) (HARDCOPYIMAGEW 8745 . 9195) (
+HARDCOPYIMAGEW.TOFILE 9197 . 9489) (HARDCOPYIMAGEW.TOPRINTER 9491 . 10889) (HARDCOPYREGION.TOFILE 
+10891 . 11433) (HARDCOPYREGION.TOPRINTER 11435 . 12548) (COPY.WINDOW.TO.BITMAP 12550 . 13567)) (13641 
+26122 (MakeMenuOfPrinters 13651 . 15183) (PRINTERS.WHENSELECTEDFN 15185 . 16808) (MakeMenuOfImageTypes
+ 16810 . 17629) (GetNewPrinterFromUser 17631 . 18073) (PopUpWindowAndGetAtom 18075 . 19526) (
+PopUpWindowAndGetList 19528 . 21098) (NewPrinter 21100 . 22599) (GetPrinterName 22601 . 22889) (
+GetImageFile 22891 . 25870) (FetchDefaultPrinter 25872 . 26120)) (26177 43647 (DEFAULTPRINTER 26187 . 
+26427) (CONVERT.FILE.TO.TYPE.FOR.PRINTER 26429 . 27406) (CAN.PRINT.DIRECTLY 27408 . 27880) (EMPRESS 
+27882 . 28457) (HARDCOPYW 28459 . 33363) (LISTFILES1 33365 . 33542) (PRINTER.BITMAPFILE 33544 . 33933)
+ (PRINTER.BITMAPSCALE 33935 . 34419) (PRINTER.SCRATCH.FILE 34421 . 34732) (PRINTERPROP 34734 . 34984) 
+(PRINTERSTATUS 34986 . 35261) (PRINTERTYPE 35263 . 37988) (PRINTERNAME 37990 . 38889) (PRINTFILETYPE 
+38891 . 39153) (SEND.FILE.TO.PRINTER 39155 . 43645)) (43648 50020 (PRINTERDEVICE 43658 . 44635) (
+PRINTERDEVICE.OPENFN 44637 . 45357) (PRINTERDEVICE.CLOSEFN 45359 . 48444) (PRINTERDEVICEP 48446 . 
+49117) (PRINTERNAME 49119 . 50018)) (50376 50934 (SCALEREGION 50386 . 50932)) (51158 58221 (
+TEXTTOIMAGEFILE 51168 . 52027) (COPY.TEXT.TO.IMAGE 52029 . 58219)) (58283 60026 (
+\BLTSHADE.GENERICPRINTER 58293 . 60024)) (60093 97259 (MAKEHARDCOPYSTREAM 60103 . 61819) (
+UNMAKEHARDCOPYSTREAM 61821 . 62751) (HARDCOPYSTREAMTYPE 62753 . 63160) (\CHARWIDTH.HDCPYDISPLAY 63162
+ . 63982) (\DSPFONT.HDCPYDISPLAY 63984 . 66779) (\DSPRIGHTMARGIN.HDCPYDISPLAY 66781 . 67636) (
+\DSPXPOSITION.HDCPYDISPLAY 67638 . 68013) (\DSPYPOSITION.HDCPYDISPLAY 68015 . 68390) (
+\STRINGWIDTH.HDCPYDISPLAY 68392 . 69347) (\STRINGWIDTH.HCPYDISPLAYAUX 69349 . 74689) (\HDCPYBLTCHAR 
+74691 . 79588) (\HDCPYDISPLAY.FIX.XPOS 79590 . 80347) (\HDCPYDISPLAY.FIX.YPOS 80349 . 81090) (
+\HDCPYDISPLAYINIT 81092 . 82782) (\HDCPYDSPPRINTCHAR 82784 . 88697) (\SLOWHDCPYBLTCHAR 88699 . 95315) 
+(\CHANGECHARSET.HDCPYDISPLAY 95317 . 97257)) (97574 147125 (MAKEHARDCOPYMODESTREAM 97584 . 100305) (
+UNMAKEHARDCOPYMODESTREAM 100307 . 101897) (\HCPYDISPLAYIMAGEOPS 101899 . 104719) (\BLTSHADE.HCPYMODE 
+104721 . 105387) (\BITBLT.HCPYMODE 105389 . 106137) (\BRUSHCONVERT.HCPYMODE 106139 . 106688) (
+\CHANGECHARSET.HCPYMODE 106690 . 109952) (\DASHINGCONVERT.HCPYMODE 109954 . 110295) (
+\CHARWIDTH.HCPYMODE 110297 . 110734) (\DRAWLINE.HCPYMODE 110736 . 111265) (\DRAWCURVE.HCPYMODE 111267
+ . 111854) (\DRAWCIRCLE.HCPYMODE 111856 . 112341) (\DRAWELLIPSE.HCPYMODE 112343 . 113027) (
+\DSPFONT.HCPYMODE 113029 . 115713) (\DSPLEFTMARGIN.HCPYMODE 115715 . 116457) (\DSPLINEFEED.HCPYMODE 
+116459 . 117092) (\DSPRIGHTMARGIN.HCPYMODE 117094 . 118162) (\DSPSPACEFACTOR.HCPYMODE 118164 . 118939)
+ (\DSPXPOSITION.HCPYMODE 118941 . 119959) (\DSPYPOSITION.HCPYMODE 119961 . 120611) (\MOVETO.HCPYMODE 
+120613 . 120827) (\FONTCREATE.HCPYMODE 120829 . 122786) (\CREATECHARSET.HCPYMODE 122788 . 124511) (
+\STRINGWIDTH.HCPYMODE 124513 . 125308) (\HCPYMODEBLTCHAR 125310 . 131060) (\HCPYMODEDSPPRINTCHAR 
+131062 . 136996) (\SLOWHCPYMODEBLTCHAR 136998 . 143627) (\SFFixY.HCPYMODE 143629 . 147123)))))
 STOP
diff --git a/sources/HARDCOPY.LCOM b/sources/HARDCOPY.LCOM
index 6880c316..c2ff0cc1 100644
Binary files a/sources/HARDCOPY.LCOM and b/sources/HARDCOPY.LCOM differ
diff --git a/sources/IMAGEIO b/sources/IMAGEIO
index cbe9b83a..343db57d 100644
--- a/sources/IMAGEIO
+++ b/sources/IMAGEIO
@@ -1,22 +1,24 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED "21-Jun-2025 11:48:01" {WMEDLEY}<sources>IMAGEIO.;11 79830  
+(FILECREATED " 2-Nov-2025 08:54:06" {WMEDLEY}<sources>IMAGEIO.;22 81248  
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (ALISTS (IMAGESTREAMTYPES DISPLAY)
-                         (IMAGESTREAMTYPES 4DISPLAY)
-                         (IMAGESTREAMTYPES 8DISPLAY)
-                         (IMAGESTREAMTYPES 24DISPLAY))
+      :CHANGES-TO (FNS CONVERT.TO.IMAGEFILE IMAGEFILEPROP)
+                  (VARS IMAGEIOCOMS)
 
-      :PREVIOUS-DATE "15-Jun-2025 20:46:26" {WMEDLEY}<sources>IMAGEIO.;10)
+      :PREVIOUS-DATE "28-Sep-2025 11:49:34" {WMEDLEY}<sources>IMAGEIO.;20)
 
 
 (PRETTYCOMPRINT IMAGEIOCOMS)
 
 (RPAQQ IMAGEIOCOMS
-       [(FNS IMAGESTREAMP IMAGESTREAMTYPE IMAGESTREAMTYPEP OPENIMAGESTREAM \GOOD.DASHLST)
+       [(FNS OPENIMAGESTREAM)
+        (FNS IMAGESTREAMP IMAGESTREAMTYPE IMAGESTREAMTYPEP IMAGEFILETYPE IMAGEFILEPROP)
+        (FNS EXTENSIONS.FOR.IMAGEFILETYPE IMAGEFILETYPE.FROM.EXTENSION)
+        (FNS CONVERT.TO.IMAGEFILE)
         (INITVARS (IMAGESTREAMTYPES NIL))
+        (FNS \GOOD.DASHLST)
         (FNS DRAWDASHEDLINE)
         (FNS DSPBACKCOLOR DSPBOTTOMMARGIN DSPCOLOR DSPCLIPPINGREGION DSPRESET DSPFONT DSPLEFTMARGIN 
              DSPLINEFEED DSPOPERATION DSPRIGHTMARGIN DSPTOPMARGIN DSPSCALE DSPSPACEFACTOR 
@@ -59,6 +61,28 @@
                                                                              (LAMA IMAGESTREAMP])
 (DEFINEQ
 
+(OPENIMAGESTREAM
+  [LAMBDA (IMAGEFILE IMAGETYPE OPTIONS)                      (* ; "Edited 25-Sep-2025 21:32 by rmk")
+                                                             (* ; "Edited 19-Sep-2025 15:58 by rmk")
+                                                             (* ; "Edited  1-Jun-93 12:32 by rmk:")
+                                                             (* ; "Edited 11-Jan-91 16:05 by jds")
+
+    (* ;; "Opens IMAGEFILE as an IMAGETYPE imagestream")
+
+    (DECLARE (GLOBALVARS IMAGESTREAMTYPES))
+    (APPLY* (OR (CAR (GETMULTI IMAGESTREAMTYPES IMAGETYPE 'OPENSTREAM))
+                (ERROR "No open function for " IMAGETYPE " streams"))
+           (CL:IF (OR (EQ IMAGETYPE 'DISPLAY)
+                      (STREAMP (FULLNAME IMAGEFILE)))
+               IMAGEFILE
+               (PACKFILENAME 'BODY (\CONVERT-PATHNAME IMAGEFILE)
+                      'EXTENSION
+                      (OR (CAR (EXTENSIONS.FOR.IMAGEFILETYPE IMAGETYPE))
+                          IMAGETYPE)))
+           OPTIONS])
+)
+(DEFINEQ
+
 (IMAGESTREAMP
   [LAMBDA NARGS                                          (* ; "Edited 18-Jan-87 17:25 by bvm:")
     (PROG ([STREAM (AND (IGREATERP NARGS 0)
@@ -95,79 +119,91 @@
                                                                   of (fetch (STREAM IMAGEOPS)
                                                                             of S])
 
-(OPENIMAGESTREAM
-  [LAMBDA (FILE IMAGETYPE OPTIONS)                           (* ; "Edited  1-Jun-93 12:32 by rmk:")
-                                                             (* ; "Edited 11-Jan-91 16:05 by jds")
+(IMAGEFILETYPE
+  [LAMBDA (FILE)                                             (* ; "Edited 28-Sep-2025 11:35 by rmk")
+                                                             (* ; "Edited 18-Sep-2025 11:13 by rmk")
+                                                             (* ; "Edited 13-Sep-2025 23:36 by rmk")
+                                                             (* ; "Edited  3-Mar-93 14:34 by rmk:")
+                                                             (* ; "Edited 22-Aug-92 14:27 by jds")
+                                                             (* ; "Edited 26-Aug-87 14:22 by Snow")
+    (if (IMAGESTREAMP FILE)
+        then (IMAGESTREAMTYPE FILE)
+      elseif (CAR (find ITYPE TESTFN in PRINTFILETYPES when [SETQ TESTFN (CAR (GETMULTI ITYPE
+                                                                                     'TEST]
+                     suchthat (APPLY* TESTFN FILE)))
+      elseif (LISPSOURCEFILEP FILE)
+        then 'TEXT
+      else (GETFILEINFO FILE 'TYPE])
 
-    (* ;; "Opens an IMAGETYPE imagestream, or if NIL, an imagestream of a type that FILE (perhaps from DEFAULTPRINTINGHOST) can print directly. If FILE is an the LPT device, then the type of the corresponding printer is used. If FILE is NIL, then an LPT file on a printer from default printinghost is used, so the file will be printed on closing.")
+(IMAGEFILEPROP
+  [LAMBDA (IMAGEFILETYPE PROP)                               (* ; "Edited 29-Oct-2025 13:32 by rmk")
+                                                             (* ; "Edited 26-Aug-87 14:22 by Snow")
+    (for X in PRINTFILETYPES when (EQMEMB IMAGEFILETYPE (CAR X))
+       do (RETURN (CADR (ASSOC PROP (CDR X])
+)
+(DEFINEQ
 
-    (DECLARE (GLOBALVARS IMAGESTREAMTYPES))
-    (LET (LPTNAME LPTP (DEFPRINTER (OR (CAR (LISTP DEFAULTPRINTINGHOST))
-                                       DEFAULTPRINTINGHOST)))
-         (SETQ FILE (\CONVERT-PATHNAME FILE))
-         [COND
-            ((AND (NULL FILE)
-                  (NEQ IMAGETYPE 'DISPLAY))                  (* ; 
-                               "YUCK! TAKE THIS OUT WHEN WE FIGURE OUT DISPLAY IMAGESTREAMS BETTER")
-             (SETQ LPTP T)
-             (SETQ FILE '{LPT}))
-            ((STREAMP FILE))
-            ((EQ (FILENAMEFIELD FILE 'HOST)
-                 'LPT)
-             (SETQ LPTP T)
-             (LET (POS)
+(EXTENSIONS.FOR.IMAGEFILETYPE
+  [LAMBDA (TYPE)                                             (* ; "Edited 10-Sep-2025 14:43 by rmk")
+                                                             (* ; "Edited 26-Aug-87 14:11 by Snow")
+    (DECLARE (GLOBALVARS PRINTFILETYPES))
+    (CAR (MKLIST (GETMULTI PRINTFILETYPES TYPE 'EXTENSION])
 
-                  (* ;; "This should be (FILENAMEFIELD FILE 'NAME) except that FILENAMEFIELD won't accept : as part of the name, thinks it marks a device field. This code is borrowed from PRINTERDEVICE")
+(IMAGEFILETYPE.FROM.EXTENSION
+  [LAMBDA (FILE EXT)                                         (* ; "Edited 20-Sep-2025 12:35 by rmk")
+                                                             (* ; "Edited 26-Aug-87 14:11 by Snow")
+                                                             (* ; 
+                                         "return the imagestream type corresponding to the extension")
+    (CL:UNLESS EXT
+        [SETQ EXT (U-CASE (FILENAMEFIELD FILE 'EXTENSION])
+    (for TYPE in PRINTFILETYPES when [FMEMB EXT (CADR (ASSOC 'EXTENSION (CDR TYPE]
+       do (RETURN (CAR TYPE])
+)
+(DEFINEQ
 
-                  (AND (SETQ POS (STRPOS "}" FILE))
-                       (SETQ LPTNAME (SUBATOM FILE (ADD1 POS)
-                                            (SUB1 (OR (STRPOS "." FILE (ADD1 POS))
-                                                      0]
-         [COND
-            [(NULL IMAGETYPE)
+(CONVERT.TO.IMAGEFILE
+  [LAMBDA (FILE IMAGEFILE IMAGETYPE OPTIONS NOERROR)         (* ; "Edited  2-Nov-2025 08:53 by rmk")
+                                                             (* ; "Edited 29-Oct-2025 13:33 by rmk")
+                                                             (* ; "Edited 26-Sep-2025 23:46 by rmk")
+                                                             (* ; "Edited 20-Sep-2025 12:57 by rmk")
+                                                             (* ; "Edited 18-Sep-2025 23:35 by rmk")
+                                                             (* ; "Edited 13-Sep-2025 20:11 by rmk")
+                                                             (* ; "Edited 12-Sep-2025 19:50 by rmk")
+                                                             (* ; "Edited 24-Sep-2023 15:25 by rmk")
+                                                             (* ; "Edited 14-Sep-2023 22:58 by rmk")
 
-             (* ;; "Get the image type from FILE if it is an LPT file, otherwise choose the image type from the first printer on DEFAULTPRINTINGHOST")
+    (* ;; "If this is the result of (COPYFILE 'XXX {LPT}), then XXX (e.g. a Tedit file) has already been copied once, to the LPT device, where it has lost its original identity.  PRINTERDEVICE.CLOSEFN  calls SEND.FILE.TO.PRINTER, which calls this to apply the (e.g. Tedit) conversion method for the imagetype of this PRINTERTYPE.  In that case there is no reason for the conversion function to print the name of its target image stream")
 
-             (* ;; "Assume that it will be printed on the defaultprintinghost if it is an ordinary filename.  If defaultprinter is a list, chooses the preferred-file-type if it is specified, otherwise uses the first of the printer type's CANPRINT property.  ")
+    (CL:UNLESS (STREAMP FILE)
+        (SETQ FILE (FINDFILE FILE T)))
+    [if NOERROR
+        then (push OPTIONS 'NOERROR T)
+      else (SETQ NOERROR (LISTGET OPTIONS 'NOERROR]
+    (SETQ IMAGEFILE (if (STREAMP IMAGEFILE)
+                      elseif IMAGEFILE
+                        then (PACKFILENAME 'BODY IMAGEFILE 'EXTENSION IMAGETYPE)
+                      elseif (OR (NULL IMAGEFILE)
+                                 (STREAMP (FULLNAME FILE)))
+                        then (OPENSTREAM '{NODIRCORE} 'OUTPUT)
+                      else (PACKFILENAME 'VERSION NIL 'EXTENSION IMAGETYPE 'BODY FILE)))
+    (LET ((FILETYPE (IMAGEFILETYPE FILE))
+          CONVERTED CFN)
 
-             (SETQ IMAGETYPE (COND
-                                ((PRINTFILETYPE.FROM.EXTENSION FILE))
-                                [(AND (NOT LPTNAME)
-                                      (CADDR (LISTP DEFPRINTER]
-                                [(CAR (MKLIST (PRINTERPROP (PRINTERTYPE (OR LPTNAME DEFPRINTER))
-                                                     'CANPRINT]
-                                (T (ERROR "Can't determine IMAGETYPE for " FILE]
-            [LPTNAME (OR (EQMEMB IMAGETYPE (PRINTERPROP (PRINTERTYPE LPTNAME)
-                                                  'CANPRINT))
-                         (ERROR (CONCAT "Printer " LPTNAME " can't print " IMAGETYPE " files"]
-            (LPTP                                            (* ; 
-                                       "This includes the NIL FILE case, cause of initial coercion")
-                  (FOR P INSIDE DEFAULTPRINTINGHOST WHEN (EQMEMB IMAGETYPE
-                                                                            (PRINTERPROP (PRINTERTYPE
-                                                                                          P)
-                                                                                   'CANPRINT))
-                     DO (SETQ LPTNAME (PRINTERNAME P))
-                           (SETQ FILE (PACKFILENAME 'HOST 'LPT 'NAME LPTNAME))
-                           (RETURN) FINALLY (ERROR (CONCAT 
-                                        "Can't find a printer on DEFAULTPRINTINGHOST that can print "
-                                                              IMAGETYPE " files"]
-         (LET ((STREAM (APPLY* (OR [CADR (ASSOC 'OPENSTREAM (CDR (ASSOC IMAGETYPE IMAGESTREAMTYPES]
-                                   (ERROR "No open function for " IMAGETYPE " streams"))
-                              [COND
-                                 ((OR LPTP (STREAMP FILE)
-                                      (EQ IMAGETYPE 'DISPLAY))
-                                  FILE)
-                                 (T                          (* ; 
-                                                   "Stick on default extension from PRINTFILETYPES")
-                                    (PACKFILENAME 'BODY FILE 'EXTENSION
-                                           (OR [CAR (CADR (ASSOC 'EXTENSION (CDR (ASSOC IMAGETYPE 
-                                                                                       PRINTFILETYPES
-                                                                                        ]
-                                               IMAGETYPE]
-                              OPTIONS)))
-              (IF LPTNAME
-                  THEN (STREAMPROP STREAM 'PRINTERNAME LPTNAME))
-              STREAM])
+         (* ;; "The conversion function may abandon the IMAGEFILE we provide and create its own.")
+
+         (if [AND (SETQ CFN (LISTGET (IMAGEFILEPROP IMAGETYPE 'CONVERSION)
+                                   FILETYPE))
+                  (SETQ CONVERTED (CAR (NLSETQ (APPLY* CFN FILE IMAGEFILE IMAGETYPE OPTIONS]
+             then (CLOSEF? CONVERTED)
+                  CONVERTED
+           elseif NOERROR
+             then NIL
+           else (ERROR (CONCAT "Can't convert " FILETYPE " file to " IMAGETYPE)
+                       (FULLNAME FILE])
+)
+
+(RPAQ? IMAGESTREAMTYPES NIL)
+(DEFINEQ
 
 (\GOOD.DASHLST
   [LAMBDA (DASHING BRUSH)                                (* rrb " 9-Sep-86 16:16")
@@ -205,8 +241,6 @@
                                                             BRUSHSIZE]
           (RETURN DASHLST])
 )
-
-(RPAQ? IMAGESTREAMTYPES NIL)
 (DEFINEQ
 
 (DRAWDASHEDLINE
@@ -1515,24 +1549,26 @@
 (ADDTOVAR LAMA IMAGESTREAMP)
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (3376 12133 (IMAGESTREAMP 3386 . 4218) (IMAGESTREAMTYPE 4220 . 4433) (IMAGESTREAMTYPEP 
-4435 . 5070) (OPENIMAGESTREAM 5072 . 10026) (\GOOD.DASHLST 10028 . 12131)) (12168 14465 (
-DRAWDASHEDLINE 12178 . 14463)) (14466 21806 (DSPBACKCOLOR 14476 . 14848) (DSPBOTTOMMARGIN 14850 . 
-15235) (DSPCOLOR 15237 . 15601) (DSPCLIPPINGREGION 15603 . 16308) (DSPRESET 16310 . 16590) (DSPFONT 
-16592 . 16956) (DSPLEFTMARGIN 16958 . 17339) (DSPLINEFEED 17341 . 17641) (DSPOPERATION 17643 . 18020) 
-(DSPRIGHTMARGIN 18022 . 18405) (DSPTOPMARGIN 18407 . 18786) (DSPSCALE 18788 . 19155) (DSPSPACEFACTOR 
-19157 . 19550) (DSPXPOSITION 19552 . 19857) (DSPYPOSITION 19859 . 20164) (DSPROTATE 20166 . 20461) (
-DSPPUSHSTATE 20463 . 20709) (DSPPOPSTATE 20711 . 20954) (DSPDEFAULTSTATE 20956 . 21208) (DSPSCALE2 
-21210 . 21501) (DSPTRANSLATE 21503 . 21804)) (21807 30608 (DSPNEWPAGE 21817 . 22509) (DRAWBETWEEN 
-22511 . 23213) (DRAWCIRCLE 23215 . 23711) (DRAWARC 23713 . 24230) (DRAWCURVE 24232 . 24909) (
-DRAWELLIPSE 24911 . 25697) (DRAWLINE 25699 . 26089) (DRAWPOLYGON 26091 . 26546) (DRAWPOINT 26548 . 
-26967) (FILLPOLYGON 26969 . 27535) (DRAWTO 27537 . 27955) (FILLCIRCLE 27957 . 28180) (MOVETO 28182 . 
-28546) (RELDRAWTO 28548 . 29465) (BITMAPIMAGESIZE 29467 . 29638) (SCALEDBITBLT 29640 . 30606)) (30609 
-37648 (\DRAWPOINT.GENERIC 30619 . 30966) (\DRAWPOLYGON.GENERIC 30968 . 33276) (\DRAWCIRCLE.GENERIC 
-33278 . 34936) (\DRAWELLIPSE.GENERIC 34938 . 37646)) (37649 42593 (\IMAGEIOINIT 37659 . 40939) (
-\NOIMAGE.DSPFONT 40941 . 42427) (\UNIMPIMAGEOP 42429 . 42591)) (42716 45840 (INSURE.BRUSH 42726 . 
-44100) (BRUSHP 44102 . 44892) (\POSSIBLECOLOR 44894 . 45445) (NEGSHADE 45447 . 45838)) (46396 47080 (
-DASHINGP 46406 . 46736) (INSURE.DASHING 46738 . 47078)) (57818 78364 (\DisplayEventFn 57828 . 58338) (
-\DISPLAYINIT 58340 . 63923) (\4DISPLAYINIT 63925 . 68626) (\8DISPLAYINIT 68628 . 73331) (
-\24DISPLAYINIT 73333 . 78105) (\DISPLAYSTREAMTYPEBPP 78107 . 78362)))))
+  (FILEMAP (NIL (3421 4499 (OPENIMAGESTREAM 3431 . 4497)) (4500 7676 (IMAGESTREAMP 4510 . 5342) (
+IMAGESTREAMTYPE 5344 . 5557) (IMAGESTREAMTYPEP 5559 . 6194) (IMAGEFILETYPE 6196 . 7307) (IMAGEFILEPROP
+ 7309 . 7674)) (7677 8682 (EXTENSIONS.FOR.IMAGEFILETYPE 7687 . 8043) (IMAGEFILETYPE.FROM.EXTENSION 
+8045 . 8680)) (8683 11435 (CONVERT.TO.IMAGEFILE 8693 . 11433)) (11470 13585 (\GOOD.DASHLST 11480 . 
+13583)) (13586 15883 (DRAWDASHEDLINE 13596 . 15881)) (15884 23224 (DSPBACKCOLOR 15894 . 16266) (
+DSPBOTTOMMARGIN 16268 . 16653) (DSPCOLOR 16655 . 17019) (DSPCLIPPINGREGION 17021 . 17726) (DSPRESET 
+17728 . 18008) (DSPFONT 18010 . 18374) (DSPLEFTMARGIN 18376 . 18757) (DSPLINEFEED 18759 . 19059) (
+DSPOPERATION 19061 . 19438) (DSPRIGHTMARGIN 19440 . 19823) (DSPTOPMARGIN 19825 . 20204) (DSPSCALE 
+20206 . 20573) (DSPSPACEFACTOR 20575 . 20968) (DSPXPOSITION 20970 . 21275) (DSPYPOSITION 21277 . 21582
+) (DSPROTATE 21584 . 21879) (DSPPUSHSTATE 21881 . 22127) (DSPPOPSTATE 22129 . 22372) (DSPDEFAULTSTATE 
+22374 . 22626) (DSPSCALE2 22628 . 22919) (DSPTRANSLATE 22921 . 23222)) (23225 32026 (DSPNEWPAGE 23235
+ . 23927) (DRAWBETWEEN 23929 . 24631) (DRAWCIRCLE 24633 . 25129) (DRAWARC 25131 . 25648) (DRAWCURVE 
+25650 . 26327) (DRAWELLIPSE 26329 . 27115) (DRAWLINE 27117 . 27507) (DRAWPOLYGON 27509 . 27964) (
+DRAWPOINT 27966 . 28385) (FILLPOLYGON 28387 . 28953) (DRAWTO 28955 . 29373) (FILLCIRCLE 29375 . 29598)
+ (MOVETO 29600 . 29964) (RELDRAWTO 29966 . 30883) (BITMAPIMAGESIZE 30885 . 31056) (SCALEDBITBLT 31058
+ . 32024)) (32027 39066 (\DRAWPOINT.GENERIC 32037 . 32384) (\DRAWPOLYGON.GENERIC 32386 . 34694) (
+\DRAWCIRCLE.GENERIC 34696 . 36354) (\DRAWELLIPSE.GENERIC 36356 . 39064)) (39067 44011 (\IMAGEIOINIT 
+39077 . 42357) (\NOIMAGE.DSPFONT 42359 . 43845) (\UNIMPIMAGEOP 43847 . 44009)) (44134 47258 (
+INSURE.BRUSH 44144 . 45518) (BRUSHP 45520 . 46310) (\POSSIBLECOLOR 46312 . 46863) (NEGSHADE 46865 . 
+47256)) (47814 48498 (DASHINGP 47824 . 48154) (INSURE.DASHING 48156 . 48496)) (59236 79782 (
+\DisplayEventFn 59246 . 59756) (\DISPLAYINIT 59758 . 65341) (\4DISPLAYINIT 65343 . 70044) (
+\8DISPLAYINIT 70046 . 74749) (\24DISPLAYINIT 74751 . 79523) (\DISPLAYSTREAMTYPEBPP 79525 . 79780)))))
 STOP
diff --git a/sources/IMAGEIO.LCOM b/sources/IMAGEIO.LCOM
index 572b2032..c35aae97 100644
Binary files a/sources/IMAGEIO.LCOM and b/sources/IMAGEIO.LCOM differ
diff --git a/sources/INTERPRESS b/sources/INTERPRESS
index e722d799..07dd554f 100644
--- a/sources/INTERPRESS
+++ b/sources/INTERPRESS
@@ -1,13 +1,12 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED "10-Sep-2025 16:59:11" 
-{DSK}<Users>kaplan>Local>medley3.5>working-medley>sources>INTERPRESS.;96 215772 
+(FILECREATED "17-Sep-2025 23:16:50" {WMEDLEY}<sources>INTERPRESS.;99 216112 
 
       :EDIT-BY rmk
 
       :CHANGES-TO (VARS INTERPRESSCOMS)
 
-      :PREVIOUS-DATE " 9-Sep-2025 13:19:12" {WMEDLEY}<sources>INTERPRESS.;94)
+      :PREVIOUS-DATE "13-Sep-2025 23:25:38" {WMEDLEY}<sources>INTERPRESS.;98)
 
 
 (PRETTYCOMPRINT INTERPRESSCOMS)
@@ -37,17 +36,17 @@
                    TRAJECTORY.IP TRANS.IP TRANSLATE.IP))
         (COMS                                                (* ; "DIG interface")
               (FNS \CHANGE-VISIBLE-REGION.IP \PAPERSIZE.IP HEADINGOP.IP)
-              (FNS DEFINEFONT.IP FONTNAME.IP INTERPRESS.BITMAPSCALE INTERPRESS.OUTCHARFN 
-                   INTERPRESSFILEP MAKEINTERPRESS NEWLINE.IP NEWPAGE.IP NEWPAGE?.IP OPENIPSTREAM 
-                   SETUPFONTS.IP SHOWBITMAP.IP \BITMAPSIZE.IP SHOWBITMAP1.IP SHOWSHADE.IP \BITBLT.IP
-                   \SCALEDBITBLT.IP \BLTSHADE.IP \CHARWIDTH.IP \CLOSEIPSTREAM \DRAWARC.IP 
-                   \DRAWCURVE.IP \DRAWPOINT.IP \DSPCOLOR.IP ENSURE.RGB \IPCURVE2 \CLIPCURVELINE.IP 
-                   \DRAWLINE.IP \CLIPLINE \DSPBOTTOMMARGIN.IP \DSPFONT.IP \DSPLEFTMARGIN.IP 
-                   \DSPLINEFEED.IP \DSPRIGHTMARGIN.IP \DSPSPACEFACTOR.IP \DSPTOPMARGIN.IP 
-                   \DSPXPOSITION.IP \DSPROTATE.IP \PUSHSTATE.IP \POPSTATE.IP \DEFAULTSTATE.IP 
-                   \DSPTRANSLATE.IP \DSPSCALE2.IP \DSPYPOSITION.IP FILLCIRCLE.IP \FILLPOLYGON.IP 
-                   \DRAWPOLYGON.IP \FIXLINELENGTH.IP \MOVETO.IP \SETBRUSH.IP \STRINGWIDTH.IP 
-                   \DSPCLIPPINGREGION.IP \DSPOPERATION.IP))
+              (FNS DEFINEFONT.IP FONTNAME.IP INTERPRESS.BITMAPSCALE INTERPRESS.OUTCHARFN NEWLINE.IP 
+                   NEWPAGE.IP NEWPAGE?.IP OPENIPSTREAM SETUPFONTS.IP SHOWBITMAP.IP \BITMAPSIZE.IP 
+                   SHOWBITMAP1.IP SHOWSHADE.IP \BITBLT.IP \SCALEDBITBLT.IP \BLTSHADE.IP \CHARWIDTH.IP
+                   \CLOSEIPSTREAM \DRAWARC.IP \DRAWCURVE.IP \DRAWPOINT.IP \DSPCOLOR.IP ENSURE.RGB 
+                   \IPCURVE2 \CLIPCURVELINE.IP \DRAWLINE.IP \CLIPLINE \DSPBOTTOMMARGIN.IP \DSPFONT.IP
+                   \DSPLEFTMARGIN.IP \DSPLINEFEED.IP \DSPRIGHTMARGIN.IP \DSPSPACEFACTOR.IP 
+                   \DSPTOPMARGIN.IP \DSPXPOSITION.IP \DSPROTATE.IP \PUSHSTATE.IP \POPSTATE.IP 
+                   \DEFAULTSTATE.IP \DSPTRANSLATE.IP \DSPSCALE2.IP \DSPYPOSITION.IP FILLCIRCLE.IP 
+                   \FILLPOLYGON.IP \DRAWPOLYGON.IP \FIXLINELENGTH.IP \MOVETO.IP \SETBRUSH.IP 
+                   \STRINGWIDTH.IP \DSPCLIPPINGREGION.IP \DSPOPERATION.IP)
+              (FNS INTERPRESSFILEP INTERPRESS.TEDIT))
         (COMS                                                (* ; 
       "Patch controller for the %"Bonnet%" printer bug that loses X,Y position when you do a DSPFONT")
               (INITVARS (*INTERPRESS-PRINTER-DSPFONT-PATCH* NIL)))
@@ -97,7 +96,7 @@
                          (BITMAPFILE (INTERPRESSBITMAP FILE BITMAP SCALEFACTOR REGION ROTATION TITLE]
                (PRINTFILETYPES (INTERPRESS (TEST INTERPRESSFILEP)
                                       (EXTENSION (IP IPR INTERPRESS))
-                                      (CONVERSION (TEXT MAKEINTERPRESS TEDIT \TEDIT.HARDCOPY]
+                                      (CONVERSION (TEXT TEXTTOIMAGEFILE TEDIT TEDIT.IMAGEFILE]
         [ADDVARS (IMAGESTREAMTYPES (INTERPRESSDISPLAY (FONTCREATE \FONTCREATE.HCPYMODE)
                                           (CREATECHARSET \CREATECHARSET.HCPYMODE]
         (INITVARS (DEFAULT.INTERPRESS.BITMAP.ROTATION 90))
@@ -1487,36 +1486,6 @@
                      (SHOW.IP IPSTREAM T)                    (* ; "Either failed CHARVIS, or failed both VISRIGHT and IPRIGHT, so not in clipping region.  Just move X position")
                      (SETX.IP IPSTREAM NEWXPOS])
 
-(INTERPRESSFILEP
-  [LAMBDA (FILE NOOPEN)                                      (* ; "Edited  2-May-2023 09:09 by lmm")
-                                                             (* jds "18-Feb-85 09:41")
-
-    (* ;; "Returns fullname of FILE if it looks like an Interpress file")
-
-    (OR (EQ (GETFILEINFO FILE 'FILETYPE)
-            (\IPC FILETYPE.INTERPRESS))
-        (RESETLST
-            [PROG (STRM)
-                  [COND
-                     ((SETQ STRM (\GETSTREAM FILE 'INPUT T))
-                      (OR (RANDACCESSP STRM)
-                          (RETURN))
-                      (RESETSAVE NIL (LIST 'SETFILEPTR STRM (GETFILEPTR STRM)))
-                      (SETFILEPTR STRM 0))
-                     (NOOPEN (RETURN))
-                     (T (RESETSAVE (SETQ STRM (OPENSTREAM FILE 'INPUT 'OLD 8))
-                               '(PROGN (CLOSEF? OLDVALUE]
-                  (RETURN (for I from 1 to (\IPC (NCHARS NOVERSIONENCODINGSTRING))
-                             when (OR (EOFP STRM)
-                                      (NEQ (NTHCHARCODE (\IPC NOVERSIONENCODINGSTRING)
-                                                  I)
-                                           (BIN STRM))) do (RETURN NIL)
-                             finally (RETURN (FULLNAME STRM])])
-
-(MAKEINTERPRESS
-  [LAMBDA (FILE IPFILE FONTS HEADING TABS OPTIONS)       (* jds " 9-May-85 16:28")
-    (TEXTTOIMAGEFILE FILE IPFILE 'INTERPRESS FONTS HEADING TABS OPTIONS])
-
 (NEWLINE.IP
   [LAMBDA (IPSTREAM)                                     (* jds " 9-Feb-86 17:37")
                                                              (* ; 
@@ -3069,6 +3038,44 @@
                                             with OPERATION))
                                         (T (\ILLEGAL.ARG OPERATION])])
 )
+(DEFINEQ
+
+(INTERPRESSFILEP
+  [LAMBDA (FILE NOOPEN)                                      (* ; "Edited 13-Sep-2025 23:25 by rmk")
+                                                             (* ; "Edited  2-May-2023 09:09 by lmm")
+                                                             (* jds "18-Feb-85 09:41")
+
+    (* ;; "Returns fullname of FILE if it looks like an Interpress file")
+
+    (OR (EQ (GETFILEINFO FILE 'FILETYPE)
+            (\IPC FILETYPE.INTERPRESS))
+        (RESETLST
+            [PROG (STRM)
+                  [COND
+                     ((SETQ STRM (\GETSTREAM FILE 'INPUT T))
+                      (OR (RANDACCESSP STRM)
+                          (RETURN))
+                      [RESETSAVE NIL `(PROGN (SETFILEPTR ,STRM ,(GETFILEPTR STRM]
+                      (SETFILEPTR STRM 0))
+                     (NOOPEN (RETURN))
+                     (T (RESETSAVE (SETQ STRM (OPENSTREAM FILE 'INPUT 'OLD 8))
+                               '(PROGN (CLOSEF? OLDVALUE]
+                  (RETURN (for I from 1 to (\IPC (NCHARS NOVERSIONENCODINGSTRING))
+                             when (OR (EOFP STRM)
+                                      (NEQ (NTHCHARCODE (\IPC NOVERSIONENCODINGSTRING)
+                                                  I)
+                                           (BIN STRM))) do (RETURN NIL)
+                             finally (RETURN (FULLNAME STRM])])
+
+(INTERPRESS.TEDIT
+  [LAMBDA (FILE IMAGESTREAM)                                 (* ; "Edited 13-Sep-2025 20:21 by rmk")
+                                                             (* ; "Edited 12-Sep-2025 13:40 by rmk")
+                                                             (* ; "Edited 18-Sep-91 18:16 by jds")
+
+    (* ;; "IMAGESTREAM must be a postscript stream  ")
+
+    (TEDIT.TO.IMAGESTREAM FILE IMAGESTREAM])
+)
 
 
 
@@ -3517,7 +3524,7 @@
 
 (ADDTOVAR PRINTFILETYPES (INTERPRESS (TEST INTERPRESSFILEP)
                                 (EXTENSION (IP IPR INTERPRESS))
-                                (CONVERSION (TEXT MAKEINTERPRESS TEDIT \TEDIT.HARDCOPY))))
+                                (CONVERSION (TEXT TEXTTOIMAGEFILE TEDIT TEDIT.IMAGEFILE))))
 
 (ADDTOVAR IMAGESTREAMTYPES (INTERPRESSDISPLAY (FONTCREATE \FONTCREATE.HCPYMODE)
                                   (CREATECHARSET \CREATECHARSET.HCPYMODE)))
@@ -3831,44 +3838,44 @@
 (LOADDEF 'BRUSH 'RECORDS 'IMAGEIO)
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (17251 22903 (APPENDBYTE.IP 17261 . 17397) (APPENDIDENTIFIER.IP 17399 . 17921) (
-APPENDINT.IP 17923 . 18374) (APPENDINTEGER.IP 18376 . 18948) (APPENDLARGEVECTOR.IP 18950 . 19915) (
-APPENDNUMBER.IP 19917 . 20386) (APPENDOP.IP 20388 . 21034) (APPENDRATIONAL.IP 21036 . 21529) (
-APPENDSEQUENCEDESCRIPTOR.IP 21531 . 22726) (BYTESININT.IP 22728 . 22901)) (22939 62746 (ARCTO.IP 22949
- . 24230) (BEGINMASTER.IP 24232 . 24505) (BEGINPAGE.IP 24507 . 24863) (BEGINPREAMBLE.IP 24865 . 25236)
- (CLIPRECTANGLE.IP 25238 . 25728) (CONCAT.IP 25730 . 25995) (CONCATT.IP 25997 . 26264) (ENDMASTER.IP 
-26266 . 26710) (ENDPAGE.IP 26712 . 27089) (ENDPREAMBLE.IP 27091 . 27890) (FGET.IP 27892 . 28195) (
-FILLRECTANGLE.IP 28197 . 30525) (FILLTRAJECTORY.IP 30527 . 31162) (FILLNGON.IP 31164 . 33441) (FSET.IP
- 33443 . 33746) (GETFRAMEVAR.IP 33748 . 34066) (INITIALIZEMASTER.IP 34068 . 34669) (INITIALIZECOLOR.IP
- 34671 . 35992) (ISET.IP 35994 . 36365) (GETCP.IP 36367 . 36676) (LINETO.IP 36678 . 37283) (
-MASKSTROKE.IP 37285 . 37558) (MOVETO.IP 37560 . 37897) (ROTATE.IP 37899 . 38201) (SCALE.IP 38203 . 
-38506) (SCALE2.IP 38508 . 38845) (SETCOLOR.IP 38847 . 41076) (SETRGB.IP 41078 . 42134) (SETCOLORLV.IP 
-42136 . 46749) (SETCOLOR16.IP 46751 . 49857) (SETFONT.IP 49859 . 50680) (SETSPACE.IP 50682 . 50994) (
-SETXREL.IP 50996 . 52180) (SETX.IP 52182 . 53699) (SETXY.IP 53701 . 54873) (SETXYREL.IP 54875 . 56181)
- (SETY.IP 56183 . 57492) (SETYREL.IP 57494 . 58394) (SHOW.IP 58396 . 61656) (TRAJECTORY.IP 61658 . 
-62056) (TRANS.IP 62058 . 62397) (TRANSLATE.IP 62399 . 62744)) (62777 68867 (\CHANGE-VISIBLE-REGION.IP 
-62787 . 66448) (\PAPERSIZE.IP 66450 . 67271) (HEADINGOP.IP 67273 . 68865)) (68868 174910 (
-DEFINEFONT.IP 68878 . 69852) (FONTNAME.IP 69854 . 70784) (INTERPRESS.BITMAPSCALE 70786 . 71579) (
-INTERPRESS.OUTCHARFN 71581 . 78088) (INTERPRESSFILEP 78090 . 79424) (MAKEINTERPRESS 79426 . 79610) (
-NEWLINE.IP 79612 . 80344) (NEWPAGE.IP 80346 . 85321) (NEWPAGE?.IP 85323 . 85802) (OPENIPSTREAM 85804
- . 94155) (SETUPFONTS.IP 94157 . 95149) (SHOWBITMAP.IP 95151 . 99692) (\BITMAPSIZE.IP 99694 . 100471) 
-(SHOWBITMAP1.IP 100473 . 104845) (SHOWSHADE.IP 104847 . 105800) (\BITBLT.IP 105802 . 110006) (
-\SCALEDBITBLT.IP 110008 . 113653) (\BLTSHADE.IP 113655 . 115113) (\CHARWIDTH.IP 115115 . 115565) (
-\CLOSEIPSTREAM 115567 . 115894) (\DRAWARC.IP 115896 . 116343) (\DRAWCURVE.IP 116345 . 118782) (
-\DRAWPOINT.IP 118784 . 119821) (\DSPCOLOR.IP 119823 . 120774) (ENSURE.RGB 120776 . 121440) (\IPCURVE2 
-121442 . 134696) (\CLIPCURVELINE.IP 134698 . 139396) (\DRAWLINE.IP 139398 . 143130) (\CLIPLINE 143132
- . 147832) (\DSPBOTTOMMARGIN.IP 147834 . 148250) (\DSPFONT.IP 148252 . 153012) (\DSPLEFTMARGIN.IP 
-153014 . 153474) (\DSPLINEFEED.IP 153476 . 154143) (\DSPRIGHTMARGIN.IP 154145 . 154942) (
-\DSPSPACEFACTOR.IP 154944 . 156073) (\DSPTOPMARGIN.IP 156075 . 156511) (\DSPXPOSITION.IP 156513 . 
-157500) (\DSPROTATE.IP 157502 . 157680) (\PUSHSTATE.IP 157682 . 158574) (\POPSTATE.IP 158576 . 159211)
- (\DEFAULTSTATE.IP 159213 . 159565) (\DSPTRANSLATE.IP 159567 . 159748) (\DSPSCALE2.IP 159750 . 159925)
- (\DSPYPOSITION.IP 159927 . 160228) (FILLCIRCLE.IP 160230 . 161313) (\FILLPOLYGON.IP 161315 . 162646) 
-(\DRAWPOLYGON.IP 162648 . 168778) (\FIXLINELENGTH.IP 168780 . 169994) (\MOVETO.IP 169996 . 170360) (
-\SETBRUSH.IP 170362 . 172528) (\STRINGWIDTH.IP 172530 . 172933) (\DSPCLIPPINGREGION.IP 172935 . 174111
-) (\DSPOPERATION.IP 174113 . 174908)) (175101 175856 (IP-TOS 175111 . 175371) (POP-IP-STACK 175373 . 
-175668) (PUSH-IP-STACK 175670 . 175854)) (175917 176841 (\CHANGECHARSET.IP 175927 . 176839)) (176842 
-180458 (\INTERPRESSINIT 176852 . 180456)) (193542 195966 (INTERPRESSBITMAP 193552 . 195964)) (198390 
-201011 (\CREATEINTERPRESSFONT 198400 . 200128) (\CREATECHARSET.IP 200130 . 201009)) (201012 213185 (
-IPFONT.FILEP 201022 . 201206) (IPFONT.GETCHARSET 201208 . 211306) (\FACECODE 211308 . 211898) (
-\FAMILYCODE 211900 . 213183)))))
+  (FILEMAP (NIL (17212 22864 (APPENDBYTE.IP 17222 . 17358) (APPENDIDENTIFIER.IP 17360 . 17882) (
+APPENDINT.IP 17884 . 18335) (APPENDINTEGER.IP 18337 . 18909) (APPENDLARGEVECTOR.IP 18911 . 19876) (
+APPENDNUMBER.IP 19878 . 20347) (APPENDOP.IP 20349 . 20995) (APPENDRATIONAL.IP 20997 . 21490) (
+APPENDSEQUENCEDESCRIPTOR.IP 21492 . 22687) (BYTESININT.IP 22689 . 22862)) (22900 62707 (ARCTO.IP 22910
+ . 24191) (BEGINMASTER.IP 24193 . 24466) (BEGINPAGE.IP 24468 . 24824) (BEGINPREAMBLE.IP 24826 . 25197)
+ (CLIPRECTANGLE.IP 25199 . 25689) (CONCAT.IP 25691 . 25956) (CONCATT.IP 25958 . 26225) (ENDMASTER.IP 
+26227 . 26671) (ENDPAGE.IP 26673 . 27050) (ENDPREAMBLE.IP 27052 . 27851) (FGET.IP 27853 . 28156) (
+FILLRECTANGLE.IP 28158 . 30486) (FILLTRAJECTORY.IP 30488 . 31123) (FILLNGON.IP 31125 . 33402) (FSET.IP
+ 33404 . 33707) (GETFRAMEVAR.IP 33709 . 34027) (INITIALIZEMASTER.IP 34029 . 34630) (INITIALIZECOLOR.IP
+ 34632 . 35953) (ISET.IP 35955 . 36326) (GETCP.IP 36328 . 36637) (LINETO.IP 36639 . 37244) (
+MASKSTROKE.IP 37246 . 37519) (MOVETO.IP 37521 . 37858) (ROTATE.IP 37860 . 38162) (SCALE.IP 38164 . 
+38467) (SCALE2.IP 38469 . 38806) (SETCOLOR.IP 38808 . 41037) (SETRGB.IP 41039 . 42095) (SETCOLORLV.IP 
+42097 . 46710) (SETCOLOR16.IP 46712 . 49818) (SETFONT.IP 49820 . 50641) (SETSPACE.IP 50643 . 50955) (
+SETXREL.IP 50957 . 52141) (SETX.IP 52143 . 53660) (SETXY.IP 53662 . 54834) (SETXYREL.IP 54836 . 56142)
+ (SETY.IP 56144 . 57453) (SETYREL.IP 57455 . 58355) (SHOW.IP 58357 . 61617) (TRAJECTORY.IP 61619 . 
+62017) (TRANS.IP 62019 . 62358) (TRANSLATE.IP 62360 . 62705)) (62738 68828 (\CHANGE-VISIBLE-REGION.IP 
+62748 . 66409) (\PAPERSIZE.IP 66411 . 67232) (HEADINGOP.IP 67234 . 68826)) (68829 173349 (
+DEFINEFONT.IP 68839 . 69813) (FONTNAME.IP 69815 . 70745) (INTERPRESS.BITMAPSCALE 70747 . 71540) (
+INTERPRESS.OUTCHARFN 71542 . 78049) (NEWLINE.IP 78051 . 78783) (NEWPAGE.IP 78785 . 83760) (NEWPAGE?.IP
+ 83762 . 84241) (OPENIPSTREAM 84243 . 92594) (SETUPFONTS.IP 92596 . 93588) (SHOWBITMAP.IP 93590 . 
+98131) (\BITMAPSIZE.IP 98133 . 98910) (SHOWBITMAP1.IP 98912 . 103284) (SHOWSHADE.IP 103286 . 104239) (
+\BITBLT.IP 104241 . 108445) (\SCALEDBITBLT.IP 108447 . 112092) (\BLTSHADE.IP 112094 . 113552) (
+\CHARWIDTH.IP 113554 . 114004) (\CLOSEIPSTREAM 114006 . 114333) (\DRAWARC.IP 114335 . 114782) (
+\DRAWCURVE.IP 114784 . 117221) (\DRAWPOINT.IP 117223 . 118260) (\DSPCOLOR.IP 118262 . 119213) (
+ENSURE.RGB 119215 . 119879) (\IPCURVE2 119881 . 133135) (\CLIPCURVELINE.IP 133137 . 137835) (
+\DRAWLINE.IP 137837 . 141569) (\CLIPLINE 141571 . 146271) (\DSPBOTTOMMARGIN.IP 146273 . 146689) (
+\DSPFONT.IP 146691 . 151451) (\DSPLEFTMARGIN.IP 151453 . 151913) (\DSPLINEFEED.IP 151915 . 152582) (
+\DSPRIGHTMARGIN.IP 152584 . 153381) (\DSPSPACEFACTOR.IP 153383 . 154512) (\DSPTOPMARGIN.IP 154514 . 
+154950) (\DSPXPOSITION.IP 154952 . 155939) (\DSPROTATE.IP 155941 . 156119) (\PUSHSTATE.IP 156121 . 
+157013) (\POPSTATE.IP 157015 . 157650) (\DEFAULTSTATE.IP 157652 . 158004) (\DSPTRANSLATE.IP 158006 . 
+158187) (\DSPSCALE2.IP 158189 . 158364) (\DSPYPOSITION.IP 158366 . 158667) (FILLCIRCLE.IP 158669 . 
+159752) (\FILLPOLYGON.IP 159754 . 161085) (\DRAWPOLYGON.IP 161087 . 167217) (\FIXLINELENGTH.IP 167219
+ . 168433) (\MOVETO.IP 168435 . 168799) (\SETBRUSH.IP 168801 . 170967) (\STRINGWIDTH.IP 170969 . 
+171372) (\DSPCLIPPINGREGION.IP 171374 . 172550) (\DSPOPERATION.IP 172552 . 173347)) (173350 175249 (
+INTERPRESSFILEP 173360 . 174793) (INTERPRESS.TEDIT 174795 . 175247)) (175440 176195 (IP-TOS 175450 . 
+175710) (POP-IP-STACK 175712 . 176007) (PUSH-IP-STACK 176009 . 176193)) (176256 177180 (
+\CHANGECHARSET.IP 176266 . 177178)) (177181 180797 (\INTERPRESSINIT 177191 . 180795)) (193881 196305 (
+INTERPRESSBITMAP 193891 . 196303)) (198730 201351 (\CREATEINTERPRESSFONT 198740 . 200468) (
+\CREATECHARSET.IP 200470 . 201349)) (201352 213525 (IPFONT.FILEP 201362 . 201546) (IPFONT.GETCHARSET 
+201548 . 211646) (\FACECODE 211648 . 212238) (\FAMILYCODE 212240 . 213523)))))
 STOP
diff --git a/sources/INTERPRESS.LCOM b/sources/INTERPRESS.LCOM
index decfd60d..dbcdb033 100644
Binary files a/sources/INTERPRESS.LCOM and b/sources/INTERPRESS.LCOM differ
diff --git a/sources/MCCS b/sources/MCCS
index 0a9fe586..cea65763 100644
--- a/sources/MCCS
+++ b/sources/MCCS
@@ -1,12 +1,12 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED " 7-Oct-2025 14:52:10" {WMEDLEY}<sources>MCCS.;152 57023  
+(FILECREATED "17-Oct-2025 08:50:00" {WMEDLEY}<sources>MCCS.;155 57020  
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (FNS MCCSMAPPAIRS)
+      :CHANGES-TO (VARS MCCSCOMS)
 
-      :PREVIOUS-DATE " 6-Oct-2025 16:44:20" {WMEDLEY}<sources>MCCS.;149)
+      :PREVIOUS-DATE "15-Oct-2025 18:31:01" {WMEDLEY}<sources>MCCS.;154)
 
 
 (PRETTYCOMPRINT MCCSCOMS)
@@ -1497,15 +1497,15 @@
         PCODE])
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (2856 14427 (\MCCSINCCODE 2866 . 5954) (\MCCSPEEKCCODE 5956 . 8843) (\MCCSOUTCHAR 8845
- . 10944) (\MCCSBACKCCODE 10946 . 12490) (\MCCSFORMATBYTESTREAM 12492 . 13222) (\MCCSCHARSETFN 13224
- . 14425)) (14428 15310 (\CREATE.MCCS.EXTERNALFORMAT 14438 . 15308)) (15311 16288 (
-\MCCS.24BITENCODING.ERROR 15321 . 16286)) (17664 20302 (MTOXCODE 17674 . 18471) (XTOMCODE 18473 . 
-19130) (XTOMSTRING 19132 . 19717) (MTOXSTRING 19719 . 20300)) (20303 21963 (MTOX$CODE 20313 . 21045) (
-X$TOMCODE 21047 . 21961)) (21964 22604 (KANJICHARSETP 21974 . 22230) (CHINESECHARSETP 22232 . 22602)) 
-(43172 45046 (MCCSCODEMAPARRAY 43182 . 45044)) (45662 52143 (MCCSMAPFN 45672 . 47039) (MCCSMAPPAIRS 
-47041 . 51149) (XCCS.CS0.UNDEFINED 51151 . 51780) (XCCSUNDEFINEDPAIRS 51782 . 52141)) (52248 57000 (
-GACHATOMCODE 52258 . 52770) (SYMBOLTOMCODE 52772 . 53420) (SIGMATOMCODE 53422 . 54068) (ATOMCODE 54070
- . 54602) (MATHTOMCODE 54604 . 55260) (HIPPOTOMCODE 55262 . 55799) (CYRILLICTOMCODE 55801 . 56235) (
-PALATINOTOMCODE 56237 . 56998)))))
+  (FILEMAP (NIL (2853 14424 (\MCCSINCCODE 2863 . 5951) (\MCCSPEEKCCODE 5953 . 8840) (\MCCSOUTCHAR 8842
+ . 10941) (\MCCSBACKCCODE 10943 . 12487) (\MCCSFORMATBYTESTREAM 12489 . 13219) (\MCCSCHARSETFN 13221
+ . 14422)) (14425 15307 (\CREATE.MCCS.EXTERNALFORMAT 14435 . 15305)) (15308 16285 (
+\MCCS.24BITENCODING.ERROR 15318 . 16283)) (17661 20299 (MTOXCODE 17671 . 18468) (XTOMCODE 18470 . 
+19127) (XTOMSTRING 19129 . 19714) (MTOXSTRING 19716 . 20297)) (20300 21960 (MTOX$CODE 20310 . 21042) (
+X$TOMCODE 21044 . 21958)) (21961 22601 (KANJICHARSETP 21971 . 22227) (CHINESECHARSETP 22229 . 22599)) 
+(43169 45043 (MCCSCODEMAPARRAY 43179 . 45041)) (45659 52140 (MCCSMAPFN 45669 . 47036) (MCCSMAPPAIRS 
+47038 . 51146) (XCCS.CS0.UNDEFINED 51148 . 51777) (XCCSUNDEFINEDPAIRS 51779 . 52138)) (52245 56997 (
+GACHATOMCODE 52255 . 52767) (SYMBOLTOMCODE 52769 . 53417) (SIGMATOMCODE 53419 . 54065) (ATOMCODE 54067
+ . 54599) (MATHTOMCODE 54601 . 55257) (HIPPOTOMCODE 55259 . 55796) (CYRILLICTOMCODE 55798 . 56232) (
+PALATINOTOMCODE 56234 . 56995)))))
 STOP
diff --git a/sources/MCCS.LCOM b/sources/MCCS.LCOM
index e5ad6aff..b46f2b65 100644
Binary files a/sources/MCCS.LCOM and b/sources/MCCS.LCOM differ
diff --git a/sources/WINDOW b/sources/WINDOW
index c4775899..4b8fa51f 100644
--- a/sources/WINDOW
+++ b/sources/WINDOW
@@ -1,12 +1,12 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED "29-Jun-2024 00:18:05" {WMEDLEY}<sources>WINDOW.;21 221668 
+(FILECREATED "19-Sep-2025 10:51:13" {WMEDLEY}<sources>WINDOW.;22 221778 
 
       :EDIT-BY rmk
 
       :CHANGES-TO (FNS WFROMDS)
 
-      :PREVIOUS-DATE "10-Apr-2023 07:05:18" {WMEDLEY}<sources>WINDOW.;20)
+      :PREVIOUS-DATE "29-Jun-2024 00:18:05" {WMEDLEY}<sources>WINDOW.;21)
 
 
 (PRETTYCOMPRINT WINDOWCOMS)
@@ -1803,7 +1803,8 @@ Middle button down moves closest corner.")
 (DEFINEQ
 
 (WFROMDS
-  [LAMBDA (DS DONTCREATE)                                    (* ; "Edited 29-Jun-2024 00:17 by rmk")
+  [LAMBDA (DS DONTCREATE)                                    (* ; "Edited 19-Sep-2025 10:50 by rmk")
+                                                             (* ; "Edited 29-Jun-2024 00:17 by rmk")
                                                            (* ; "Edited  7-Jan-94 12:12 by nilsson")
 
     (* ;; "Finds or creates a window for a display stream")
@@ -1817,7 +1818,7 @@ Middle button down moves closest corner.")
        ((IMAGESTREAMP DS)
         (PROG (DD HINTW)
               [COND
-                 ((IMAGESTREAMTYPEP DS 'TEXT)
+                 ((IMAGESTREAMTYPEP DS 'TEDIT)
 
                   (* ;; "generalize this mess!!!   (If type TEXT exists, then these functions exist)")
 
@@ -4020,25 +4021,25 @@ RESHOWBORDER 67211 . 67722) (\RESHOWBORDER1 67724 . 72650) (TRACKW 72652 . 73767
 ) (WINDOWREGION 75444 . 75935)) (75938 76634 (MINIMUMWINDOWSIZE 75948 . 76632)) (78281 101546 (
 ADVISEWDS 78291 . 86234) (SHOWWFRAME 86236 . 87988) (SHOWWTITLE 87990 . 92024) (\STRINGWIDTHGUESS 
 92026 . 92385) (RESHOWTITLE 92387 . 97028) (TOTOPW 97030 . 97269) (\INTERNALTOTOPW 97271 . 98361) (
-\TTW1 98363 . 100963) (WHICHW 100965 . 101544)) (101675 104661 (WFROMDS 101685 . 103831) (NU\TOTOPWDS 
-103833 . 104269) (\COERCETODS 104271 . 104659)) (105304 112104 (WINDOWP 105314 . 105460) (
-INSURE.WINDOW 105462 . 105801) (WINDOWPROP 105803 . 106235) (WINDOWADDPROP 106237 . 107971) (
-WINDOWDELPROP 107973 . 108399) (GETWINDOWPROP 108401 . 108951) (GETWINDOWUSERPROP 108953 . 109380) (
-PUTWINDOWPROP 109382 . 109847) (REMWINDOWPROP 109849 . 110904) (WINDOWADDFNPROP 110906 . 112102)) (
-112308 119872 (CWINDOWPROP 112318 . 113323) (CGETWINDOWPROP 113325 . 118543) (\GETWINDOWHEIGHT 118545
- . 119453) (\GETWINDOWWIDTH 119455 . 119870)) (119873 120532 (WINDOW.BITMAP 119883 . 120530)) (120558 
-136006 (OPENWP 120568 . 120846) (TOPWP 120848 . 121131) (RESHAPEBYREPAINTFN 121133 . 131385) (
-\INBETWEENP 131387 . 131603) (DECODE/WINDOW/OR/DISPLAYSTREAM 131605 . 133645) (GROW/REGION 133647 . 
-134210) (CLRPROMPT 134212 . 134616) (PROMPTPRINT 134618 . 134882) (OPENWINDOWS 134884 . 135668) (
-\INSUREWINDOW 135670 . 136004)) (136137 139386 (OVERLAPPINGWINDOWS 136147 . 138429) (WOVERLAPP 138431
- . 138686) (ORDERFROMBOTTOMTOTOP 138688 . 139384)) (139435 144218 (\ONSCREENW 139445 . 140151) (
-\PUTONSCREENW 140153 . 140980) (\UPDATECACHEDFIELDS 140982 . 141246) (\WWCHANGESCREENSIZE 141248 . 
-142637) (CREATEWFROMIMAGE 142639 . 143602) (UPDATEWFROMIMAGE 143604 . 144216)) (144775 197377 (
-\MEDW.CREATEW 144785 . 149459) (\MEDW.OPENW 149461 . 151819) (\MEDW.CLOSEW 151821 . 153187) (
-\MEDW.MOVEW 153189 . 163801) (\MEDW.RELMOVEW 163803 . 164182) (\MEDW.SHRINKW 164184 . 172368) (
-\MEDW.EXPANDW 172370 . 174637) (\MEDW.SHAPEW 174639 . 179245) (\MEDW.REDISPLAYW 179247 . 181202) (
-\MEDW.BURYW 181204 . 182486) (\MEDW.TOTOPW 182488 . 183836) (\MEDW.DSPCREATE 183838 . 184639) (
-\GENERIC.DSPCREATE 184641 . 186358) (\GENERIC.DSPCREATE.DESTINATION.BITMAP? 186360 . 186546) (
-\MEDW.GETWINDOWPROP 186548 . 188786) (\MEDW.PUTWINDOWPROP 188788 . 195573) (\MEDW.CURSOR 195575 . 
-197375)) (197378 197998 (\GENERIC.CURSOR 197388 . 197996)))))
+\TTW1 98363 . 100963) (WHICHW 100965 . 101544)) (101675 104771 (WFROMDS 101685 . 103941) (NU\TOTOPWDS 
+103943 . 104379) (\COERCETODS 104381 . 104769)) (105414 112214 (WINDOWP 105424 . 105570) (
+INSURE.WINDOW 105572 . 105911) (WINDOWPROP 105913 . 106345) (WINDOWADDPROP 106347 . 108081) (
+WINDOWDELPROP 108083 . 108509) (GETWINDOWPROP 108511 . 109061) (GETWINDOWUSERPROP 109063 . 109490) (
+PUTWINDOWPROP 109492 . 109957) (REMWINDOWPROP 109959 . 111014) (WINDOWADDFNPROP 111016 . 112212)) (
+112418 119982 (CWINDOWPROP 112428 . 113433) (CGETWINDOWPROP 113435 . 118653) (\GETWINDOWHEIGHT 118655
+ . 119563) (\GETWINDOWWIDTH 119565 . 119980)) (119983 120642 (WINDOW.BITMAP 119993 . 120640)) (120668 
+136116 (OPENWP 120678 . 120956) (TOPWP 120958 . 121241) (RESHAPEBYREPAINTFN 121243 . 131495) (
+\INBETWEENP 131497 . 131713) (DECODE/WINDOW/OR/DISPLAYSTREAM 131715 . 133755) (GROW/REGION 133757 . 
+134320) (CLRPROMPT 134322 . 134726) (PROMPTPRINT 134728 . 134992) (OPENWINDOWS 134994 . 135778) (
+\INSUREWINDOW 135780 . 136114)) (136247 139496 (OVERLAPPINGWINDOWS 136257 . 138539) (WOVERLAPP 138541
+ . 138796) (ORDERFROMBOTTOMTOTOP 138798 . 139494)) (139545 144328 (\ONSCREENW 139555 . 140261) (
+\PUTONSCREENW 140263 . 141090) (\UPDATECACHEDFIELDS 141092 . 141356) (\WWCHANGESCREENSIZE 141358 . 
+142747) (CREATEWFROMIMAGE 142749 . 143712) (UPDATEWFROMIMAGE 143714 . 144326)) (144885 197487 (
+\MEDW.CREATEW 144895 . 149569) (\MEDW.OPENW 149571 . 151929) (\MEDW.CLOSEW 151931 . 153297) (
+\MEDW.MOVEW 153299 . 163911) (\MEDW.RELMOVEW 163913 . 164292) (\MEDW.SHRINKW 164294 . 172478) (
+\MEDW.EXPANDW 172480 . 174747) (\MEDW.SHAPEW 174749 . 179355) (\MEDW.REDISPLAYW 179357 . 181312) (
+\MEDW.BURYW 181314 . 182596) (\MEDW.TOTOPW 182598 . 183946) (\MEDW.DSPCREATE 183948 . 184749) (
+\GENERIC.DSPCREATE 184751 . 186468) (\GENERIC.DSPCREATE.DESTINATION.BITMAP? 186470 . 186656) (
+\MEDW.GETWINDOWPROP 186658 . 188896) (\MEDW.PUTWINDOWPROP 188898 . 195683) (\MEDW.CURSOR 195685 . 
+197485)) (197488 198108 (\GENERIC.CURSOR 197498 . 198106)))))
 STOP
diff --git a/sources/WINDOW.LCOM b/sources/WINDOW.LCOM
index ff1f1a97..6f8b8e32 100644
Binary files a/sources/WINDOW.LCOM and b/sources/WINDOW.LCOM differ
