diff --git a/library/PDFSTREAM b/library/PDFSTREAM
new file mode 100644
index 00000000..1534669e
--- /dev/null
+++ b/library/PDFSTREAM
@@ -0,0 +1,276 @@
+(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
+
+(FILECREATED " 1-Oct-2023 20:53:05" {WMEDLEY}<library>PDFSTREAM.;54 13917  
+
+      :EDIT-BY rmk
+
+      :CHANGES-TO (FNS SEE-PDF)
+
+      :PREVIOUS-DATE " 1-Oct-2023 15:29:33" {WMEDLEY}<library>PDFSTREAM.;53)
+
+
+(PRETTYCOMPRINT PDFSTREAMCOMS)
+
+(RPAQQ PDFSTREAMCOMS
+       ((FILES (SYSLOAD)
+               POSTSCRIPTSTREAM)
+        [COMS                                                (* ; "Hook into hardcopy interface")
+              [ADDVARS [PRINTERTYPES ((PDF)
+                                      (CANPRINT (PDF))
+                                      (STATUS TRUE)
+                                      (PROPERTIES NILL)
+                                      (SEND POSTSCRIPTSEND)
+                                      (BITMAPSCALE POSTSCRIPT.BITMAPSCALE)
+                                      (BITMAPFILE (PDF.HARDCOPYW FILE BITMAP SCALEFACTOR REGION 
+                                                         ROTATION TITLE]
+                     [PRINTFILETYPES (PDF (TEST PDFFILEP)
+                                          (EXTENSION (PDF))
+                                          (CONVERSION (TEXT PDF.TEXT TEDIT PDF.TEDIT]
+                     (IMAGESTREAMTYPES (PDF (OPENSTREAM OPEN-PDF-STREAM)
+                                            (FONTCREATE POSTSCRIPT.FONTCREATE)
+                                            (FONTSAVAILABLE POSTSCRIPT.FONTSAVAILABLE)
+                                            (CREATECHARSET \CREATECHARSET.PSC]
+              (VARS (DEFAULTPRINTERTYPE 'PDF))
+              (FNS PDFFILEP PDF.HARDCOPYW PDF.TEXT PDF.TEDIT)
+              (P (FONTPROFILE.ADDDEVICE 'PDF 'POSTSCRIPT]
+        
+        (* ;; "")
+
+        
+        (* ;; "Implementation of PDF streams")
+
+        (INITVARS (PDFCONVERTER 'ps2pdf))
+                                                             (* ; "Mac with ghostscript?")
+        (ALISTS (PDF-CONVERTER-TEMPLATES ps2pdf pstopdf))
+        (GLOBALVARS PDFCONVERTER PDF-CONVERTER-TEMPLATES)
+        (FNS OPEN-PDF-STREAM CLOSE-PDF-STREAM PS-TO-PDF)
+        (FNS SEE-PDF)))
+
+(FILESLOAD (SYSLOAD)
+       POSTSCRIPTSTREAM)
+
+
+
+(* ; "Hook into hardcopy interface")
+
+
+(ADDTOVAR PRINTERTYPES ((PDF)
+                        (CANPRINT (PDF))
+                        (STATUS TRUE)
+                        (PROPERTIES NILL)
+                        (SEND POSTSCRIPTSEND)
+                        (BITMAPSCALE POSTSCRIPT.BITMAPSCALE)
+                        (BITMAPFILE (PDF.HARDCOPYW FILE BITMAP SCALEFACTOR REGION ROTATION TITLE))))
+
+(ADDTOVAR PRINTFILETYPES (PDF (TEST PDFFILEP)
+                              (EXTENSION (PDF))
+                              (CONVERSION (TEXT PDF.TEXT TEDIT PDF.TEDIT))))
+
+(ADDTOVAR IMAGESTREAMTYPES (PDF (OPENSTREAM OPEN-PDF-STREAM)
+                                (FONTCREATE POSTSCRIPT.FONTCREATE)
+                                (FONTSAVAILABLE POSTSCRIPT.FONTSAVAILABLE)
+                                (CREATECHARSET \CREATECHARSET.PSC)))
+
+(RPAQQ DEFAULTPRINTERTYPE PDF)
+(DEFINEQ
+
+(PDFFILEP
+  [LAMBDA (FILE)                                             (* ; "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)))])
+
+(PDF.HARDCOPYW
+  [LAMBDA (PDFFILE BITMAP SCALEFACTOR REGION Landscape? TITLE)
+                                                             (* ; "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])
+
+(PDF.TEXT
+  [LAMBDA (FILE PDFFILE FONTS HEADING TABS)                  (* ; "Edited  1-Oct-2023 15:24 by rmk")
+                                                             (* ; "Edited 23-Jun-2023 13:23 by rmk")
+                                                             (* ; "Edited  7-Mar-2023 08:39 by rmk")
+    (TEXTTOIMAGEFILE FILE PDFFILE 'PDF FONTS HEADING TABS `(REGION ,POSTSCRIPT.DEFAULT.PAGEREGION 
+                                                                  ROTATION ,(NOT (NOT 
+                                                                        POSTSCRIPT.TEXTFILE.LANDSCAPE
+                                                                                      ])
+
+(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])
+)
+
+(FONTPROFILE.ADDDEVICE 'PDF 'POSTSCRIPT)
+
+
+
+(* ;; "")
+
+
+
+
+(* ;; "Implementation of PDF streams")
+
+
+(RPAQ? PDFCONVERTER 'ps2pdf)
+
+
+
+(* ; "Mac with ghostscript?")
+
+
+(ADDTOVAR PDF-CONVERTER-TEMPLATES (ps2pdf " " PSFILE " " PDFFILE " 2> " ERRORFILE)
+                                  (pstopdf " " PSFILE " -o " PDFFILE " 2> " ERRORFILE))
+(DECLARE%: DOEVAL@COMPILE DONTCOPY
+
+(GLOBALVARS PDFCONVERTER PDF-CONVERTER-TEMPLATES)
+)
+(DEFINEQ
+
+(OPEN-PDF-STREAM
+  [LAMBDA (FILE OPTIONS)                                     (* ; "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.")
+
+    (* ;; "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)
+      else (CL:UNLESS (OR (ASSOC (OR PDFCONVERTER (MKATOM (UNIX-GETENV "MEDLEY-PDFCONVERTER")))
+                                 PDF-CONVERTER-TEMPLATES))
+                  (ERROR "POSTSCRIPT-to-PDF converter is not specified"))
+           (SETQ FILE (OR (AND (NEQ FILE T)
+                               (OUTFILEP FILE))
+                          (ERROR "PDF target file not found" FILE)))
+           (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])
+
+(CLOSE-PDF-STREAM
+  [LAMBDA (PSSTREAM)                                         (* ; "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)])
+
+(PS-TO-PDF
+  [LAMBDA (PSFILE PDFFILE DONTDELETE)                        (* ; "Edited  1-Oct-2023 15:18 by rmk")
+                                                             (* ; "Edited 23-Sep-2023 22:54 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.  ")
+
+    (* ;; "DONTDELETE is just for debugging, keeps the /tmp/ files")
+
+    (SETQ PSFILE (FULLNAME (TRUEFILENAME PSFILE)))
+    (CL:UNLESS (INFILEP PSFILE)
+           (ERROR "NO PS FILE TO CONVERT"))
+    (SETQ PDFFILE (if PDFFILE
+                      then (TRUEFILENAME PDFFILE)
+                    else (PACKFILENAME 'EXTENSION 'pdf 'BODY PSFILE)))
+    (LET ((ERRORFILE (PACKFILENAME 'EXTENSION 'error 'BODY PSFILE))
+          COMPLETIONCODE)
+
+         (* ;; "PROCESS-COMMAND is currently from GITFNS.  Not sure whether ShellCommand in UNIXUTILS is appropriate.")
+
+         (* ;; 
+     "We have to map the filenames down to Unix conventions:  (not pseudohost or host, slashes, etc.")
+
+         [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 (OR PDFCONVERTER
+                                                                       (MKATOM (UNIX-GETENV 
+                                                                                "MEDLEY-PDFCONVERTER"
+                                                                                      )))
+                                                                   PDF-CONVERTER-TEMPLATES]
+
+         (* ;; "Now use Medley names")
+
+         (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])
+)
+(DEFINEQ
+
+(SEE-PDF
+  [LAMBDA (PDFFILE)                                          (* ; "Edited  1-Oct-2023 20:47 by rmk")
+                                                             (* ; "Edited 26-Sep-2023 16:52 by rmk")
+
+    (* ;; "Good for Mac, not sure about Windows etc.")
+
+    (ShellCommand (CONCAT "open -a Preview " (UNIX-FILE-NAME (PACKFILENAME 'BODY PDFFILE 'EXTENSION
+                                                                    'PDF)
+                                                    'INPUT])
+)
+(DECLARE%: DONTCOPY
+  (FILEMAP (NIL (3078 5692 (PDFFILEP 3088 . 4002) (PDF.HARDCOPYW 4004 . 4602) (PDF.TEXT 4604 . 5321) (
+PDF.TEDIT 5323 . 5690)) (6136 13355 (OPEN-PDF-STREAM 6146 . 8324) (CLOSE-PDF-STREAM 8326 . 9613) (
+PS-TO-PDF 9615 . 13353)) (13356 13894 (SEE-PDF 13366 . 13892)))))
+STOP
diff --git a/library/PDFSTREAM.LCOM b/library/PDFSTREAM.LCOM
new file mode 100644
index 00000000..12da811e
Binary files /dev/null and b/library/PDFSTREAM.LCOM differ
diff --git a/lispusers/GITFNS b/lispusers/GITFNS
index 0dbc6b1b..af78e808 100644
--- a/lispusers/GITFNS
+++ b/lispusers/GITFNS
@@ -1,10 +1,12 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED "30-Mar-2023 09:08:48" {WMEDLEY}<lispusers>GITFNS.;469 119763 
+(FILECREATED "23-Sep-2023 13:02:15" {WMEDLEY}<lispusers>GITFNS.;483 124031 
 
-      :CHANGES-TO (FNS GIT-MAKE-PROJECT)
+      :EDIT-BY rmk
 
-      :PREVIOUS-DATE "11-Mar-2023 23:12:35" {WMEDLEY}<lispusers>GITFNS.;468)
+      :CHANGES-TO (FNS CDGITDIR)
+
+      :PREVIOUS-DATE "22-Sep-2023 12:08:14" {WMEDLEY}<lispusers>GITFNS.;482)
 
 
 (PRETTYCOMPRINT GITFNSCOMS)
@@ -47,6 +49,7 @@
         (INITVARS (GIT-MERGE-COMPARES T)
                (GIT-CDBROWSER-SEPARATE-DIRECTIONS T))
         (COMMANDS gwc bbc prc cob b? cdg cdw)
+        (FNS PRC-COMMAND)
         
         (* ;; "")
 
@@ -65,7 +68,7 @@
 
         (FNS GIT-COMMIT GIT-PUSH GIT-PULL GIT-APPROVAL GIT-GET-FILE GIT-FILE-EXISTS? 
              GIT-REMOTE-UPDATE GIT-REMOTE-ADD GIT-FILE-DATE GIT-FILE-HISTORY GIT-PRINT-FILE-HISTORY 
-             GIT-FETCH)
+             GIT-FETCH GIT-PR-BRANCHES)
         
         (* ;; "Differences")
 
@@ -77,8 +80,8 @@
         (* ;; "Branches")
 
         (FNS GIT-BRANCH-NUM GIT-CHECKOUT GIT-WHICH-BRANCH GIT-MAKE-BRANCH GIT-BRANCHES 
-             GIT-BRANCH-EXISTS? GIT-PICK-BRANCH GIT-PRC-MENU GIT-PULL-REQUESTS GIT-SHORT-BRANCH-NAME
-             GIT-LONG-NAME)
+             GIT-BRANCH-EXISTS? GIT-PICK-BRANCH GIT-BRANCH-MENU GIT-PULL-REQUESTS 
+             GIT-SHORT-BRANCH-NAME GIT-LONG-NAME GIT-PRC-BRANCHES)
         
         (* ;; "My branches")
 
@@ -98,7 +101,7 @@
 
         (FNS GIT-GET-DIFFERENT-FILES GIT-BRANCHES-COMPARE-DIRECTORIES GIT-WORKING-COMPARE-DIRECTORIES
              GIT-COMPARE-WORKTREE GITCDOBJBUTTONFN GIT-CD-LABELFN GIT-CD-MENUFN 
-             GIT-WORKING-COMPARE-FILES GIT-BRANCHES-COMPARE-FILES)
+             GIT-WORKING-COMPARE-FILES GIT-BRANCHES-COMPARE-FILES GIT-PR-COMPARE)
         (INITVARS (FROMGITN 0))
         
         (* ;; "")
@@ -106,8 +109,8 @@
         
         (* ;; "Utilities")
 
-        (FNS CDGITDIR GIT-COMMAND GITORIGIN GIT-INITIALS GIT-COMMAND-TO-FILE PROCESS-COMMAND 
-             GIT-RESULT-TO-LINES STRIPLOCAL)
+        (FNS CDGITDIR GIT-COMMAND GITORIGIN GIT-INITIALS GIT-COMMAND-TO-FILE GIT-RESULT-TO-LINES 
+             STRIPLOCAL)
         (PROPS (GITFNS FILETYPE))))
 
 
@@ -314,7 +317,8 @@
             PROJECT))])
 
 (GIT-PUT-PROJECT-FIELD
-  [LAMBDA (PROJECT FIELD NEWVALUE)                           (* ; "Edited 11-Mar-2023 23:00 by rmk")
+  [LAMBDA (PROJECT FIELD NEWVALUE)                           (* ; "Edited 10-Jun-2023 21:48 by rmk")
+                                                             (* ; "Edited 11-Mar-2023 23:00 by rmk")
                                                              (* ; "Edited  7-Jul-2022 11:25 by rmk")
                                                              (* ; "Edited 13-May-2022 10:40 by rmk")
                                                              (* ; "Edited  9-May-2022 20:02 by rmk")
@@ -322,24 +326,17 @@
 
     (* ;; "Replaces the value of a project field with NEWVALUE.  The project record is DONTCOPY, to avoid potential name conflicts, so this provides a functional interface.  One use:  augment EXCLUSIONS with a list of temporary debug and testing files that you don't want to see in the various file listings")
 
-    (CL:WHEN (SETQ PROJECT (IF (TYPE? GIT-PROJECT PROJECT)
-                               THEN PROJECT
-                             ELSEIF (CDR (ASSOC (OR (U-CASE PROJECT)
-                                                    GIT-DEFAULT-PROJECT)
-                                                GIT-PROJECTS))
-                             ELSEIF NOERROR
-                               THEN NIL
-                             ELSE (ERROR "NOT A GIT-PROJECT" PROJECT)))
-        (SELECTQ FIELD
-            (PROJECTNAME (REPLACE PROJECTNAME OF PROJECT WITH NEWVALUE))
-            (WHOST (REPLACE WHOST OF PROJECT WITH NEWVALUE))
-            (GITHOST (REPLACE GITHOST OF PROJECT WITH NEWVALUE))
-            (EXCLUSIONS (REPLACE EXCLUSIONS OF PROJECT WITH NEWVALUE))
-            (DEFAULTSUBDIRS 
-                 (REPLACE DEFAULTSUBDIRS OF PROJECT WITH NEWVALUE))
-            (CLONEPATH (REPLACE CLONEPATH OF PROJECT WITH NEWVALUE))
-            (MAINBRANCH (REPLACE MAINBRANCH OF PROJECT WITH NEWVALUE))
-            PROJECT))])
+    (SETQ PROJECT (GIT-GET-PROJECT PROJECT))
+    (SELECTQ FIELD
+        (PROJECTNAME (REPLACE PROJECTNAME OF PROJECT WITH NEWVALUE))
+        (WHOST (REPLACE WHOST OF PROJECT WITH NEWVALUE))
+        (GITHOST (REPLACE GITHOST OF PROJECT WITH NEWVALUE))
+        (EXCLUSIONS (REPLACE EXCLUSIONS OF PROJECT WITH NEWVALUE))
+        (DEFAULTSUBDIRS 
+             (REPLACE DEFAULTSUBDIRS OF PROJECT WITH NEWVALUE))
+        (CLONEPATH (REPLACE CLONEPATH OF PROJECT WITH NEWVALUE))
+        (MAINBRANCH (REPLACE MAINBRANCH OF PROJECT WITH NEWVALUE))
+        PROJECT])
 
 (GIT-PROJECT-PATH
   [LAMBDA (PROJECTNAME PROJECTPATH)                          (* ; "Edited  8-May-2022 15:10 by rmk")
@@ -478,29 +475,7 @@
 
    (* ;; "Compares REMOTEBRANCH against the main orign branch, for pull-request assessment")
 
-    (LET ((RB REMOTEBRANCH)
-          (DR DRAFTS)
-          (PRS))
-         (IF PROJECT
-             THEN (SETQ PROJECT (GIT-GET-PROJECT PROJECT))
-           ELSEIF (GIT-GET-PROJECT RB NIL T)
-             THEN (SETQ PROJECT RB)
-                  (SETQ RB NIL)
-           ELSEIF (GIT-GET-PROJECT DRAFTS NIL T)
-             THEN (SETQ PROJECT DRAFTS)
-                  (SETQ DRFTS NIL))
-         (CL:WHEN (MEMB (U-CASE RB)
-                        '(DRAFT DRAFTS))
-             (SETQ RB NIL)
-             (SETQ DR T))
-         (GIT-FETCH PROJECT)
-         (SETQ PRS (GIT-PULL-REQUESTS T DR PROJECT))
-         (IF PRS
-             THEN (CL:WHEN (OR RB (SETQ RB (GIT-PICK-BRANCH (GIT-PRC-MENU DR PROJECT PRS)
-                                                  "Pull requests")))
-                      (GIT-BRANCHES-COMPARE-DIRECTORIES (GIT-MAINBRANCH PROJECT)
-                             RB NIL PROJECT))
-           ELSE "No open pull requests")))
+    (PRC-COMMAND REMOTEBRANCH DRAFTS PROJECT))
 
 (DEFCOMMAND cob (BRANCH NEXTTITLESTRING PROJECT)
 
@@ -553,6 +528,46 @@
    (SLASHIT (/CNDIR (CONCAT (GIT-GET-PROJECT PROJECT 'WHOST)
                            (OR SUBDIR "")))
           T))
+(DEFINEQ
+
+(PRC-COMMAND
+  [LAMBDA (REMOTEBRANCH DRAFTS PROJECT)                      (* ; "Edited 28-Jul-2023 09:03 by rmk")
+    (LET (PRS PRMENU)
+         (IF PROJECT
+             THEN (SETQ PROJECT (GIT-GET-PROJECT PROJECT))
+           ELSEIF (GIT-GET-PROJECT REMOTEBRANCH NIL T)
+             THEN (SETQ PROJECT REMOTEBRANCH)
+                  (SETQ REMOTEBRANCH NIL)
+           ELSEIF (GIT-GET-PROJECT DRAFTS NIL T)
+             THEN (SETQ PROJECT DRAFTS)
+                  (SETQ DRAFTS NIL))
+         (CL:WHEN (MEMB (U-CASE REMOTEBRANCH)
+                        '(DRAFT DRAFTS))
+             (SETQ REMOTEBRANCH NIL)
+             (SETQ DRAFTS T))
+         (GIT-FETCH PROJECT)
+         (SETQ PRS (GIT-PULL-REQUESTS T DRAFTS PROJECT))
+         (CL:WHEN (AND REMOTEBRANCH (NEQ REMOTEBRANCH 'PinMenu))
+             (for PR in PRS when (OR (STRPOS REMOTEBRANCH (fetch PRDESCRIPTION of PR)
+                                            NIL NIL NIL NIL FILEDIRCASEARRAY)
+                                     (STRPOS REMOTEBRANCH (fetch PRNAME of PR)
+                                            NIL NIL NIL NIL FILEDIRCASEARRAY)) collect PR
+                finally (CL:WHEN $$VAL (SETQ PRS $$VAL))
+                      (SETQ REMOTEBRANCH NIL)))
+         (IF PRS
+             THEN (CL:UNLESS REMOTEBRANCH
+                      (SETQ PRS (GIT-PRC-BRANCHES DRAFTS PROJECT PRS))
+                      (SETQ PRMENU (GIT-BRANCH-MENU PRS (CONCAT (LENGTH PRS)
+                                                               " pull requests")
+                                          NIL))
+                      (SETQ REMOTEBRANCH (MENU PRMENU)))
+                  (if (EQ 'PinMenu REMOTEBRANCH)
+                      then (ADDMENU (GIT-BRANCH-MENU PRS (CONCAT (LENGTH PRS)
+                                                                " pull requests")))
+                    elseif REMOTEBRANCH
+                      then (GIT-PR-COMPARE REMOTEBRANCH PROJECT))
+           ELSE "No open pull requests"])
+)
 
 
 
@@ -1004,6 +1019,35 @@
 (GIT-FETCH
   [LAMBDA (PROJECT)                                          (* ; "Edited  8-Jul-2022 10:32 by rmk")
     (GIT-COMMAND "git fetch" T NIL PROJECT])
+
+(GIT-PR-BRANCHES
+  [LAMBDA (DRAFT PROJECT PRS)                                (* ; "Edited  8-Aug-2022 18:15 by rmk")
+                                                             (* ; "Edited  4-Aug-2022 18:55 by rmk")
+                                                             (* ; "Edited  9-Jul-2022 19:01 by rmk")
+                                                             (* ; "Edited 16-May-2022 19:44 by rmk")
+    (CL:UNLESS PRS
+        (SETQ PRS (GIT-PULL-REQUESTS T DRAFT PROJECT)))
+    (CL:WHEN PRS
+        (LET ((RELATIONS (GIT-BRANCH-RELATIONS (FOR PR IN PRS COLLECT (GITORIGIN (CADDR PR)))
+                                NIL T PROJECT)))
+             (SORT [FOR PR REL LABEL PRNAME (SUPERSETS _ (CAR RELATIONS))
+                        (EQUALS _ (CADR RELATIONS)) IN PRS
+                      COLLECT (SETQ PRNAME (fetch PRNAME of PR))
+                            (SETQ LABEL (CONCAT "#" (fetch (PULLREQUEST PRNUMBER) of PR)
+                                               " "
+                                               (IF [SETQ REL (CAR (CDR (SASSOC PRNAME SUPERSETS]
+                                                   THEN (CONCAT PRNAME " > " REL)
+                                                 ELSEIF [SETQ REL (CAR (CDR (SASSOC PRNAME EQUALS]
+                                                   THEN (CONCAT PRNAME " = " REL)
+                                                 ELSE PRNAME)))
+                            (LIST (CL:IF (EQ 'DRAFT (FETCH PRSTATUS OF PR))
+                                      (CONCAT LABEL " (draft)")
+                                      LABEL)
+                                  (GITORIGIN PRNAME)
+                                  (CONCAT " " (FETCH PRDESCRIPTION OF PR)
+                                         "  #"
+                                         (FETCH PRNUMBER OF PR]
+                   T)))])
 )
 
 
@@ -1321,41 +1365,24 @@
         THEN (ERROR "Unknown branch" BRANCH])
 
 (GIT-PICK-BRANCH
-  [LAMBDA (BRANCHES TITLE)                                   (* ; "Edited 18-May-2022 13:44 by rmk")
-    (CL:WHEN (MKLIST BRANCHES)
-        (MENU (CREATE MENU
-                     TITLE _ (OR TITLE 'Branches)
-                     ITEMS _ BRANCHES
-                     MENUFONT _ DEFAULTFONT)))])
+  [LAMBDA (BRANCHES TITLE)                                   (* ; "Edited  6-Jul-2023 22:31 by rmk")
+                                                             (* ; "Edited 30-Jun-2023 16:58 by rmk")
+                                                             (* ; "Edited 18-May-2022 13:44 by rmk")
+    (MENU (GIT-BRANCH-MENU BRANCHES (OR TITLE (CONCAT (LENGTH BRANCHES)
+                                                     " branches"])
 
-(GIT-PRC-MENU
-  [LAMBDA (DRAFT PROJECT PRS)                                (* ; "Edited  8-Aug-2022 18:15 by rmk")
-                                                             (* ; "Edited  4-Aug-2022 18:55 by rmk")
-                                                             (* ; "Edited  9-Jul-2022 19:01 by rmk")
-                                                             (* ; "Edited 16-May-2022 19:44 by rmk")
-    (CL:UNLESS PRS
-        (SETQ PRS (GIT-PULL-REQUESTS T DRAFT PROJECT)))
-    (CL:WHEN PRS
-        (LET ((RELATIONS (GIT-BRANCH-RELATIONS (FOR PR IN PRS COLLECT (GITORIGIN (CADDR PR)))
-                                NIL T PROJECT)))
-             (SORT [FOR PR REL LABEL PRNAME (SUPERSETS _ (CAR RELATIONS))
-                        (EQUALS _ (CADR RELATIONS)) IN PRS
-                      COLLECT (SETQ PRNAME (fetch PRNAME of PR))
-                            (SETQ LABEL (CONCAT "#" (fetch (PULLREQUEST PRNUMBER) of PR)
-                                               " "
-                                               (IF [SETQ REL (CAR (CDR (SASSOC PRNAME SUPERSETS]
-                                                   THEN (CONCAT PRNAME " > " REL)
-                                                 ELSEIF [SETQ REL (CAR (CDR (SASSOC PRNAME EQUALS]
-                                                   THEN (CONCAT PRNAME " = " REL)
-                                                 ELSE PRNAME)))
-                            (LIST (CL:IF (EQ 'DRAFT (FETCH PRSTATUS OF PR))
-                                      (CONCAT LABEL " (draft)")
-                                      LABEL)
-                                  (GITORIGIN PRNAME)
-                                  (CONCAT " " (FETCH PRDESCRIPTION OF PR)
-                                         "  #"
-                                         (FETCH PRNUMBER OF PR]
-                   T)))])
+(GIT-BRANCH-MENU
+  [LAMBDA (BRANCHES TITLE PIN?)                              (* ; "Edited  6-Jul-2023 22:31 by rmk")
+                                                             (* ; "Edited 30-Jun-2023 16:58 by rmk")
+                                                             (* ; "Edited 18-May-2022 13:44 by rmk")
+    (CL:WHEN (SETQ BRANCHES (MKLIST BRANCHES))
+        (CL:WHEN PIN?
+            [SETQ BRANCHES (APPEND BRANCHES '(("      Pin menu" 'PinMenu])
+        (CREATE MENU
+               TITLE _ (OR TITLE (CONCAT (LENGTH BRANCHES)
+                                        " branches"))
+               ITEMS _ BRANCHES
+               MENUFONT _ DEFAULTFONT))])
 
 (GIT-PULL-REQUESTS
   [LAMBDA (ALLINFO INCLUDEDRAFTS PROJECT)                    (* ; "Edited  8-Aug-2022 13:12 by rmk")
@@ -1402,6 +1429,35 @@
     (* ;; "Allows short-hand reference to branch:  rmk40 will return rmk40--xyz")
 
     (FIND B IN (GIT-BRANCHES WHERE PROJECT EXCLUDEMERGED) SUCHTHAT (STRPOS BRANCH B])
+
+(GIT-PRC-BRANCHES
+  [LAMBDA (DRAFT PROJECT PRS)                                (* ; "Edited  8-Aug-2022 18:15 by rmk")
+                                                             (* ; "Edited  4-Aug-2022 18:55 by rmk")
+                                                             (* ; "Edited  9-Jul-2022 19:01 by rmk")
+                                                             (* ; "Edited 16-May-2022 19:44 by rmk")
+    (CL:UNLESS PRS
+        (SETQ PRS (GIT-PULL-REQUESTS T DRAFT PROJECT)))
+    (CL:WHEN PRS
+        (LET ((RELATIONS (GIT-BRANCH-RELATIONS (FOR PR IN PRS COLLECT (GITORIGIN (CADDR PR)))
+                                NIL T PROJECT)))
+             (SORT [FOR PR REL LABEL PRNAME (SUPERSETS _ (CAR RELATIONS))
+                        (EQUALS _ (CADR RELATIONS)) IN PRS
+                      COLLECT (SETQ PRNAME (fetch PRNAME of PR))
+                            (SETQ LABEL (CONCAT "#" (fetch (PULLREQUEST PRNUMBER) of PR)
+                                               " "
+                                               (IF [SETQ REL (CAR (CDR (SASSOC PRNAME SUPERSETS]
+                                                   THEN (CONCAT PRNAME " > " REL)
+                                                 ELSEIF [SETQ REL (CAR (CDR (SASSOC PRNAME EQUALS]
+                                                   THEN (CONCAT PRNAME " = " REL)
+                                                 ELSE PRNAME)))
+                            (LIST (CL:IF (EQ 'DRAFT (FETCH PRSTATUS OF PR))
+                                      (CONCAT LABEL " (draft)")
+                                      LABEL)
+                                  (GITORIGIN PRNAME)
+                                  (CONCAT " " (FETCH PRDESCRIPTION OF PR)
+                                         "  #"
+                                         (FETCH PRNUMBER OF PR]
+                   T)))])
 )
 
 
@@ -1664,7 +1720,8 @@
          (LIST DIR1 DIR2 MAPPINGS))])
 
 (GIT-BRANCHES-COMPARE-DIRECTORIES
-  [LAMBDA (BRANCH1 BRANCH2 LOCAL PROJECT)                    (* ; "Edited 12-Sep-2022 14:41 by rmk")
+  [LAMBDA (BRANCH1 BRANCH2 LOCAL PROJECT)                    (* ; "Edited 10-Jun-2023 17:28 by rmk")
+                                                             (* ; "Edited 12-Sep-2022 14:41 by rmk")
                                                              (* ; "Edited 20-Jul-2022 21:18 by rmk")
                                                              (* ; "Edited 22-May-2022 22:47 by rmk")
                                                              (* ; "Edited  9-May-2022 15:14 by rmk")
@@ -1683,10 +1740,11 @@
          (SETQ MAPPINGS (CADDR DIRS))
          (IF DIRS
              THEN (TERPRI T)
-                  (SETQ CDVALUE (COMPAREDIRECTORIES (CAR DIRS)
+                  [SETQ CDVALUE (COMPAREDIRECTORIES (CAR DIRS)
                                        (CADR DIRS)
                                        '(> < ~= -* *-)
-                                       '*>*.*)) 
+                                       '*>*.*
+                                       (GIT-GET-PROJECT PROJECT 'EXCLUSIONS] 
 
                   (* ;; "We know that both sides come from Unix/unversioned, even if they have been copied into versioned FROMGIT, so we make a pass to remove the misleading versions.")
 
@@ -1754,6 +1812,10 @@
 (GIT-WORKING-COMPARE-DIRECTORIES
   [LAMBDA (SUBDIRS SELECT EXCLUDEDFILES FIXDIRECTORYDATES UPDATE PROJECT)
 
+    (* ;; "Edited 17-Jun-2023 22:54 by rmk")
+
+    (* ;; "Edited 10-Jun-2023 21:32 by rmk")
+
     (* ;; "Edited 20-Jul-2022 21:18 by rmk")
 
     (* ;; "Edited 25-Jun-2022 21:37 by rmk")
@@ -1793,7 +1855,13 @@
                                      (GITSUBDIR SUBDIR T PROJECT)
                                      (OR SELECT '(> < ~= -* *-))
                                      NIL
-                                     (FETCH EXCLUSIONS OF PROJECT)
+                                     (for E DPOS in (GIT-GET-PROJECT PROJECT 'EXCLUSIONS)
+                                        collect (SETQ DPOS (STRPOS SUBDIR (FILENAMEFIELD E
+                                                                                 'DIRECTORY)
+                                                                  1 NIL T T FILEDIRCASEARRAY))
+                                              (CL:IF DPOS
+                                                  (SUBSTRING E (ADD1 DPOS))
+                                                  E))
                                      NIL NIL NIL FIXDIRECTORYDATES))
                   [FOR CDE IN (FETCH CDENTRIES OF CDVAL)
                      DO (CL:WHEN (FETCH INFO1 OF CDE)
@@ -2067,6 +2135,11 @@
                                               " " FILE)
                 (CONCAT (GIT-SHORT-BRANCH-NAME BRANCH2)
                        " " FILE])
+
+(GIT-PR-COMPARE
+  [LAMBDA (RB PROJECT)                                       (* ; "Edited  6-Jul-2023 22:22 by rmk")
+    (GIT-BRANCHES-COMPARE-DIRECTORIES (GIT-MAINBRANCH PROJECT)
+           RB NIL PROJECT])
 )
 
 (RPAQ? FROMGITN 0)
@@ -2083,11 +2156,13 @@
 (DEFINEQ
 
 (CDGITDIR
-  [LAMBDA (PROJECT)                                          (* ; "Edited  8-Jul-2022 10:34 by rmk")
+  [LAMBDA (PROJECT)                                          (* ; "Edited 23-Sep-2023 13:01 by rmk")
+                                                             (* ; "Edited  8-Jul-2022 10:34 by rmk")
                                                              (* ; "Edited  7-Jul-2022 09:36 by rmk")
                                                              (* ; "Edited  7-May-2022 22:41 by rmk")
                                                             (* ; "Edited  2-Nov-2021 21:12 by rmk:")
-    (CONCAT "cd " [SLASHIT (STRIPHOST (TRUEFILENAME (FETCH GITHOST OF PROJECT]
+    (CONCAT "cd " (SLASHIT (TRUEFILENAME (FETCH GITHOST OF PROJECT))
+                         NIL T)
            " && "])
 
 (GIT-COMMAND
@@ -2198,16 +2273,6 @@
                      (ERROR (CONCAT "Command failed: " CMD)))
                  NIL])
 
-(PROCESS-COMMAND
-  [LAMBDA (CMD)                                              (* ; "Edited 17-Jul-2022 08:17 by rmk")
-
-    (* ;; "This sets up an asynchronous process and waits until it returns with an exit code.  Typically 0 means success.")
-
-    (CL:WITH-OPEN-STREAM (PS (CREATE-PROCESS-STREAM CMD))
-           (BIND CODE WHILE (EQ T (SETQ CODE (OR (SUBRCALL UNIX-HANDLECOMM 7 (fetch (STREAM F1)
-                                                                                of PS))
-                                                 0))) DO (BLOCK) FINALLY (RETURN CODE])
-
 (GIT-RESULT-TO-LINES
   [LAMBDA (FILE ALL)                                         (* ; "Edited 16-Jul-2022 22:21 by rmk")
 
@@ -2234,32 +2299,33 @@
 
 (PUTPROPS GITFNS FILETYPE :TCOMPL)
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (3979 20805 (GIT-CLONEP 3989 . 5252) (GIT-INIT 5254 . 5884) (GIT-MAKE-PROJECT 5886 . 
-13487) (GIT-GET-PROJECT 13489 . 15414) (GIT-PUT-PROJECT-FIELD 15416 . 17433) (GIT-PROJECT-PATH 17435
- . 18479) (FIND-ANCESTOR-DIRECTORY 18481 . 18830) (GIT-FIND-CLONE 18832 . 19913) (GIT-MAINBRANCH 19915
- . 20310) (GIT-MAINBRANCH? 20312 . 20803)) (27232 30020 (ALLSUBDIRS 27242 . 28528) (MEDLEYSUBDIRS 
-28530 . 29223) (GITSUBDIRS 29225 . 30018)) (30021 34811 (TOGIT 30031 . 31437) (FROMGIT 31439 . 32420) 
-(GIT-DELETE-FILE 32422 . 33268) (MYMEDLEY-DELETE-FILES 33270 . 34809)) (34812 37815 (MYMEDLEYSUBDIR 
-34822 . 35278) (GITSUBDIR 35280 . 35723) (STRIPDIR 35725 . 36096) (STRIPHOST 36098 . 36338) (STRIPNAME
- 36340 . 37093) (STRIPWHERE 37095 . 37813)) (37816 39718 (GFILE4MFILE 37826 . 38189) (MFILE4GFILE 
-38191 . 38760) (GIT-REPO-FILENAME 38762 . 39716)) (39767 49589 (GIT-COMMIT 39777 . 40603) (GIT-PUSH 
-40605 . 41249) (GIT-PULL 41251 . 41863) (GIT-APPROVAL 41865 . 42214) (GIT-GET-FILE 42216 . 44181) (
-GIT-FILE-EXISTS? 44183 . 44457) (GIT-REMOTE-UPDATE 44459 . 45183) (GIT-REMOTE-ADD 45185 . 45492) (
-GIT-FILE-DATE 45494 . 46425) (GIT-FILE-HISTORY 46427 . 48361) (GIT-PRINT-FILE-HISTORY 48363 . 49413) (
-GIT-FETCH 49415 . 49587)) (49619 60212 (GIT-BRANCH-DIFF 49629 . 55969) (GIT-COMMIT-DIFFS 55971 . 56524
-) (GIT-BRANCH-RELATIONS 56526 . 60210)) (60257 72489 (GIT-BRANCH-NUM 60267 . 60840) (GIT-CHECKOUT 
-60842 . 61901) (GIT-WHICH-BRANCH 61903 . 62201) (GIT-MAKE-BRANCH 62203 . 64416) (GIT-BRANCHES 64418 . 
-66686) (GIT-BRANCH-EXISTS? 66688 . 67392) (GIT-PICK-BRANCH 67394 . 67722) (GIT-PRC-MENU 67724 . 69727)
- (GIT-PULL-REQUESTS 69729 . 71875) (GIT-SHORT-BRANCH-NAME 71877 . 72168) (GIT-LONG-NAME 72170 . 72487)
-) (72519 75854 (GIT-MY-CURRENT-BRANCH 72529 . 72899) (GIT-MY-BRANCHP 72901 . 73406) (
-GIT-MY-NEXT-BRANCH 73408 . 73902) (GIT-MY-BRANCHES 73904 . 75852)) (75900 79852 (GIT-ADD-WORKTREE 
-75910 . 77394) (GIT-REMOVE-WORKTREE 77396 . 78326) (GIT-LIST-WORKTREES 78328 . 79132) (WORKTREEDIR 
-79134 . 79850)) (79900 111109 (GIT-GET-DIFFERENT-FILES 79910 . 86334) (
-GIT-BRANCHES-COMPARE-DIRECTORIES 86336 . 92493) (GIT-WORKING-COMPARE-DIRECTORIES 92495 . 97321) (
-GIT-COMPARE-WORKTREE 97323 . 101301) (GITCDOBJBUTTONFN 101303 . 105793) (GIT-CD-LABELFN 105795 . 
-106877) (GIT-CD-MENUFN 106879 . 109319) (GIT-WORKING-COMPARE-FILES 109321 . 109941) (
-GIT-BRANCHES-COMPARE-FILES 109943 . 111107)) (111179 119696 (CDGITDIR 111189 . 111749) (GIT-COMMAND 
-111751 . 113309) (GITORIGIN 113311 . 114008) (GIT-INITIALS 114010 . 114314) (GIT-COMMAND-TO-FILE 
-114316 . 117805) (PROCESS-COMMAND 117807 . 118420) (GIT-RESULT-TO-LINES 118422 . 119029) (STRIPLOCAL 
-119031 . 119694)))))
+  (FILEMAP (NIL (4053 20503 (GIT-CLONEP 4063 . 5326) (GIT-INIT 5328 . 5958) (GIT-MAKE-PROJECT 5960 . 
+13561) (GIT-GET-PROJECT 13563 . 15488) (GIT-PUT-PROJECT-FIELD 15490 . 17131) (GIT-PROJECT-PATH 17133
+ . 18177) (FIND-ANCESTOR-DIRECTORY 18179 . 18528) (GIT-FIND-CLONE 18530 . 19611) (GIT-MAINBRANCH 19613
+ . 20008) (GIT-MAINBRANCH? 20010 . 20501)) (25911 28038 (PRC-COMMAND 25921 . 28036)) (28094 30882 (
+ALLSUBDIRS 28104 . 29390) (MEDLEYSUBDIRS 29392 . 30085) (GITSUBDIRS 30087 . 30880)) (30883 35673 (
+TOGIT 30893 . 32299) (FROMGIT 32301 . 33282) (GIT-DELETE-FILE 33284 . 34130) (MYMEDLEY-DELETE-FILES 
+34132 . 35671)) (35674 38677 (MYMEDLEYSUBDIR 35684 . 36140) (GITSUBDIR 36142 . 36585) (STRIPDIR 36587
+ . 36958) (STRIPHOST 36960 . 37200) (STRIPNAME 37202 . 37955) (STRIPWHERE 37957 . 38675)) (38678 40580
+ (GFILE4MFILE 38688 . 39051) (MFILE4GFILE 39053 . 39622) (GIT-REPO-FILENAME 39624 . 40578)) (40629 
+52459 (GIT-COMMIT 40639 . 41465) (GIT-PUSH 41467 . 42111) (GIT-PULL 42113 . 42725) (GIT-APPROVAL 42727
+ . 43076) (GIT-GET-FILE 43078 . 45043) (GIT-FILE-EXISTS? 45045 . 45319) (GIT-REMOTE-UPDATE 45321 . 
+46045) (GIT-REMOTE-ADD 46047 . 46354) (GIT-FILE-DATE 46356 . 47287) (GIT-FILE-HISTORY 47289 . 49223) (
+GIT-PRINT-FILE-HISTORY 49225 . 50275) (GIT-FETCH 50277 . 50449) (GIT-PR-BRANCHES 50451 . 52457)) (
+52489 63082 (GIT-BRANCH-DIFF 52499 . 58839) (GIT-COMMIT-DIFFS 58841 . 59394) (GIT-BRANCH-RELATIONS 
+59396 . 63080)) (63127 76230 (GIT-BRANCH-NUM 63137 . 63710) (GIT-CHECKOUT 63712 . 64771) (
+GIT-WHICH-BRANCH 64773 . 65071) (GIT-MAKE-BRANCH 65073 . 67286) (GIT-BRANCHES 67288 . 69556) (
+GIT-BRANCH-EXISTS? 69558 . 70262) (GIT-PICK-BRANCH 70264 . 70754) (GIT-BRANCH-MENU 70756 . 71459) (
+GIT-PULL-REQUESTS 71461 . 73607) (GIT-SHORT-BRANCH-NAME 73609 . 73900) (GIT-LONG-NAME 73902 . 74219) (
+GIT-PRC-BRANCHES 74221 . 76228)) (76260 79595 (GIT-MY-CURRENT-BRANCH 76270 . 76640) (GIT-MY-BRANCHP 
+76642 . 77147) (GIT-MY-NEXT-BRANCH 77149 . 77643) (GIT-MY-BRANCHES 77645 . 79593)) (79641 83593 (
+GIT-ADD-WORKTREE 79651 . 81135) (GIT-REMOVE-WORKTREE 81137 . 82067) (GIT-LIST-WORKTREES 82069 . 82873)
+ (WORKTREEDIR 82875 . 83591)) (83641 115865 (GIT-GET-DIFFERENT-FILES 83651 . 90075) (
+GIT-BRANCHES-COMPARE-DIRECTORIES 90077 . 96422) (GIT-WORKING-COMPARE-DIRECTORIES 96424 . 101848) (
+GIT-COMPARE-WORKTREE 101850 . 105828) (GITCDOBJBUTTONFN 105830 . 110320) (GIT-CD-LABELFN 110322 . 
+111404) (GIT-CD-MENUFN 111406 . 113846) (GIT-WORKING-COMPARE-FILES 113848 . 114468) (
+GIT-BRANCHES-COMPARE-FILES 114470 . 115634) (GIT-PR-COMPARE 115636 . 115863)) (115935 123964 (CDGITDIR
+ 115945 . 116632) (GIT-COMMAND 116634 . 118192) (GITORIGIN 118194 . 118891) (GIT-INITIALS 118893 . 
+119197) (GIT-COMMAND-TO-FILE 119199 . 122688) (GIT-RESULT-TO-LINES 122690 . 123297) (STRIPLOCAL 123299
+ . 123962)))))
 STOP
diff --git a/lispusers/GITFNS.LCOM b/lispusers/GITFNS.LCOM
index 70a03829..2cd16571 100644
Binary files a/lispusers/GITFNS.LCOM and b/lispusers/GITFNS.LCOM differ
diff --git a/lispusers/PSEUDOHOSTS b/lispusers/PSEUDOHOSTS
index 981afb63..ad69e0ed 100644
--- a/lispusers/PSEUDOHOSTS
+++ b/lispusers/PSEUDOHOSTS
@@ -1,14 +1,13 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED "19-Jul-2023 09:17:48" {WMEDLEY}<lispusers>PSEUDOHOSTS.;153 27674  
+(FILECREATED "22-Sep-2023 15:29:50" {WMEDLEY}<lispusers>PSEUDOHOSTS.;158 26638  
 
       :EDIT-BY rmk
 
-      :CHANGES-TO (RECORDS PHDEVICE PHGENFILESTATE TARGETDEVICE)
-                  (MACROS PSEUDOHOST.NAME PSEUDOHOST.TARGETVAL)
+      :CHANGES-TO (FNS PSEUDOHOST SLASHIT CONTRACT.PH)
                   (VARS PSEUDOHOSTSCOMS)
 
-      :PREVIOUS-DATE "18-Jul-2023 13:12:35" {WMEDLEY}<lispusers>PSEUDOHOSTS.;152)
+      :PREVIOUS-DATE "26-Jul-2023 12:34:37" {WMEDLEY}<lispusers>PSEUDOHOSTS.;155)
 
 
 (PRETTYCOMPRINT PSEUDOHOSTSCOMS)
@@ -21,7 +20,7 @@
         
         (* ;; "Internals")
 
-        (FNS EXPAND.PH CONTRACT.PH SLASHIT UNSLASHIT GETHOSTINFO.PH)
+        (FNS EXPAND.PH CONTRACT.PH UNSLASHIT GETHOSTINFO.PH)
         (FNS OPENFILE.PH GETFILENAME.PH DIRECTORYNAMEP.PH CLOSEFILE.PH REOPENFILE.PH DELETEFILE.PH 
              OPENP.PH UNREGISTERFILE.PH REGISTERFILE.PH GENERATEFILES.PH GETFILEINFO.PH 
              SETFILEINFO.PH NEXTFILEFN.PH FILEINFOFN.PH RENAMEFILE.PH)
@@ -42,6 +41,8 @@
 (PSEUDOHOST
   [LAMBDA (HOST PREFIX)
 
+    (* ;; "Edited 22-Sep-2023 15:29 by rmk")
+
     (* ;; "Edited 25-Jun-2022 17:00 by rmk")
 
     (* ;; "Edited 24-Feb-2022 23:56 by rmk: Expand prefix so that it is rooted in a real host and not a previously defined pseudohost.")
@@ -81,7 +82,7 @@
                   (SELECTQ TARGETHOST
                       ((DSK CORE) 
                            (SETQ PREFIX (UNSLASHIT PREFIX)))
-                      (UNIX (SETQ PREFIX (SLASHIT PREFIX)))
+                      (UNIX (SETQ PREFIX (SLASHIT PREFIX)))
                       NIL)
                   (SETQ TARGETDEVICE (OR (\GETDEVICEFROMHOSTNAME TARGETHOST)
                                          (ERROR "UNKNOWN TARGET HOST" TARGETHOST)))
@@ -153,26 +154,32 @@
         (FETCH (FDEV DEVICENAME) OF (FETCH (PHDEVICE TARGETDEV) OF (\GETDEVICEFROMNAME HOST))))])
 
 (TRUEFILENAME
-  [LAMBDA (FILE)                                             (* ; "Edited 26-Jan-2022 23:33 by rmk")
+  [LAMBDA (FILE)                                             (* ; "Edited 26-Jul-2023 07:53 by rmk")
+                                                             (* ; "Edited 26-Jan-2022 23:33 by rmk")
                                                              (* ; "Edited 25-Jan-2022 08:47 by rmk")
-    (LET (FILENAME DEVICE)
-         (IF (STREAMP FILE)
-             THEN (SETQ FILENAME (FETCH (STREAM FULLFILENAME) OF FILE))
-                  (SETQ DEVICE (FETCH (STREAM DEVICE) OF FILE))
-           ELSE (SETQ FILENAME (\ADD.CONNECTED.DIR FILE))
-                (SETQ DEVICE (\GETDEVICEFROMNAME FILENAME)))
-         (CL:IF (TYPE? PHDEVICE DEVICE)
-             (EXPAND.PH FILENAME DEVICE)
-             FILENAME)])
+    (if (LISTP FILE)
+        then (for F in FILE collect (TRUEFILENAME F))
+      else (LET (FILENAME DEVICE)
+                (IF (STREAMP FILE)
+                    THEN (SETQ FILENAME (FETCH (STREAM FULLFILENAME) OF FILE))
+                         (SETQ DEVICE (FETCH (STREAM DEVICE) OF FILE))
+                  ELSE (SETQ FILENAME (\ADD.CONNECTED.DIR FILE))
+                       (SETQ DEVICE (\GETDEVICEFROMNAME FILENAME)))
+                (CL:IF (TYPE? PHDEVICE DEVICE)
+                    (EXPAND.PH FILENAME DEVICE)
+                    FILENAME)])
 
 (PSEUDOFILENAME
-  [LAMBDA (FILE)                                             (* ; "Edited 29-Jan-2022 23:08 by rmk")
+  [LAMBDA (FILE)                                             (* ; "Edited 26-Jul-2023 12:34 by rmk")
+                                                             (* ; "Edited 29-Jan-2022 23:08 by rmk")
                                                              (* ; "Edited 28-Jan-2022 09:06 by rmk")
-    (FOR D PN (FILENAME _ (IF (STREAMP FILE)
-                              THEN (FETCH (STREAM FULLFILENAME) OF FILE)
-                            ELSE (\ADD.CONNECTED.DIR FILE))) IN \FILEDEVICES
-       WHEN (TYPE? PHDEVICE D) UNLESS (EQ FILENAME (SETQ PN (CONTRACT.PH FILENAME D)))
-       DO (RETURN PN) FINALLY (RETURN FILENAME])
+    (if (LISTP FILE)
+        then (for F in FILE collect (PSEUDOFILENAME F))
+      else (FOR D PN (FILENAME _ (IF (STREAMP FILE)
+                                     THEN (FETCH (STREAM FULLFILENAME) OF FILE)
+                                   ELSE (\ADD.CONNECTED.DIR FILE))) IN \FILEDEVICES
+              WHEN (TYPE? PHDEVICE D) UNLESS (EQ FILENAME (SETQ PN (CONTRACT.PH FILENAME D)))
+              DO (RETURN PN) FINALLY (RETURN FILENAME])
 )
 
 
@@ -209,6 +216,8 @@
 (CONTRACT.PH
   [LAMBDA (NAME PHDEV)
 
+    (* ;; "Edited 22-Sep-2023 14:30 by rmk")
+
     (* ;; "Edited 30-Jan-2022 00:20 by rmk: the smallest pseudoname for NAME.  If the NAME was constructed by expanding, then")
 
     (* ;; "Finds the smallest pseudoname for NAME.  The PHDEV is used only to find its targetdev, that's where we scan for matching prefixes.  This is so we can find the lowest matching pseudohost in the target's prefix map.  If the hosts are defined as {DSK}...{H1}...{H2}, DSK knows the prefixes that lead to H1 and H2, picks the longest matching prefix and replaces it by the corresponding host.")
@@ -234,7 +243,7 @@
 
                   (SETQ CONNECTOR (CADDR PM))
                   [SETQ SUFFIX (CONCAT CONNECTOR (IF (EQ CONNECTOR '/)
-                                                     THEN (SLASHIT SUFFIX)
+                                                     THEN (SLASHIT SUFFIX)
                                                    ELSE (UNSLASHIT SUFFIX])
               (RETURN (PACK* '{ (CADR PM)
                              "}"
@@ -244,31 +253,6 @@
 
                                                     (RETURN NAME)))])
 
-(SLASHIT
-  [LAMBDA (X LCASEDIRS)                                      (* ; "Edited 26-Jan-2022 15:08 by rmk")
-                                                             (* ; "Edited  3-Jan-2022 11:44 by rmk")
-                                                             (* ; "Edited 22-Dec-2021 20:18 by rmk")
-                                                            (* ; "Edited  2-Nov-2021 22:54 by rmk:")
-    (LET [LASTDIRPOS SLASHED (DIRPOS (ADD1 (OR (STRPOS "}" X)
-                                               0]
-         [SETQ SLASHED (CONCATCODES (FOR I C FROM DIRPOS WHILE (SETQ C (NTHCHARCODE X I))
-                                       COLLECT (SELCHARQ C
-                                                    ((< >) 
-                                                         (SETQ LASTDIRPOS I)
-                                                         (CHARCODE /))
-                                                    (/ (SETQ LASTDIRPOS I)
-                                                       C)
-                                                    C]
-         (CL:WHEN (AND LCASEDIRS LASTDIRPOS)
-             (SETQ LASTDIRPOS (ADD1 (IDIFFERENCE LASTDIRPOS DIRPOS)))
-             (SETQ SLASHED (CONCAT (L-CASE (SUBSTRING SLASHED 1 LASTDIRPOS))
-                                  (OR (SUBSTRING SLASHED (ADD1 LASTDIRPOS))
-                                      ""))))
-         (CL:IF (EQ DIRPOS 1)
-             SLASHED
-             (CONCAT (SUBSTRING X 1 (SUB1 DIRPOS))
-                    SLASHED))])
-
 (UNSLASHIT
   [LAMBDA (X LCASEDIRS)                                      (* ; "Edited 26-Jan-2022 15:09 by rmk")
                                                              (* ; "Edited 22-Dec-2021 20:18 by rmk")
@@ -527,13 +511,12 @@
        EXPORTS.ALL)
 )
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (1397 9433 (PSEUDOHOST 1407 . 6966) (PSEUDOHOSTP 6968 . 7481) (PSEUDOHOSTS 7483 . 7844) 
-(TARGETHOST 7846 . 8120) (TRUEFILENAME 8122 . 8809) (PSEUDOFILENAME 8811 . 9431)) (9461 17000 (
-EXPAND.PH 9471 . 10724) (CONTRACT.PH 10726 . 13391) (SLASHIT 13393 . 14961) (UNSLASHIT 14963 . 16709) 
-(GETHOSTINFO.PH 16711 . 16998)) (17001 25021 (OPENFILE.PH 17011 . 18084) (GETFILENAME.PH 18086 . 18375
-) (DIRECTORYNAMEP.PH 18377 . 19001) (CLOSEFILE.PH 19003 . 19470) (REOPENFILE.PH 19472 . 20037) (
-DELETEFILE.PH 20039 . 20323) (OPENP.PH 20325 . 20620) (UNREGISTERFILE.PH 20622 . 21164) (
-REGISTERFILE.PH 21166 . 21700) (GENERATEFILES.PH 21702 . 22746) (GETFILEINFO.PH 22748 . 23050) (
-SETFILEINFO.PH 23052 . 23251) (NEXTFILEFN.PH 23253 . 23799) (FILEINFOFN.PH 23801 . 24076) (
-RENAMEFILE.PH 24078 . 25019)))))
+  (FILEMAP (NIL (1315 9921 (PSEUDOHOST 1325 . 6930) (PSEUDOHOSTP 6932 . 7445) (PSEUDOHOSTS 7447 . 7808) 
+(TARGETHOST 7810 . 8084) (TRUEFILENAME 8086 . 9048) (PSEUDOFILENAME 9050 . 9919)) (9949 15964 (
+EXPAND.PH 9959 . 11212) (CONTRACT.PH 11214 . 13925) (UNSLASHIT 13927 . 15673) (GETHOSTINFO.PH 15675 . 
+15962)) (15965 23985 (OPENFILE.PH 15975 . 17048) (GETFILENAME.PH 17050 . 17339) (DIRECTORYNAMEP.PH 
+17341 . 17965) (CLOSEFILE.PH 17967 . 18434) (REOPENFILE.PH 18436 . 19001) (DELETEFILE.PH 19003 . 19287
+) (OPENP.PH 19289 . 19584) (UNREGISTERFILE.PH 19586 . 20128) (REGISTERFILE.PH 20130 . 20664) (
+GENERATEFILES.PH 20666 . 21710) (GETFILEINFO.PH 21712 . 22014) (SETFILEINFO.PH 22016 . 22215) (
+NEXTFILEFN.PH 22217 . 22763) (FILEINFOFN.PH 22765 . 23040) (RENAMEFILE.PH 23042 . 23983)))))
 STOP
diff --git a/lispusers/PSEUDOHOSTS.LCOM b/lispusers/PSEUDOHOSTS.LCOM
index 1560bf8f..2a4c82ce 100644
Binary files a/lispusers/PSEUDOHOSTS.LCOM and b/lispusers/PSEUDOHOSTS.LCOM differ
diff --git a/sources/HARDCOPY b/sources/HARDCOPY
index f252f932..09eaff6e 100644
--- a/sources/HARDCOPY
+++ b/sources/HARDCOPY
@@ -1,10 +1,12 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED "18-Oct-2022 18:47:42" {DSK}<home>larry>ilisp>medley>sources>HARDCOPY.;2 103854 
+(FILECREATED "22-Jun-2023 17:31:38" {WMEDLEY}<sources>HARDCOPY.;11 104907 
 
-      :CHANGES-TO (FNS HARDCOPYIMAGEW.TOPRINTER)
+      :EDIT-BY rmk
 
-      :PREVIOUS-DATE "20-Jul-2022 17:14:14" {DSK}<home>larry>ilisp>medley>sources>HARDCOPY.;1)
+      :CHANGES-TO (FNS MakeMenuOfPrinters)
+
+      :PREVIOUS-DATE " 3-Mar-2023 23:49:09" {WMEDLEY}<sources>HARDCOPY.;10)
 
 
 (* ; "
@@ -46,7 +48,7 @@ Copyright (c) 1984-1993, 1999, 2018, 2021-2022 by Venue & Xerox Corporation.
               (INITVARS (TEXTDEFAULTTABS (LIST 20320))
                      (TEXTDEFAULTPAGEREGION (CREATEREGION 2794 1905 18415 24765)))
                                                              (* ; 
-                                                  "TEXTDEFAULTTABS Hack, mica equivalent of 8 inches")
+                              "TEXTDEFAULTTABS Hack, mica equivalent of 8 inches.  NOT USED ANYWHERE")
               (GLOBALVARS TEXTDEFAULTTABS TEXTDEFAULTPAGEREGION)
               (FNS TEXTTOIMAGEFILE COPY.TEXT.TO.IMAGE))
         (COMS (FNS \BLTSHADE.GENERICPRINTER)
@@ -62,7 +64,9 @@ Copyright (c) 1984-1993, 1999, 2018, 2021-2022 by Venue & Xerox Corporation.
                    \HDCPYDSPPRINTCHAR \SLOWHDCPYBLTCHAR \CHANGECHARSET.HDCPYDISPLAY)
               [DECLARE%: DONTCOPY DOEVAL@COMPILE (EXPORT (CONSTANTS (MICASPERPT (FQUOTIENT 2540 72))
                                                                 (IHALFMICASPERPT 17)
-                                                                (IMICASPERPT 35]
+                                                                (IMICASPERPT 35)
+                                                                (DEFAULTTAB 36]
+                                                             (* ; "screen-points:  1/2 inch")
               (DECLARE%: DONTCOPY DOEVAL@COMPILE (EXPORT (FUNCTIONS \MICASTOPTS)))
               (DECLARE%: DONTEVAL@LOAD DOCOPY (P (\HDCPYDISPLAYINIT]
         [COMS                                                (* ; 
@@ -168,20 +172,24 @@ Copyright (c) 1984-1993, 1999, 2018, 2021-2022 by Venue & Xerox Corporation.
 (DEFINEQ
 
 (MakeMenuOfPrinters
-  [LAMBDA (MENUTITLE)                                        (* ; "Edited 29-May-93 14:18 by rmk:")
-                                                             (* ; "Edited 11-Jul-90 13:35 by jds")
+  [LAMBDA (MENUTITLE)                                        (* ; "Edited 22-Jun-2023 17:30 by rmk")
+                                                             (* ; "Edited 29-May-93 14:18 by rmk:")
+                                                             (* ; "Edited 11-Jul-90 13:35 by jds")
     (DECLARE (GLOBALVARS DEFAULTPRINTINGHOST))
     (CREATE MENU
            ITEMS _ (APPEND (FOR P INSIDE DEFAULTPRINTINGHOST
                               COLLECT (LIST (COND
-                                                   ((LISTP P)
-                                                    (IF (CADDR P)
-                                                        THEN (CONCAT (CADR P)
-                                                                        " "
-                                                                        (CADDR P))
-                                                      ELSE (CADR P)))
-                                                   (T P))
-                                                (KWOTE P)))
+                                               ((LISTP P)
+                                                (IF (CADDR P)
+                                                    THEN (CONCAT (CADR P)
+                                                                " "
+                                                                (CADDR P))
+                                                  ELSE (CADR P)))
+                                               (T (CL:IF (OR (NULL P)
+                                                             (ZEROP (NCHARS P)))
+                                                      "(Default printer)"
+                                                      P)))
+                                            (KWOTE P)))
                           (LIST (LIST "Other..." (KWOTE 'OTHER)
                                       "You will be prompted for a printer")))
            TITLE _ MENUTITLE
@@ -686,7 +694,7 @@ Copyright (c) 1984-1993, 1999, 2018, 2021-2022 by Venue & Xerox Corporation.
 
 
 
-(* ; "TEXTDEFAULTTABS Hack, mica equivalent of 8 inches")
+(* ; "TEXTDEFAULTTABS Hack, mica equivalent of 8 inches.  NOT USED ANYWHERE")
 
 (DECLARE%: DOEVAL@COMPILE DONTCOPY
 
@@ -729,7 +737,8 @@ Copyright (c) 1984-1993, 1999, 2018, 2021-2022 by Venue & Xerox Corporation.
                             (CLOSEF IMAGESTREAM])])
 
 (COPY.TEXT.TO.IMAGE
-  [LAMBDA (INFILE IMAGESTREAM FONTS TABS)                    (* ; "Edited 20-Jul-2022 17:14 by rmk")
+  [LAMBDA (INFILE IMAGESTREAM FONTS TABS)                    (* ; "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:")
 
@@ -741,7 +750,7 @@ Copyright (c) 1984-1993, 1999, 2018, 2021-2022 by Venue & Xerox Corporation.
       (FONTARRAY (FONTMAPARRAY FONTS))
       (MAXFONT (ARRAYSIZE FONTARRAY))
       (INSTRM (GETSTREAM INFILE 'INPUT))
-      DEFAULTTAB C FC (EOSP (GETFILEINFO INSTRM 'ENDOFSTREAMOP]
+      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")
@@ -775,17 +784,19 @@ Copyright (c) 1984-1993, 1999, 2018, 2021-2022 by Venue & Xerox Corporation.
                                   (\OUTCHAR IMAGESTREAM (CHARCODE ^T))
                                   (RETURN))
 
-                              (* ;; "TEXTDEFAULTTABS is a hack, since it depends on the units of the stream.  Should really be a property of the stream or imagetype, or defined in terms of standard scale")
+                              (* ;; "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
                                (IF TABS
                                    THEN (OR (CAR (NTH TABS FC))
                                             (ERROR "Undefined absolute tab number" FC))
-                                 ELSE (TIMES FC (OR DEFAULTTAB
-                                                    (SETQ DEFAULTTAB
-                                                     (TIMES 8 (CHARWIDTH (CHARCODE SPACE)
-                                                                     (FONTCREATE (ELT FONTARRAY 1)
-                                                                            NIL NIL NIL IMAGESTREAM]
+                                 ELSE (TIMES FC (OR DEFTAB (SETQ DEFTAB
+                                                            (TIMES 8
+                                                                   (CHARWIDTH (CHARCODE SPACE)
+                                                                          (FONTCREATE (ELT FONTARRAY
+                                                                                           1)
+                                                                                 NIL NIL NIL 
+                                                                                 IMAGESTREAM]
                               (DSPXPOSITION FC IMAGESTREAM))
                           (NIL (\OUTCHAR IMAGESTREAM (CHARCODE ^F))
                                                              (* ; "EOS after ^F")
@@ -912,15 +923,23 @@ Copyright (c) 1984-1993, 1999, 2018, 2021-2022 by Venue & Xerox Corporation.
 
 (RPAQQ IMICASPERPT 35)
 
+(RPAQQ DEFAULTTAB 36)
+
 
 (CONSTANTS (MICASPERPT (FQUOTIENT 2540 72))
        (IHALFMICASPERPT 17)
-       (IMICASPERPT 35))
+       (IMICASPERPT 35)
+       (DEFAULTTAB 36))
 )
 
 (* "END EXPORTED DEFINITIONS")
 
 )
+
+
+
+(* ; "screen-points:  1/2 inch")
+
 (DECLARE%: DONTCOPY DOEVAL@COMPILE 
 (* "FOLLOWING DEFINITIONS EXPORTED")
 (DEFMACRO \MICASTOPTS (MICAS)
@@ -1083,40 +1102,40 @@ Copyright (c) 1984-1993, 1999, 2018, 2021-2022 by Venue & Xerox Corporation.
 (PUTPROPS HARDCOPY COPYRIGHT ("Venue & Xerox Corporation" 1984 1985 1986 1987 1988 1989 1990 1991 1992
  1993 1999 2018 2021 2022))
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (6168 10934 (HARDCOPY.SOMEHOW 6178 . 7536) (HARDCOPYIMAGEW 7538 . 7690) (
-HARDCOPYIMAGEW.TOFILE 7692 . 8000) (HARDCOPYIMAGEW.TOPRINTER 8002 . 9249) (HARDCOPYREGION.TOFILE 9251
- . 9549) (HARDCOPYREGION.TOPRINTER 9551 . 10173) (COPY.WINDOW.TO.BITMAP 10175 . 10932)) (11006 21556 (
-MakeMenuOfPrinters 11016 . 12241) (PRINTERS.WHENSELECTEDFN 12243 . 13985) (MakeMenuOfImageTypes 13987
- . 14505) (GetNewPrinterFromUser 14507 . 14935) (PopUpWindowAndGetAtom 14937 . 16322) (
-PopUpWindowAndGetList 16324 . 17890) (NewPrinter 17892 . 18840) (GetPrinterName 18842 . 19122) (
-GetImageFile 19124 . 21411) (FetchDefaultPrinter 21413 . 21554)) (21591 22129 (
-ExtensionForPrintFileType 21601 . 21794) (PRINTFILETYPE.FROM.EXTENSION 21796 . 22127)) (22184 38568 (
-DEFAULTPRINTER 22194 . 22354) (CAN.PRINT.DIRECTLY 22356 . 22512) (CONVERT.FILE.TO.TYPE.FOR.PRINTER 
-22514 . 23558) (EMPRESS 23560 . 23873) (HARDCOPYW 23875 . 26835) (LISTFILES1 26837 . 27010) (
-PRINTER.BITMAPFILE 27012 . 27259) (PRINTER.BITMAPSCALE 27261 . 27526) (PRINTER.SCRATCH.FILE 27528 . 
-27651) (PRINTERPROP 27653 . 27836) (PRINTERSTATUS 27838 . 28027) (PRINTERTYPE 28029 . 30338) (
-PRINTERNAME 30340 . 30642) (PRINTFILEPROP 30644 . 30835) (PRINTFILETYPE 30837 . 32781) (
-\EXPECTED.FILE.TYPE 32783 . 33565) (SEND.FILE.TO.PRINTER 33567 . 38566)) (38569 43551 (PRINTERDEVICE 
-38579 . 43549)) (44366 52124 (TEXTTOIMAGEFILE 44376 . 46566) (COPY.TEXT.TO.IMAGE 46568 . 52122)) (
-52125 53260 (\BLTSHADE.GENERICPRINTER 52135 . 53258)) (53388 72140 (MAKEHARDCOPYSTREAM 53398 . 54402) 
-(UNMAKEHARDCOPYSTREAM 54404 . 55088) (HARDCOPYSTREAMTYPE 55090 . 55369) (\CHARWIDTH.HDCPYDISPLAY 55371
- . 55802) (\DSPFONT.HDCPYDISPLAY 55804 . 57209) (\DSPRIGHTMARGIN.HDCPYDISPLAY 57211 . 57788) (
-\DSPXPOSITION.HDCPYDISPLAY 57790 . 58051) (\DSPYPOSITION.HDCPYDISPLAY 58053 . 58314) (
-\STRINGWIDTH.HDCPYDISPLAY 58316 . 58823) (\STRINGWIDTH.HCPYDISPLAYAUX 58825 . 61157) (\HDCPYBLTCHAR 
-61159 . 63694) (\HDCPYDISPLAY.FIX.XPOS 63696 . 64116) (\HDCPYDISPLAY.FIX.YPOS 64118 . 64538) (
-\HDCPYDISPLAYINIT 64540 . 65317) (\HDCPYDSPPRINTCHAR 65319 . 67479) (\SLOWHDCPYBLTCHAR 67481 . 70984) 
-(\CHANGECHARSET.HDCPYDISPLAY 70986 . 72138)) (72550 72691 (\MICASTOPTS 72550 . 72691)) (72862 103159 (
-MAKEHARDCOPYMODESTREAM 72872 . 74781) (UNMAKEHARDCOPYMODESTREAM 74783 . 75861) (\BLTSHADE.HCPYMODE 
-75863 . 76310) (\BITBLT.HCPYMODE 76312 . 76934) (\BRUSHCONVERT.HCPYMODE 76936 . 77173) (
-\CHANGECHARSET.HCPYMODE 77175 . 78942) (\DASHINGCONVERT.HCPYMODE 78944 . 79207) (\CHARWIDTH.HCPYMODE 
-79209 . 79496) (\DRAWLINE.HCPYMODE 79498 . 79810) (\DRAWCURVE.HCPYMODE 79812 . 80241) (
-\DRAWCIRCLE.HCPYMODE 80243 . 80638) (\DRAWELLIPSE.HCPYMODE 80640 . 81152) (\DSPFONT.HCPYMODE 81154 . 
-82310) (\DSPLEFTMARGIN.HCPYMODE 82312 . 82896) (\DSPLINEFEED.HCPYMODE 82898 . 83308) (
-\DSPRIGHTMARGIN.HCPYMODE 83310 . 83939) (\DSPSPACEFACTOR.HCPYMODE 83941 . 84462) (
-\DSPXPOSITION.HCPYMODE 84464 . 85045) (\DSPYPOSITION.HCPYMODE 85047 . 85452) (\MOVETO.HCPYMODE 85454
- . 85606) (\FONTCREATE.HCPYMODE.PRESS 85608 . 86620) (\CREATECHARSET.HCPYMODE.PRESS 86622 . 87593) (
-\FONTCREATE.HCPYMODE.INTERPRESS 87595 . 88629) (\CREATECHARSET.HCPYMODE.INTERPRESS 88631 . 89619) (
-\STRINGWIDTH.HCPYMODE 89621 . 90055) (\HCPYMODEBLTCHAR 90057 . 93026) (\HCPYMODEDISPLAYINIT 93028 . 
-95959) (\HCPYMODEDSPPRINTCHAR 95961 . 98142) (\SLOWHCPYMODEBLTCHAR 98144 . 101658) (\SFFixY.HCPYMODE 
-101660 . 103157)))))
+  (FILEMAP (NIL (6322 11088 (HARDCOPY.SOMEHOW 6332 . 7690) (HARDCOPYIMAGEW 7692 . 7844) (
+HARDCOPYIMAGEW.TOFILE 7846 . 8154) (HARDCOPYIMAGEW.TOPRINTER 8156 . 9403) (HARDCOPYREGION.TOFILE 9405
+ . 9703) (HARDCOPYREGION.TOPRINTER 9705 . 10327) (COPY.WINDOW.TO.BITMAP 10329 . 11086)) (11160 22017 (
+MakeMenuOfPrinters 11170 . 12702) (PRINTERS.WHENSELECTEDFN 12704 . 14446) (MakeMenuOfImageTypes 14448
+ . 14966) (GetNewPrinterFromUser 14968 . 15396) (PopUpWindowAndGetAtom 15398 . 16783) (
+PopUpWindowAndGetList 16785 . 18351) (NewPrinter 18353 . 19301) (GetPrinterName 19303 . 19583) (
+GetImageFile 19585 . 21872) (FetchDefaultPrinter 21874 . 22015)) (22052 22590 (
+ExtensionForPrintFileType 22062 . 22255) (PRINTFILETYPE.FROM.EXTENSION 22257 . 22588)) (22645 39029 (
+DEFAULTPRINTER 22655 . 22815) (CAN.PRINT.DIRECTLY 22817 . 22973) (CONVERT.FILE.TO.TYPE.FOR.PRINTER 
+22975 . 24019) (EMPRESS 24021 . 24334) (HARDCOPYW 24336 . 27296) (LISTFILES1 27298 . 27471) (
+PRINTER.BITMAPFILE 27473 . 27720) (PRINTER.BITMAPSCALE 27722 . 27987) (PRINTER.SCRATCH.FILE 27989 . 
+28112) (PRINTERPROP 28114 . 28297) (PRINTERSTATUS 28299 . 28488) (PRINTERTYPE 28490 . 30799) (
+PRINTERNAME 30801 . 31103) (PRINTFILEPROP 31105 . 31296) (PRINTFILETYPE 31298 . 33242) (
+\EXPECTED.FILE.TYPE 33244 . 34026) (SEND.FILE.TO.PRINTER 34028 . 39027)) (39030 44012 (PRINTERDEVICE 
+39040 . 44010)) (44847 53086 (TEXTTOIMAGEFILE 44857 . 47047) (COPY.TEXT.TO.IMAGE 47049 . 53084)) (
+53087 54222 (\BLTSHADE.GENERICPRINTER 53097 . 54220)) (54350 73102 (MAKEHARDCOPYSTREAM 54360 . 55364) 
+(UNMAKEHARDCOPYSTREAM 55366 . 56050) (HARDCOPYSTREAMTYPE 56052 . 56331) (\CHARWIDTH.HDCPYDISPLAY 56333
+ . 56764) (\DSPFONT.HDCPYDISPLAY 56766 . 58171) (\DSPRIGHTMARGIN.HDCPYDISPLAY 58173 . 58750) (
+\DSPXPOSITION.HDCPYDISPLAY 58752 . 59013) (\DSPYPOSITION.HDCPYDISPLAY 59015 . 59276) (
+\STRINGWIDTH.HDCPYDISPLAY 59278 . 59785) (\STRINGWIDTH.HCPYDISPLAYAUX 59787 . 62119) (\HDCPYBLTCHAR 
+62121 . 64656) (\HDCPYDISPLAY.FIX.XPOS 64658 . 65078) (\HDCPYDISPLAY.FIX.YPOS 65080 . 65500) (
+\HDCPYDISPLAYINIT 65502 . 66279) (\HDCPYDSPPRINTCHAR 66281 . 68441) (\SLOWHDCPYBLTCHAR 68443 . 71946) 
+(\CHANGECHARSET.HDCPYDISPLAY 71948 . 73100)) (73603 73744 (\MICASTOPTS 73603 . 73744)) (73915 104212 (
+MAKEHARDCOPYMODESTREAM 73925 . 75834) (UNMAKEHARDCOPYMODESTREAM 75836 . 76914) (\BLTSHADE.HCPYMODE 
+76916 . 77363) (\BITBLT.HCPYMODE 77365 . 77987) (\BRUSHCONVERT.HCPYMODE 77989 . 78226) (
+\CHANGECHARSET.HCPYMODE 78228 . 79995) (\DASHINGCONVERT.HCPYMODE 79997 . 80260) (\CHARWIDTH.HCPYMODE 
+80262 . 80549) (\DRAWLINE.HCPYMODE 80551 . 80863) (\DRAWCURVE.HCPYMODE 80865 . 81294) (
+\DRAWCIRCLE.HCPYMODE 81296 . 81691) (\DRAWELLIPSE.HCPYMODE 81693 . 82205) (\DSPFONT.HCPYMODE 82207 . 
+83363) (\DSPLEFTMARGIN.HCPYMODE 83365 . 83949) (\DSPLINEFEED.HCPYMODE 83951 . 84361) (
+\DSPRIGHTMARGIN.HCPYMODE 84363 . 84992) (\DSPSPACEFACTOR.HCPYMODE 84994 . 85515) (
+\DSPXPOSITION.HCPYMODE 85517 . 86098) (\DSPYPOSITION.HCPYMODE 86100 . 86505) (\MOVETO.HCPYMODE 86507
+ . 86659) (\FONTCREATE.HCPYMODE.PRESS 86661 . 87673) (\CREATECHARSET.HCPYMODE.PRESS 87675 . 88646) (
+\FONTCREATE.HCPYMODE.INTERPRESS 88648 . 89682) (\CREATECHARSET.HCPYMODE.INTERPRESS 89684 . 90672) (
+\STRINGWIDTH.HCPYMODE 90674 . 91108) (\HCPYMODEBLTCHAR 91110 . 94079) (\HCPYMODEDISPLAYINIT 94081 . 
+97012) (\HCPYMODEDSPPRINTCHAR 97014 . 99195) (\SLOWHCPYMODEBLTCHAR 99197 . 102711) (\SFFixY.HCPYMODE 
+102713 . 104210)))))
 STOP
diff --git a/sources/HARDCOPY.LCOM b/sources/HARDCOPY.LCOM
index fa59fbbe..ace4369d 100644
Binary files a/sources/HARDCOPY.LCOM and b/sources/HARDCOPY.LCOM differ
