From 7a4470ce8ba11d3a3dc64437623f073e9ad313bc Mon Sep 17 00:00:00 2001 From: Larry Masinter Date: Mon, 24 Oct 2022 07:10:45 -0700 Subject: [PATCH] Rework MEDLEYDIR before/after logout to substitute instead of reset (#998) * Rework MEDLEYDIR before/after logout to substitute instead of reset * debugging * working when changing home directory * fix bug and removed redundtant declarations --- sources/LOADUP-INIT.LISP | 2 +- sources/MEDLEYDIR | 206 ++++++++++++++++++++++++--------------- sources/MEDLEYDIR.LCOM | Bin 4426 -> 5616 bytes 3 files changed, 128 insertions(+), 80 deletions(-) diff --git a/sources/LOADUP-INIT.LISP b/sources/LOADUP-INIT.LISP index 00f8fdb5..31cb03b3 100644 --- a/sources/LOADUP-INIT.LISP +++ b/sources/LOADUP-INIT.LISP @@ -1,6 +1,6 @@ (* "make init files; this file is loaded as a 'greet' file by scripts/loadup-init.sh") -(LOAD? (CONCAT (UNIX-GETENV "MEDLEYDIR") "/sources/MEDLEYDIR.LCOM")) +(LOAD (CONCAT (UNIX-GETENV "MEDLEYDIR") "/sources/MEDLEYDIR.LCOM")) (CNDIR (MEDLEYDIR "tmp")) (DRIBBLE "init.dribble") diff --git a/sources/MEDLEYDIR b/sources/MEDLEYDIR index 485b555f..d2f520c2 100644 --- a/sources/MEDLEYDIR +++ b/sources/MEDLEYDIR @@ -1,10 +1,11 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "18-Jul-2022 12:12:11" {DSK}larry>medley>sources>MEDLEYDIR.;2 6649 +(FILECREATED "18-Oct-2022 18:08:24" {DSK}larry>ilisp>medley>sources>MEDLEYDIR.;4 9414 - :CHANGES-TO (FNS MEDLEY-INIT-VARS) + :CHANGES-TO (VARS MEDLEYDIRCOMS) + (FNS MEDLEY-INIT-VARS MEDLEYDIR MEDLEYSUBSTDIR) - :PREVIOUS-DATE "13-Jul-2022 15:34:07" {DSK}larry>medley>sources>MEDLEYDIR.;1) + :PREVIOUS-DATE "18-Oct-2022 08:45:52" {DSK}larry>ilisp>medley>sources>MEDLEYDIR.;3) (PRETTYCOMPRINT MEDLEYDIRCOMS) @@ -13,18 +14,16 @@ [ (* ;; "set up initialization for file paths relative to where Medley is installed. This assumes that the environment variable MEDLEYDIR is set (usually by the ./run-medley script) to the (unix path) and all of the other directories variables are set relative to that (by MEDLEY-INIT-VARS)") - (FNS MEDLEY-INIT-VARS MEDLEYDIR) - (INITVARS (MEDLEYDIR)) - (ADDVARS (BEFORESYSOUTFORMS (SETQ MEDLEYDIR)) - (BEFOREMAKESYSFORMS (SETQ MEDLEYDIR)) - (AFTERSYSOUTFORMS (MEDLEY-INIT-VARS)) - (AFTERMAKESYSFORMS (MEDLEY-INIT-VARS))) + (FNS MEDLEY-INIT-VARS MEDLEYDIR MEDLEYSUBSTDIR) + (INITVARS (MEDLEYDIR) + (\SAVE.MEDLEYDIR)) + (ADDVARS (AROUNDEXITFNS MEDLEY-INIT-VARS)) - (* ;; - "NOTE: Do not use backquote in the variable definitions. These get evaluated early in the loadup.") + (* ;; "**WARNING** The EVALed expressions get run early in the lodup.") (VARS MEDLEY-INIT-VARS) - (DECLARE%: EVAL@COMPILE DOCOPY (ADDVARS (GLOBALVARS MEDLEYDIR MEDLEY-INIT-VARS]) + (DECLARE%: EVAL@COMPILE DOCOPY (ADDVARS (GLOBALVARS MEDLEYDIR MEDLEY-INIT-VARS + \SAVE.MEDLEYDIR DIRECTORIES]) @@ -35,85 +34,126 @@ (DEFINEQ (MEDLEY-INIT-VARS - [LAMBDA (CLEAR) (* ; "Edited 18-Jul-2022 12:11 by larry") - (* ; "Edited 21-Aug-2021 18:23 by larry") + [LAMBDA (EVENT) (* ; "Edited 18-Oct-2022 18:08 by lmm") - (* ;; "MEDLEY-INIT-VARS has variables that might need to get reset. ") + (* ;; "Called on events including before & after loadup") - (if CLEAR - then (SETQ MEDLEYDIR NIL) - (SETQ XCL::*WHERE-IS-CASH-FILES* NIL) - (for X in MEDLEY-INIT-VARS do (SET (CAR X))) - elseif [OR (NOT (BOUNDP 'MEDLEYDIR)) - (AND (NULL MEDLEYDIR) - (NULL (MEDLEYDIR] - then (PRINTOUT T "WARNING: MEDLEYDIR not set correctly" - " set it and call (MEDLEY-INIT-VARS) again" T) - else [for X in MEDLEY-INIT-VARS do (SET (CAR X) - (EVAL (CADR X] + (SELECTQ EVENT + ((T BEFOREMAKESYS) + (* ;; "Clear old values") - (* ;; "WHEREIS doesn't follow conventions") + (FOR X IN MEDLEY-INIT-VARS DO (IF (CDDR X) + THEN (SETTOPVAL (CAR X) + NIL))) + (SETQ \SAVE.MEDLEYDIR NIL)) + ((BEFORESYSOUT BEFORELOGOUT BEFORESAVEVM) + (* ;; "save old values") - [LET [(NEWSYS (STRPOS "tmp/" (UNIX-GETENV "LDESRCESYSOUT"] - (if NEWSYS - then (push DIRECTORIES (MEDLEYDIR "tmp"))) - (CL:WHEN (GETD 'XCL::ADD-WHERE-IS-DATABASE) - (SETQ XCL::*WHERE-IS-CASH-FILES* NIL) - (NLSETQ (XCL::ADD-WHERE-IS-DATABASE (MEDLEYDIR (if NEWSYS - then "tmp" - else "loadups") - "WHEREIS.HASH"))))] - NIL]) + [SETQ \SAVE.MEDLEYDIR (CONS MEDLEYDIR (FOR X IN MEDLEY-INIT-VARS + COLLECT (CONS (CAR X) + (GETTOPVAL (CAR X]) + ((AFTERSYSOUT AFTERMAKESYS AFTERLOGOUT AFTERSAVEVM RESTART INIT NIL) + (* ;; + "Restore old values, subtituting medleydirs") + + (LET* [[OLDMD (AND \SAVE.MEDLEYDIR (U-CASE (POP \SAVE.MEDLEYDIR] + (NEWMD (PROGN (SETQ MEDLEYDIR) + (MEDLEYDIR))) + (SAME (AND OLDMD (STRING-EQUAL OLDMD NEWMD] + [for X TMP in MEDLEY-INIT-VARS + do (/SETTOPVAL (CAR X) + (IF [OR (EQ (CADDR X) + 'RESET) + (NOT (SETQ TMP (ASSOC (CAR X) + \SAVE.MEDLEYDIR] + THEN (EVAL (CADR X)) + ELSEIF SAME + THEN (CDR TMP) + ELSE (MEDLEYSUBSTDIR OLDMD NEWMD (CDR TMP] + + (* ;; "now some variables that are reset hard-coded") + + [LET [(NEWSYS (STRPOS "tmp/" (UNIX-GETENV "LDESRCESYSOUT"] + (if NEWSYS + then (push DIRECTORIES (MEDLEYDIR "tmp"))) + (CL:WHEN (GETD 'XCL::ADD-WHERE-IS-DATABASE) + (SETQ XCL::*WHERE-IS-CASH-FILES* NIL) + (NLSETQ (XCL::ADD-WHERE-IS-DATABASE (MEDLEYDIR (if NEWSYS + then "tmp" + else "loadups") + "WHEREIS.HASH"))))] + NIL)) + (PROGN (* ; "no changes") + NIL]) (MEDLEYDIR - [LAMBDA (DIRNAME FILENAME OUTPUT NOERROR) (* ; "Edited 5-Mar-2022 12:43 by larry") + [LAMBDA (DIRNAME FILENAME OUTPUT NOERROR) (* ; "Edited 18-Oct-2022 17:49 by lmm") + (* ; "Edited 5-Mar-2022 12:43 by larry") (* ; "Edited 2-Dec-2021 20:23 by kaplan") - (DECLARE (GLOBALVARS MEDLEYDIR)) - (DECLARE (GLOBALVARS MEDLEYDIR)) - (if (NULL DIRNAME) - then (if (OR (NOT (BOUNDP 'MEDLEYDIR)) - (NOT MEDLEYDIR)) - then (OR (SETQ MEDLEYDIR (DIRECTORYNAME (OR (UNIX-GETENV "MEDLEYDIR") - T))) - (DIRECTORYNAME T)) - elseif (STRPOS "/" MEDLEYDIR) - then (SETQ MEDLEYDIR (DIRECTORYNAME MEDLEYDIR)) - else MEDLEYDIR) - elseif (LISTP DIRNAME) - then (for X Y in DIRNAME when (SETQ Y (MEDLEYDIR X FILENAME OUTPUT NOERROR)) collect Y) - elseif FILENAME - then [if (NULL (SETQ DIRNAME (MEDLEYDIR DIRNAME NIL OUTPUT NOERROR))) - then (OR NOERROR (SHOULDNT)) - NIL - else (SETQ FILENAME (CONCAT DIRNAME FILENAME)) - (if OUTPUT - then FILENAME - else (OR (INFILEP FILENAME) - (if NOERROR - then NIL - else (ERROR "No such medley file" FILENAME] - else (OR (DIRECTORYNAME (CONCAT (MEDLEYDIR) - DIRNAME ">") - NIL OUTPUT) - (if NOERROR - then NIL - else (ERROR "No such medley directory" DIRNAME]) + (COND + ((NULL DIRNAME) + (if (OR (NOT (BOUNDP 'MEDLEYDIR)) + (NOT MEDLEYDIR)) + then (OR (SETQ MEDLEYDIR (DIRECTORYNAME (OR (UNIX-GETENV "MEDLEYDIR") + T))) + (DIRECTORYNAME T)) + elseif (STRPOS "/" MEDLEYDIR) + then (SETQ MEDLEYDIR (DIRECTORYNAME MEDLEYDIR)) + else MEDLEYDIR)) + [(EQUAL DIRNAME "login") (* ; "special case for login dir") + (DIRECTORYNAME (OR (UNIX-GETENV "LOGINDIR") + (UNIX-GETENV "HOME"] + ((LISTP DIRNAME) + (for X Y in DIRNAME when (SETQ Y (MEDLEYDIR X FILENAME OUTPUT NOERROR)) collect Y)) + [FILENAME (if (NULL (SETQ DIRNAME (MEDLEYDIR DIRNAME NIL OUTPUT NOERROR))) + then (OR NOERROR (SHOULDNT)) + NIL + else (SETQ FILENAME (CONCAT DIRNAME FILENAME)) + (if OUTPUT + then FILENAME + else (OR (INFILEP FILENAME) + (if NOERROR + then NIL + else (ERROR "No such medley file" FILENAME] + (T (OR (DIRECTORYNAME (CONCAT (MEDLEYDIR) + DIRNAME ">") + NIL OUTPUT) + (if NOERROR + then NIL + else (ERROR "No such medley directory" DIRNAME]) + +(MEDLEYSUBSTDIR + [LAMBDA (OLD NEW BODY) (* ; + "Edited 18-Oct-2022 18:06 by lmm: assumes OLD is upper case") + (IF (NULL BODY) + THEN NIL + ELSEIF (LISTP BODY) + THEN (LET [(A (MEDLEYSUBSTDIR OLD NEW (CAR BODY))) + (D (MEDLEYSUBSTDIR OLD NEW (CDR BODY] + (IF (AND (EQ A (CAR BODY)) + (EQ D (CDR BODY))) + THEN BODY + ELSE (CONS A D))) + ELSEIF (STRINGP BODY) + THEN (IF (EQ 1 (STRPOS OLD (U-CASE BODY) + 1)) + THEN [CONCAT NEW (SUBSTRING BODY (ADD1 (NCHARS OLD] + ELSE BODY) + ELSEIF [AND (LITATOM BODY) + (EQ 1 (STRPOS OLD (U-CASE (MKSTRING BODY] + THEN [PACK* NEW (SUBSTRING BODY (ADD1 (NCHARS OLD] + ELSE BODY]) ) (RPAQ? MEDLEYDIR ) -(ADDTOVAR BEFORESYSOUTFORMS (SETQ MEDLEYDIR)) +(RPAQ? \SAVE.MEDLEYDIR ) -(ADDTOVAR BEFOREMAKESYSFORMS (SETQ MEDLEYDIR)) - -(ADDTOVAR AFTERSYSOUTFORMS (MEDLEY-INIT-VARS)) - -(ADDTOVAR AFTERMAKESYSFORMS (MEDLEY-INIT-VARS)) +(ADDTOVAR AROUNDEXITFNS MEDLEY-INIT-VARS) -(* ;; -"NOTE: Do not use backquote in the variable definitions. These get evaluated early in the loadup.") +(* ;; "**WARNING** The EVALed expressions get run early in the lodup.") (RPAQQ MEDLEY-INIT-VARS @@ -136,11 +176,19 @@ NIL NIL T)) (UNICODEDIRECTORIES (MEDLEYDIR '("unicode/xerox") NIL NIL T)) - (XCL::*WHERE-IS-CASH-FILES*))) + (XCL::*WHERE-IS-CASH-FILES* NIL RESET) + (LOGINHOST/DIR (DIRECTORYNAME (OR (UNIX-GETENV "LOGINDIR") + (UNIX-GETENV "HOME"))) + RESET) + (USERGREETFILES [LIST (CONS LOGINHOST/DIR '("INIT" COM)) + (CONS LOGINHOST/DIR '("INIT"] + RESET) + (XCL::*WHERE-IS-CASH-FILES* NIL RESET))) (DECLARE%: EVAL@COMPILE DOCOPY -(ADDTOVAR GLOBALVARS MEDLEYDIR MEDLEY-INIT-VARS) +(ADDTOVAR GLOBALVARS MEDLEYDIR MEDLEY-INIT-VARS \SAVE.MEDLEYDIR DIRECTORIES) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (1518 4925 (MEDLEY-INIT-VARS 1528 . 3139) (MEDLEYDIR 3141 . 4923))))) + (FILEMAP (NIL (1521 7471 (MEDLEY-INIT-VARS 1531 . 4532) (MEDLEYDIR 4534 . 6489) (MEDLEYSUBSTDIR 6491 + . 7469))))) STOP diff --git a/sources/MEDLEYDIR.LCOM b/sources/MEDLEYDIR.LCOM index d840f012486ce743020319867ce6e9d8206444a3..fa0edc4773d81c73cbaa1b8024cd61b4526fedb0 100644 GIT binary patch literal 5616 zcmcf_%a7Y=J&$f-vsFpjWp_28^25?rPDC=X^G?waCw3;@NoZf4?6tj)wx zoGBd;2M`CifY54DZ%7Cv9+!5ek=W%h`~w`3xPrKGnF9wn!SDO*JZI>37l|C4&)@g^ ze($GQQL4*|l&s55DJd&;6>e!lZA;jcfRPnb(wnlOF>p(l1kn_#&6Vw{U`W8Fb-@_`1K$>nt?zub=Nwua{my7~ zykYlkcertAb^F%whU*-S_APg#C5cUGSCsYCoopn&f;(T%mdfb@1A8NDhJ3%*85~&d zn`Q9sqF}O_+!1uc-#}#k%4k;&lf2pkh%ohbvx)r9c~7NM40JnVZ%c9V5g zPg1A^)PV;@x@+tjxXe%>rD;g!Hkz{8mf{fjN+=Wx*p*l)sDI!D@b`WCq>l)Bf0;ab zYx`FZ$RZkGGd$d@HOpl|6q9!wl8#PKRUuGM<_mKNLCa>5eMQwthU9^I8eLQfL6DwmOoI}bEe-dIa1Wn(Foc$biyVPyiMYyw z+7#(3jUY1GLE4cN6P3;7JS`<=Dnhyqnk0}op64%cgqwxuiWi6A?>-j}1S|IWZz^4C zkMk4u>|J7*C$Dvbv0$JP3O#NFd(?7gH$&mc-+Ql<S4 z3Dz_Lycf6V-YLH3u^MC`sm;=MqHPygn z8rq6{FS#k1lClGQwg@C_4Y{RZp+YDOnWVJcMq+#>zlenApiRRBgP{O;-{&_|gc`wbyIEQIjWkTw}dT;c3Q4ylsp4g_#{3t% z8VFpeOx~Wy@lR>|o-*@zpM-51y)>sx9(gZOdQM?!RQ`-E=WtQ_?m_+ILP*vNCsG;i? zryfrHZ8>}vV=2GLeRlDLD=vt<+{*x;&jO=3;2!Pwz-zIgYh%|uc1FkO^r#bN1OG8W zuYx_mmYp;>7%C05CE*g)%wXh_)`+z#cFWz-+>-BO2VAX@3?+vu>LP6A7BC zD(=#d!KQ>p3$`S22)rK(1j5zs&z}Z<)D52`&MHDRNZkh)UUkBruhFdr&mW)3)zJA* zs?mnL7NwqelBiVa;yrrfz4MdTg=)py`7`x7&+)3!YBy6kKlzsrP9f+KUisUlR{|`T z%>o&a5;QGRc}OY3H|$lhS;rBBc#mJkh{~qL2vb#S%PU+^nt5pvYYQ1cD3T&K#gQ*f zQRFjI3>X_89J=|`&NGE#9rDyY-HAsOxfx;6tFYrY&0QQ9G$dlq9fS@L5mwiP?d|1V zVA%xRxr5VzYmMP(h{KURwmW_MTb;3uliLGl1jHv`*cta+7+HPXe`vwjfp7M#kp(R} z!GZ1KO?TYsu1` za*q(rG3*`FTdDQY(IDx2vAaLAhvPUQPcX7a1N#wWEe@SQ7w{f959pDD=cAd|+sMb1 zByxs)6H<%PP%c@d=`l1f(s2eS(N8*iv7{E$A[h*(ytdmOiLI`QBlf=-fybWb)f z8}taQZ>dD$uAnREiirfEsx8`x;n-?D8jdX2MYFkZK*T#5fYlkHDskc^>gqc$I4>qhed&M}98ZOW`lc>PCaLuXRjG-p zQ1J^$WQE?;W+dVm>Gls)E-`r3~g0Y#buwqOih@R_noe_{>U0Rk9;}jEYVLg tmw#*^s-QC&YGc`Sk(rx*YNwiE{{Ohvj9lb}1SY9)mf-&P+)5jQ{{S*Mi~Ilp delta 1905 zcmah~O>g5=6pfQIn!2S*WeoDU}+RO;Fh{+{aF&pq$G z=gYrvk3NjO-)-|8VnHiX#iX)LRp3Z&NPk|RaPWz0ZGQT0t##zCG@N$(WaY@M zHr$hy<5ss_agSF@)O#;H=?IX`rt=^v8?wGmE#5X@v7lQll&D&yd%UJ=Hoq;KRve@) zlWuE9+2U0!jCE5Zbu&^bEhWYAx*i{XogsZKyudISuNeU*?LCUTLQ}A`Wf}^lDzC^E zwU%HD1h6zo(u)?gKft2JGQ}hTo$gqB7KTaK1r4uCk;*0%AnVOeyz#aOs%BEfHcX9L zn9Yqb7a)(7=X-Go{dR34#H^m)uDuq*U$rv5?~k8VnHUq=U?%;Wo8icle`?V~KMoRK z?)zc?o$JByX3HPytbZK|>j5;n@29_=J?Gm9pHT+jn>{4{Gnf)wf(gNs7{h2^4Rbp) zbCsE=!}{MX*DBLbW6^Lxz7w6R2iTn(bFs)vn*q&@0R6lc4J``E+*tGEWHL#hN5m9- zq|$<>Qx%2Hi044m4@er-x6LiX0+JG;tZTdcI<=|34TOk*Ex}O$ifw^h9&BoEnHuC$ zfP+pz6wZT8euOlgg*BtBV=*BQR*%}~U4f)Q(hakOL?nmI!YBbT z4NF6_)d^TCt#;e3bi$1jZ+_AUhn{)ONy2o!uP6D5$SJ?-&9KXfQ)#ufrcC=TI|x0Q zQoadHS&Pbnkq*LZ{eP>0BcA-N^#Ag7_IB?lrT=4KnAHH|TO^eRYMO=#0?A#ho;_VI zQOpof3|*0J5R%D}*ChGDBqHWO)BQaNO_UV}aDuJ3HjHvn)zK^Ifx5B4T_iQ6^3qe^ zhlQN?Y-%2osL2Ydn#%#Fx8S&2slnM!1^4O=m-Du!XZydue8S-3UGz62e=iz{>^Bb6 zXppn)8Z8*+d8aTcA<*AShLz(i!p~48dDBO}80M1}(BfxJ4=}w!(UC220K3e^jyb@8 z$tAdZ7k6~su&D%~wt}{Ik6k!$D)&F`wmL50dC;l3@X%@3or8u8Rrg-KS?|6Z9fe<&>_RbVc#4eSFSCzH*Z(8>L&W>y)zq~(t7}E}Kl`-V_y7O^