From f765676ec40db72a2abfa35b227c2a1d0087b4be Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Mon, 2 Oct 2023 12:56:57 -0700 Subject: [PATCH] UNIXUTILS: Add UNIX-FILE-NAME etc on top of previous ShellWhich update--should resynch --- library/UNIXUTILS | 113 ++++++++++++++++++++++++++++++++++++---- library/UNIXUTILS.DFASL | Bin 2667 -> 4896 bytes 2 files changed, 104 insertions(+), 9 deletions(-) diff --git a/library/UNIXUTILS b/library/UNIXUTILS index ab7a4619..0758f19f 100644 --- a/library/UNIXUTILS +++ b/library/UNIXUTILS @@ -1,19 +1,30 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "16-Jun-2023 13:30:18" {DSK}frank>il>medley>gmedley>library>UNIXUTILS.;11 4989 +(FILECREATED " 2-Oct-2023 12:54:58" {WMEDLEY}UNIXUTILS.;10 10535 + + :EDIT-BY rmk :CHANGES-TO (FUNCTIONS ShellWhich) - :PREVIOUS-DATE "18-Jan-2023 20:36:10" {DSK}frank>il>medley>gmedley>library>UNIXUTILS.;8 -) + :PREVIOUS-DATE " 1-Oct-2023 20:52:23" {WMEDLEY}UNIXUTILS.;9) (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 UNIX-FILE-NAME) + (PROPS (UNIXUTILS FILETYPE)))) +(DECLARE%: EVAL@COMPILE DONTCOPY + +(FILESLOAD (FROM LOADUPS) + EXPORTS.ALL) +) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS ShellBrowser) @@ -104,8 +115,92 @@ " >>/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))]) + +(UNIX-FILE-NAME + [LAMBDA (FILE ACCESS COPY) (* ; "Edited 1-Oct-2023 20:52 by rmk") + + (* ;; "Tries to return the string that would reference FILE in a Unix shell, for the use of PROCESS-COMMAND and ShellCommand. If VERSION is 1, it assumes that the Unix file is doesn't have the Medley version convention. If FILE does not have a corresponding Unix name, COPY is non-NIL, and ACCESS is INPUT, FILE will be copied to a unix tmp file (with COPY in its name) and that name will be returned.") + + (CL:WHEN (\GETSTREAM FILE ACCESS T) + (SETQ FILE (OR (FULLNAME FILE) + FILE))) (* ; "Might catch NODIRCORE") + (CL:WHEN FILE + (SETQ FILE (TRUEFILENAME FILE)) + (CL:UNLESS (STREAMP FILE) + [SETQ FILE (\GETFILENAME FILE (SELECTQ ACCESS + (OUTPUT 'NEW) + (INPUT 'OLD) + (NIL (SETQ ACCESS 'INPUT) + 'OLD) + (\ILLEGAL.ARG ACCESS]) + [SELECTQ (FILENAMEFIELD FILE 'HOST) + (UNIX [SUBSTRING FILE (ADD1 (CONSTANT (NCHARS "{UNIX}"]) + (DSK (LET [(VERSION (FILENAMEFIELD FILE 'VERSION] + (SETQ FILE (SLASHIT (PACKFILENAME 'HOST NIL 'VERSION NIL 'BODY FILE))) + (CL:IF (AND VERSION (IGREATERP VERSION 1)) + (CONCAT FILE (CL:IF (FILENAMEFIELD FILE 'EXTENSION) + "." + "") + "~" VERSION "~") + FILE))) + (CL:WHEN (AND COPY (EQ ACCESS 'INPUT)) + (RESETLST + (CL:WHEN (\GETSTREAM FILE 'INPUT T) (* ; "Hope is randaccess") + [RESETSAVE (GETFILEPTR FILE) + `(PROGN (SETFILEPTR ,FILE OLDVALUE]) + (COPYFILE FILE (CONCAT "{UNIX}/tmp/medley-" (L-CASE COPY) + "-" + (IDATE) + "-" + (RAND) + (CL:IF (FILENAMEFIELD FILE 'EXTENSION) + (CONCAT "." (FILENAMEFIELD FILE 'EXTENSION)) + "")))))])]) ) + +(PUTPROPS UNIXUTILS FILETYPE CL:COMPILE-FILE) (DECLARE%: DONTCOPY - (FILEMAP (NIL (664 1037 (ShellCommand 664 . 1037)) (1039 1436 (ShellWhich 1039 . 1436)) (1437 4966 ( -ShellBrowser 1447 . 3970) (ShellBrowse 3972 . 4964))))) + (FILEMAP (NIL (927 1300 (ShellCommand 927 . 1300)) (1302 1699 (ShellWhich 1302 . 1699)) (1700 10457 ( +ShellBrowser 1710 . 4233) (ShellBrowse 4235 . 5227) (PROCESS-COMMAND 5229 . 5842) (SLASHIT 5844 . 7886 +) (UNIX-FILE-NAME 7888 . 10455))))) STOP diff --git a/library/UNIXUTILS.DFASL b/library/UNIXUTILS.DFASL index 98d669df6bdcd66023b1dd50ed0be00ebe277f64..e9cb27338f7ba39d2606d35dfbdcd0bd0f7fceb3 100644 GIT binary patch delta 2816 zcmaJ@U5p!76~1@IfBPG6yAhGKG%g}7gxH(?qah8!v-WsByW^RuXPnq*VYQn$^~O%! z-6qgz8@z#_R$!63lPq(?7PW|{N|a>zQOMsmZv-KD=|c(+JRo@K%OVwC%Q`PWsJ^(cJimPQaM938MMu-^JddxrOmvh=_<)g!%3S~*>h!> z^1b+b)@wbUZ7j#Ff|*urI|0k{ijnb`1hb%Nd#(g41KEO^hcT?1N~UPpK=!C5%Pcr{ zQqj5YHl(8v#pRZqHEc16V!K+Y*C&@7-+rkA(;bhx09&@M*g4GsX+LHsf&LPPl2?77 zK~Mott|WHBk_bwjvZeNTF83};UTg4?41S4Hc)7KE<^Lz2t&4Mn~Lhfi&0Le+Lvk?LHIyET|NN4$$uecRyC<5M0-+ zCP-{b)?$C&ha zQRZUa{d)MLiKXwtg4aayWs$6lr8$wbL{bsSVelBToq}cBSj8Sn-jwR7#*rcMiu=7t zn~%6VyWY-@Na$Y1azYkU0?qwUoIT(DvPirnmdc^=dPMyv?hB&sAg9 zW1-EHss2q0CCX%p!u*LW(|AQ_lJrQ@$EAd*$1t=>-AvE$uy>IXs498Jc7Wr4>v^>Q zTo3-iB>~Z%`Ie-DslJ&aIxT-5+>Tu3oR+ zs@~QH2Er+WM05RbUp-*<*AH#YMc*)^7l1sxb;-C{A8r9TjHKCr-t51vU()kW-MWyk z#%8Y@&D#5SuD+KG_i@_w4W&J^THQ#@Xdl$>-<+<^P~aq*o~hj@N8f1YFHlG{yP?&# zfU`Q;o{pw!TI~bUm?jz2Eey%wX$em-*CcEZ-EcUajD{eSB(M44xT+bdambf2>8eB%TKZkR}$pN$r$OwxSCZU?^wIIqCKL;&f z+%Fp+N-2w!i#L62W9d>0Y%}$E! zFH_7(-^!fp9|Lg-4;aqqj?b8}!e^ z#vXzj{j4V8Cl;&5Viq9}i05L*q)m$i1>zA&jrt+wTcjhfv5VN-IK=i*+7|}@j2L8V zdxM8=jQGDJ`|bF8r{mue8g%MUUaw#7#eMup)N%N}IEBM1>^6b`#A>aGrG{AYlXbU5 zX}OCJn?M2HJ!v3wP&9S`I`F+RW%#$z zz0euxHFMBwk~#P#4&!gkYdyAtwK_L^`qYcVrz*$mm9vQ$z78NlC>p%jiYkMcdBj^| zVM=9`iCM;A|DD^1!+GqXqgOPJYDPw6VT-uUe}IecAn~^c#9tr;WV{cIBuBFWQGOFF z_fjD!&r#;Jq9gIsjTaO3%C{=@_=(2yDbQiqviT~<8zEv9zv$3ojB$7s$zqpy2KL+A Qd0f)Fja@-cTOWV?Umt7@Qvd(} delta 551 zcma)$Uu)A~6vlIsw6S#;Lo0fr9BfC(+53mctZ=#>T8?OZMcD@}d2wn&W4(FWbJiq77<*$Xks~4SM>G6#_ zgN@ki4%?e|&0gQ!h&%mw*IfVAN3^g?^TA+yxE7OcuOE}OVcfnKcL<%+7PmLG;%reT zRG-&p=V>`#wF38VS#{X!w0CE?oN#$e#(F*-Kj`%E-3I`feG->JV%Mc}&dHQP`btcb z!oU3Ylk%hg%ABFX0jlh?6oJYN`Adp8%iB!|)*sY8WB{s@fs_}adTcB{G3D5U5*S9TKtNBRTw@e5It7g?x4y5}@E^36$ zddpiX9Ux&3vNwUSkJ-`b5^x&+G2@UjiiUf!HL&n)bpdGpOqx7Hvj+t