From 68ed78a9f9de571a3b54a07dacd145657acb4043 Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Sat, 23 Sep 2023 16:23:46 -0700 Subject: [PATCH] UNIXUTILS: moved PROCESS-COMMAND and SLASHIT from GITFNS and PSEUDOHOST resp. PROCESS-COMMAND executes a command in process-stream, like ShellCommand, but returns a completion code and not what happens in the shell. SLASHIT is an approximation (doesn't deal with versions) of converting a Medley file name to its Unix equivalent, to use in commands --- library/UNIXUTILS | 76 +++++++++++++++++++++++++++++++++------- library/UNIXUTILS.DFASL | Bin 2671 -> 3617 bytes 2 files changed, 64 insertions(+), 12 deletions(-) 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}frank>il>medley>gmedley>library>UNIXUTILS.;7 5091 +(FILECREATED "23-Sep-2023 15:30:26" {WMEDLEY}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}frank>il>medley>gmedley>greetfiles>UNIXUTILS.;1 -) + :CHANGES-TO (FNS SLASHIT) + + :PREVIOUS-DATE "22-Sep-2023 15:28:19" {WMEDLEY}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 a54d15618cebee43dd29a9284e9e2eea91636473..e4054f2c91bcabc25700afb1f4b3b3cf68a664d8 100644 GIT binary patch delta 1507 zcmZuxO-vg{6rP#&A3r6gp(;YOxIgL-VhuKNT0xY0Suc3;de`-?gAqw7B&G(N5?oRR z5oD;4TD6vlvjpv=L@M_dk*bjp38B|WJ@!COJyhzo9D3;~eKWXK6-8RjyqWjj_r87a z&HJ-uyZz=nbt6e7rYWP#=c>c+YT;hd%v}}3J>lL!DAL#4(-%HlKPZ`6U~0OU3tTSc zCKhs60_McRwbGS|#jXI@fx|*>b~0BAFt@InUnF$z(S2O@IJVolUGc>fS(DOAAIOc$ z1xbs_Mlz*p3fCFBB^#+x#}?p-JK56jR89}hl>(`>AuFaSf_YNXV<#r=LGUykn}DTj zFl{7Z_iBa|%cM*Y8;e z1#=$@WR0ej2FJ$E25~Aa&&$y5%BxHNrLj0YS(+#LfE-k@yeQEX3`3a313AR3We?aE*Zz|zg-em z?SA(wSg}Xl7RWp9ju*2SxYk`vS?PF2Pn_AJLHjp%6bJ2qXY+I%11eSj2X@AO>`4QY zc5hGn7-$jKuHZ&`3A^Y=2$45w7SoUIy!Wrj{1;&G6%Age!6Ka>r@<5rN;KFF5k01r zP8lYvR|ET7aY(Tg{X#pvVOM=s9J1f2+g3w_g%?=iAgLcv2KNnJT&=%O#n0&cC^)<1 zxMW#$K0;f%=+fH^SrcW+R9>P>e(tbN=&bFopDb_Du(K(2MC$+rO*a$#DMB4{?9hS= ze9w!1L|8uDQcoxnAqYg0G7;MaIT@qj=Mef92w_5HL|%3_NpF5{y68=N80_Pg|=L_yT8ZtZTZWd!^A;<@8-|1HD62IBeS4gEo}y8>c2 z6OE=-qv=4~(2{RGTubKLF7D~&!mp2Ze~x=!!2GZGrD|d&|D%{tpA?QB3>OldI9ClP z3P(K9rD}4GQ{tz6wQvkKD+ASGf3%<$o^X$0u7kRHAvstk9=553O@n%PoK{R_eMX2= z{`a{mFfI61H zpD6G69fo3N2B5`NeTXR>P?TZ+n%m!FSF2oHzj1Oi1uhM;q016XvzTJO&d$0Ohwe_Z z3ol(lgt^&H1z1+_GP>(*qDG#bS{FGLe<-jpcU3IrKF<{cQ*)(Ra6pVWUcnyr>U^n; e#fKEaFdhWjO3y+cHP+^-$R-xL!@?Xqefke@d%&9j delta 554 zcmZ1|^Il|vhLTILcdboEer~E=T2W$Nwq0h9U2bYhPHLrHI+UJhsOfEJq3e~Hr)y+j zWUOFhU}bD(WoW?V<{0dwkd~Q~s*qfinpl#Wq7a^%l9yVXl31yuU}&KL)KQvPR0-5z zWUK?#W@Nf?*;YnImdUr7!eg0dOzmNI^9!CS0%ULpXQbxjI2GlW7pHR1n9Mk13e$`p z5o{Ju?J=(=?Ci-KnZ+69C!b`F0g`Gg&x{ObOzIKP3iS*3^mEY-2=Whcbq>**X~@FB zz&K+<54*FEe{g7!E68Rb>S1;_Gn{P4>da^|xrxFH~-%r=a-`UYe z*WG`n;p9iGA&jPz&DrFITo{3#;fx6g3GxW_^ER0?Q(