diff --git a/library/UNIXUTILS b/library/UNIXUTILS
index d841eb58..89140a37 100644
--- a/library/UNIXUTILS
+++ b/library/UNIXUTILS
@@ -1,21 +1,30 @@
 (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
 
-(FILECREATED "18-Jan-2023 20:36:10" {DSK}<home>frank>il>medley>gmedley>library>UNIXUTILS.;7 5091   
+(FILECREATED "23-Sep-2023 15:30:26" {WMEDLEY}<library>UNIXUTILS.;7 7943   
 
-      :CHANGES-TO (FNS ShellBrowser ShellBrowse ShellOpen)
-                  (VARS UNIXUTILSCOMS)
-                  (FUNCTIONS ShellWhich)
+      :EDIT-BY rmk
 
-      :PREVIOUS-DATE "18-Jan-2023 13:22:28" {DSK}<home>frank>il>medley>gmedley>greetfiles>UNIXUTILS.;1
-)
+      :CHANGES-TO (FNS SLASHIT)
+
+      :PREVIOUS-DATE "22-Sep-2023 15:28:19" {WMEDLEY}<library>UNIXUTILS.;6)
 
 
 (PRETTYCOMPRINT UNIXUTILSCOMS)
 
-(RPAQQ UNIXUTILSCOMS ((GLOBALVARS ShellBrowser)
-                      (INITVARS (ShellBrowser))
-                      (FUNCTIONS ShellCommand ShellWhich)
-                      (FNS ShellBrowser ShellBrowse)))
+(RPAQQ UNIXUTILSCOMS
+       ((DECLARE%: EVAL@COMPILE DONTCOPY                     (* ; "For PROCESS-COMMAND")
+               (FILES (FROM LOADUPS)
+                      EXPORTS.ALL))
+        (GLOBALVARS ShellBrowser)
+        (INITVARS (ShellBrowser))
+        (FUNCTIONS ShellCommand ShellWhich)
+        (FNS ShellBrowser ShellBrowse PROCESS-COMMAND SLASHIT)
+        (PROPS (UNIXUTILS FILETYPE))))
+(DECLARE%: EVAL@COMPILE DONTCOPY 
+
+(FILESLOAD (FROM LOADUPS)
+       EXPORTS.ALL)
+)
 (DECLARE%: DOEVAL@COMPILE DONTCOPY
 
 (GLOBALVARS ShellBrowser)
@@ -106,8 +115,51 @@
                                               " >>/tmp/ShellBrowser-warnings-$$.txt")))
                   T)
       else 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])
+
+(SLASHIT
+  [LAMBDA (X LCASEDIRS NOHOST)                               (* ; "Edited 23-Sep-2023 15:27 by rmk")
+
+    (* ;; "It would also be nice to use the generic unpackfilename/packfilename tools.  But packfilename sticks in brackets again, and sticks a dot on when removing the version.")
+
+    (* ;; "Perhaps this should be a per file-device operation that maps device names into the local file system.")
+
+    (* ;; "This is a first approximation to a utility that converts a filename X on a host whose files physically reside in the local Unix file system into the strings that shell commands can use to reference that file.  For now, this just involves replacing directory brackets with /, removing the host, and perhaps lower-casing the directory.  It probably should be extended to deal with version number translation, for now it just keeps the ; version. ")
+
+    (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 (OR (EQ DIRPOS 1)
+                    NOHOST)
+             SLASHED
+             (CONCAT (SUBSTRING X 1 (SUB1 DIRPOS))
+                    SLASHED))])
 )
+
+(PUTPROPS UNIXUTILS FILETYPE CL:COMPILE-FILE)
 (DECLARE%: DONTCOPY
-  (FILEMAP (NIL (764 1137 (ShellCommand 764 . 1137)) (1139 1538 (ShellWhich 1139 . 1538)) (1539 5068 (
-ShellBrowser 1549 . 4072) (ShellBrowse 4074 . 5066)))))
+  (FILEMAP (NIL (902 1275 (ShellCommand 902 . 1275)) (1277 1676 (ShellWhich 1277 . 1676)) (1677 7865 (
+ShellBrowser 1687 . 4210) (ShellBrowse 4212 . 5204) (PROCESS-COMMAND 5206 . 5819) (SLASHIT 5821 . 7863
+)))))
 STOP
diff --git a/library/UNIXUTILS.DFASL b/library/UNIXUTILS.DFASL
index a54d1561..e4054f2c 100644
Binary files a/library/UNIXUTILS.DFASL and b/library/UNIXUTILS.DFASL differ
