From 91305cc2c9592c95952db9a64e779c9d8115d9a7 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Sat, 22 Jul 2023 18:21:52 -0700 Subject: [PATCH 01/36] Fix whitespace typo in buildLoadup.yml (#1287) --- .github/workflows/buildLoadup.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/buildLoadup.yml b/.github/workflows/buildLoadup.yml index b5d5e4cd..6a4c89dd 100644 --- a/.github/workflows/buildLoadup.yml +++ b/.github/workflows/buildLoadup.yml @@ -236,8 +236,8 @@ jobs: medley/loadups/full.sysout \ medley/loadups/apps.sysout \ medley/loadups/whereis.hash \ - medley/loadups/*.dribble \ - medley/loadups/fuller.database \ + medley/loadups/*.dribble \ + medley/loadups/fuller.database \ medley/loadups/exports.all - name: Build runtime release tar From 94269303d01b8bf7d9dd78f5d67fca7dfd78a7b8 Mon Sep 17 00:00:00 2001 From: Larry Masinter Date: Sun, 30 Jul 2023 11:35:23 -0700 Subject: [PATCH 02/36] SPY.POINTERS is always T (no 2-byte atoms) (#1293) * SPY.POINTERS is always T (no 2-byte atoms) * Set SPY to not record entries when in \BACKGROUND-YIELD or (conditionally) backgroudn process * Use \IGNORE.BACKGROUND as global variable, initially T; clean up declarations * changes used DECLARE%%: incorrectly, now fixed --- library/SPY | 101 +++-- library/SPY.LCOM | Bin 24433 -> 24128 bytes lispusers/BACKGROUND-YIELD | 31 +- lispusers/BACKGROUND-YIELD.LCOM | Bin 1165 -> 1215 bytes sources/PROC | 757 ++++++++++++++++---------------- sources/PROC.LCOM | Bin 59511 -> 59656 bytes 6 files changed, 470 insertions(+), 419 deletions(-) diff --git a/library/SPY b/library/SPY index 16b6cda5..095dd298 100644 --- a/library/SPY +++ b/library/SPY @@ -1,18 +1,15 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED " 4-Jan-2022 14:09:48" {DSK}kaplan>Local>medley3.5>my-medley>library>SPY.;2 63314 +(FILECREATED "28-Jul-2023 20:13:45" {DSK}larry>il>medley>library>SPY.;4 64149 + + :EDIT-BY "lmm" :CHANGES-TO (VARS SPYCOMS) - (FNS SPY.MAKE.TREE) + (FNS \SPY.INTERRUPT SPY.BUFFER.ENTRY SPY.ADD.ENTRY) - :PREVIOUS-DATE "29-Apr-94 14:13:52" {DSK}kaplan>Local>medley3.5>my-medley>library>SPY.;1 -) + :PREVIOUS-DATE " 4-Jan-2022 14:09:48" {DSK}larry>il>medley>library>SPY.;1) -(* ; " -Copyright (c) 1984-1985, 1987-1988, 1990-1991, 1993-1994 by Venue & Xerox Corporation. -") - (PRETTYCOMPRINT SPYCOMS) (RPAQQ SPYCOMS @@ -33,12 +30,13 @@ Copyright (c) 1984-1985, 1987-1988, 1990-1991, 1993-1994 by Venue & Xerox Corpor SPY.UPDATE.TITLE SPY.DELETE SPY.DRAWBOX SPY.BUFFER.ENTRY SPY.BUTTON SPY.END.ENTRY SPY.START SPY.INIT \SPY.INTERRUPT SPY.DUMP.BUFFER SPY.START.ENTRY SPY.ADD.ENTRY SPY.ORIGINAL SPY.OVERFLOW SPY.MERGE.CALLEES SPY.PRINT) - (COMS (INITVARS (SPY.BUTTON)) + (COMS (INITVARS (\BACKGROUND) + (SPY.BUTTON)) (VARS SPY.OPEN SPY.CLOSED)) - (VARIABLES SPY.POINTERS) (GLOBALVARS SPY.OVERFLOWED \PERIODIC.INTERRUPT SPY.TREE SPY.BUFFER.SIZE SPY.NEXT SPY.BUFFER.THRESHOLD SPY.BUFFER SPY.FREQUENCY SPY.SHOW.THRESHOLD SPY.MAXLINES SPY.FONT ) + (SPECVARS \BACKGROUND) (MACROS WITH-SPY WITH.SPY) (DECLARE%: DONTCOPY (RECORDS SPYRECORD SPYDATA)) (INITRECORDS SPYRECORD) @@ -836,8 +834,11 @@ Copyright (c) 1984-1985, 1987-1988, 1990-1991, 1993-1994 by Venue & Xerox Corpor ) (SPY.BUFFER.ENTRY -(LAMBDA (N) (* ; "Edited 9-Sep-87 18:27 by Masinter") (COND (SPY.POINTERS (AND (ILEQ (SETQ N (LLSH N 1)) SPY.BUFFER.SIZE) (\GETBASEPTR SPY.BUFFER N))) ((ILEQ N SPY.BUFFER.SIZE) (\VAG2 0 (\GETBASE SPY.BUFFER N))))) -) + [LAMBDA (N) (* ; "Edited 28-Jul-2023 08:16 by lmm") + (* ; "Edited 9-Sep-87 18:27 by Masinter") + (AND (ILEQ (SETQ N (LLSH N 1)) + SPY.BUFFER.SIZE) + (\GETBASEPTR SPY.BUFFER N]) (SPY.BUTTON (LAMBDA (POS) (* gbn " 2-Jun-85 13:12") (PROG ((REG (if POS then (CREATEREGION (fetch XCOORD of POS) (fetch YCOORD of POS) (WIDTHIFWINDOW (BITMAPWIDTH SPY.CLOSED)) (HEIGHTIFWINDOW (BITMAPHEIGHT SPY.CLOSED))) else (GETBOXREGION (WIDTHIFWINDOW (BITMAPWIDTH SPY.CLOSED)) (HEIGHTIFWINDOW (BITMAPHEIGHT SPY.CLOSED)) NIL NIL NIL "Specify region for window %"Spy Control%"")))) (BITBLT SPY.CLOSED NIL NIL (SETQ SPY.BUTTON (CREATEW REG NIL NIL T))) (WINDOWPROP SPY.BUTTON (QUOTE BUTTONEVENTFN) (FUNCTION (LAMBDA (W) (AND (LASTMOUSESTATE UP) (SPY.TOGGLE))))))) @@ -855,8 +856,34 @@ Copyright (c) 1984-1985, 1987-1988, 1990-1991, 1993-1994 by Venue & Xerox Corpor ) (\SPY.INTERRUPT -(LAMBDA NIL (* ; "Edited 9-Sep-87 18:32 by Masinter") (SETQ \PERIODIC.INTERRUPT) (* ; "turn off sampling while gathering sample") (PROG ((FRAME (fetch (FX CLINK) (\MYALINK)))) (COND ((IGEQ (if SPY.POINTERS then (LLSH SPY.NEXT 1) else SPY.NEXT) SPY.BUFFER.THRESHOLD) (COND (\INTERRUPTABLE (SPY.DUMP.BUFFER)) (T (* ; "this sample might overflow; just don't do it") (RETURN))))) (SPY.START.ENTRY) SAMPLELOOP (SPY.ADD.ENTRY (fetch (FX FRAMENAME) FRAME)) (COND ((NOT (fetch (FX INVALIDP) (SETQ FRAME (fetch (FX CLINK) FRAME)))) (GO SAMPLELOOP)) (T (SPY.END.ENTRY)))) (SETQ \PERIODIC.INTERRUPT (QUOTE \SPY.INTERRUPT))) -) + [LAMBDA NIL (* ; "Edited 28-Jul-2023 08:59 by lmm") + (* ; "Edited 9-Sep-87 18:32 by Masinter") + (DECLARE (SPECVARS \BACKGROUND)) + [PROG [(FRAME (fetch (FX CLINK) + (\MYALINK] + (IF \BACKGROUND + THEN (RETURN)) + (SETQ \PERIODIC.INTERRUPT) (* ; + "turn off sampling while gathering sample") + [COND + ((IGEQ (LLSH SPY.NEXT 1) + SPY.BUFFER.THRESHOLD) + (COND + (\INTERRUPTABLE (SPY.DUMP.BUFFER)) + (T (* ; + "this sample might overflow; just don't do it") + (RETURN] + (SPY.START.ENTRY) + SAMPLELOOP + (SPY.ADD.ENTRY (fetch (FX FRAMENAME) + FRAME)) + (COND + ([NOT (fetch (FX INVALIDP) + (SETQ FRAME (fetch (FX CLINK) + FRAME] + (GO SAMPLELOOP)) + (T (SPY.END.ENTRY] + (SETQ \PERIODIC.INTERRUPT '\SPY.INTERRUPT]) (SPY.DUMP.BUFFER [LAMBDA NIL (* ; "Edited 28-Apr-94 14:00 by sybalsky") @@ -885,8 +912,15 @@ Copyright (c) 1984-1985, 1987-1988, 1990-1991, 1993-1994 by Venue & Xerox Corpor ) (SPY.ADD.ENTRY -(LAMBDA (NAME) (* ; "Edited 9-Sep-87 18:29 by Masinter") (COND (SPY.POINTERS (\PUTBASEPTR SPY.BUFFER (LLSH SPY.NEXT 1) NAME) (COND ((IGEQ (LLSH (add SPY.NEXT 1) 1) SPY.BUFFER.SIZE) (SPY.OVERFLOW)))) (T (OR (LITATOM NAME) (SETQ NAME (QUOTE *FORM*))) (\PUTBASE SPY.BUFFER SPY.NEXT (\LOLOC NAME)) (COND ((IGEQ (add SPY.NEXT 1) SPY.BUFFER.SIZE) (SPY.OVERFLOW)))))) -) + [LAMBDA (NAME) (* ; "Edited 28-Jul-2023 08:17 by lmm") + (* ; "Edited 9-Sep-87 18:29 by Masinter") + (\PUTBASEPTR SPY.BUFFER (LLSH SPY.NEXT 1) + NAME) + (COND + ((IGEQ (LLSH (add SPY.NEXT 1) + 1) + SPY.BUFFER.SIZE) + (SPY.OVERFLOW]) (SPY.ORIGINAL [LAMBDA (TREES) (* ; "Edited 28-Apr-94 14:00 by sybalsky") @@ -951,6 +985,8 @@ Copyright (c) 1984-1985, 1987-1988, 1990-1991, 1993-1994 by Venue & Xerox Corpor else (fetch (SPYRECORD NAME) of X]) ) +(RPAQ? \BACKGROUND ) + (RPAQ? SPY.BUTTON ) (RPAQQ SPY.OPEN #*(56 59)@@@@@@@@@@@@@@@@GLOLLC@@@@@@@@@@LFLFLC@@@@@@@@@@LFLFFF@@@@@@@@@@O@LFFF@@GLOL@@@@GLLFCL@@LFLF@@@@ANOLAH@@LFLF@@@@LFL@AH@@LFLF@@@@LFL@AH@@LFLF@@@@LFL@AH@@LFLF@@@@GLL@AH@@GLLF@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@IEGOOJ@@@@J@@HJ@@BOONHH@@BA@@@@HKOOOFNJHA@D@@HHBGOKNOEB@@@B@@@EDOMMBIGNJH@I@@@HBONJMEEKE@HA@@ECONMJB@KOOJCE@@@KOOJJHEAONHDJ@@KONJD@@@@AONIE@@GOMJH@@@BMOJEB@@FOB@@D@B@@AOEM@@GODDHA@@@AENMG@@KLH@@D@@@@BONM@@GM@HB@@@@BEFKG@@JJDBH@@@@@@INM@@ODA@DDD@@@BEOG@@@KJOMKB@@@AEEK@@JJEBNLIB@@DEOG@@DKNOKONHDDABFI@@BBKFOOMD@AAEFM@@IEIABEEOD@@@JJ@@EFLJKKGEB@EFEB@@J@@BOOHNHD@AEE@@EEEDONKEJ@EEBJ@@H@IOOOOOIEB@HD@@MDDOOOOMDHIEBJ@@BAOKOOOGONNJ@A@@HBKGOOOOOJKHBE@@DHLKMGMGOONJ@I@@@EMBOOJOOOKHBD@@BKDEOOJAOONJ@B@@BKIBOOHEOOOH@D@@HNDAONJBOJDDAA@@BO@DMGDEGOEB@A@@A@DBFJ@BL@@@@D@@@E@ICMAEOJDH@A@@B@@D@ADI@@@@BD@@HDA@JDBEFHH@@A@@@@@H@IDID@@B@D@@AA@A@@@B@A@@AA@@@@@D@@B@J@@A@A@@@@@H@@@D@@@@@J@@@A@@@D@AB@@@BA@@@@@@@@E@@@@@@D@@HH@@@B@@@@@@@B@@ @@ -958,13 +994,15 @@ Copyright (c) 1984-1985, 1987-1988, 1990-1991, 1993-1994 by Venue & Xerox Corpor (RPAQQ SPY.CLOSED #*(56 59)@@@@@@@@@@@@@@@@GLOLLC@@@@CHND@@LFLFLC@@@@FAHA@@LFLFFF@@@@FAH@@@O@LFFF@@GLOKNA@@GLLFCL@@LFFAH@@@ANOLAH@@LFFAHA@@LFL@AH@@LFFAH@@@LFL@AH@@LFFAHJ@@LFL@AH@@LFFAH@@@GLL@AH@@GLFAHB@@@@@@@@@@@@@@@D@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@A@@@@@IEGOOJ@@@@J@@HJ@@BOONHH@@BA@@@@HKOOOFNJHA@D@@HHBGOKNOEB@@@B@@@EDOMMBIGNJH@I@@@HBONJMEEKE@HA@@ECONMJB@KOOBCE@@@KOOJJHEAOOHDJ@@KONJD@@@@AONIE@@GOMJH@@@BMOJEB@@FOB@@D@B@@AOEM@@GODDHA@@@AENMG@@KLH@@D@@@@BONM@@GM@HB@@@@BEFKG@@JJDBH@@@@@@INM@@ODA@DDD@@@BEOG@@@KJOMKB@@@AEEK@@JJEBNLIB@@DEOG@@DKNOKONHDDABFI@@BBKFOOOD@AAEFM@@IEIABEGND@@@JJ@@EFLLDGGGB@EFEB@@J@@@@@IOHD@AEE@@EEAAEA@FI@EEBJ@@H@HDL@EAME@@HD@@MDEB@NHDJHDABJ@@BAB@@ABICF@J@A@@HB@KDDI@BLI@BE@@DID@A@@JHKDJ@I@@@D@DDDE@EBKEBD@@BAD@@@@A@OED@B@@BHAAAAA@CGNH@D@@H@D@@@@@MOE@AA@@BK@DDDDDGOJJ@A@@B@DA@B@CODFBBD@@EE@HBIAENK@@@A@@BLHBDDDON@@@BD@@KGDHJJIGJHB@@A@@BOBBECGOLB@B@D@@AAMLMKGOH@@@AA@@@GGONNON@H@A@A@@@IKKKKOLJ@@@@J@@@DFOKOO@D@@@BA@@@AEGMMD@A@@@@D@@HHBJMBLA@@@@@B@@ ) - -(DEFGLOBALVAR SPY.POINTERS T) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS SPY.OVERFLOWED \PERIODIC.INTERRUPT SPY.TREE SPY.BUFFER.SIZE SPY.NEXT SPY.BUFFER.THRESHOLD SPY.BUFFER SPY.FREQUENCY SPY.SHOW.THRESHOLD SPY.MAXLINES SPY.FONT) ) +(DECLARE%: DOEVAL@COMPILE DONTCOPY + +(SPECVARS \BACKGROUND) +) (DECLARE%: EVAL@COMPILE (PUTPROPS WITH-SPY MACRO [(FORM) @@ -1014,19 +1052,18 @@ Copyright (c) 1984-1985, 1987-1988, 1990-1991, 1993-1994 by Venue & Xerox Corpor ) (MOVD? 'NILL 'MODERNWINDOW) -(PUTPROPS SPY COPYRIGHT ("Venue & Xerox Corporation" 1984 1985 1987 1988 1990 1991 1993 1994)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (4753 7360 (SPYOBJ 4763 . 5052) (SPYOBJ.BUTTON 5054 . 5164) (SPYOBJ.SAVE 5166 . 5285) ( -SPYOBJ.COPY 5287 . 5349) (SPYOBJ.GET 5351 . 5480) (SPYOBJ.IMAGEBOX 5482 . 6006) (SPYOBJ.DISPLAY 6008 - . 6307) (SPYOBJ.LABEL 6309 . 6445) (SPYOBJ.HEIGHT 6447 . 6660) (SPYOBJ.COPYIN 6662 . 6705) ( -SPY.COPYBUTTON 6707 . 6799) (SPY.MERGEINFO 6801 . 7358)) (18202 59509 (SPY.FIND.TREE 18212 . 18621) ( -SPY.TOGGLE 18623 . 18813) (SPY.TREE 18815 . 19927) (SPY.LEGEND 19929 . 20279) (SPY.GRAPH.EDITOR 20281 - . 29846) (SPY.END 29848 . 30090) (SPY.MAKEGRAPHNODES 30092 . 32192) (SPY.MAX 32194 . 33077) ( -SPY.MERGE 33079 . 34510) (SPY.MERGE1 34512 . 40995) (SPY.MERGETREE 40997 . 43927) (SPY.NEXT.TREE 43929 - . 44603) (SPY.SUM 44605 . 45294) (SPY.TITLE 45296 . 45513) (SPY.MAKE.TREE 45515 . 47540) ( -SPY.UPDATE.TITLE 47542 . 50118) (SPY.DELETE 50120 . 50655) (SPY.DRAWBOX 50657 . 51182) ( -SPY.BUFFER.ENTRY 51184 . 51422) (SPY.BUTTON 51424 . 51993) (SPY.END.ENTRY 51995 . 52075) (SPY.START -52077 . 52361) (SPY.INIT 52363 . 52598) (\SPY.INTERRUPT 52600 . 53236) (SPY.DUMP.BUFFER 53238 . 54698) - (SPY.START.ENTRY 54700 . 54828) (SPY.ADD.ENTRY 54830 . 55212) (SPY.ORIGINAL 55214 . 56041) ( -SPY.OVERFLOW 56043 . 56144) (SPY.MERGE.CALLEES 56146 . 59182) (SPY.PRINT 59184 . 59507))))) + (FILEMAP (NIL (4707 7314 (SPYOBJ 4717 . 5006) (SPYOBJ.BUTTON 5008 . 5118) (SPYOBJ.SAVE 5120 . 5239) ( +SPYOBJ.COPY 5241 . 5303) (SPYOBJ.GET 5305 . 5434) (SPYOBJ.IMAGEBOX 5436 . 5960) (SPYOBJ.DISPLAY 5962 + . 6261) (SPYOBJ.LABEL 6263 . 6399) (SPYOBJ.HEIGHT 6401 . 6614) (SPYOBJ.COPYIN 6616 . 6659) ( +SPY.COPYBUTTON 6661 . 6753) (SPY.MERGEINFO 6755 . 7312)) (18156 60387 (SPY.FIND.TREE 18166 . 18575) ( +SPY.TOGGLE 18577 . 18767) (SPY.TREE 18769 . 19881) (SPY.LEGEND 19883 . 20233) (SPY.GRAPH.EDITOR 20235 + . 29800) (SPY.END 29802 . 30044) (SPY.MAKEGRAPHNODES 30046 . 32146) (SPY.MAX 32148 . 33031) ( +SPY.MERGE 33033 . 34464) (SPY.MERGE1 34466 . 40949) (SPY.MERGETREE 40951 . 43881) (SPY.NEXT.TREE 43883 + . 44557) (SPY.SUM 44559 . 45248) (SPY.TITLE 45250 . 45467) (SPY.MAKE.TREE 45469 . 47494) ( +SPY.UPDATE.TITLE 47496 . 50072) (SPY.DELETE 50074 . 50609) (SPY.DRAWBOX 50611 . 51136) ( +SPY.BUFFER.ENTRY 51138 . 51481) (SPY.BUTTON 51483 . 52052) (SPY.END.ENTRY 52054 . 52134) (SPY.START +52136 . 52420) (SPY.INIT 52422 . 52657) (\SPY.INTERRUPT 52659 . 54064) (SPY.DUMP.BUFFER 54066 . 55526) + (SPY.START.ENTRY 55528 . 55656) (SPY.ADD.ENTRY 55658 . 56090) (SPY.ORIGINAL 56092 . 56919) ( +SPY.OVERFLOW 56921 . 57022) (SPY.MERGE.CALLEES 57024 . 60060) (SPY.PRINT 60062 . 60385))))) STOP diff --git a/library/SPY.LCOM b/library/SPY.LCOM index 7bea1f1fb19b75cd1fdda66803cb7e2bc7db7085..cff2cb334d1b4a3d0c0e856cf4db87c74f1367bc 100644 GIT binary patch delta 991 zcma)4J#W)c6tzPniYuygpcO)uF0PR5A;ET>keD`V8oy8{#tzTVDXA(TZ7dSWX;JtP z6+-1Fpn7Cxuat@bAz)?WC!{MAomjD7LUAhww)^h8@0@ebc_*LQub-$O}U3>1Q z6-mj0B586~Q*%5B{Pu4DNzeB>u)701ywaWe>!t2)-z)j;!C*fIj2c74_gE86mz@V-g)djy`jN=^la6wRuRr1i{KV)MjgW< z2xGTFAUc(GeRA2`3Gu70X+oSNlgaSVX+I0q{);@vi=0q3OjNTo9U zA$QLNK>|w@fw{^s47)PgVjhJBbJG2JG)=3O@86gdV;LqV$OY=s*hPpRGLEr$x_-MfuRs3EzmW`pD9xk9#ZKHHo^$0zZVHH@4!+tfkL)4ql76HujK zcHv5r?%{RGUI+V%=_R3=C{Zu47)lD&iD$z%F6XB|9uZP6hGw_iWpu~{nv3|-D zE7h2$v30HTyQzH4IuV5NuO-BeG7`9E89QV42C`^TF>MFwVvwt8v#~EuMR38JTJt&` ztJ)Tc0GtM@P>>i+Fsj*?Im0ptMim?D4g^c}4VDXjJXjoltiQYzk8>!xhZl#xHs=$` H=ui9x6W$Jz delta 1271 zcmb7D&u`R56!vaGP)jQXsiG)ts)rGkO|{ng*Z#1=W}WqzI5-~H9xq9hLzl#AQj*=( zCaplI&4qgl7Mzd}y>Q@w#9phmM-G5M?X5lVCy+k?#CS|#qxR7H@aB!@&HKLZ&3nK9 zQrP>o@Y98~P&{4}h1LGnU}G~`gMJSL;IG=z`R}LW?PR#!ywn|Rc6&{)zuMhwZY67* z$rVjDnp;=O*ROxHt4cIpE6;a(WwoNJpjJ$+Vj6V;E)J7-S^4DhV7PtSgeX{&7p(J0 zCLuzwLBX8Z^I$xKEXx9{b$2M4e`Hq7iY`dJ=(rwghsYuyARBHJr{F(OJ)%NY(-b|u zQxKL9@Q}a^Lez0_9F=X0AQ03>*%}PX4ILESR5a62|4&gyGsT~clP*-i2Z!1WEWoZ$ zP#8(Tsa%081P>?Em$ef!t*&c=>|LeNx}DBsDE zyNp0p($4f}hozDzl}2j)yF*`$Ls4uERv2s;2gI875JkUPEOOlX#~hbFo)${C80?E{ zY)M~FCkr}5LB1^`pM*=GRB{%Uz5l0{6N!iwlD9$CD!XOJ3xS*yq?{DJnm#ytysay+ zlJR=S1Po(b3YiO0G>1JKj2y~Giv)Cy#W3GU<*BLBWb^OBr~g*a)x4lm`g-Qn?!)T( zL~BiJy}b7|Ei8AD`;BR1=2`2HCmi!G{Yfjp<^HR^(bJ>ZZh{jVxe(kzq2u8TR7Jfu z&XtwDo)>^otL0LdU#0#o6`F4jJf5M#83%_8XFxlkJ%7f=d#QAUvRbhe%9uaSg1vVZ zg+uq8>sua}cAXak`rM17+pTLyt?Y0%CItJE1Y*YuBbF5h$Ok?4|wKqrc{V z{BZOGxp(9f8#(7ZJZpKB56iI+24p0xOcqzgASOYG14aefI9Q_k<_L&FC+U5gz~``- t4EvX%-5(D6!|u*TzbAmwsM9HJ)Q!y4GE=9fQOS&w87(uqB=M9F{{|n?S7rbJ diff --git a/lispusers/BACKGROUND-YIELD b/lispusers/BACKGROUND-YIELD index c028b822..00d4ded4 100644 --- a/lispusers/BACKGROUND-YIELD +++ b/lispusers/BACKGROUND-YIELD @@ -1,21 +1,23 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "14-Nov-2021 22:05:58" {DSK}larry>medley>lispusers>BACKGROUND-YIELD.;2 1597 +(FILECREATED "28-Jul-2023 09:49:24" {DSK}larry>il>medley>lispusers>BACKGROUND-YIELD.;2 1770 - changes to%: (VARS BACKGROUND-YIELD) + :EDIT-BY "lmm" - previous date%: "20-Sep-2021 11:37:28" {DSK}larry>medley>lispusers>BACKGROUND-YIELD.;1) + :CHANGES-TO (FNS BACKGROUND-YIELD) + + :PREVIOUS-DATE "14-Nov-2021 22:05:58" {DSK}larry>il>medley>lispusers>BACKGROUND-YIELD.;1 +) (PRETTYCOMPRINT BACKGROUND-YIELDCOMS) (RPAQQ BACKGROUND-YIELDCOMS ( - (* ;; - " Add a call to BACKGROUNDFNS to yield when not otherwise busy") + (* ;; " Add a call to BACKGROUNDFNS to yield when not otherwise busy") - (FNS BACKGROUND-YIELD INIT-YIELD) - (DECLARE%: DONTEVAL@LOAD DOCOPY (P (INIT-YIELD T))) - (VARS BACKGROUND-YIELD))) + (FNS BACKGROUND-YIELD INIT-YIELD) + (DECLARE%: DONTEVAL@LOAD DOCOPY (P (INIT-YIELD T))) + (VARS BACKGROUND-YIELD))) @@ -24,10 +26,13 @@ (DEFINEQ (BACKGROUND-YIELD - [LAMBDA NIL (* ; "Edited 20-Sep-2021 11:37 by larry") - (IF (FIXP BACKGROUND-YIELD) - THEN (SUBRCALL YIELD BACKGROUND-YIELD) - (SUBRCALL CAUSE-INTERRUPT]) + [LAMBDA NIL (* ; "Edited 28-Jul-2023 09:11 by lmm") + (* ; "Edited 20-Sep-2021 11:37 by larry") + (LET ((\BACKGROUND T)) + (DECLARE (SPECVARS \BACKGROUND)) + (IF (FIXP BACKGROUND-YIELD) + THEN (SUBRCALL YIELD BACKGROUND-YIELD) + (SUBRCALL CAUSE-INTERRUPT]) (INIT-YIELD [LAMBDA (ONP) (* ; "Edited 19-Sep-2021 13:32 by larry") @@ -46,5 +51,5 @@ (RPAQQ BACKGROUND-YIELD 833333) (DECLARE%: DONTCOPY - (FILEMAP (NIL (833 1482 (BACKGROUND-YIELD 843 . 1098) (INIT-YIELD 1100 . 1480))))) + (FILEMAP (NIL (806 1655 (BACKGROUND-YIELD 816 . 1271) (INIT-YIELD 1273 . 1653))))) STOP diff --git a/lispusers/BACKGROUND-YIELD.LCOM b/lispusers/BACKGROUND-YIELD.LCOM index d73bd8230d7f33c6c1f17dcbb1725f0fcf49c8a2..3e46012bd7930d3cffd5490382a1dd3abd3e84e5 100644 GIT binary patch delta 367 zcmeC>+|M~7T*Syi*Q+!~*T}%gSi!*3%EZ#j$Yf%+3R7mz67t+*7N9G$)0gZxANTy!HnU42{>GV>Ia+(LbP z6p)S4)6-K@NJ%UK>cwWfsgfp_hMT94tC4e%t7C|(3s4mncPc4Vy99gJ+GOPCrrPBs z78O<6L7eSjq+n=nZlJ(rX0T*S~s*Dt?J*T}%gP{GK^%D~jh)M8?`%EU?PA`0dRDFaI@V^b>w%k%f{1SG7y9cdboEer~E=PGV6}<;009la-hxncWl& bCU0aE=3(GtU}RtjFjm;Y8L+vK$&U#DnL$c& diff --git a/sources/PROC b/sources/PROC index af933e05..e4be1032 100644 --- a/sources/PROC +++ b/sources/PROC @@ -1,18 +1,14 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "17-Jun-99 21:58:52" {DSK}medley3.5>sources>PROC.;2 173526 - changes to%: (RECORDS MONITORLOCK) +(FILECREATED "29-Jul-2023 11:47:41" {DSK}larry>il>medley>sources>PROC.;7 176222 - previous date%: "31-Jan-98 18:03:02" {DSK}medley3.5>sources>PROC.;1) + :EDIT-BY "lmm" + :CHANGES-TO (VARS PROCCOMS) + (FNS \BACKGROUND.PROCESS) + + :PREVIOUS-DATE "28-Jul-2023 21:06:03" {DSK}larry>il>medley>sources>PROC.;6) -(* ; " -Copyright (c) 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1990, 1991, 1992, 1993, 1998, 1999 by Venue & Xerox Corporation. All rights reserved. -The following program was created in 1982 but has not been published -within the meaning of the copyright law, is furnished under license, -and may not be used, copied and/or disclosed except in accordance -with the terms of said license. -") (PRETTYCOMPRINT PROCCOMS) @@ -22,7 +18,7 @@ with the terms of said license. (CONSTANTS \PSTAT.WAITING \PSTAT.RUNNING \PSTAT.DELETED)) (INITRECORDS PROCESS PROCESSQUEUE) (SYSRECORDS PROCESS PROCESSQUEUE)) - [COMS (* ; "User entries") + [COMS (* ; "User entries") (FNS PROCESSWORLD ADD.PROCESS DEL.PROCESS PROCESS.RETURN FIND.PROCESS MAP.PROCESSES PROCESSP RELPROCESSP RESTART.PROCESS WAKE.PROCESS SUSPEND.PROCESS PROCESS.RESULT PROCESS-STATUS PROCESS.FINISHEDP) @@ -37,27 +33,27 @@ with the terms of said license. (GLOBALVARS TTY.PROCESS.DEFAULT \TTY.PROCESS.EVENT \PROCESS.NAME.TABLE) (FNS PROCESSPROP PROCESS.NAME PROCESS.WINDOW) (PROP ARGNAMES PROCESSPROP ADD.PROCESS) - (COMS (* ; "Temporary") + (COMS (* ; "Temporary") (P (MOVD? 'PROCESS.RETURN 'KILL.ME NIL T] (COMS (FNS DISMISS BLOCK WAITFORINPUT \WAITFORSYSBUFP) - (* ; "Used to be a GLOBALRESOURCES") + (* ; "Used to be a GLOBALRESOURCES") (DECLARE%: DONTCOPY (RESOURCES \DISMISSTIMER)) (INITRESOURCES \DISMISSTIMER)) (COMS (FNS EVAL.AS.PROCESS EVAL.IN.TTY.PROCESS) - (* ;; "The PROCESS.WAIT macro is an augmentation to BLOCK, waiting for a condition to come true, or a timeout, or a wakeup") + (* ;; "The PROCESS.WAIT macro is an augmentation to BLOCK, waiting for a condition to come true, or a timeout, or a wakeup") (MACROS PROCESS.WAIT) (FNS PROCESS.READ PROCESS.EVALV PROCESS.EVAL \PROCESS.EVAL1 PROCESS.APPLY \PROCESS.APPLY1) - (* ; - "Standard values for WAKEREASON -- PSTAT.TIMEDOUT is the only public one") + (* ; + "Standard values for WAKEREASON -- PSTAT.TIMEDOUT is the only public one") (VARS (PSTAT.WAKEUP "default WakeUp") (PSTAT.TIMEDOUT "{time interval expired}") (PSTAT.QUIT "Quit") (\PSTAT.NORESULT "{no result yet}")) (GLOBALVARS PSTAT.WAKEUP PSTAT.TIMEDOUT PSTAT.QUIT \PSTAT.NORESULT)) - (COMS (* ; "Event stuff") + (COMS (* ; "Event stuff") (DECLARE%: DONTCOPY (RECORDS EVENT)) (INITRECORDS EVENT) (SYSRECORDS EVENT) @@ -66,7 +62,7 @@ with the terms of said license. (MACROS AWAIT.CONDITION) (INITVARS (\PROCESS.AFTEREXIT.EVENT)) (GLOBALVARS \PROCESS.AFTEREXIT.EVENT)) - (COMS (* ; "Monitor stuff") + (COMS (* ; "Monitor stuff") (DECLARE%: DONTCOPY (RECORDS MONITORLOCK) (MACROS .RELEASE.LOCK.)) (INITRECORDS MONITORLOCK) @@ -74,7 +70,11 @@ with the terms of said license. (FNS OBTAIN.MONITORLOCK CREATE.MONITORLOCK RELEASE.MONITORLOCK SI::MONITOR-UNWIND MONITOR.AWAIT.EVENT \MONITORLOCK.DEFPRINT) (MACROS WITH.MONITOR WITH.FAST.MONITOR)) - (COMS (FNS \MAKE.PROCESS0 \MAKE.PROCESS1 \PROCESS.MOVEFRAME \RELEASE.PROCESS \UNWIND.PROCESS + (COMS (EXPORT (SPECVARS \BACKGROUND) + (GLOBALVARS \IGNORE.BACKGROUND)) + (INITVARS (\BACKGROUND NIL) + (\IGNORE.BACKGROUND T)) + (FNS \MAKE.PROCESS0 \MAKE.PROCESS1 \PROCESS.MOVEFRAME \RELEASE.PROCESS \UNWIND.PROCESS \MAYBEBLOCK \BACKGROUND.PROCESS \MOUSE.PROCESS \TIMER.PROCESS \PROCESS.RELEASE.LOCKS \SET.PROCESS.NAME \PROCESS.DEFPRINT) (FNS \START.PROCESSES \PROCESS.GO.TO.SLEEP \PROC.RESUME \RUN.PROCESS \SUSPEND.PROCESS @@ -82,9 +82,9 @@ with the terms of said license. (DECLARE%: DONTCOPY (MACROS \RESCHEDULE))) (COMS (FNS \PROCESS.INIT \PROCESS.EVENTFN \PROCESS.BEFORE.LOGOUT \PROCESS.AFTER.EXIT \PROCESS.RESET.TIMERS \PROC.AFTER.WINDOWWORLD \TURN.ON.PROCESSES) - (* ; "Redefinitions") + (* ; "Redefinitions") (FNS \PROC.CODEFORTFRAME \PROC.REPEATEDLYEVALQT)) - (COMS (* ; "switching stacks") + (COMS (* ; "switching stacks") (FNS BREAK.PROCESS \SELECTPROCESS \PROCESS.MAKEFRAME \PROCESS.MAKEFRAME0)) (INITVARS (%#MYHANDLE#) (%#SCHEDULER#) @@ -117,7 +117,7 @@ with the terms of said license. PROC.DEFAULT.PRIORITY \PROC.RUN.NEXT.FLG \SYSTEMTIMERVARS) (MACROS ALIVEPROCP DEADPROCP \COERCE.TO.PROCESS) (LOCALVARS . T))) - (COMS (* ; "Debugging") + (COMS (* ; "Debugging") (FNS \CHECK.PQUEUE) (FNS PPROC PPROCWINDOW PPROCREPAINTFN PPROCRESHAPEFN PPROCEXTENT PPROC1 PROCESS.STATUS.WINDOW \PSW.SELECTED \PSWOP.SELECTED PROCESS.BACKTRACE @@ -139,8 +139,8 @@ with the terms of said license. (P (DEFPRINT 'PROCESS (FUNCTION \PROCESS.DEFPRINT)) (DEFPRINT 'EVENT (FUNCTION \EVENT.DEFPRINT)) (DEFPRINT 'MONITORLOCK (FUNCTION \MONITORLOCK.DEFPRINT)) - (* ; - "\process.init must come last, since it does a HARDRESET") + (* ; + "\process.init must come last, since it does a HARDRESET") (\PROCESS.INIT))) (DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA) (NLAML) @@ -149,80 +149,80 @@ with the terms of said license. (DECLARE%: DONTCOPY (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE -(DATATYPE PROCESS ((PROCFX0 WORD) (* ; - "= \STACKHI to make this look like a STACKP") - (PROCFX WORD) (* ; - "Stack pointer to this context when it is asleep") - (PROCSTATUS BYTE) (* ; "Running or waiting") - (PROCNAME POINTER) (* ; - "Name for convenience in type-in reference") - (PROCPRIORITY BYTE) (* ; - "Priority level, 0-4. Not currently used.") - (PROCQUEUE POINTER) (* ; - "Queue of processes at the same priority") - (NIL BYTE) - (NEXTPROCHANDLE POINTER) (* ; "Pointer to next one") - (PROCTIMERSET FLAG) (* ; - "True if PROCWAKEUPTIMER has an interesting value") - (PROCBEINGDELETED FLAG) (* ; - "True if proc was deleted, but hasn't been removed from \PROCESSES yet") - (PROCDELETED FLAG) - (PROCSYSTEMP FLAG) - (PROCNEVERSTARTED FLAG) - (NIL FLAG) - (NIL FLAG) - (NIL FLAG) - (PROCWAKEUPTIMER POINTER) (* ; - "a largep recording the time this proc last went to sleep") - (PROCTIMERLINK POINTER) (* ; "For linking proc in timer queue") - (PROCTIMERBOX POINTER) (* ; - "Scratch box to use for PROCWAKEUPTIMER when user does not give one explicitly") - (WAKEREASON POINTER) (* ; - "Reason process is being run. From WAKE.PROCESS or timer or event wakeup; T from simple BLOCK") - (PROCEVENTORLOCK POINTER) (* ; - "EVENT or MONITOR lock that this proc is waiting for") - (PROCFORM POINTER) (* ; "Form to EVAL to start it going") - (RESTARTABLE POINTER) (* ; - "T = autorestart on error, HARDRESET = restart only on hard reset, NIL = never restart") - (PROCWINDOW POINTER) (* ; - "Window this process lives in, if any") - (PROCFINISHED POINTER) (* ; - "True if proc finished. Value is indication of how: NORMAL, DELETED, ERROR") - (PROCRESULT POINTER) (* ; - "Value it returned if it finished normally") - (PROCFINISHEVENT POINTER) (* ; - "Optional EVENT to be notified when proc finishes") - (PROCMAILBOX POINTER) (* ; "Message queue") - (PROCDRIBBLEOUTPUT POINTER) (* ; - "Binding for *DRIBBLE-OUTPUT* in this process") - (PROCINFOHOOK POINTER) (* ; - "Optional user fn that displays info about process") - (PROCTYPEAHEAD POINTER) (* ; - "Buffer of typeahead destined for this proc") - (PROCREMOTEINFO POINTER) (* ; "For Enterprise") - (PROCUSERDATA POINTER) (* ; "For PROCESSPROP") - (PROCEVENTLINK POINTER) (* ; "Used to maintain EVENT queues") - (PROCAFTEREXIT POINTER) (* ; - "What to do with this process when coming back from a LOGOUT, etc") - (PROCBEFOREEXIT POINTER) (* ; "If DON'T, can't logout") - (PROCOWNEDLOCKS POINTER) (* ; - "Pointer to first lock I currently own") - (PROCEVAPPLYRESULT POINTER) (* ; - "For PROCESS.EVAL and PROCESS.APPLY when WAITFORRESULT is true") - (PROCTTYENTRYFN POINTER) (* ; - "Is applied to a process when it becomes the tty process") - (PROCTTYEXITFN POINTER) (* ; - "Is applied to a process when it ceases to be the tty process") - (PROCHARDRESETINFO POINTER) (* ; - "HARDRESET stores info about unwind-protect cleanups here") - (PROCRESTARTFORM POINTER) (* ; - "use this instead of PROCFORM when restarting") - (PROCOLDTTYPROC POINTER) (* ; - "Process that had the tty when we got it") - (NIL POINTER) (* ; "For expansion") - ) - PROCTIMERBOX _ (CREATECELL \FIXP) - PROCFX0 _ \STACKHI) +(DATATYPE PROCESS ((PROCFX0 WORD) (* ; + "= \STACKHI to make this look like a STACKP") + (PROCFX WORD) (* ; + "Stack pointer to this context when it is asleep") + (PROCSTATUS BYTE) (* ; "Running or waiting") + (PROCNAME POINTER) (* ; + "Name for convenience in type-in reference") + (PROCPRIORITY BYTE) (* ; + "Priority level, 0-4. Not currently used.") + (PROCQUEUE POINTER) (* ; + "Queue of processes at the same priority") + (NIL BYTE) + (NEXTPROCHANDLE POINTER) (* ; "Pointer to next one") + (PROCTIMERSET FLAG) (* ; + "True if PROCWAKEUPTIMER has an interesting value") + (PROCBEINGDELETED FLAG) (* ; + "True if proc was deleted, but hasn't been removed from \PROCESSES yet") + (PROCDELETED FLAG) + (PROCSYSTEMP FLAG) + (PROCNEVERSTARTED FLAG) + (NIL FLAG) + (NIL FLAG) + (NIL FLAG) + (PROCWAKEUPTIMER POINTER) (* ; + "a largep recording the time this proc last went to sleep") + (PROCTIMERLINK POINTER) (* ; "For linking proc in timer queue") + (PROCTIMERBOX POINTER) (* ; + "Scratch box to use for PROCWAKEUPTIMER when user does not give one explicitly") + (WAKEREASON POINTER) (* ; + "Reason process is being run. From WAKE.PROCESS or timer or event wakeup; T from simple BLOCK") + (PROCEVENTORLOCK POINTER) (* ; + "EVENT or MONITOR lock that this proc is waiting for") + (PROCFORM POINTER) (* ; "Form to EVAL to start it going") + (RESTARTABLE POINTER) (* ; + "T = autorestart on error, HARDRESET = restart only on hard reset, NIL = never restart") + (PROCWINDOW POINTER) (* ; + "Window this process lives in, if any") + (PROCFINISHED POINTER) (* ; + "True if proc finished. Value is indication of how: NORMAL, DELETED, ERROR") + (PROCRESULT POINTER) (* ; + "Value it returned if it finished normally") + (PROCFINISHEVENT POINTER) (* ; + "Optional EVENT to be notified when proc finishes") + (PROCMAILBOX POINTER) (* ; "Message queue") + (PROCDRIBBLEOUTPUT POINTER) (* ; + "Binding for *DRIBBLE-OUTPUT* in this process") + (PROCINFOHOOK POINTER) (* ; + "Optional user fn that displays info about process") + (PROCTYPEAHEAD POINTER) (* ; + "Buffer of typeahead destined for this proc") + (PROCREMOTEINFO POINTER) (* ; "For Enterprise") + (PROCUSERDATA POINTER) (* ; "For PROCESSPROP") + (PROCEVENTLINK POINTER) (* ; "Used to maintain EVENT queues") + (PROCAFTEREXIT POINTER) (* ; + "What to do with this process when coming back from a LOGOUT, etc") + (PROCBEFOREEXIT POINTER) (* ; "If DON'T, can't logout") + (PROCOWNEDLOCKS POINTER) (* ; + "Pointer to first lock I currently own") + (PROCEVAPPLYRESULT POINTER) (* ; + "For PROCESS.EVAL and PROCESS.APPLY when WAITFORRESULT is true") + (PROCTTYENTRYFN POINTER) (* ; + "Is applied to a process when it becomes the tty process") + (PROCTTYEXITFN POINTER) (* ; + "Is applied to a process when it ceases to be the tty process") + (PROCHARDRESETINFO POINTER) (* ; + "HARDRESET stores info about unwind-protect cleanups here") + (PROCRESTARTFORM POINTER) (* ; + "use this instead of PROCFORM when restarting") + (PROCOLDTTYPROC POINTER) (* ; + "Process that had the tty when we got it") + (NIL POINTER) (* ; "For expansion") + ) + PROCTIMERBOX _ (CREATECELL \FIXP) + PROCFX0 _ \STACKHI) ) (/DECLAREDATATYPE 'PROCESS @@ -281,15 +281,15 @@ with the terms of said license. (DECLARE%: EVAL@COMPILE -(DATATYPE PROCESSQUEUE ((PQPRIORITY BYTE) (* ; - "Priority for the processes in thie queue.") - (PQHIGHER POINTER) (* ; "Next higher-prioirty queue") - (PQLOWER POINTER) (* ; "Next lower") - (PQNEXT POINTER) (* ; - "The process currently running or runnable at this priority") - (PQLAST POINTER) (* ; - "The proc previous to it. PQNEXT might be redundant") - )) +(DATATYPE PROCESSQUEUE ((PQPRIORITY BYTE) (* ; + "Priority for the processes in thie queue.") + (PQHIGHER POINTER) (* ; "Next higher-prioirty queue") + (PQLOWER POINTER) (* ; "Next lower") + (PQNEXT POINTER) (* ; + "The process currently running or runnable at this priority") + (PQLAST POINTER) (* ; + "The proc previous to it. PQNEXT might be redundant") + )) ) (/DECLAREDATATYPE 'PROCESSQUEUE '(BYTE POINTER POINTER POINTER POINTER) @@ -374,55 +374,55 @@ with the terms of said license. (ADDTOVAR SYSTEMRECLST (DATATYPE PROCESS ((PROCFX0 WORD) - (PROCFX WORD) - (PROCSTATUS BYTE) - (PROCNAME POINTER) - (PROCPRIORITY BYTE) - (PROCQUEUE POINTER) - (NIL BYTE) - (NEXTPROCHANDLE POINTER) - (PROCTIMERSET FLAG) - (PROCBEINGDELETED FLAG) - (PROCDELETED FLAG) - (PROCSYSTEMP FLAG) - (PROCNEVERSTARTED FLAG) - (NIL FLAG) - (NIL FLAG) - (NIL FLAG) - (PROCWAKEUPTIMER POINTER) - (PROCTIMERLINK POINTER) - (PROCTIMERBOX POINTER) - (WAKEREASON POINTER) - (PROCEVENTORLOCK POINTER) - (PROCFORM POINTER) - (RESTARTABLE POINTER) - (PROCWINDOW POINTER) - (PROCFINISHED POINTER) - (PROCRESULT POINTER) - (PROCFINISHEVENT POINTER) - (PROCMAILBOX POINTER) - (PROCDRIBBLEOUTPUT POINTER) - (PROCINFOHOOK POINTER) - (PROCTYPEAHEAD POINTER) - (PROCREMOTEINFO POINTER) - (PROCUSERDATA POINTER) - (PROCEVENTLINK POINTER) - (PROCAFTEREXIT POINTER) - (PROCBEFOREEXIT POINTER) - (PROCOWNEDLOCKS POINTER) - (PROCEVAPPLYRESULT POINTER) - (PROCTTYENTRYFN POINTER) - (PROCTTYEXITFN POINTER) - (PROCHARDRESETINFO POINTER) - (PROCRESTARTFORM POINTER) - (PROCOLDTTYPROC POINTER) - (NIL POINTER))) + (PROCFX WORD) + (PROCSTATUS BYTE) + (PROCNAME POINTER) + (PROCPRIORITY BYTE) + (PROCQUEUE POINTER) + (NIL BYTE) + (NEXTPROCHANDLE POINTER) + (PROCTIMERSET FLAG) + (PROCBEINGDELETED FLAG) + (PROCDELETED FLAG) + (PROCSYSTEMP FLAG) + (PROCNEVERSTARTED FLAG) + (NIL FLAG) + (NIL FLAG) + (NIL FLAG) + (PROCWAKEUPTIMER POINTER) + (PROCTIMERLINK POINTER) + (PROCTIMERBOX POINTER) + (WAKEREASON POINTER) + (PROCEVENTORLOCK POINTER) + (PROCFORM POINTER) + (RESTARTABLE POINTER) + (PROCWINDOW POINTER) + (PROCFINISHED POINTER) + (PROCRESULT POINTER) + (PROCFINISHEVENT POINTER) + (PROCMAILBOX POINTER) + (PROCDRIBBLEOUTPUT POINTER) + (PROCINFOHOOK POINTER) + (PROCTYPEAHEAD POINTER) + (PROCREMOTEINFO POINTER) + (PROCUSERDATA POINTER) + (PROCEVENTLINK POINTER) + (PROCAFTEREXIT POINTER) + (PROCBEFOREEXIT POINTER) + (PROCOWNEDLOCKS POINTER) + (PROCEVAPPLYRESULT POINTER) + (PROCTTYENTRYFN POINTER) + (PROCTTYEXITFN POINTER) + (PROCHARDRESETINFO POINTER) + (PROCRESTARTFORM POINTER) + (PROCOLDTTYPROC POINTER) + (NIL POINTER))) (DATATYPE PROCESSQUEUE ((PQPRIORITY BYTE) - (PQHIGHER POINTER) - (PQLOWER POINTER) - (PQNEXT POINTER) - (PQLAST POINTER))) + (PQHIGHER POINTER) + (PQLOWER POINTER) + (PQNEXT POINTER) + (PQLAST POINTER))) ) @@ -1064,7 +1064,7 @@ with the terms of said license. (RPAQ? \TTY.PROCESS ) (RPAQ? \PROCESS.NAME.TABLE (HASHARRAY 30 NIL (FUNCTION STRING-EQUAL-HASHBITS) - (FUNCTION STRING-EQUAL))) + (FUNCTION STRING-EQUAL))) (DECLARE%: DOEVAL@COMPILE DONTCOPY (GLOBALVARS TTY.PROCESS.DEFAULT \TTY.PROCESS.EVENT \PROCESS.NAME.TABLE) @@ -1302,14 +1302,12 @@ with the terms of said license. (DECLARE%: EVAL@COMPILE -(PUTPROPS PROCESS.WAIT MACRO - [(WAITCOND TIMEOUT) - (bind ($$TIMEOUT _ (AND TIMEOUT (SETUPTIMER TIMEOUT))) until (AND $$TIMEOUT ( - TIMEREXPIRED? - $$TIMEOUT)) - do (if (SETQ $$VAL WAITCOND) - then (RETURN $$VAL) - else (BLOCK]) +(PUTPROPS PROCESS.WAIT MACRO [(WAITCOND TIMEOUT) + (bind ($$TIMEOUT _ (AND TIMEOUT (SETUPTIMER TIMEOUT))) + until (AND $$TIMEOUT (TIMEREXPIRED? $$TIMEOUT)) + do (if (SETQ $$VAL WAITCOND) + then (RETURN $$VAL) + else (BLOCK]) ) (DEFINEQ @@ -1452,20 +1450,19 @@ with the terms of said license. (DECLARE%: DONTCOPY (DECLARE%: EVAL@COMPILE -(DATATYPE EVENT ((EVENTWAKEUPPENDING FLAG) (* ; - "True if this event was signaled with nobody waiting on it") - (NIL BITS 3) - (EVENTQUEUETAIL POINTER) (* ; - "Pointer to last process waiting on this event") - (EVENTNAME POINTER) (* ; - "Optional name of EVENT for status window, debugging, etc") - ) - (ACCESSFNS EVENT ((EVLOCKQUEUETAIL (ffetch EVENTQUEUETAIL of DATUM) - (freplace EVENTQUEUETAIL of DATUM with - NEWVALUE))) - (* ; - "Used by both EVENT and MONITORLOCK data") - )) +(DATATYPE EVENT ((EVENTWAKEUPPENDING FLAG) (* ; + "True if this event was signaled with nobody waiting on it") + (NIL BITS 3) + (EVENTQUEUETAIL POINTER) (* ; + "Pointer to last process waiting on this event") + (EVENTNAME POINTER) (* ; + "Optional name of EVENT for status window, debugging, etc") + ) + (ACCESSFNS EVENT ((EVLOCKQUEUETAIL (ffetch EVENTQUEUETAIL of DATUM) + (freplace EVENTQUEUETAIL of DATUM with NEWVALUE))) + (* ; + "Used by both EVENT and MONITORLOCK data") + )) ) (/DECLAREDATATYPE 'EVENT '(FLAG (BITS 3) @@ -1487,9 +1484,9 @@ with the terms of said license. (ADDTOVAR SYSTEMRECLST (DATATYPE EVENT ((EVENTWAKEUPPENDING FLAG) - (NIL BITS 3) - (EVENTQUEUETAIL POINTER) - (EVENTNAME POINTER))) + (NIL BITS 3) + (EVENTQUEUETAIL POINTER) + (EVENTNAME POINTER))) ) (DEFINEQ @@ -1593,17 +1590,17 @@ with the terms of said license. ) (DECLARE%: EVAL@COMPILE -(PUTPROPS AWAIT.CONDITION MACRO - [(CONDITION EVNT TIMEOUT TIMERP) - (PROG [($$TIMER TIMEOUT) - ($$EV (\DTEST EVNT 'EVENT] - (DECLARE (LOCALVARS $$TIMER $$EV)) - LP (RETURN (OR CONDITION (COND - ((NEQ (\PROCESS.GO.TO.SLEEP $$EV $$TIMER TIMERP) - $$EV) - NIL) - (T (AND $$TIMER (SETQ $$TIMER T)) - (GO LP]) +(PUTPROPS AWAIT.CONDITION MACRO [(CONDITION EVNT TIMEOUT TIMERP) + (PROG [($$TIMER TIMEOUT) + ($$EV (\DTEST EVNT 'EVENT] + (DECLARE (LOCALVARS $$TIMER $$EV)) + LP (RETURN (OR CONDITION (COND + ((NEQ (\PROCESS.GO.TO.SLEEP $$EV + $$TIMER TIMERP) + $$EV) + NIL) + (T (AND $$TIMER (SETQ $$TIMER T)) + (GO LP]) ) (RPAQ? \PROCESS.AFTEREXIT.EVENT ) @@ -1620,17 +1617,16 @@ with the terms of said license. (DECLARE%: EVAL@COMPILE (DATATYPE MONITORLOCK ((NIL FLAG) - (MLOCKPERPROCESS FLAG) (* ; - "Monitor's use by anybody in process lets everyone in that proc use it, the normal case") - (NIL BITS 2) - (MLOCKQUEUETAIL POINTER) (* ; - "Last process waiting for monitor to become available") - (MLOCKOWNER POINTER) (* ; "Process owning it") - (MLOCKNAME POINTER) (* ; - "optional name, for debugging, etc") - (MLOCKLINK POINTER) (* ; - "Link to next lock owned by my owner") - )) + (MLOCKPERPROCESS FLAG) (* ; + "Monitor's use by anybody in process lets everyone in that proc use it, the normal case") + (NIL BITS 2) + (MLOCKQUEUETAIL POINTER) (* ; + "Last process waiting for monitor to become available") + (MLOCKOWNER POINTER) (* ; "Process owning it") + (MLOCKNAME POINTER) (* ; "optional name, for debugging, etc") + (MLOCKLINK POINTER) (* ; + "Link to next lock owned by my owner") + )) ) (/DECLAREDATATYPE 'MONITORLOCK '(FLAG FLAG (BITS 2) @@ -1646,46 +1642,48 @@ with the terms of said license. (DECLARE%: EVAL@COMPILE -(PUTPROPS .RELEASE.LOCK. MACRO - [(LOCK EVENIFNOTMINE) - (UNINTERRUPTABLY - [PROG ((OWNER (ffetch MLOCKOWNER of LOCK)) - TAIL PREV NEXTPROC) - (COND - ((OR (NULL OWNER) - (AND (NEQ OWNER (THIS.PROCESS)) - (NOT EVENIFNOTMINE))) - (RETURN))) - (freplace MLOCKOWNER of LOCK with NIL) - (* ; - "Now remove LOCK from my list of owned locks") - [COND - ((EQ (SETQ PREV (fetch PROCOWNEDLOCKS of OWNER)) - LOCK) - (replace PROCOWNEDLOCKS of OWNER with (ffetch MLOCKLINK - of LOCK))) - (T (do (COND - ((NULL PREV) - (RETURN (\MP.ERROR \MP.PROCERROR - "Lock not found among owner's owned locks" LOCK))) - [(EQ (fetch MLOCKLINK of PREV) - LOCK) - (RETURN (replace MLOCKLINK of PREV - with (ffetch MLOCKLINK of LOCK] - (T (SETQ PREV (fetch MLOCKLINK of PREV] - (freplace MLOCKLINK of LOCK with NIL) - (COND - ((SETQ TAIL (ffetch MLOCKQUEUETAIL of LOCK)) - (SETQ NEXTPROC (fetch PROCEVENTLINK of TAIL)) - [COND - ((EQ NEXTPROC TAIL) (* ; "Only one process in queue") - (freplace MLOCKQUEUETAIL of LOCK with NIL)) - (T (replace PROCEVENTLINK of TAIL with (fetch PROCEVENTLINK - of NEXTPROC] - (replace PROCEVENTLINK of NEXTPROC with (replace PROCEVENTORLOCK - of NEXTPROC with - NIL)) - (\RUN.PROCESS NEXTPROC LOCK])]) +(PUTPROPS .RELEASE.LOCK. MACRO [(LOCK EVENIFNOTMINE) + (UNINTERRUPTABLY + [PROG ((OWNER (ffetch MLOCKOWNER of LOCK)) + TAIL PREV NEXTPROC) + (COND + ((OR (NULL OWNER) + (AND (NEQ OWNER (THIS.PROCESS)) + (NOT EVENIFNOTMINE))) + (RETURN))) + (freplace MLOCKOWNER of LOCK with NIL) + (* ; + "Now remove LOCK from my list of owned locks") + [COND + ((EQ (SETQ PREV (fetch PROCOWNEDLOCKS of OWNER)) + LOCK) + (replace PROCOWNEDLOCKS of OWNER + with (ffetch MLOCKLINK of LOCK))) + (T (do (COND + ((NULL PREV) + (RETURN (\MP.ERROR \MP.PROCERROR + "Lock not found among owner's owned locks" + LOCK))) + [(EQ (fetch MLOCKLINK of PREV) + LOCK) + (RETURN (replace MLOCKLINK of PREV + with (ffetch MLOCKLINK + of LOCK] + (T (SETQ PREV (fetch MLOCKLINK of PREV] + (freplace MLOCKLINK of LOCK with NIL) + (COND + ((SETQ TAIL (ffetch MLOCKQUEUETAIL of LOCK)) + (SETQ NEXTPROC (fetch PROCEVENTLINK of TAIL)) + [COND + ((EQ NEXTPROC TAIL) + (* ; "Only one process in queue") + (freplace MLOCKQUEUETAIL of LOCK with NIL)) + (T (replace PROCEVENTLINK of TAIL + with (fetch PROCEVENTLINK of NEXTPROC] + (replace PROCEVENTLINK of NEXTPROC + with (replace PROCEVENTORLOCK of NEXTPROC + with NIL)) + (\RUN.PROCESS NEXTPROC LOCK])]) ) ) @@ -1702,12 +1700,12 @@ with the terms of said license. (ADDTOVAR SYSTEMRECLST (DATATYPE MONITORLOCK ((NIL FLAG) - (MLOCKPERPROCESS FLAG) - (NIL BITS 2) - (MLOCKQUEUETAIL POINTER) - (MLOCKOWNER POINTER) - (MLOCKNAME POINTER) - (MLOCKLINK POINTER))) + (MLOCKPERPROCESS FLAG) + (NIL BITS 2) + (MLOCKQUEUETAIL POINTER) + (MLOCKOWNER POINTER) + (MLOCKNAME POINTER) + (MLOCKLINK POINTER))) ) (DEFINEQ @@ -1804,23 +1802,36 @@ with the terms of said license. ) (DECLARE%: EVAL@COMPILE -(PUTPROPS WITH.MONITOR MACRO - [(LOCK . FORMS) - (LET (SI::*LOCKED-MONITOR* SI::*RESETFORMS*) - (DECLARE (CL:SPECIAL SI::*LOCKED-MONITOR* SI::*RESETFORMS*)) - (CL:UNWIND-PROTECT - (PROGN (OBTAIN.MONITORLOCK LOCK NIL 'WITH.MONITOR) . FORMS) - (SI::MONITOR-UNWIND))]) +(PUTPROPS WITH.MONITOR MACRO [(LOCK . FORMS) + (LET (SI::*LOCKED-MONITOR* SI::*RESETFORMS*) + (DECLARE (CL:SPECIAL SI::*LOCKED-MONITOR* SI::*RESETFORMS*)) + (CL:UNWIND-PROTECT + (PROGN (OBTAIN.MONITORLOCK LOCK NIL 'WITH.MONITOR) . FORMS) + (SI::MONITOR-UNWIND))]) -(PUTPROPS WITH.FAST.MONITOR MACRO - [(LOCK . FORMS) - (UNINTERRUPTABLY - ([LAMBDA (UNLOCK) - (PROG1 (PROGN . FORMS) - (AND (NEQ UNLOCK T) - (RELEASE.MONITORLOCK UNLOCK)))] - (OBTAIN.MONITORLOCK LOCK)))]) +(PUTPROPS WITH.FAST.MONITOR MACRO [(LOCK . FORMS) + (UNINTERRUPTABLY + ([LAMBDA (UNLOCK) + (PROG1 (PROGN . FORMS) + (AND (NEQ UNLOCK T) + (RELEASE.MONITORLOCK UNLOCK)))] + (OBTAIN.MONITORLOCK LOCK)))]) ) +(* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: DOEVAL@COMPILE DONTCOPY + +(SPECVARS \BACKGROUND) +) +(DECLARE%: DOEVAL@COMPILE DONTCOPY + +(GLOBALVARS \IGNORE.BACKGROUND) +) + +(* "END EXPORTED DEFINITIONS") + + +(RPAQ? \BACKGROUND NIL) + +(RPAQ? \IGNORE.BACKGROUND T) (DEFINEQ (\MAKE.PROCESS0 @@ -2096,9 +2107,13 @@ with the terms of said license. (\INTERRUPTABLE (BLOCK]) (\BACKGROUND.PROCESS - [LAMBDA NIL (* bvm%: "24-JUL-83 15:35") - (PROG NIL - LP (for FN in BACKGROUNDFNS do (SPREADAPPLY* FN)) + [LAMBDA NIL (* ; "Edited 28-Jul-2023 21:01 by lmm") + (* bvm%: "24-JUL-83 15:35") + (PROG ((\BACKGROUND \IGNORE.BACKGROUND)) + (DECLARE (SPECVARS \BACKGROUND) + (GLOBALVARS \IGNORE.BACKGROUND)) + LP (SETQ \BACKGROUND \IGNORE.BACKGROUND) + (for FN in BACKGROUNDFNS do (SPREADAPPLY* FN)) (BLOCK) (GO LP]) @@ -2460,51 +2475,53 @@ with the terms of said license. (DECLARE%: DONTCOPY (DECLARE%: EVAL@COMPILE -(PUTPROPS \RESCHEDULE MACRO - [LAMBDA (OLDPROC) +(PUTPROPS \RESCHEDULE MACRO [LAMBDA (OLDPROC) - (* ;; "Causes process switch, saving current context in OLDPROC's handle, or nowhere if OLDPROC is NIL. Must be called uninterruptably!") + (* ;; "Causes process switch, saving current context in OLDPROC's handle, or nowhere if OLDPROC is NIL. Must be called uninterruptably!") - (PROG (PQUEUE PROC) - TOP + (PROG (PQUEUE PROC) + TOP - (* ;; "Maybe check for events here?") + (* ;; "Maybe check for events here?") - (SETQ PQUEUE \HIGHEST.PRIORITY.QUEUE) - LP (COND - ((SETQ PROC (fetch PQNEXT of PQUEUE)) - [COND - ((NEQ PROC OLDPROC) (* ; - "Yes, there is a process switch required here. Below is roughly the body of RESUME") - (LET ((TOFX (fetch PROCFX of PROC)) - FROMFX) - (COND - ((fetch (FX INVALIDP) of TOFX) - (\MP.ERROR \MP.STACKRELEASED "Process's stack has been released!" PROC))) - (SETQ \RUNNING.PROCESS PROC) - (replace PROCFX of PROC with 0) - (\PROC.RESUME TOFX (COND - (OLDPROC (SETQ FROMFX (fetch PROCFX of OLDPROC) - ) - (COND - ((NOT (fetch (FX INVALIDP) of FROMFX) - ) - (* ; - "Release stack pointer of OLDPROC if it hasn't been yet. should never happen") - (\DECUSECOUNT FROMFX))) - (replace PROCFX of OLDPROC with - (\MYALINK)) - NIL) - (T (* ; - "no OLDPROC to resume later, so jettison caller") - (\MYALINK] - (RETURN (fetch WAKEREASON of PROC))) - ((SETQ PQUEUE (fetch PQLOWER of PQUEUE)) - (GO LP)) - (T (* ; - "nobody runnable, wait for events") - (\MP.ERROR \MP.PROCERROR "No runnable process!!" OLDPROC) - (GO TOP]) + (SETQ PQUEUE \HIGHEST.PRIORITY.QUEUE) + LP (COND + ((SETQ PROC (fetch PQNEXT of PQUEUE)) + [COND + ((NEQ PROC OLDPROC) + (* ; + "Yes, there is a process switch required here. Below is roughly the body of RESUME") + (LET ((TOFX (fetch PROCFX of PROC)) + FROMFX) + (COND + ((fetch (FX INVALIDP) of TOFX) + (\MP.ERROR \MP.STACKRELEASED + "Process's stack has been released!" PROC + ))) + (SETQ \RUNNING.PROCESS PROC) + (replace PROCFX of PROC with 0) + (\PROC.RESUME + TOFX + (COND + (OLDPROC (SETQ FROMFX (fetch PROCFX of OLDPROC)) + (COND + ((NOT (fetch (FX INVALIDP) + of FROMFX)) + (* ; + "Release stack pointer of OLDPROC if it hasn't been yet. should never happen") + (\DECUSECOUNT FROMFX))) + (replace PROCFX of OLDPROC with (\MYALINK + )) + NIL) + (T (* ; + "no OLDPROC to resume later, so jettison caller") + (\MYALINK] + (RETURN (fetch WAKEREASON of PROC))) + ((SETQ PQUEUE (fetch PQLOWER of PQUEUE)) + (GO LP)) + (T (* ; "nobody runnable, wait for events") + (\MP.ERROR \MP.PROCERROR "No runnable process!!" OLDPROC) + (GO TOP]) ) ) (DEFINEQ @@ -2848,22 +2865,19 @@ with the terms of said license. (DECLARE%: DONTCOPY (* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE -(PUTPROPS THIS.PROCESS MACRO - (NIL \RUNNING.PROCESS)) +(PUTPROPS THIS.PROCESS MACRO (NIL \RUNNING.PROCESS)) -(PUTPROPS TTY.PROCESS MACRO - [X (COND - ((CAR X) - 'IGNOREMACRO) - (T '\TTY.PROCESS]) +(PUTPROPS TTY.PROCESS MACRO [X (COND + ((CAR X) + 'IGNOREMACRO) + (T '\TTY.PROCESS]) -(PUTPROPS TTY.PROCESSP MACRO - [X (COND - ((CAR X) - 'IGNOREMACRO) - (T '(OR (NULL (THIS.PROCESS)) - (EQ (THIS.PROCESS) - (TTY.PROCESS]) +(PUTPROPS TTY.PROCESSP MACRO [X (COND + ((CAR X) + 'IGNOREMACRO) + (T '(OR (NULL (THIS.PROCESS)) + (EQ (THIS.PROCESS) + (TTY.PROCESS]) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY @@ -2887,21 +2901,18 @@ with the terms of said license. (DECLARE%: EVAL@COMPILE -(PUTPROPS ALIVEPROCP MACRO - ((p) - (NOT (DEADPROCP p)))) +(PUTPROPS ALIVEPROCP MACRO ((p) + (NOT (DEADPROCP p)))) -(PUTPROPS DEADPROCP MACRO - ((p) - (fetch PROCDELETED of p))) +(PUTPROPS DEADPROCP MACRO ((p) + (fetch PROCDELETED of p))) -(PUTPROPS \COERCE.TO.PROCESS MACRO - [OPENLAMBDA (P ERRORFLG) - (COND - ((AND (type? PROCESS P) - (NOT (fetch PROCDELETED of P))) - P) - (T (FIND.PROCESS P ERRORFLG]) +(PUTPROPS \COERCE.TO.PROCESS MACRO [OPENLAMBDA (P ERRORFLG) + (COND + ((AND (type? PROCESS P) + (NOT (fetch PROCDELETED of P))) + P) + (T (FIND.PROCESS P ERRORFLG]) ) (DECLARE%: DOEVAL@COMPILE DONTCOPY @@ -3319,7 +3330,7 @@ with the terms of said license. (RPAQ? PROCBACKTRACEHEIGHT 320) (ADDTOVAR BackgroundMenuCommands ("PSW" '(PROCESS.STATUS.WINDOW) - "Puts up a Process Status Window")) + "Puts up a Process Status Window")) (SETQQ BackgroundMenu) (DECLARE%: EVAL@COMPILE DONTCOPY @@ -3350,8 +3361,8 @@ with the terms of said license. (DEFPRINT 'MONITORLOCK (FUNCTION \MONITORLOCK.DEFPRINT)) - (* ; - "\process.init must come last, since it does a HARDRESET") + (* ; + "\process.init must come last, since it does a HARDRESET") (\PROCESS.INIT) ) @@ -3363,42 +3374,40 @@ with the terms of said license. (ADDTOVAR LAMA PROCESSPROP ADD.PROCESS) ) -(PUTPROPS PROC COPYRIGHT ("Venue & Xerox Corporation" T 1982 1983 1984 1985 1986 1987 1988 1990 1991 -1992 1993 1998 1999)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (22392 42659 (PROCESSWORLD 22402 . 31747) (ADD.PROCESS 31749 . 35906) (DEL.PROCESS 35908 - . 36855) (PROCESS.RETURN 36857 . 37004) (FIND.PROCESS 37006 . 37640) (MAP.PROCESSES 37642 . 37968) ( -PROCESSP 37970 . 38138) (RELPROCESSP 38140 . 38322) (RESTART.PROCESS 38324 . 38893) (WAKE.PROCESS -38895 . 39625) (SUSPEND.PROCESS 39627 . 40014) (PROCESS.RESULT 40016 . 40994) (PROCESS-STATUS 40996 . -42391) (PROCESS.FINISHEDP 42393 . 42657)) (42660 55867 (THIS.PROCESS 42670 . 42803) (TTY.PROCESS 42805 - . 49632) (TTY.PROCESSP 49634 . 49850) (PROCESS.TTY 49852 . 50202) (GIVE.TTY.PROCESS 50204 . 51014) ( -ALLOW.BUTTON.EVENTS 51016 . 51260) (SPAWN.MOUSE 51262 . 53475) (\WAIT.FOR.TTY 53477 . 53667) ( -WAIT.FOR.TTY 53669 . 55865)) (55868 58486 (RESET 55878 . 56710) (ERROR! 56712 . 58484)) (58851 64199 ( -PROCESSPROP 58861 . 63313) (PROCESS.NAME 63315 . 63620) (PROCESS.WINDOW 63622 . 64197)) (64401 69436 ( -DISMISS 64411 . 65226) (BLOCK 65228 . 67452) (WAITFORINPUT 67454 . 68683) (\WAITFORSYSBUFP 68685 . -69434)) (69637 70134 (EVAL.AS.PROCESS 69647 . 69870) (EVAL.IN.TTY.PROCESS 69872 . 70132)) (70768 76552 - (PROCESS.READ 70778 . 71616) (PROCESS.EVALV 71618 . 72196) (PROCESS.EVAL 72198 . 73175) ( -\PROCESS.EVAL1 73177 . 74280) (PROCESS.APPLY 74282 . 75266) (\PROCESS.APPLY1 75268 . 76550)) (78718 -84023 (CREATE.EVENT 78728 . 78890) (NOTIFY.EVENT 78892 . 80400) (AWAIT.EVENT 80402 . 81024) ( -\UNQUEUE.EVENT 81026 . 82501) (\ENQUEUE.EVENT/LOCK 82503 . 83796) (\EVENT.DEFPRINT 83798 . 84021)) ( -89263 94254 (OBTAIN.MONITORLOCK 89273 . 92137) (CREATE.MONITORLOCK 92139 . 92358) (RELEASE.MONITORLOCK - 92360 . 92694) (SI::MONITOR-UNWIND 92696 . 93282) (MONITOR.AWAIT.EVENT 93284 . 94018) ( -\MONITORLOCK.DEFPRINT 94020 . 94252)) (94863 117339 (\MAKE.PROCESS0 94873 . 102072) (\MAKE.PROCESS1 -102074 . 103638) (\PROCESS.MOVEFRAME 103640 . 108189) (\RELEASE.PROCESS 108191 . 111241) ( -\UNWIND.PROCESS 111243 . 111569) (\MAYBEBLOCK 111571 . 111726) (\BACKGROUND.PROCESS 111728 . 111969) ( -\MOUSE.PROCESS 111971 . 114520) (\TIMER.PROCESS 114522 . 115078) (\PROCESS.RELEASE.LOCKS 115080 . -115494) (\SET.PROCESS.NAME 115496 . 117032) (\PROCESS.DEFPRINT 117034 . 117337)) (117340 131695 ( -\START.PROCESSES 117350 . 117523) (\PROCESS.GO.TO.SLEEP 117525 . 121279) (\PROC.RESUME 121281 . 121655 -) (\RUN.PROCESS 121657 . 124993) (\SUSPEND.PROCESS 124995 . 128056) (\UNQUEUE.TIMER 128058 . 128757) ( -\ENQUEUE.TIMER 128759 . 130666) (\GET.PRIORITY.QUEUE 130668 . 131693)) (134377 141599 (\PROCESS.INIT -134387 . 135013) (\PROCESS.EVENTFN 135015 . 136751) (\PROCESS.BEFORE.LOGOUT 136753 . 138272) ( -\PROCESS.AFTER.EXIT 138274 . 138582) (\PROCESS.RESET.TIMERS 138584 . 140113) (\PROC.AFTER.WINDOWWORLD -140115 . 140800) (\TURN.ON.PROCESSES 140802 . 141597)) (141630 142859 (\PROC.CODEFORTFRAME 141640 . -142461) (\PROC.REPEATEDLYEVALQT 142463 . 142857)) (142893 149625 (BREAK.PROCESS 142903 . 143219) ( -\SELECTPROCESS 143221 . 145661) (\PROCESS.MAKEFRAME 145663 . 147714) (\PROCESS.MAKEFRAME0 147716 . -149623)) (151838 153761 (\CHECK.PQUEUE 151848 . 153759)) (153762 172091 (PPROC 153772 . 155053) ( -PPROCWINDOW 155055 . 155546) (PPROCREPAINTFN 155548 . 156262) (PPROCRESHAPEFN 156264 . 156527) ( -PPROCEXTENT 156529 . 157013) (PPROC1 157015 . 159033) (PROCESS.STATUS.WINDOW 159035 . 163117) ( -\PSW.SELECTED 163119 . 163413) (\PSWOP.SELECTED 163415 . 167315) (PROCESS.BACKTRACE 167317 . 170508) ( -\INVALIDATE.PROCESS.WINDOW 170510 . 171244) (\UPDATE.PROCESS.WINDOW 171246 . 172089))))) + (FILEMAP (NIL (22096 42363 (PROCESSWORLD 22106 . 31451) (ADD.PROCESS 31453 . 35610) (DEL.PROCESS 35612 + . 36559) (PROCESS.RETURN 36561 . 36708) (FIND.PROCESS 36710 . 37344) (MAP.PROCESSES 37346 . 37672) ( +PROCESSP 37674 . 37842) (RELPROCESSP 37844 . 38026) (RESTART.PROCESS 38028 . 38597) (WAKE.PROCESS +38599 . 39329) (SUSPEND.PROCESS 39331 . 39718) (PROCESS.RESULT 39720 . 40698) (PROCESS-STATUS 40700 . +42095) (PROCESS.FINISHEDP 42097 . 42361)) (42364 55571 (THIS.PROCESS 42374 . 42507) (TTY.PROCESS 42509 + . 49336) (TTY.PROCESSP 49338 . 49554) (PROCESS.TTY 49556 . 49906) (GIVE.TTY.PROCESS 49908 . 50718) ( +ALLOW.BUTTON.EVENTS 50720 . 50964) (SPAWN.MOUSE 50966 . 53179) (\WAIT.FOR.TTY 53181 . 53371) ( +WAIT.FOR.TTY 53373 . 55569)) (55572 58190 (RESET 55582 . 56414) (ERROR! 56416 . 58188)) (58551 63899 ( +PROCESSPROP 58561 . 63013) (PROCESS.NAME 63015 . 63320) (PROCESS.WINDOW 63322 . 63897)) (64101 69136 ( +DISMISS 64111 . 64926) (BLOCK 64928 . 67152) (WAITFORINPUT 67154 . 68383) (\WAITFORSYSBUFP 68385 . +69134)) (69337 69834 (EVAL.AS.PROCESS 69347 . 69570) (EVAL.IN.TTY.PROCESS 69572 . 69832)) (70423 76207 + (PROCESS.READ 70433 . 71271) (PROCESS.EVALV 71273 . 71851) (PROCESS.EVAL 71853 . 72830) ( +\PROCESS.EVAL1 72832 . 73935) (PROCESS.APPLY 73937 . 74921) (\PROCESS.APPLY1 74923 . 76205)) (78266 +83571 (CREATE.EVENT 78276 . 78438) (NOTIFY.EVENT 78440 . 79948) (AWAIT.EVENT 79950 . 80572) ( +\UNQUEUE.EVENT 80574 . 82049) (\ENQUEUE.EVENT/LOCK 82051 . 83344) (\EVENT.DEFPRINT 83346 . 83569)) ( +90015 95006 (OBTAIN.MONITORLOCK 90025 . 92889) (CREATE.MONITORLOCK 92891 . 93110) (RELEASE.MONITORLOCK + 93112 . 93446) (SI::MONITOR-UNWIND 93448 . 94034) (MONITOR.AWAIT.EVENT 94036 . 94770) ( +\MONITORLOCK.DEFPRINT 94772 . 95004)) (96210 118970 (\MAKE.PROCESS0 96220 . 103419) (\MAKE.PROCESS1 +103421 . 104985) (\PROCESS.MOVEFRAME 104987 . 109536) (\RELEASE.PROCESS 109538 . 112588) ( +\UNWIND.PROCESS 112590 . 112916) (\MAYBEBLOCK 112918 . 113073) (\BACKGROUND.PROCESS 113075 . 113600) ( +\MOUSE.PROCESS 113602 . 116151) (\TIMER.PROCESS 116153 . 116709) (\PROCESS.RELEASE.LOCKS 116711 . +117125) (\SET.PROCESS.NAME 117127 . 118663) (\PROCESS.DEFPRINT 118665 . 118968)) (118971 133326 ( +\START.PROCESSES 118981 . 119154) (\PROCESS.GO.TO.SLEEP 119156 . 122910) (\PROC.RESUME 122912 . 123286 +) (\RUN.PROCESS 123288 . 126624) (\SUSPEND.PROCESS 126626 . 129687) (\UNQUEUE.TIMER 129689 . 130388) ( +\ENQUEUE.TIMER 130390 . 132297) (\GET.PRIORITY.QUEUE 132299 . 133324)) (136771 143993 (\PROCESS.INIT +136781 . 137407) (\PROCESS.EVENTFN 137409 . 139145) (\PROCESS.BEFORE.LOGOUT 139147 . 140666) ( +\PROCESS.AFTER.EXIT 140668 . 140976) (\PROCESS.RESET.TIMERS 140978 . 142507) (\PROC.AFTER.WINDOWWORLD +142509 . 143194) (\TURN.ON.PROCESSES 143196 . 143991)) (144024 145253 (\PROC.CODEFORTFRAME 144034 . +144855) (\PROC.REPEATEDLYEVALQT 144857 . 145251)) (145287 152019 (BREAK.PROCESS 145297 . 145613) ( +\SELECTPROCESS 145615 . 148055) (\PROCESS.MAKEFRAME 148057 . 150108) (\PROCESS.MAKEFRAME0 150110 . +152017)) (154660 156583 (\CHECK.PQUEUE 154670 . 156581)) (156584 174913 (PPROC 156594 . 157875) ( +PPROCWINDOW 157877 . 158368) (PPROCREPAINTFN 158370 . 159084) (PPROCRESHAPEFN 159086 . 159349) ( +PPROCEXTENT 159351 . 159835) (PPROC1 159837 . 161855) (PROCESS.STATUS.WINDOW 161857 . 165939) ( +\PSW.SELECTED 165941 . 166235) (\PSWOP.SELECTED 166237 . 170137) (PROCESS.BACKTRACE 170139 . 173330) ( +\INVALIDATE.PROCESS.WINDOW 173332 . 174066) (\UPDATE.PROCESS.WINDOW 174068 . 174911))))) STOP diff --git a/sources/PROC.LCOM b/sources/PROC.LCOM index b2b5ab2a93f2ed9c8f52fadfa842c03f11c967dc..7cf2dc7370343a458113b8c478ab403c18b2721f 100644 GIT binary patch delta 1357 zcmb7EPi)&%98TII(33{lAG#KV^uuM~Y>Sn+X}h^J%&}h*H;(PvPS#49M3#g#khCc2 zKog7{5P}1UN$-f@!gU9rLIQ-;18vtfNr$*_LqZiy;=%=K670aw2_+HhVH_O4=kNEv z_xry0z1;nN@Vy@fZzLOpk83(rY%04{1x`F4oV!{HiXm|V!eJ>gEk(i{@LXY~`f9mS zD#FS#aPWreq^>`|v{EfaEBRXOTC`k=R!hZ7=~}eDaYABxf-0Ji-k*pCyHD!Ob_%&KY{u3}n?z_ZJn7yN|5J15yUn=u^S+ZD(xl z#^sFeq6W>hHFpt2ulUnjb0^7s#>5oGwFN8S$#+fbqK6G_8%VV9%Nh38wm96C>j|Q+ zr)YiKK~(>CjGf&{-iN-uvoK8L3{rJ(Vq8zK-*ytXBD{N?<=-4-mv(1P5I!v{w&{SZ zYgy`*TEK4ZqWGMWq)JM#<})-yu^I13EU$naZ$^=2zWEG$tvQRM8=sG`o#qktW7BhQ ztToPNTT?jlw?+m6z}|1AMhVTz`USjI7XD%Nd;fcjVr8WLG|RTV(MN4ykKH-Ver=E7 z>|Xm>c5&|*o7@v{_QjpZ!@!@086fPFJ&k?PehR-nbX#4UyZzjWv;R#O;cZKvf1xkl R2k8cPZE63*p&`s5`5O)>lxY9} delta 1164 zcma)*OKcle6o&1(3mB1DA&-WLN>?M5jw^Y{*crz&O|07EYkT7Hj609gs7AuIN5RGQ z7(bv@1wjJw*b(l69TH1cREl^k5J8B+iE9XDL3ooMndx{<$B_#Tdljdqr8|{sdd6@Ym=+d(7#+oS(Ic!WYP7O zdu+?Nx0>}@rPit6J}0A6(KHlnS-h&NHmbpq8AsF5NjRS8SyU}|0O_C5L;HxphL~Yx ztH-4Y^Wmj#BP>ZMBFJJ~79%V=s-xNRZn%}s3HY|xZB^WMf^zT|BS@H!ijf$qyj*Uq zxNX$&0FpDYVwh=*K?MUa4O26ed`kxI7z`XaD!X z!ur^$RyCum8uC5s_xXG;!Qb~m)j#I<-N=oOp9*~O#}jmGN$}0a?B4gIk_RdaWrljPslIM$;9qeGBgBwOg>cx=X zcM|0KXH(?T?kI@$-9_@-*HfdQp)dI{^XI#%pam^ZVC3j$kS4-c^m-@vVr1iBfxNfJ zk-K}e9lbqFbE7Bq0LAZPvOfrtxA(_DboTH9`F4MbEFYftBl6Z^lsrFpihTO(1St-l zg#7a0EO~vP!s Date: Sun, 30 Jul 2023 13:01:17 -0700 Subject: [PATCH 03/36] Fix bug in medley.sh wherein it was ignoring sysout argument --- scripts/medley/medley_args.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/medley/medley_args.sh b/scripts/medley/medley_args.sh index 7275d0db..11a7d868 100755 --- a/scripts/medley/medley_args.sh +++ b/scripts/medley/medley_args.sh @@ -158,7 +158,7 @@ do if [[ $# -eq 1 || "$2" = "--" ]]; then sysout_flag=true - sysout_arg="$2" + sysout_arg="$1" else err_msg=( "ERROR: sysout argument must be last argument" From b59e37b7030b4e9cdfd04a7fadda20b6735b8aa9 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Mon, 31 Jul 2023 00:42:23 -0700 Subject: [PATCH 04/36] Remake loadup scripts to not use MEDLEYDIR/tmp as a working dir AND cleanly separate loadup-all from loadup-db; adjust buildLoadup.yml accordingly --- .github/workflows/buildLoadup.yml | 1 + scripts/copy-all.sh | 28 ++++++------- scripts/loadup-all.sh | 12 ++++-- scripts/loadup-apps-from-full.sh | 61 ++++------------------------ scripts/loadup-aux.sh | 22 ++-------- scripts/loadup-db.sh | 28 ++++++------- scripts/loadup-full-from-lisp.sh | 18 ++------- scripts/loadup-init.sh | 20 ++-------- scripts/loadup-lisp-from-mid.sh | 19 ++------- scripts/loadup-mid-from-init.sh | 20 ++-------- sources/LOADUP-APPS.CM | 2 +- sources/LOADUP-FULL.CM | 2 +- sources/LOADUP-INIT.LISP | 2 +- sources/LOADUP-LISP.CM | 2 +- sources/MAKEINIT | 64 ++++++++++++++---------------- sources/MAKEINIT.LCOM | Bin 23370 -> 23621 bytes 16 files changed, 92 insertions(+), 209 deletions(-) diff --git a/.github/workflows/buildLoadup.yml b/.github/workflows/buildLoadup.yml index 6a4c89dd..e3d5b618 100644 --- a/.github/workflows/buildLoadup.yml +++ b/.github/workflows/buildLoadup.yml @@ -226,6 +226,7 @@ jobs: export DISPLAY=":0" PATH="$PWD/maiko:$PATH" scripts/loadup-all.sh -apps + scripts/loadup-db.sh - name: Build loadups release tar run: | diff --git a/scripts/copy-all.sh b/scripts/copy-all.sh index 6dfd8eb9..3831f10f 100755 --- a/scripts/copy-all.sh +++ b/scripts/copy-all.sh @@ -1,30 +1,28 @@ #!/bin/sh -export MEDLEYDIR=`pwd` - if [ ! -x run-medley ] ; then echo run from MEDLEYDIR exit 1 fi +. scripts/loadup-setup.sh + # was # cp -p tmp/full.sysout tmp/lisp.sysout tmp/*.dribble tmp/whereis.hash loadups/ # cp -p tmp/exports.all tmp/RDSYS tmp/RDSYS.LCOM library/ # just copy the files that are released -./scripts/cpv tmp/init.dribble loadups -./scripts/cpv tmp/lisp.dribble loadups -./scripts/cpv tmp/full.dribble loadups -./scripts/cpv tmp/fuller.dribble loadups -./scripts/cpv tmp/whereis.dribble loadups - -./scripts/cpv tmp/fuller.database loadups - -./scripts/cpv tmp/full.sysout loadups -./scripts/cpv tmp/lisp.sysout loadups -./scripts/cpv tmp/whereis.hash loadups -./scripts/cpv tmp/exports.all loadups +./scripts/cpv ${LOADUP_WORKDIR}/full.sysout loadups +./scripts/cpv ${LOADUP_WORKDIR}/lisp.sysout loadups if [ "${1}" = "-apps" ]; then - ./scripts/cpv tmp/apps.sysout loadups + ./scripts/cpv ${LOADUP_WORKDIR}/apps.sysout loadups fi +./scripts/cpv ${LOADUP_WORKDIR}/whereis.hash loadups +./scripts/cpv ${LOADUP_WORKDIR}/exports.all loadups + +./scripts/cpv ${LOADUP_WORKDIR}/init.dribble loadups +./scripts/cpv ${LOADUP_WORKDIR}/lisp.dribble loadups +./scripts/cpv ${LOADUP_WORKDIR}/full.dribble loadups +./scripts/cpv ${LOADUP_WORKDIR}/whereis.dribble loadups + diff --git a/scripts/loadup-all.sh b/scripts/loadup-all.sh index c74f3280..5cc8f005 100755 --- a/scripts/loadup-all.sh +++ b/scripts/loadup-all.sh @@ -1,12 +1,12 @@ #!/bin/sh -export MEDLEYDIR=`pwd` - if [ ! -x run-medley ] ; then echo run from MEDLEYDIR exit 1 fi +. scripts/loadup-setup.sh + if [ "$1" = "-apps" ]; then apps="./scripts/loadup-apps-from-full.sh" else @@ -21,7 +21,13 @@ fi ./scripts/loadup-aux.sh && \ ./scripts/copy-all.sh $1 -echo "**** DONE ****" +if [ $? -eq 0 ]; +then + echo "+++++ loadup-all.sh: SUCCESS +++++" +else + echo "----- loadup-all.sh: FAILURE -----" +fi + diff --git a/scripts/loadup-apps-from-full.sh b/scripts/loadup-apps-from-full.sh index e3a48101..a00d54f0 100755 --- a/scripts/loadup-apps-from-full.sh +++ b/scripts/loadup-apps-from-full.sh @@ -1,32 +1,12 @@ -#!/bin/bash +#!/bin/sh -#set -x +if [ ! -x run-medley ] ; then + echo must run from MEDLEYDIR ; + exit 1 ; +fi -# function to discover what directory this script is being executed from -where_am_i() { +. scripts/loadup-setup.sh - # call this with ${BASH_SOURCE[0]:-$0} as its (only) parameter - - local SCRIPT_PATH="$1"; - - pushd . > '/dev/null'; - - while [ -h "$SCRIPT_PATH" ]; - do - cd "$( dirname -- "$SCRIPT_PATH"; )"; - SCRIPT_PATH="$( readlink -f -- "$SCRIPT_PATH"; )"; - done - - cd "$( dirname -- "$SCRIPT_PATH"; )" > '/dev/null'; - SCRIPT_PATH="$( pwd; )"; - - popd > '/dev/null'; - - echo "${SCRIPT_PATH}" -} - -SCRIPTDIR=$(where_am_i "${BASH_SOURCE[0]:-$0}") -export MEDLEYDIR=$(cd ${SCRIPTDIR} && cd .. && pwd) export ROOMSDIR=${MEDLEYDIR}/rooms export CLOSDIR=${MEDLEYDIR}/clos @@ -41,33 +21,8 @@ if [ ! -e ${NOTECARDSDIR} ]; then fi fi -if [ -z "${SYSOUTDIR}" ]; then - export SYSOUTDIR=${MEDLEYDIR}/tmp -fi +./run-medley $scr -loadup "${MEDLEYDIR}/sources/LOADUP-APPS.CM" "${LOADUP_TMP}/full.sysout" -if [ -z "${FULLSYSOUTPATH}" ]; then - FULLSYSOUTPATH=${SYSOUTDIR}/full.sysout - if [ ! -e ${FULLSYSOUTPATH} ]; then - FULLSYSOUTPATH=${MEDLEYDIR}/loadups/full.sysout - fi -fi +loadup_finish "loadup-apps-from-full" "apps.sysout" "apps.*" -cd ${MEDLEYDIR} - -scr="-sc 1024x768 -g 1042x790" - -mkdir -p ${SYSOUTDIR} -touch ${SYSOUTDIR}/loadup.timestamp - -./run-medley $scr -loadup "${MEDLEYDIR}/sources/LOADUP-APPS.CM" "${FULLSYSOUTPATH}" - -if [ ${SYSOUTDIR}/apps.sysout -nt ${SYSOUTDIR}/loadup.timestamp ]; then - echo ---- made ---- - ls -l ${SYSOUTDIR}/apps.* - echo -------------- -else - echo XXXXX FAILURE XXXXX - ls -l ${SYSOUTDIR}/apps.* - exit 1 -fi diff --git a/scripts/loadup-aux.sh b/scripts/loadup-aux.sh index 211accbe..5dffc2e1 100755 --- a/scripts/loadup-aux.sh +++ b/scripts/loadup-aux.sh @@ -1,28 +1,14 @@ #!/bin/sh -export MEDLEYDIR=`pwd` - if [ ! -f run-medley ] ; then echo run from MEDLEYDIR exit 1 fi -mkdir -p tmp -touch tmp/loadup.timestamp +. scripts/loadup-setup.sh -scr="-sc 1024x768 -g 1042x790" +echo '" (IL:MEDLEY-INIT-VARS)(IL:LOAD(QUOTE MEDLEY-UTILS))(IL:MAKE-EXPORTS-ALL)(IL:MAKE-WHEREIS-HASH)(IL:LOGOUT T)"' > ${LOADUP_WORKDIR}/loadup-aux.cm -echo '" (IL:MEDLEY-INIT-VARS)(IL:LOAD(QUOTE MEDLEY-UTILS))(IL:MAKE-EXPORTS-ALL)(IL:MAKE-WHEREIS-HASH)(IL:LOGOUT T)"' > tmp/loadup-aux.cm -./run-medley $scr -loadup "$MEDLEYDIR"/tmp/loadup-aux.cm tmp/full.sysout +./run-medley $scr -loadup "${LOADUP_WORKDIR}/loadup-aux.cm ${LOADUP_WORKDIR}/full.sysout -if [ tmp/whereis.hash -nt tmp/loadup.timestamp ]; then - - echo ---- made ---- - ls -l tmp/whereis.hash tmp/exports.all - echo -------------- - -else - echo XXXXX FAILURE XXXXX - ls -l tmp/whereis.hash tmp/exports.all - exit 1 -fi +loadup_finish "loadup-aux" "whereis.hash" "whereis.hash" "exports.all" diff --git a/scripts/loadup-db.sh b/scripts/loadup-db.sh index 4b47839d..d0f89f7a 100755 --- a/scripts/loadup-db.sh +++ b/scripts/loadup-db.sh @@ -1,26 +1,22 @@ #!/bin/sh -export MEDLEYDIR=`pwd` - -if [ ! -f run-medley ] ; then +if [ ! -x run-medley ] ; then echo run from MEDLEYDIR exit 1 fi -touch tmp/db.timestamp +. scripts/loadup-setup.sh -scr="-sc 1024x768 -g 1042x790" - -echo '" (IL:MEDLEY-INIT-VARS)(IL:FILESLOAD MEDLEY-UTILS)(IL:MAKE-FULLER-DB)(IL:LOGOUT T)"' > tmp/db.cm -./run-medley $scr -loadup "$MEDLEYDIR"/tmp/db.cm -n -if [ tmp/fuller.database -nt tmp/db.timestamp ]; then - - echo ---- made ---- - ls -l tmp/fuller* - echo -------------- +./scripts/loadup-db-from-full.sh && ./scripts/copy-db.sh +if [ $? -eq 0 ]; +then + echo "+++++ loadup-db.sh: SUCCESS +++++" else - echo XXXXX FAILURE XXXXX - ls -l tmp/fuller* - exit 1 + echo "----- loadup-db.sh: FAILURE -----" fi + + + + + diff --git a/scripts/loadup-full-from-lisp.sh b/scripts/loadup-full-from-lisp.sh index 14277016..509d5111 100755 --- a/scripts/loadup-full-from-lisp.sh +++ b/scripts/loadup-full-from-lisp.sh @@ -1,25 +1,13 @@ #!/bin/sh -export MEDLEYDIR=`pwd` - if [ ! -x run-medley ] ; then echo must run from MEDLEYDIR ; exit 1 ; fi -scr="-sc 1024x768 -g 1042x790" -touch tmp/loadup.timestamp +. scripts/loadup-setup.sh -./run-medley $scr -loadup "$MEDLEYDIR/sources/LOADUP-FULL.CM" "$MEDLEYDIR/tmp/lisp.sysout" +./run-medley $scr -loadup "$MEDLEYDIR/sources/LOADUP-FULL.CM" "${LOADUP_WORKDIR}/lisp.sysout" -if [ tmp/full.sysout -nt tmp/loadup.timestamp ]; then - - echo ---- made ---- - ls -l tmp/full.* - echo -------------- +loadup_finish "loadup-full-from-lisp" "full.sysout" "full.*" -else - echo XXXXX FAILURE XXXXX - ls -l tmp/full.* - exit 1 -fi diff --git a/scripts/loadup-init.sh b/scripts/loadup-init.sh index 9d97dc13..947f42af 100755 --- a/scripts/loadup-init.sh +++ b/scripts/loadup-init.sh @@ -1,26 +1,12 @@ #!/bin/sh -export MEDLEYDIR=`pwd` - if [ ! -f run-medley ] ; then echo run from MEDLEYDIR exit 1 fi -scr="-sc 1024x768 -g 1042x790" +. scripts/loadup-setup.sh -mkdir -p tmp -touch tmp/loadup.timestamp +./run-medley $scr -loadup "${MEDLEYDIR}"/sources/LOADUP-INIT.LISP loadups/starter.sysout -./run-medley $scr -loadup "$MEDLEYDIR"/sources/LOADUP-INIT.LISP loadups/starter.sysout - -if [ tmp/init.dlinit -nt tmp/loadup.timestamp ]; then - - echo ---- made ---- - ls -l tmp/init.* tmp/RDSYS* tmp/I-NEW* - echo -------------- - -else - echo XXXXX FAILURE XXXXX - exit 1 -fi +loadup_finish "loadup-init" "init.dlinit" "init.*" "RDSYS*" "I-NEW*" diff --git a/scripts/loadup-lisp-from-mid.sh b/scripts/loadup-lisp-from-mid.sh index 1c84b3e4..222466f8 100755 --- a/scripts/loadup-lisp-from-mid.sh +++ b/scripts/loadup-lisp-from-mid.sh @@ -1,25 +1,12 @@ #!/bin/sh -export MEDLEYDIR=`pwd` - if [ ! -f run-medley ] ; then echo run from MEDLEYDIR exit 1 fi -touch tmp/loadup.timestamp +. scripts/loadup-setup.sh -scr="-sc 1024x768 -g 1042x790" +./run-medley $scr -loadup "$MEDLEYDIR/sources/LOADUP-LISP.CM" ${LOADUP_WORKDIR}/init-mid.sysout - -./run-medley $scr -loadup "$MEDLEYDIR/sources/LOADUP-LISP.CM" tmp/init-mid.sysout - -if [ tmp/lisp.sysout -nt tmp/loadup.timestamp ]; then - - echo ---- made ---- - ls -l tmp/lisp.* - echo -------------- -else - echo XXXXX FAILURE XXXXX - exit 1 -fi +loadup_finish "loadup-lisp-from-mid" "lisp.sysout" "lisp.*" diff --git a/scripts/loadup-mid-from-init.sh b/scripts/loadup-mid-from-init.sh index 8208bcda..afb12fa3 100755 --- a/scripts/loadup-mid-from-init.sh +++ b/scripts/loadup-mid-from-init.sh @@ -1,26 +1,12 @@ #!/bin/sh -export MEDLEYDIR=`pwd` - if [ ! -x run-medley ] ; then echo run from MEDLEYDIR exit 1 fi -mkdir -p "$MEDLEYDIR/tmp" -touch tmp/loadup.timestamp +. scripts/loadup-setup.sh -scr="-sc 1024x768 -g 1042x790" +./run-medley -prog "ldeinit" -NF -loadup $MEDLEYDIR/sources/XREM.CM $scr -vmem tmp/init-mid.sysout ${LOADUP_WORKDIR}/init.dlinit -./run-medley -prog "ldeinit" -NF -loadup $MEDLEYDIR/sources/XREM.CM $scr -vmem tmp/init-mid.sysout tmp/init.dlinit - - -echo -if [ tmp/loadup.timestamp -nt tmp/init-mid.sysout ]; then - echo XXXXX FAILURE XXXXX - exit 1 -else - echo ---- made ---- - ls -l tmp/init-mid.sysout - echo -------------- -fi +loadup_finish "loadup-mid-from-init" "init-mid.sysout" "init-mid.sysout" diff --git a/sources/LOADUP-APPS.CM b/sources/LOADUP-APPS.CM index d41a71c3..f8d37768 100644 --- a/sources/LOADUP-APPS.CM +++ b/sources/LOADUP-APPS.CM @@ -1 +1 @@ -" (PROGN (IL:MEDLEY-INIT-VARS 'IL:GREET) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE NOTECARDSDIR))(QUOTE |/system/NOTECARDS.LCOM|)) 'IL:SYSLOAD) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE ROOMSDIR))(QUOTE /ROOMS)) 'IL:SYSLOAD) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE CLOSDIR))(QUOTE /DEFSYS.DFASL)) 'IL:SYSLOAD) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE |lispusers/BUTTONS.LCOM|)) 'IL:SYSLOAD) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE |/sources/LOADUP-APPS.LCOM|)) 'IL:SYSLOAD ) (IL:HARDRESET) ) SHH (PROGN (IL:ENDLOADUP) (CLOS::LOAD-CLOS) (IL:|Apps.LOADUP|) (IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE SYSOUTDIR))(IL:L-CASE (QUOTE /apps.sysout))) :APPS) ) (IL:LOGOUT T) " \ No newline at end of file +" (PROGN (IL:MEDLEY-INIT-VARS 'IL:GREET) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE NOTECARDSDIR))(QUOTE |/system/NOTECARDS.LCOM|)) 'IL:SYSLOAD) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE ROOMSDIR))(QUOTE /ROOMS)) 'IL:SYSLOAD) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE CLOSDIR))(QUOTE /DEFSYS.DFASL)) 'IL:SYSLOAD) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE |lispusers/BUTTONS.LCOM|)) 'IL:SYSLOAD) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE |/sources/LOADUP-APPS.LCOM|)) 'IL:SYSLOAD ) (IL:HARDRESET) ) SHH (PROGN (IL:ENDLOADUP) (CLOS::LOAD-CLOS) (IL:|Apps.LOADUP|) (IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /apps.sysout))) :APPS) ) (IL:LOGOUT T) " \ No newline at end of file diff --git a/sources/LOADUP-FULL.CM b/sources/LOADUP-FULL.CM index 5f13dad3..3ba363d4 100644 --- a/sources/LOADUP-FULL.CM +++ b/sources/LOADUP-FULL.CM @@ -1 +1 @@ -" (PROGN(IL:LOAD(IL:CONCAT(QUOTE {DSK})(IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE /sources/LOADUP-FULL.LCOM)))(IL:LOADUP-FULL)(IL:HARDRESET)) SHH(PROGN(IL:ENDLOADUP)(IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE MEDLEYDIR))(IL:L-CASE (QUOTE /tmp/full.sysout))) :FULL)) (IL:LOGOUT T) " \ No newline at end of file +" (PROGN(IL:LOAD(IL:CONCAT(QUOTE {DSK})(IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE /sources/LOADUP-FULL.LCOM)))(IL:LOADUP-FULL)(IL:HARDRESET)) SHH(PROGN(IL:ENDLOADUP)(IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /full.sysout))) :FULL)) (IL:LOGOUT T) " \ No newline at end of file diff --git a/sources/LOADUP-INIT.LISP b/sources/LOADUP-INIT.LISP index 31cb03b3..016338d7 100644 --- a/sources/LOADUP-INIT.LISP +++ b/sources/LOADUP-INIT.LISP @@ -1,7 +1,7 @@ (* "make init files; this file is loaded as a 'greet' file by scripts/loadup-init.sh") (LOAD (CONCAT (UNIX-GETENV "MEDLEYDIR") "/sources/MEDLEYDIR.LCOM")) -(CNDIR (MEDLEYDIR "tmp")) +(CNDIR (UNIX-GETENV "LOADUP_WORKDIR")) (DRIBBLE "init.dribble") (UNADVISE) diff --git a/sources/LOADUP-LISP.CM b/sources/LOADUP-LISP.CM index 641c5f83..150fb0ee 100644 --- a/sources/LOADUP-LISP.CM +++ b/sources/LOADUP-LISP.CM @@ -1 +1 @@ -" (PROGN(LOAD(CONCAT(QUOTE {DSK})(UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE /sources/LOADUP-LISP.LCOM)))(LOADUP-LISP)(HARDRESET)) SHH(PROGN(IL:ENDLOADUP)':MEDLEY)(IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE MEDLEYDIR))(IL:L-CASE (QUOTE /tmp/lisp.sysout))))) (IL:LOGOUT T) " \ No newline at end of file +" (PROGN(LOAD(CONCAT(QUOTE {DSK})(UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE /sources/LOADUP-LISP.LCOM)))(LOADUP-LISP)(HARDRESET)) SHH(PROGN(IL:ENDLOADUP)':MEDLEY)(IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /lisp.sysout))))) (IL:LOGOUT T) " \ No newline at end of file diff --git a/sources/MAKEINIT b/sources/MAKEINIT index 3f939a04..b1cd3577 100644 --- a/sources/MAKEINIT +++ b/sources/MAKEINIT @@ -1,18 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "11-Jul-2022 20:00:23"  -{DSK}kaplan>local>medley3.5>working-medley>sources>MAKEINIT.;3 54607 +(FILECREATED "30-Jul-2023 23:39:21" {DSK}frank>il>medley>gmedley>sources>MAKEINIT.;4 54459 - :CHANGES-TO (FNS I.FIXUPNUM I.FIXUPSYM) + :CHANGES-TO (FNS MAKEINITGREET) - :PREVIOUS-DATE "19-Jul-2021 23:50:29" -{DSK}kaplan>local>medley3.5>working-medley>sources>MAKEINIT.;2) + :PREVIOUS-DATE "11-Jul-2022 20:00:23" {DSK}frank>il>medley>gmedley>sources>MAKEINIT.;1) -(* ; " -Copyright (c) 1982-1988, 1990-1992, 1998, 2021 by Venue & Xerox Corporation. -") - (PRETTYCOMPRINT MAKEINITCOMS) (RPAQQ MAKEINITCOMS @@ -83,7 +77,7 @@ Copyright (c) 1982-1988, 1990-1992, 1998, 2021 by Venue & Xerox Corporation. (DEFINEQ (MAKEINITGREET - [LAMBDA NIL (* ; "Edited 11-Mar-2021 22:14 by larry") + [LAMBDA NIL (* ; "Edited 11-Mar-2021 22:14 by larry") (* ; "Edited 5-Dec-2017 15:26 by rmk:") (* ;; "") @@ -96,9 +90,11 @@ Copyright (c) 1982-1988, 1990-1992, 1998, 2021 by Venue & Xerox Corporation. (DORENAME 'I) (DORENAME 'R) (DLFIXINIT (MAKEINIT '(39424 5682 11008) - (MEDLEYDIR "tmp" "init.sysout" T) - NIL DIRECTORIES DISPLAYFONTDIRECTORIES) - (MEDLEYDIR "tmp" "init.dlinit" T]) + (CONCAT "{DSK}" (UNIX-GETENV "LOADUP_WORKDIR") + "/init.sysout") + NIL DIRECTORIES DISPLAYFONTDIRECTORIES) + (CONCAT "{DSK}" (UNIX-GETENV "LOADUP_WORKDIR") + "/init.dlinit"]) ) (FILESLOAD (SOURCE) @@ -1053,28 +1049,26 @@ DONTCOPY (GLOBALVARS DLPRIMARYMAP DLSECONDARYMAP DLLOCKBITS DLLASTDOMINOPAGE DLIFPAGE DLNEXTPM DLPAGEMAPFP FPTOVP NEWFPFROMOLD VMEMFILE VMEMFILEX) ) -(PUTPROPS MAKEINIT COPYRIGHT ("Venue & Xerox Corporation" 1982 1983 1984 1985 1986 1987 1988 1990 1991 - 1992 1998 2021)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (3971 4718 (MAKEINITGREET 3981 . 4716)) (4901 11286 (LOADMAKEINIT 4911 . 6114) ( -LOADMKIFILES 6116 . 6431) (RELOAD 6433 . 6916) (MAKEINIT 6918 . 10578) (MKI.START 10580 . 11284)) ( -11364 17082 (MKI.PASSFILE 11374 . 14984) (SCRATCHARRAY 14986 . 15635) (DOFORM 15637 . 16314) ( -CONSTFORMP 16316 . 16550) (NOTICECOMS 16552 . 16860) (EVALFORMAKEINIT 16862 . 17080)) (17083 19203 ( -I.ADDTOVAR 17093 . 17187) (I.DECLARE%: 17189 . 17465) (I.DEFINE-FILE-INFO 17467 . 17657) ( -I.FILECREATED 17659 . 18033) (I.PUTPROPS 18035 . 18148) (I.RPAQ 18150 . 18371) (I.RPAQQ 18373 . 18569) - (I.RPAQ? 18571 . 18786) (I.SETTOPVAL 18788 . 19020) (I.NOUNDO 19022 . 19201)) (19839 26055 ( -I.ATOMNUMBER 19849 . 20340) (I.\ATOMCELL 20342 . 22095) (I.FIXUPNUM 22097 . 23022) (I.FIXUPPTR 23024 - . 23505) (I.FIXUPSYM 23507 . 24563) (I.WORDSPERNAMEENTRY 24565 . 25320) (I.SETSTKNTOFFSET 25322 . -26053)) (26087 27595 (MKI.ATOM 26097 . 26293) (MKI.IEEE 26295 . 27593)) (27692 28457 (MKI.DSET 27702 - . 27985) (MKI.ADDTO 27987 . 28172) (MKI.PUTPROP 28174 . 28455)) (28631 29183 (DUMPVP 28641 . 28738) ( -BOUTZEROS 28740 . 28819) (BIN16 28821 . 29002) (BOUT16 29004 . 29181)) (30074 52808 (DLFIXINIT 30084 - . 31059) (DLSORTSYSOUTPAGES 31061 . 36187) (DLNEXTFP 36189 . 36526) (DLLOCKEDPAGEP 36528 . 36742) ( -DLSETLOCKBIT 36744 . 37006) (DLCOPYPAGEMAP 37008 . 40059) (DLCOPYVMPAGE 40061 . 40451) ( -DLADDPAGEMAPENTRIES 40453 . 41268) (ASSIGNFILEPAGE 41270 . 42503) (ASSIGNFILEPAGERANGE 42505 . 42912) -(DLDUMPSYSOUT 42914 . 44666) (DLDUMPFPTOVP 44668 . 45707) (DLDUMPPAGEMAPS 45709 . 46409) ( -DLDUMPVMEMPAGES 46411 . 47067) (DLSETBOOTPTR 47069 . 47299) (DLDUMPARRAY 47301 . 47688) ( -DLMARKASDUMPED 47690 . 48143) (DLDUMPVMEMPAGE 48145 . 48833) (INSTALLDOMINO 48835 . 49482) ( -INSTALLDOMINO.DIRECT 49484 . 50636) (INSTALLNEWDOMINO 50638 . 52806)) (52830 54187 (DLPRINTFPTOVP -52840 . 53129) (PRINTPRIMARYMAP 53131 . 53845) (DLREADPAGEOFWORDS 53847 . 54014) (SETDIF 54016 . 54185 + (FILEMAP (NIL (3843 4691 (MAKEINITGREET 3853 . 4689)) (4874 11259 (LOADMAKEINIT 4884 . 6087) ( +LOADMKIFILES 6089 . 6404) (RELOAD 6406 . 6889) (MAKEINIT 6891 . 10551) (MKI.START 10553 . 11257)) ( +11337 17055 (MKI.PASSFILE 11347 . 14957) (SCRATCHARRAY 14959 . 15608) (DOFORM 15610 . 16287) ( +CONSTFORMP 16289 . 16523) (NOTICECOMS 16525 . 16833) (EVALFORMAKEINIT 16835 . 17053)) (17056 19176 ( +I.ADDTOVAR 17066 . 17160) (I.DECLARE%: 17162 . 17438) (I.DEFINE-FILE-INFO 17440 . 17630) ( +I.FILECREATED 17632 . 18006) (I.PUTPROPS 18008 . 18121) (I.RPAQ 18123 . 18344) (I.RPAQQ 18346 . 18542) + (I.RPAQ? 18544 . 18759) (I.SETTOPVAL 18761 . 18993) (I.NOUNDO 18995 . 19174)) (19812 26028 ( +I.ATOMNUMBER 19822 . 20313) (I.\ATOMCELL 20315 . 22068) (I.FIXUPNUM 22070 . 22995) (I.FIXUPPTR 22997 + . 23478) (I.FIXUPSYM 23480 . 24536) (I.WORDSPERNAMEENTRY 24538 . 25293) (I.SETSTKNTOFFSET 25295 . +26026)) (26060 27568 (MKI.ATOM 26070 . 26266) (MKI.IEEE 26268 . 27566)) (27665 28430 (MKI.DSET 27675 + . 27958) (MKI.ADDTO 27960 . 28145) (MKI.PUTPROP 28147 . 28428)) (28604 29156 (DUMPVP 28614 . 28711) ( +BOUTZEROS 28713 . 28792) (BIN16 28794 . 28975) (BOUT16 28977 . 29154)) (30047 52781 (DLFIXINIT 30057 + . 31032) (DLSORTSYSOUTPAGES 31034 . 36160) (DLNEXTFP 36162 . 36499) (DLLOCKEDPAGEP 36501 . 36715) ( +DLSETLOCKBIT 36717 . 36979) (DLCOPYPAGEMAP 36981 . 40032) (DLCOPYVMPAGE 40034 . 40424) ( +DLADDPAGEMAPENTRIES 40426 . 41241) (ASSIGNFILEPAGE 41243 . 42476) (ASSIGNFILEPAGERANGE 42478 . 42885) +(DLDUMPSYSOUT 42887 . 44639) (DLDUMPFPTOVP 44641 . 45680) (DLDUMPPAGEMAPS 45682 . 46382) ( +DLDUMPVMEMPAGES 46384 . 47040) (DLSETBOOTPTR 47042 . 47272) (DLDUMPARRAY 47274 . 47661) ( +DLMARKASDUMPED 47663 . 48116) (DLDUMPVMEMPAGE 48118 . 48806) (INSTALLDOMINO 48808 . 49455) ( +INSTALLDOMINO.DIRECT 49457 . 50609) (INSTALLNEWDOMINO 50611 . 52779)) (52803 54160 (DLPRINTFPTOVP +52813 . 53102) (PRINTPRIMARYMAP 53104 . 53818) (DLREADPAGEOFWORDS 53820 . 53987) (SETDIF 53989 . 54158 ))))) STOP diff --git a/sources/MAKEINIT.LCOM b/sources/MAKEINIT.LCOM index 9342cf53044d7cee8dea0863ec487e3fbf2ca714..3af36c6cc762407e7110b8077c0296917c5dad86 100644 GIT binary patch delta 4778 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 AMF0Q* From d2102bfe9b3069814ba7a6d28cf1c204e6cb2052 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Mon, 31 Jul 2023 01:07:39 -0700 Subject: [PATCH 05/36] Add new files left out from last commit; add RDSYS to library as part of loadups-all --- scripts/copy-all.sh | 3 +++ scripts/copy-db.sh | 12 +++++++++++ scripts/loadup-db-from-full.sh | 17 +++++++++++++++ scripts/loadup-setup.sh | 38 ++++++++++++++++++++++++++++++++++ 4 files changed, 70 insertions(+) create mode 100755 scripts/copy-db.sh create mode 100755 scripts/loadup-db-from-full.sh create mode 100644 scripts/loadup-setup.sh diff --git a/scripts/copy-all.sh b/scripts/copy-all.sh index 3831f10f..6c1f9053 100755 --- a/scripts/copy-all.sh +++ b/scripts/copy-all.sh @@ -26,3 +26,6 @@ fi ./scripts/cpv ${LOADUP_WORKDIR}/full.dribble loadups ./scripts/cpv ${LOADUP_WORKDIR}/whereis.dribble loadups +./scripts/cpv ${LOADUP_WORKDIR}/RDSYS library +./scripts/cpv ${LOADUP_WORKDIR}/RDSYS.LCOM library + diff --git a/scripts/copy-db.sh b/scripts/copy-db.sh new file mode 100755 index 00000000..25044ad1 --- /dev/null +++ b/scripts/copy-db.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +if [ ! -x run-medley ] ; then + echo run from MEDLEYDIR + exit 1 +fi + +. scripts/loadup-setup.sh + +./scripts/cpv ${LOADUP_WORKDIR}/fuller.database loadups +./scripts/cpv ${LOADUP_WORKDIR}/fuller.dribble loadups + diff --git a/scripts/loadup-db-from-full.sh b/scripts/loadup-db-from-full.sh new file mode 100755 index 00000000..b1793a11 --- /dev/null +++ b/scripts/loadup-db-from-full.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +if [ ! -x run-medley ] ; then + echo run from MEDLEYDIR + exit 1 +fi + +. scripts/loadup-setup.sh + +DBCM="${LOADUP_WORKDIR}"/db.cm + +echo '" (IL:MEDLEY-INIT-VARS)(IL:FILESLOAD MEDLEY-UTILS)(IL:MAKE-FULLER-DB)(IL:LOGOUT T)"' > ${DBCM} + +./run-medley $scr -loadup "${DBCM}" -full + +loadup_finish "loadup-db" "fuller.database" "fuller*" + diff --git a/scripts/loadup-setup.sh b/scripts/loadup-setup.sh new file mode 100644 index 00000000..194bde91 --- /dev/null +++ b/scripts/loadup-setup.sh @@ -0,0 +1,38 @@ + +export MEDLEYDIR=`pwd` + +# echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%${LOADUP_WORKDIR}=============" + +if [ -z "${LOADUP_WORKDIR}" ]; +then + export LOADUP_WORKDIR=/tmp/loadups-$$ +fi + +mkdir -p "${LOADUP_WORKDIR}" + +scr="-sc 1024x768 -g 1042x790" + +touch "${LOADUP_WORKDIR}"/loadup.timestamp + +loadup_finish () { + echo "===== ${1}" + if [ "${LOADUP_WORKDIR}/${2}" -nt "${LOADUP_WORKDIR}"/loadup.timestamp ]; + then + echo "+++++ SUCCESS +++++" + exit_code=0 + else + echo "----- FAILURE -----" + exit_code=1 + fi + echo "===== files created ======" + shift; shift + for f in ${*}; + do + ls -l "${LOADUP_WORKDIR}"/$f 2>/dev/null + done + echo "=======================================" + exit ${exit_code} +} + + + From 656bb53ef609a674171cb57c849716b05bfd31cf Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Tue, 1 Aug 2023 12:08:55 -0700 Subject: [PATCH 06/36] WIP updating loadups scripts --- internal/MEDLEY-UTILS | 28 +++++++++++++++------------- internal/MEDLEY-UTILS.LCOM | Bin 7036 -> 7148 bytes scripts/cpv | 28 +++++++++++++++++++--------- scripts/loadup-apps-from-full.sh | 4 +++- scripts/loadup-aux.sh | 14 ++++++++++++-- scripts/loadup-full-from-lisp.sh | 2 ++ scripts/loadup-init.sh | 2 ++ scripts/loadup-lisp-from-mid.sh | 2 ++ scripts/loadup-mid-from-init.sh | 4 +++- scripts/loadup-setup.sh | 14 +++++++++----- sources/LOADUP-FULL | 12 +++++------- sources/LOADUP-FULL.CM | 2 +- sources/LOADUP-FULL.LCOM | Bin 3665 -> 3505 bytes sources/LOADUP-LISP | 13 ++++++------- sources/LOADUP-LISP.CM | 2 +- sources/LOADUP-LISP.LCOM | Bin 3566 -> 3508 bytes 16 files changed, 80 insertions(+), 47 deletions(-) diff --git a/internal/MEDLEY-UTILS b/internal/MEDLEY-UTILS index abf4d00e..c4c6c9ca 100644 --- a/internal/MEDLEY-UTILS +++ b/internal/MEDLEY-UTILS @@ -1,12 +1,11 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "XCL" BASE 10) -(FILECREATED "23-May-2023 07:10:58" |{DSK}larry>il>medley>internal>MEDLEY-UTILS.;12| 10354 +(FILECREATED "31-Jul-2023 18:34:20" |{DSK}frank>il>medley>gmedley>internal>MEDLEY-UTILS.;3| 10550 - :EDIT-BY "lmm" + :CHANGES-TO (FNS MAKE-WHEREIS-HASH) - :CHANGES-TO (FNS GATHER-INFO) - - :PREVIOUS-DATE "22-May-2023 22:57:21" |{DSK}larry>il>medley>internal>MEDLEY-UTILS.;11|) + :PREVIOUS-DATE "31-Jul-2023 18:07:23" +|{DSK}frank>il>medley>gmedley>internal>MEDLEY-UTILS.;2|) (PRETTYCOMPRINT MEDLEY-UTILSCOMS) @@ -156,24 +155,27 @@  "Edited September 29, 1986 by van Melle") (CNDIR (MEDLEYDIR "sources")) (LOAD 'FILESETS) - (GATHEREXPORTS EXPORTFILES (MEDLEYDIR "tmp" "exports.all" T)))) + (GATHEREXPORTS EXPORTFILES (CONCAT '{DSK} (UNIX-GETENV "LOADUP_WORKDIR") + "/" "exports.all")))) (MAKE-WHEREIS-HASH - (LAMBDA NIL (* \; "Edited 12-Mar-2022 12:46 by rmk") + (LAMBDA (DRIBBLEFILE) (* \; "Edited 12-Mar-2022 12:46 by rmk") (* \; "Edited 24-Mar-2021 13:26 by larry") (LET ((FILING.ENUMERATION.DEPTH 2) HASHFILE) - (DRIBBLE (MEDLEYDIR "tmp" "whereis.dribble" T)) - (SETQ HASHFILE (XCL::WHERE-IS-NOTICE (MEDLEYDIR "tmp" "whereis.hash-tmp" T) + (DRIBBLE DRIBBLEFILE) + (SETQ HASHFILE (XCL::WHERE-IS-NOTICE (CONCAT "{DSK}" (UNIX-GETENV "LOADUP_WORKDIR") + "/" "whereis.hash-tmp") :FILES (|for| X |in| MEDLEY-FIX-DIRS |collect| (CONCAT (MEDLEYDIR X) "*.;")) :HASH-FILE-SIZE 60000 :NEW T)) - (RENAMEFILE HASHFILE (MEDLEYDIR "tmp" "whereis.hash" T)) + (RENAMEFILE HASHFILE (CONCAT "{DSK}" (UNIX-GETENV "LOADUP_WORKDIR") + "/" "whereis.hash")) (DRIBBLE)))) ) (DECLARE\: DONTCOPY - (FILEMAP (NIL (624 7499 (GATHER-INFO 634 . 6162) (MAKE-FULLER-DB 6164 . 6854) (MEDLEY-FIX-LINKS 6856 - . 7253) (MEDLEY-FIX-DATES 7255 . 7497)) (8538 10331 (MAKE-EXPORTS-ALL 8548 . 9507) (MAKE-WHEREIS-HASH - 9509 . 10329))))) + (FILEMAP (NIL (623 7498 (GATHER-INFO 633 . 6161) (MAKE-FULLER-DB 6163 . 6853) (MEDLEY-FIX-LINKS 6855 + . 7252) (MEDLEY-FIX-DATES 7254 . 7496)) (8537 10527 (MAKE-EXPORTS-ALL 8547 . 9575) (MAKE-WHEREIS-HASH + 9577 . 10525))))) STOP diff --git a/internal/MEDLEY-UTILS.LCOM b/internal/MEDLEY-UTILS.LCOM index f4ccfed11a663695d6512a233e5e72a74bb90390..acc62cc9a2efcc4c6fc909397450126bcadb30e3 100644 GIT binary patch delta 863 zcmaKqUvJV-7{*~5|I{S|h3#&>Yhr|p;yL{Tv@vL*XHbC_+wwKxIdYTY0_vDSo@rV}y=M_Oz z1hjPT#t$dm(Q#qm6^3rlbKe(^mLGQ)!aNP^+6|OfaGr(v?A3U9;@$7fVLlkmfnn7~ z!-k9EOeRBhz3$AVqDyReflV{1eZ59X7Ev9dt&8pj@pwc{PBpvw;bDI~bPN9o3JgY) zgg_}(RHIC6&M_giZ`e>*tAuM;h(&aptEhG*4NAizE!}L|oJPm4PgPJ(q0xZ(@6>Zl zgVD^LjFw;GQT{Bk@#1#$k^efed*vt+@eg9#+06)jnBWzQq_POgsuLvXG)&8}L6V?k z8YR^M5kb??J6xGK#Ax~75>ONngj)laAz)+^$ELV|?#R0DPR5hjG}HAw7DNfy2P_Em zQ!`bq**IvMR#nq2|5mcKr2_)Z(u>6!30(Y_$(=i&uSFwKZzCR$KE4@b8~;ul-SodE zZT~Q~wfLL+#(8)w$}1nhq6ii-)Ou(MSddqHU|zhq2w;?hPN}9SVF4U%z%U)XL?HX; ziX=mwXf^VTCJs0RL>3eYFReMP##0Cw(V`8~2AKyX=#&d~<81vo32-POuK*SnL}1_c z-HAJxX8PS}p9RdzAumk1t^uQmnCefp>-2A9AuIadxA*oaTOKi&Xescpp|kkT@zq~D CNZbbi delta 823 zcmZuv%Wl&^6m_DiqJag4M%}?>HY5v2o^hPV2n9LzxUq1YV7pCtp2Ked3{7=u|2pJi9}?OsuW99seSdI z9t49hylzZ_M%>FhxxpkV0wQFCB@!(wRFV)x!_dE+PZyKGA4QOhF2{q}mA|ABoTy%l zIihJB9f&5g2#|4VS+Gr0DwR0HXs}9lcL|hHF;}P=ro}XesUFigYKLV`@X)>11w{3 zn60*1;sY@GqrvHU{Wa)o7NtG@Aed;nqTTUKjX_lctz&Dd2Nh|P=&yJ{ltknrRUum_ zo)b$LsLgs%mw~oax5WclOmxjR40vZWtt9CK^F{P-?1%njSsD+PV+0uUj(8;qDoXtF a_!*>kT;AYD;bb@rd<69rc>C%2?cQ(byUT+B diff --git a/scripts/cpv b/scripts/cpv index 29fc5604..7f0e7ece 100755 --- a/scripts/cpv +++ b/scripts/cpv @@ -4,6 +4,13 @@ # could extend with -r or copying multiple files # could change from cp to ln +ln_or_cp () { + f=$(df $(dirname $1) | tail -1 | awk '{ print $1 }') + d=$(df $(dirname $2) | tail -1 | awk '{ print $1 }') + if [ "$f" != "$d" ]; then cmd="cp -p"; else cmd="ln"; fi + echo $cmd +} + file="$1" dest="$2" @@ -18,9 +25,15 @@ if [ -d "$dest" ]; then dest=$dest/`basename $file` fi +# if (the new) $dest is a directory, then just bail +if [ -d "$dest" ]; then + echo "Error: destination file ($dest) is a directory. Exiting." + exit 1 +fi + # if no such file $dest then just copy if [ ! -f "$dest" ]; then - ln $file $dest #WAS cp -p $file $dest + $(ln_or_cp $file $dest) $file $dest exit 0 fi @@ -41,7 +54,7 @@ if [ $max -eq 0 ]; then # no current versions new=2 else if cmp -q $dest $dest.~$max~ >/dev/null 2>&1 - then # they're different + then # they're different max=`expr $max + 1` # make newer version mv $dest $dest.~$max~ new=`expr $max + 1` @@ -51,11 +64,8 @@ else fi fi -# make new version +# make new version and link it -ln $file $dest.~$new~ # cp -p $file $dest.~$new~ -ln $dest.~$new~ $dest # and link it - - - - +$(ln_or_cp $file $dest.~new~) $file $dest.~$new~ +rm -f $dest +ln $dest.~$new~ $dest diff --git a/scripts/loadup-apps-from-full.sh b/scripts/loadup-apps-from-full.sh index a00d54f0..d7b6cb7d 100755 --- a/scripts/loadup-apps-from-full.sh +++ b/scripts/loadup-apps-from-full.sh @@ -7,6 +7,8 @@ fi . scripts/loadup-setup.sh +loadup_start "loadup-apps-from-full" + export ROOMSDIR=${MEDLEYDIR}/rooms export CLOSDIR=${MEDLEYDIR}/clos @@ -21,7 +23,7 @@ if [ ! -e ${NOTECARDSDIR} ]; then fi fi -./run-medley $scr -loadup "${MEDLEYDIR}/sources/LOADUP-APPS.CM" "${LOADUP_TMP}/full.sysout" +./run-medley $scr -loadup "${MEDLEYDIR}/sources/LOADUP-APPS.CM" "${LOADUP_WORKDIR}/full.sysout" loadup_finish "loadup-apps-from-full" "apps.sysout" "apps.*" diff --git a/scripts/loadup-aux.sh b/scripts/loadup-aux.sh index 5dffc2e1..f0abfb47 100755 --- a/scripts/loadup-aux.sh +++ b/scripts/loadup-aux.sh @@ -7,8 +7,18 @@ fi . scripts/loadup-setup.sh -echo '" (IL:MEDLEY-INIT-VARS)(IL:LOAD(QUOTE MEDLEY-UTILS))(IL:MAKE-EXPORTS-ALL)(IL:MAKE-WHEREIS-HASH)(IL:LOGOUT T)"' > ${LOADUP_WORKDIR}/loadup-aux.cm +loadup_start "loadup-aux" -./run-medley $scr -loadup "${LOADUP_WORKDIR}/loadup-aux.cm ${LOADUP_WORKDIR}/full.sysout +cat >"${LOADUP_WORKDIR}"/loadup-aux.cm <<"EOF" +" + (IL:MEDLEY-INIT-VARS) + (IL:LOAD(QUOTE MEDLEY-UTILS)) + (IL:MAKE-EXPORTS-ALL) + (IL:MAKE-WHEREIS-HASH (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /whereis.dribble)))) + (IL:LOGOUT T) +" +EOF + +./run-medley $scr -loadup "${LOADUP_WORKDIR}"/loadup-aux.cm "${LOADUP_WORKDIR}"/full.sysout loadup_finish "loadup-aux" "whereis.hash" "whereis.hash" "exports.all" diff --git a/scripts/loadup-full-from-lisp.sh b/scripts/loadup-full-from-lisp.sh index 509d5111..351ab260 100755 --- a/scripts/loadup-full-from-lisp.sh +++ b/scripts/loadup-full-from-lisp.sh @@ -7,6 +7,8 @@ fi . scripts/loadup-setup.sh +loadup_start "loadup-full-from-lisp" + ./run-medley $scr -loadup "$MEDLEYDIR/sources/LOADUP-FULL.CM" "${LOADUP_WORKDIR}/lisp.sysout" loadup_finish "loadup-full-from-lisp" "full.sysout" "full.*" diff --git a/scripts/loadup-init.sh b/scripts/loadup-init.sh index 947f42af..4c7be321 100755 --- a/scripts/loadup-init.sh +++ b/scripts/loadup-init.sh @@ -7,6 +7,8 @@ fi . scripts/loadup-setup.sh +loadup_start "loadup-init" + ./run-medley $scr -loadup "${MEDLEYDIR}"/sources/LOADUP-INIT.LISP loadups/starter.sysout loadup_finish "loadup-init" "init.dlinit" "init.*" "RDSYS*" "I-NEW*" diff --git a/scripts/loadup-lisp-from-mid.sh b/scripts/loadup-lisp-from-mid.sh index 222466f8..283b8ba6 100755 --- a/scripts/loadup-lisp-from-mid.sh +++ b/scripts/loadup-lisp-from-mid.sh @@ -7,6 +7,8 @@ fi . scripts/loadup-setup.sh +loadup_start "loadup-lisp-from-mid" + ./run-medley $scr -loadup "$MEDLEYDIR/sources/LOADUP-LISP.CM" ${LOADUP_WORKDIR}/init-mid.sysout loadup_finish "loadup-lisp-from-mid" "lisp.sysout" "lisp.*" diff --git a/scripts/loadup-mid-from-init.sh b/scripts/loadup-mid-from-init.sh index afb12fa3..d5f4ff26 100755 --- a/scripts/loadup-mid-from-init.sh +++ b/scripts/loadup-mid-from-init.sh @@ -7,6 +7,8 @@ fi . scripts/loadup-setup.sh -./run-medley -prog "ldeinit" -NF -loadup $MEDLEYDIR/sources/XREM.CM $scr -vmem tmp/init-mid.sysout ${LOADUP_WORKDIR}/init.dlinit +loadup_start "loadup-mid-from-init" + +./run-medley -prog "ldeinit" -NF -loadup $MEDLEYDIR/sources/XREM.CM $scr -vmem ${LOADUP_WORKDIR}/init-mid.sysout ${LOADUP_WORKDIR}/init.dlinit loadup_finish "loadup-mid-from-init" "init-mid.sysout" "init-mid.sysout" diff --git a/scripts/loadup-setup.sh b/scripts/loadup-setup.sh index 194bde91..2fca51be 100644 --- a/scripts/loadup-setup.sh +++ b/scripts/loadup-setup.sh @@ -1,8 +1,6 @@ export MEDLEYDIR=`pwd` -# echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%${LOADUP_WORKDIR}=============" - if [ -z "${LOADUP_WORKDIR}" ]; then export LOADUP_WORKDIR=/tmp/loadups-$$ @@ -14,8 +12,13 @@ scr="-sc 1024x768 -g 1042x790" touch "${LOADUP_WORKDIR}"/loadup.timestamp + +loadup_start () { + echo ">>>>> START ${1}" +} + loadup_finish () { - echo "===== ${1}" + local script_name=${1} if [ "${LOADUP_WORKDIR}/${2}" -nt "${LOADUP_WORKDIR}"/loadup.timestamp ]; then echo "+++++ SUCCESS +++++" @@ -24,13 +27,14 @@ loadup_finish () { echo "----- FAILURE -----" exit_code=1 fi - echo "===== files created ======" + echo "..... files created ....." shift; shift for f in ${*}; do ls -l "${LOADUP_WORKDIR}"/$f 2>/dev/null done - echo "=======================================" + echo "<<<<< END ${script_name}" + echo "" exit ${exit_code} } diff --git a/sources/LOADUP-FULL b/sources/LOADUP-FULL index 104dbbee..55171e07 100644 --- a/sources/LOADUP-FULL +++ b/sources/LOADUP-FULL @@ -1,10 +1,10 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "18-Jan-2023 16:23:36" {DSK}frank>il>medley>gmedley>sources>LOADUP-FULL.;2 4636 +(FILECREATED "31-Jul-2023 18:28:53" {DSK}frank>il>medley>gmedley>sources>LOADUP-FULL.;4 4521 :CHANGES-TO (FNS LOADUP-FULL) - :PREVIOUS-DATE "12-Aug-2022 12:30:09" {DSK}frank>il>medley>gmedley>sources>LOADUP-FULL.;1 + :PREVIOUS-DATE "18-Jan-2023 16:23:36" {DSK}frank>il>medley>gmedley>sources>LOADUP-FULL.;3 ) @@ -39,7 +39,7 @@ (PRINTOUT T "FULL fonts loaded" T]) (LOADUP-FULL - [LAMBDA NIL (* ; "Edited 18-Jan-2023 16:22 by FGH") + [LAMBDA (DRIBBLEFILE) (* ; "Edited 18-Jan-2023 16:22 by FGH") (* ; "Edited 12-Aug-2022 11:17 by lmm") (* ; "Edited 14-Jul-2022 12:32 by rmk") (* ; "Edited 12-Jul-2022 21:57 by rmk") @@ -55,9 +55,7 @@ (PROGN (SETQ MEDLEYDIR) (CNDIR (MEDLEYDIR))) (MEDLEY-INIT-VARS) - (SETQ MAKESYSFILENAME (MEDLEYDIR "tmp" "full.sysout" T)) - (SETQ MAKESYSNAME :MEDLEY) - (DRIBBLE (MEDLEYDIR "tmp" "full.dribble" T)) + (DRIBBLE DRIBBLEFILE) (* ;; "BKSYSBUF stops page holding ") @@ -88,5 +86,5 @@ (FIXMETA) (DECLARE%: DONTCOPY - (FILEMAP (NIL (467 4598 (LOADFULLFONTS 477 . 1918) (LOADUP-FULL 1920 . 4348) (FIXMETA 4350 . 4596))))) + (FILEMAP (NIL (467 4483 (LOADFULLFONTS 477 . 1918) (LOADUP-FULL 1920 . 4233) (FIXMETA 4235 . 4481))))) STOP diff --git a/sources/LOADUP-FULL.CM b/sources/LOADUP-FULL.CM index 3ba363d4..8ebb9a67 100644 --- a/sources/LOADUP-FULL.CM +++ b/sources/LOADUP-FULL.CM @@ -1 +1 @@ -" (PROGN(IL:LOAD(IL:CONCAT(QUOTE {DSK})(IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE /sources/LOADUP-FULL.LCOM)))(IL:LOADUP-FULL)(IL:HARDRESET)) SHH(PROGN(IL:ENDLOADUP)(IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /full.sysout))) :FULL)) (IL:LOGOUT T) " \ No newline at end of file +" (PROGN (IL:LOAD(IL:CONCAT(QUOTE {DSK})(IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE /sources/LOADUP-FULL.LCOM))) (IL:LOADUP-FULL (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /full.dribble)))) (IL:HARDRESET) ) SHH (PROGN (IL:ENDLOADUP) (IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /full.sysout))) :FULL)) (IL:LOGOUT T) ) " \ No newline at end of file diff --git a/sources/LOADUP-FULL.LCOM b/sources/LOADUP-FULL.LCOM index 2db7026c038af6c2705c6700cec9fdbf4eb20cc1..518982003d573a98392da20b61201494ded38524 100644 GIT binary patch delta 638 zcmZuvO>fgc5RH4NND3!FRJ5Rng+x**k;m)LoJis|Z0p#T?I_AIN-CfPT7h#xg8l`9 ze+LH??)(PMTsd;&2e6Kkh_5|7y?Ha5eLJ&X4?i8eAKqZpJf6>*x~4Ob)7IU#W-p$f zTpA6if8{i%O^%9ua{l6C_F#%ey;3Pl&7~U@_e~cVzq=7dsv)SC)eXArEs=a;)+goif`5WCE51o0+3DU1yRa} zAWOqggkCg^L8gWv>UaZ58ABk_EFNSaomR3x2m(I}vlK+uwotQ>@gz2}Mg2IC?rmhE&m;K~6MZgcI+C8`&OnB_e6x33*(X9hj?ygcB_ht! sOfItDfX#}JSNB!Jh3d~|GtAD%)AJY*pQ-hi!&#kEE&@|@F6y$h zeA_wWH6YhDN_8gbTp^Gq^W&50vk^>YP$5PTL~uQ@(P$7D4b$=He+fiNYL%+(xK=x~ zjMy@72Ay{xDnx+gXLW;vq=-tE3T&I#jm2T!CI`lKk?K@ie%uq->bLM~qiO>M&*)gu zAj)%h4bK7_7&xYDHG!Si_uzv7r|<}fK8=D&ye@voLC z8kkOK9kpXW928SCG-xd{ zdV#0}CYlYJx@J`6BAH5|)j``@JsX-=LntzM7MeG}^dL5`F4@;geaNW>yZsk_-F3Rw zE{>+&xT*|VZQl!AoRmWBc$SZo;wlarry>il>medley>sources>LOADUP-LISP.;2| 5263 - - :EDIT-BY "lmm" +(FILECREATED "31-Jul-2023 18:22:53" |{DSK}frank>il>medley>gmedley>sources>LOADUP-LISP.;2| 5235 :CHANGES-TO (FNS LOADUP-LISP) - :PREVIOUS-DATE "12-Aug-2022 12:29:57" |{DSK}larry>il>medley>sources>LOADUP-LISP.;1|) + :PREVIOUS-DATE "27-Feb-2023 17:15:53" +|{DSK}frank>il>medley>gmedley>sources>LOADUP-LISP.;1|) (PRETTYCOMPRINT LOADUP-LISPCOMS) @@ -19,13 +18,13 @@ (DEFINEQ (LOADUP-LISP - (LAMBDA NIL (* \; "Edited 26-Feb-2023 12:17 by lmm") + (LAMBDA (DRIBBLEFILE) (* \; "Edited 26-Feb-2023 12:17 by lmm") (* \; "Edited 13-Jul-2022 14:09 by rmk") (* \; "Edited 4-Mar-2022 19:13 by larry") (* \; "Edited 29-Apr-2021 22:30 by rmk:") (SETQQ COMPILE.EXT LCOM) (MEDLEY-INIT-VARS) (* \; "should be set earlier") - (DRIBBLE (MEDLEYDIR "tmp" "lisp.dribble" T)) + (DRIBBLE DRIBBLEFILE) (FOR X IN BOOTLOADEDFILES DO (CL:UNLESS (MEMB X SYSFILES) (PRINTOUT T X " bootloaded" T) (SETQ SYSFILES (CONS X SYSFILES)))) @@ -124,5 +123,5 @@ (GLOBALVARS MAKESYSFILENAME MEDLEY-INIT-VARS MEDLEYDIR SYSTEMINITVARS USERRECLST) ) (DECLARE\: DONTCOPY - (FILEMAP (NIL (654 5057 (LOADUP-LISP 664 . 5055))))) + (FILEMAP (NIL (649 5029 (LOADUP-LISP 659 . 5027))))) STOP diff --git a/sources/LOADUP-LISP.CM b/sources/LOADUP-LISP.CM index 150fb0ee..d08bdff7 100644 --- a/sources/LOADUP-LISP.CM +++ b/sources/LOADUP-LISP.CM @@ -1 +1 @@ -" (PROGN(LOAD(CONCAT(QUOTE {DSK})(UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE /sources/LOADUP-LISP.LCOM)))(LOADUP-LISP)(HARDRESET)) SHH(PROGN(IL:ENDLOADUP)':MEDLEY)(IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /lisp.sysout))))) (IL:LOGOUT T) " \ No newline at end of file +" (PROGN (LOAD(CONCAT(QUOTE {DSK})(UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE /sources/LOADUP-LISP.LCOM))) (LOADUP-LISP(CONCAT(QUOTE {DSK})(UNIX-GETENV(QUOTE LOADUP_WORKDIR))(QUOTE /lisp.dribble))) (HARDRESET) ) SHH (PROGN (IL:ENDLOADUP)':MEDLEY) (IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /lisp.sysout))))) (IL:LOGOUT T) ) " \ No newline at end of file diff --git a/sources/LOADUP-LISP.LCOM b/sources/LOADUP-LISP.LCOM index 8e01adf6921b2a5f9bc93bd2c7f74f25e296318e..46a716e563eadef79e7c50efe17e315594777aa3 100644 GIT binary patch delta 1107 zcmaiy&rcIU6vydeC@f6~5itRRkD{?PX|wZY+in}vFzt?YZMT%&Mc`!6RwNc`NHtMw zdh$eKBoi+l{3r12-J1uaSN{UNnRs(Ht&BfN+{5g5-+tfs^CmN2=iko1T$`aJb>m?> zg$7a}Rsm^&7)PxO({~TH_wN^X+r_)z??J!oHU z_Mo@B-vd3)8Vw(QH>cBS>1%FxTheq&4AOW~Ph4|qyzFrnaQhzWyn+8uRgna zud~-Go;K&w8JYoIh)DWqZFW)rpM610X!BDJ7+`x&sZ`_P3}RVJoqHY8Mj|^S@;M(a z>veVWhxvIET{)K;0j-T-PLG+4RHDm=yOOojo?I_^yJ%%(z3kR}mw5s6D&Ze(e#`gFj4ZV_C{U0u28wSJE2Bi_pk54f4)o_?&JX=cm~&~8ggKk? sWuiEoe5A?#(O4zyufKR76owmDG;LCWP%DAj3Z6`dq^hIb+0Mllit5Bpuxh8lc4#Z6q>0){NmI22 z2?)x>!~(KdSeO}6k(e3T*eW4LCI(hko=M5IQt@#9@7=xsdw2IfF8*44b$^~RsoZW# zG)rY5OedKDz{wEcqZ~&$ zj&dC3ILdJpaptD&0zHEvi*gp;C^*Bv9RP&G2!|04BOFFJjBps?XCp*`;zqq{)&RW% z%d2@dFct7uC4lcd5~>2OHFS$0tK%1tvlufSYumIvK%3D-va8q^4-C)8R#WgWuCZ?U z+kVw>@zDqaeY6h`%AkZ@LICrvQn2CKmJcMWU6^YsU~(Bd)`zQkjZYLU{CP#3RI)U@ zHuYvM&mdK_D@8kSjhdeZnX&NG)N($D@sjKKuHglSSBX~CQRu8=FrZ*ytK>-5R^S;} zHpnsy=i-?KtT0vd*3Hc-?!wYjf$dr-vn+fV7X^)l!}u*B&%$?c5D@q|J}=~0cpCq5 zJ%SjfX?S*UFAY>-;fHBcK;PffrvhQ&*O|3Riav9RLgeEoUPM0M5-X9R+BMETO}nm}3DpIutXX&^$g-#_m58?AOrL=1@C&e1`pb=YY(yKNDB1;pdt K!O7d%h1ehet16=a From f514dd04c2dac66cb8450dd6a0c56b18aad7ba1a Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Tue, 1 Aug 2023 22:59:01 -0700 Subject: [PATCH 07/36] First full pass at loadups revamp. --- internal/MEDLEY-UTILS | 23 +++++++++++---------- internal/MEDLEY-UTILS.LCOM | Bin 7148 -> 7317 bytes scripts/copy-all.sh | 27 ++++++++++++++----------- scripts/copy-db.sh | 9 +++++++-- scripts/cpv | 7 ++++--- scripts/loadup-apps-from-full.sh | 33 ++++++++++++++++++++++++++++--- scripts/loadup-aux.sh | 8 ++++---- scripts/loadup-db-from-full.sh | 17 ++++++++++++---- scripts/loadup-full-from-lisp.sh | 24 +++++++++++++++++++--- scripts/loadup-full.sh | 11 +++++------ scripts/loadup-init.sh | 27 ++++++++++++++++++++++--- scripts/loadup-lisp-from-mid.sh | 24 +++++++++++++++++++--- scripts/loadup-mid-from-init.sh | 18 ++++++++++++++--- scripts/loadup-setup.sh | 15 ++++++++++---- 14 files changed, 184 insertions(+), 59 deletions(-) diff --git a/internal/MEDLEY-UTILS b/internal/MEDLEY-UTILS index c4c6c9ca..47d52d5e 100644 --- a/internal/MEDLEY-UTILS +++ b/internal/MEDLEY-UTILS @@ -1,11 +1,11 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "XCL" BASE 10) -(FILECREATED "31-Jul-2023 18:34:20" |{DSK}frank>il>medley>gmedley>internal>MEDLEY-UTILS.;3| 10550 +(FILECREATED " 1-Aug-2023 22:43:13" |{DSK}frank>il>medley>gmedley>internal>MEDLEY-UTILS.;5| 10714 - :CHANGES-TO (FNS MAKE-WHEREIS-HASH) + :CHANGES-TO (FNS MAKE-FULLER-DB) - :PREVIOUS-DATE "31-Jul-2023 18:07:23" -|{DSK}frank>il>medley>gmedley>internal>MEDLEY-UTILS.;2|) + :PREVIOUS-DATE " 1-Aug-2023 22:22:02" +|{DSK}frank>il>medley>gmedley>internal>MEDLEY-UTILS.;4|) (PRETTYCOMPRINT MEDLEY-UTILSCOMS) @@ -105,14 +105,17 @@ (* \; "Edited 20-Jun-2022 17:23 by larry") (FILESLOAD (SOURCE) FILESETS) - (DRIBBLE (MEDLEYDIR "tmp" "fuller.dribble" T T)) + (DRIBBLE (CONCAT "{DSK}" (UNIX-GETENV "LOADUP_WORKDIR") + "/" "fuller.dribble")) (DOFILESLOAD (SUBSET (APPEND OKSOURCES OKLIBRARY OKLISPUSERS OKINTERNAL) 'FINDFILE)) (GATHER-INFO 'ALL) (MASTERSCOPE '(WHO CALLS XYZZY)) - (DUMPDATABASE NIL (MKATOM (MEDLEYDIR "tmp" "fuller.database" T T))) + (DUMPDATABASE NIL (MKATOM (CONCAT "{DSK}" (UNIX-GETENV "LOADUP_WORKDIR") + "/" "fuller.database"))) (DRIBBLE) - (MAKESYS (MEDLEYDIR "tmp" "fuller.sysout" T T) + (MAKESYS (CONCAT "{DSK}" (UNIX-GETENV "LOADUP_WORKDIR") + "/" "fuller.sysout") "Welcome to Fuller sysout"))) (MEDLEY-FIX-LINKS @@ -175,7 +178,7 @@ (DRIBBLE)))) ) (DECLARE\: DONTCOPY - (FILEMAP (NIL (623 7498 (GATHER-INFO 633 . 6161) (MAKE-FULLER-DB 6163 . 6853) (MEDLEY-FIX-LINKS 6855 - . 7252) (MEDLEY-FIX-DATES 7254 . 7496)) (8537 10527 (MAKE-EXPORTS-ALL 8547 . 9575) (MAKE-WHEREIS-HASH - 9577 . 10525))))) + (FILEMAP (NIL (620 7662 (GATHER-INFO 630 . 6158) (MAKE-FULLER-DB 6160 . 7017) (MEDLEY-FIX-LINKS 7019 + . 7416) (MEDLEY-FIX-DATES 7418 . 7660)) (8701 10691 (MAKE-EXPORTS-ALL 8711 . 9739) (MAKE-WHEREIS-HASH + 9741 . 10689))))) STOP diff --git a/internal/MEDLEY-UTILS.LCOM b/internal/MEDLEY-UTILS.LCOM index acc62cc9a2efcc4c6fc909397450126bcadb30e3..4a353503f00571c86078e35bfd0c85c18b11ca6d 100644 GIT binary patch delta 773 zcmZva&2G~`5XWl{m6`*JPzB^R@+lFr@vgsOBMzJFrm^DK#&(*fDndzP5K^*MM5#wm@G79Tvb|JnJ?f9?Ha|8jo5I|ib#-k$4;R^Z_1_Ltu9d1S&lk;DuvG8|n>I6vp4X+fN9GDj zM6-#J|BznLR?qiEtnfw++$a{OUf4?%j)+GDG_Fw@O1Ue&k&K(eC+(-wZ620i=C7U~ z=U>b3H}SSyDdKv1fKRD-l@F>^v!Tm6A{pSR92=Tp&}1o)I)z@~ohc_G6~QSG%LX2M zjfO8Ur@(vN2(7RNOHeS8(P3%W#guLly1kE}1SciwTEs~+jIfOmIALiU&*%lM5Qs*A zhsBpl{E%_5O=x)mF9fhGxVT_ZBmz#sB0CFnw_+Gum%4Lrgc^H3)(&F-&A>lHGz*yT zV+ME$K<;Og%juU47E@>~CzEUj^KbL%a)Fn@!SctArf#*m4f1QO*%%Agz34+fj62+m z3lST>^Q3cyxq%xt&Fh(pw`DjQ&NI1$I_@a|I>tu;icR+bVnMav4xx!|6F3{3pATxF g8(T}`+2_${lF2}wJ0gY$z+xO6-Vtx6&#sRC0@H88UH||9 delta 659 zcmZuu(Q4Z;6s^0L#f%ZQ!Pddx;wSsTL9%RD_Sl0GDYaK8_N-)GN?#I^K_I20Ngf7a z`Gpm;uh?UMqo2}`sFXG(tkc8g>KvVOuB1QF?cwh)ZwPijFK4cYJOY@;#E%KOnsg7y z$^q*i644mbtD6J4i#Hk#3s&RdVlrO+PvH^EG3|DmiB>6CPw*#)RHlb2YJ94Z6_^+W z0jho(Z-bLWlp>XG!ert=T$JK#n)jv4mCF+obQr57Fss=3Xn5Dp_LG;!-zuxW+n#2LXX}6sNrNDFjR5HsM zhtPv|+T|L6fWX-qD+p#HSv~lw?}!MnEK?2OkW}c^hjoC# z`o5gaCYO!*&-ul2VW~TYU@gvns18SutorHUXgHr})Zg-mfPIqW&{D1vz70-K2aXB5 cs>|tUG}EH3#s}M$dB1E4M~!xEzdo>>>> START ${script_name}" + # was # cp -p tmp/full.sysout tmp/lisp.sysout tmp/*.dribble tmp/whereis.hash loadups/ # cp -p tmp/exports.all tmp/RDSYS tmp/RDSYS.LCOM library/ # just copy the files that are released -./scripts/cpv ${LOADUP_WORKDIR}/full.sysout loadups -./scripts/cpv ${LOADUP_WORKDIR}/lisp.sysout loadups +./scripts/cpv "${LOADUP_WORKDIR}"/full.sysout loadups +./scripts/cpv "${LOADUP_WORKDIR}"/lisp.sysout loadups if [ "${1}" = "-apps" ]; then - ./scripts/cpv ${LOADUP_WORKDIR}/apps.sysout loadups + ./scripts/cpv "${LOADUP_WORKDIR}"/apps.sysout loadups fi -./scripts/cpv ${LOADUP_WORKDIR}/whereis.hash loadups -./scripts/cpv ${LOADUP_WORKDIR}/exports.all loadups +./scripts/cpv "${LOADUP_WORKDIR}"/whereis.hash loadups +./scripts/cpv "${LOADUP_WORKDIR}"/exports.all loadups -./scripts/cpv ${LOADUP_WORKDIR}/init.dribble loadups -./scripts/cpv ${LOADUP_WORKDIR}/lisp.dribble loadups -./scripts/cpv ${LOADUP_WORKDIR}/full.dribble loadups -./scripts/cpv ${LOADUP_WORKDIR}/whereis.dribble loadups +./scripts/cpv "${LOADUP_WORKDIR}"/init.dribble loadups +./scripts/cpv "${LOADUP_WORKDIR}"/lisp.dribble loadups +./scripts/cpv "${LOADUP_WORKDIR}"/full.dribble loadups +./scripts/cpv "${LOADUP_WORKDIR}"/whereis.dribble loadups -./scripts/cpv ${LOADUP_WORKDIR}/RDSYS library -./scripts/cpv ${LOADUP_WORKDIR}/RDSYS.LCOM library +./scripts/cpv "${LOADUP_WORKDIR}"/RDSYS library +./scripts/cpv "${LOADUP_WORKDIR}"/RDSYS.LCOM library +echo "<<<<< END ${script_name}" +echo "" +exit 0 diff --git a/scripts/copy-db.sh b/scripts/copy-db.sh index 25044ad1..4c22b420 100755 --- a/scripts/copy-db.sh +++ b/scripts/copy-db.sh @@ -7,6 +7,11 @@ fi . scripts/loadup-setup.sh -./scripts/cpv ${LOADUP_WORKDIR}/fuller.database loadups -./scripts/cpv ${LOADUP_WORKDIR}/fuller.dribble loadups +echo ">>>>> START ${script_name}" +./scripts/cpv "${LOADUP_WORKDIR}"/fuller.database loadups +./scripts/cpv "${LOADUP_WORKDIR}"/fuller.dribble loadups + +echo "<<<<< END ${script_name}" +echo "" +exit 0 diff --git a/scripts/cpv b/scripts/cpv index 7f0e7ece..4d84e663 100755 --- a/scripts/cpv +++ b/scripts/cpv @@ -2,7 +2,6 @@ # cpv file dest # could extend with -r or copying multiple files -# could change from cp to ln ln_or_cp () { f=$(df $(dirname $1) | tail -1 | awk '{ print $1 }') @@ -14,9 +13,8 @@ ln_or_cp () { file="$1" dest="$2" - if [ ! -f "$file" ]; then - echo no such file "$file" + echo "Error: no such file "$file". Exiting." exit 1 fi @@ -34,6 +32,7 @@ fi # if no such file $dest then just copy if [ ! -f "$dest" ]; then $(ln_or_cp $file $dest) $file $dest + echo "Added $(basename $dest) to $(dirname $dest)" exit 0 fi @@ -67,5 +66,7 @@ fi # make new version and link it $(ln_or_cp $file $dest.~new~) $file $dest.~$new~ +echo "Added $(basename $dest.~$new~) to $(dirname $dest.~$new~)" rm -f $dest ln $dest.~$new~ $dest +echo "Linked $(basename $dest) to $(basename $dest.~$new~) in $(dirname $dest)" diff --git a/scripts/loadup-apps-from-full.sh b/scripts/loadup-apps-from-full.sh index d7b6cb7d..c4ba2e47 100755 --- a/scripts/loadup-apps-from-full.sh +++ b/scripts/loadup-apps-from-full.sh @@ -7,7 +7,7 @@ fi . scripts/loadup-setup.sh -loadup_start "loadup-apps-from-full" +loadup_start export ROOMSDIR=${MEDLEYDIR}/rooms export CLOSDIR=${MEDLEYDIR}/clos @@ -23,8 +23,35 @@ if [ ! -e ${NOTECARDSDIR} ]; then fi fi -./run-medley $scr -loadup "${MEDLEYDIR}/sources/LOADUP-APPS.CM" "${LOADUP_WORKDIR}/full.sysout" +cat >"${cmfile}" <<"EOF" +" -loadup_finish "loadup-apps-from-full" "apps.sysout" "apps.*" +(PROGN + (IL:MEDLEY-INIT-VARS 'IL:GREET) + (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE NOTECARDSDIR))(QUOTE |/system/NOTECARDS.LCOM|)) 'IL:SYSLOAD) + (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE ROOMSDIR))(QUOTE /ROOMS)) 'IL:SYSLOAD) + (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE CLOSDIR))(QUOTE /DEFSYS.DFASL)) 'IL:SYSLOAD) + (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE |lispusers/BUTTONS.LCOM|)) 'IL:SYSLOAD) + (IL:LOAD + (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE |/sources/LOADUP-APPS.LCOM|)) + 'IL:SYSLOAD + ) + (IL:HARDRESET) +) +SHH +(PROGN + (IL:ENDLOADUP) + (CLOS::LOAD-CLOS) + (IL:|Apps.LOADUP|) + (IL:MAKESYS + (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /apps.sysout))) + :APPS) +) +(IL:LOGOUT T) +" +EOF +./run-medley ${scr} -loadup "${cmfile}" "${LOADUP_WORKDIR}/full.sysout" + +loadup_finish "apps.sysout" "apps.*" diff --git a/scripts/loadup-aux.sh b/scripts/loadup-aux.sh index f0abfb47..4a48f779 100755 --- a/scripts/loadup-aux.sh +++ b/scripts/loadup-aux.sh @@ -7,9 +7,9 @@ fi . scripts/loadup-setup.sh -loadup_start "loadup-aux" +loadup_start -cat >"${LOADUP_WORKDIR}"/loadup-aux.cm <<"EOF" +cat >"${cmfile}" <<"EOF" " (IL:MEDLEY-INIT-VARS) (IL:LOAD(QUOTE MEDLEY-UTILS)) @@ -19,6 +19,6 @@ cat >"${LOADUP_WORKDIR}"/loadup-aux.cm <<"EOF" " EOF -./run-medley $scr -loadup "${LOADUP_WORKDIR}"/loadup-aux.cm "${LOADUP_WORKDIR}"/full.sysout +./run-medley ${scr} -loadup "${cmfile}" "${LOADUP_WORKDIR}"/full.sysout -loadup_finish "loadup-aux" "whereis.hash" "whereis.hash" "exports.all" +loadup_finish "whereis.hash" "whereis.hash" "exports.all" diff --git a/scripts/loadup-db-from-full.sh b/scripts/loadup-db-from-full.sh index b1793a11..c972491a 100755 --- a/scripts/loadup-db-from-full.sh +++ b/scripts/loadup-db-from-full.sh @@ -7,11 +7,20 @@ fi . scripts/loadup-setup.sh -DBCM="${LOADUP_WORKDIR}"/db.cm +loadup_start -echo '" (IL:MEDLEY-INIT-VARS)(IL:FILESLOAD MEDLEY-UTILS)(IL:MAKE-FULLER-DB)(IL:LOGOUT T)"' > ${DBCM} +cat >"${cmfile}" <<"EOF" +" -./run-medley $scr -loadup "${DBCM}" -full +(IL:MEDLEY-INIT-VARS) +(IL:FILESLOAD MEDLEY-UTILS) +(IL:MAKE-FULLER-DB) +(IL:LOGOUT T) -loadup_finish "loadup-db" "fuller.database" "fuller*" +" +EOF + +./run-medley ${scr} -loadup "${cmfile}" -full + +loadup_finish "fuller.database" "fuller*" diff --git a/scripts/loadup-full-from-lisp.sh b/scripts/loadup-full-from-lisp.sh index 351ab260..6c027ec4 100755 --- a/scripts/loadup-full-from-lisp.sh +++ b/scripts/loadup-full-from-lisp.sh @@ -7,9 +7,27 @@ fi . scripts/loadup-setup.sh -loadup_start "loadup-full-from-lisp" +loadup_start -./run-medley $scr -loadup "$MEDLEYDIR/sources/LOADUP-FULL.CM" "${LOADUP_WORKDIR}/lisp.sysout" +cat >"${cmfile}" <<"EOF" +" -loadup_finish "loadup-full-from-lisp" "full.sysout" "full.*" +(PROGN + (IL:LOAD(IL:CONCAT(QUOTE {DSK})(IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE /sources/LOADUP-FULL.LCOM))) + (IL:LOADUP-FULL (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /full.dribble)))) + (IL:HARDRESET) +) +SHH +(PROGN + (IL:ENDLOADUP) + (IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /full.sysout))) :FULL)) + (IL:LOGOUT T) +) + +" +EOF + +./run-medley ${scr} -loadup "${cmfile}" "${LOADUP_WORKDIR}/lisp.sysout" + +loadup_finish "full.sysout" "full.*" diff --git a/scripts/loadup-full.sh b/scripts/loadup-full.sh index a3a06fe1..a49fdd5a 100755 --- a/scripts/loadup-full.sh +++ b/scripts/loadup-full.sh @@ -1,15 +1,14 @@ #!/bin/sh -export MEDLEYDIR=`pwd` - if [ ! -x run-medley ] ; then echo must run from MEDLEYDIR ; exit 1 ; fi +. ./scripts/loadup-setup.sh - ./scripts/loadup-init.sh && \ - ./scripts/loadup-mid-from-init.sh && \ - ./scripts/loadup-lisp-from-mid.sh && \ - ./scripts/loadup-full-from-lisp.sh +./scripts/loadup-init.sh && \ +./scripts/loadup-mid-from-init.sh && \ +./scripts/loadup-lisp-from-mid.sh && \ +./scripts/loadup-full-from-lisp.sh diff --git a/scripts/loadup-init.sh b/scripts/loadup-init.sh index 4c7be321..e08f8ad5 100755 --- a/scripts/loadup-init.sh +++ b/scripts/loadup-init.sh @@ -7,8 +7,29 @@ fi . scripts/loadup-setup.sh -loadup_start "loadup-init" +loadup_start -./run-medley $scr -loadup "${MEDLEYDIR}"/sources/LOADUP-INIT.LISP loadups/starter.sysout +cat >"${cmfile}" <<"EOF" +(* "make init files; this file is loaded as a 'greet' file by scripts/loadup-init.sh") -loadup_finish "loadup-init" "init.dlinit" "init.*" "RDSYS*" "I-NEW*" +(LOAD (CONCAT (UNIX-GETENV "MEDLEYDIR") "/sources/MEDLEYDIR.LCOM")) +(CNDIR (UNIX-GETENV "LOADUP_WORKDIR")) +(DRIBBLE "init.dribble") + +(UNADVISE) +(ADVISE 'PAGEFULLFN '(RETURN)) +(ADVISE '(ERROR IN \DO-DEFINE-FILE-INFO) '(RETURN)) +(MOVD? 'NILL 'SETTEMPLATE) +(DEFINEQ (RRE (LAMBDA (X Y) Y))) +(MOVD? 'RRE 'READ-READER-ENVIRONMENT) + +(LOAD (MEDLEYDIR "sources" "MAKEINIT.LCOM")) +(MAKEINITGREET) +(DRIBBLE) +(LOGOUT T) +STOP +EOF + +./run-medley $scr -loadup "${cmfile}" loadups/starter.sysout + +loadup_finish "init.dlinit" "init.*" "RDSYS*" "I-NEW*" diff --git a/scripts/loadup-lisp-from-mid.sh b/scripts/loadup-lisp-from-mid.sh index 283b8ba6..7233f85b 100755 --- a/scripts/loadup-lisp-from-mid.sh +++ b/scripts/loadup-lisp-from-mid.sh @@ -7,8 +7,26 @@ fi . scripts/loadup-setup.sh -loadup_start "loadup-lisp-from-mid" +loadup_start -./run-medley $scr -loadup "$MEDLEYDIR/sources/LOADUP-LISP.CM" ${LOADUP_WORKDIR}/init-mid.sysout +cat >"${cmfile}" <<"EOF" +" -loadup_finish "loadup-lisp-from-mid" "lisp.sysout" "lisp.*" +(PROGN + (LOAD(CONCAT(QUOTE {DSK})(UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE /sources/LOADUP-LISP.LCOM))) + (LOADUP-LISP(CONCAT(QUOTE {DSK})(UNIX-GETENV(QUOTE LOADUP_WORKDIR))(QUOTE /lisp.dribble))) + (HARDRESET) +) +SHH +(PROGN + (IL:ENDLOADUP) + (IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /lisp.sysout))) :LISP) + (IL:LOGOUT T) +) + +" +EOF + +./run-medley ${scr} -loadup "${cmfile}" "${LOADUP_WORKDIR}/init-mid.sysout" + +loadup_finish "lisp.sysout" "lisp.*" diff --git a/scripts/loadup-mid-from-init.sh b/scripts/loadup-mid-from-init.sh index d5f4ff26..7efc13e4 100755 --- a/scripts/loadup-mid-from-init.sh +++ b/scripts/loadup-mid-from-init.sh @@ -7,8 +7,20 @@ fi . scripts/loadup-setup.sh -loadup_start "loadup-mid-from-init" +loadup_start -./run-medley -prog "ldeinit" -NF -loadup $MEDLEYDIR/sources/XREM.CM $scr -vmem ${LOADUP_WORKDIR}/init-mid.sysout ${LOADUP_WORKDIR}/init.dlinit +cat >"${cmfile}" <<"EOF" +" +(MOVD? (QUOTE NILL) (QUOTE PROMPTPRINT)) +(MOVD? (QUOTE NILL) (QUOTE CURSORP)) +(MOVD? (QUOTE NILL) (QUOTE CHANGEBACKGROUNDBORDER)) +(LOGOUT) +" +EOF -loadup_finish "loadup-mid-from-init" "init-mid.sysout" "init-mid.sysout" +./run-medley -prog "ldeinit" \ + -NF \ + -loadup "${cmfile}" ${scr} -vmem "${LOADUP_WORKDIR}/init-mid.sysout" \ + "${LOADUP_WORKDIR}/init.dlinit" + +loadup_finish "init-mid.sysout" "init-mid.sysout" diff --git a/scripts/loadup-setup.sh b/scripts/loadup-setup.sh index 2fca51be..98e15150 100644 --- a/scripts/loadup-setup.sh +++ b/scripts/loadup-setup.sh @@ -12,14 +12,20 @@ scr="-sc 1024x768 -g 1042x790" touch "${LOADUP_WORKDIR}"/loadup.timestamp +script_name=$(basename "$0" ".sh") +cmfile="${LOADUP_WORKDIR}/${script_name}.cm" + + +###################################################################### loadup_start () { - echo ">>>>> START ${1}" + echo ">>>>> START ${script_name}" } loadup_finish () { - local script_name=${1} - if [ "${LOADUP_WORKDIR}/${2}" -nt "${LOADUP_WORKDIR}"/loadup.timestamp ]; + local exit_code + rm -f "${cmfile}" + if [ "${LOADUP_WORKDIR}/${1}" -nt "${LOADUP_WORKDIR}"/loadup.timestamp ]; then echo "+++++ SUCCESS +++++" exit_code=0 @@ -28,7 +34,7 @@ loadup_finish () { exit_code=1 fi echo "..... files created ....." - shift; shift + shift; for f in ${*}; do ls -l "${LOADUP_WORKDIR}"/$f 2>/dev/null @@ -38,5 +44,6 @@ loadup_finish () { exit ${exit_code} } +###################################################################### From f9838ac631c3bcd21a23786430fa006d8329ae36 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Tue, 1 Aug 2023 23:41:39 -0700 Subject: [PATCH 08/36] Handle case where files already exist in LOADUP_WORKDIR - show only the newly created files - not the old ones --- scripts/loadup-setup.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/scripts/loadup-setup.sh b/scripts/loadup-setup.sh index 98e15150..d838dca4 100644 --- a/scripts/loadup-setup.sh +++ b/scripts/loadup-setup.sh @@ -37,7 +37,13 @@ loadup_finish () { shift; for f in ${*}; do - ls -l "${LOADUP_WORKDIR}"/$f 2>/dev/null + for ff in $(ls -1 "${LOADUP_WORKDIR}"/$f); + do + if [ "${ff}" -nt "${LOADUP_WORKDIR}"/loadup.timestamp ]; + then + ls -l ${ff} 2>/dev/null | grep -v "^.*~[0-9]\+~$" + fi + done done echo "<<<<< END ${script_name}" echo "" From 48c9a82a1c4aa795e46de09c7a9e5bad47274c17 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Wed, 2 Aug 2023 01:02:12 -0700 Subject: [PATCH 09/36] Remove now obsolete sources/*.CM files; update README a bit --- scripts/README.md | 22 +++++++++++++++++----- sources/LOADUP-APPS.CM | 1 - sources/LOADUP-FULL.CM | 1 - sources/LOADUP-INIT.LISP | 19 ------------------- sources/LOADUP-LISP.CM | 1 - sources/XREM.CM | 6 ------ 6 files changed, 17 insertions(+), 33 deletions(-) delete mode 100644 sources/LOADUP-APPS.CM delete mode 100644 sources/LOADUP-FULL.CM delete mode 100644 sources/LOADUP-INIT.LISP delete mode 100644 sources/LOADUP-LISP.CM delete mode 100644 sources/XREM.CM diff --git a/scripts/README.md b/scripts/README.md index d4dd7da1..413d08e1 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -7,18 +7,30 @@ Loading from an old 'starter' sysout * loadup-mid-from-init.sh -- phase 2 (creates init.sysout) * loadup-lisp-from-mid.sh -- phase 3 (creates lisp.sysout) * loadup-full-from-lisp.sh -- phase 4 (creates full.sysout) -* loadup-aux.sh -- phase 5,(creates exports.all whereis.hash +* loadup-apps-from-full.sh -- phase 5 (creates app.sysout, with notecards, rooms and clos; optional) +* loadup-aux.sh -- phase 6 (creates exports.all whereis.hash) +* loadup-db-from-full.sh -- phase 7 (makes unreleased 'fuller.sysout' and fuller.database) -* loadup-full.sh -- Phase 1-4 only +All of these scripts read from and write to a directory specified by the env variable LOADUP_WORKDIR. +LOADUP_WORKDIR defaults to /tmp/loadups-$$ (where $$ is the PID of the script). Note that all /tmp files +are cleared after 10 days or upon system reboot. You can replicate the old work directory scheme +where files were never deleted automatically by simply setting LOADUP_WORKDIR to "./tmp" -* loadup-db.sh -- phase 6 (makes unreleased 'fuller.sysout' and fuller.database -* copy-all.sh -- copy loadups from tmp/ to loadups/ and library/ +* loadup-all.sh [-apps] -- Phases 1-4 & 6 (plus Phase 5 with -apps flag) +* loadup-db.sh -- phase 7 only based on full.syout in loadup directory + +These two scripts call the 7 scripts above as specified and then (if successful) copy (ln) the results +to the loadups directory using a versioned copy. The files are hardlinked into loadups from the workdir +if workdir and loadups are on the same filesystem, otherwise they are copied. + +* loadup-full.sh -- Phases 1-4 only, no copy into loadups at the end. ## possibly handy scripts * lsee -- show lisp file with font-control-characters rendered as linux color changes -* cpv file1 file2 -- copies file1 to file2 (or directory name) adding versions +* cpv file1 file2 -- hardlinks (or copies) file1 to file2 (or directory name) adding versions + choice of hardlink or copy depends on whether the files are on the same filesystem. * restore-versions.sh -- pulls out old versions from git history and links in with medley versioning conventions ## Not useful anymore diff --git a/sources/LOADUP-APPS.CM b/sources/LOADUP-APPS.CM deleted file mode 100644 index f8d37768..00000000 --- a/sources/LOADUP-APPS.CM +++ /dev/null @@ -1 +0,0 @@ -" (PROGN (IL:MEDLEY-INIT-VARS 'IL:GREET) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE NOTECARDSDIR))(QUOTE |/system/NOTECARDS.LCOM|)) 'IL:SYSLOAD) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE ROOMSDIR))(QUOTE /ROOMS)) 'IL:SYSLOAD) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE CLOSDIR))(QUOTE /DEFSYS.DFASL)) 'IL:SYSLOAD) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE |lispusers/BUTTONS.LCOM|)) 'IL:SYSLOAD) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE |/sources/LOADUP-APPS.LCOM|)) 'IL:SYSLOAD ) (IL:HARDRESET) ) SHH (PROGN (IL:ENDLOADUP) (CLOS::LOAD-CLOS) (IL:|Apps.LOADUP|) (IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /apps.sysout))) :APPS) ) (IL:LOGOUT T) " \ No newline at end of file diff --git a/sources/LOADUP-FULL.CM b/sources/LOADUP-FULL.CM deleted file mode 100644 index 8ebb9a67..00000000 --- a/sources/LOADUP-FULL.CM +++ /dev/null @@ -1 +0,0 @@ -" (PROGN (IL:LOAD(IL:CONCAT(QUOTE {DSK})(IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE /sources/LOADUP-FULL.LCOM))) (IL:LOADUP-FULL (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /full.dribble)))) (IL:HARDRESET) ) SHH (PROGN (IL:ENDLOADUP) (IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /full.sysout))) :FULL)) (IL:LOGOUT T) ) " \ No newline at end of file diff --git a/sources/LOADUP-INIT.LISP b/sources/LOADUP-INIT.LISP deleted file mode 100644 index 016338d7..00000000 --- a/sources/LOADUP-INIT.LISP +++ /dev/null @@ -1,19 +0,0 @@ -(* "make init files; this file is loaded as a 'greet' file by scripts/loadup-init.sh") - -(LOAD (CONCAT (UNIX-GETENV "MEDLEYDIR") "/sources/MEDLEYDIR.LCOM")) -(CNDIR (UNIX-GETENV "LOADUP_WORKDIR")) -(DRIBBLE "init.dribble") - -(UNADVISE) -(ADVISE 'PAGEFULLFN '(RETURN)) -(ADVISE '(ERROR IN \DO-DEFINE-FILE-INFO) '(RETURN)) -(MOVD? 'NILL 'SETTEMPLATE) -(DEFINEQ (RRE (LAMBDA (X Y) Y))) -(MOVD? 'RRE 'READ-READER-ENVIRONMENT) - -(LOAD (MEDLEYDIR "sources" "MAKEINIT.LCOM")) -(MAKEINITGREET) -(DRIBBLE) -(LOGOUT T) -STOP - diff --git a/sources/LOADUP-LISP.CM b/sources/LOADUP-LISP.CM deleted file mode 100644 index d08bdff7..00000000 --- a/sources/LOADUP-LISP.CM +++ /dev/null @@ -1 +0,0 @@ -" (PROGN (LOAD(CONCAT(QUOTE {DSK})(UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE /sources/LOADUP-LISP.LCOM))) (LOADUP-LISP(CONCAT(QUOTE {DSK})(UNIX-GETENV(QUOTE LOADUP_WORKDIR))(QUOTE /lisp.dribble))) (HARDRESET) ) SHH (PROGN (IL:ENDLOADUP)':MEDLEY) (IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /lisp.sysout))))) (IL:LOGOUT T) ) " \ No newline at end of file diff --git a/sources/XREM.CM b/sources/XREM.CM deleted file mode 100644 index 1cd92bd7..00000000 --- a/sources/XREM.CM +++ /dev/null @@ -1,6 +0,0 @@ -" -(MOVD? (QUOTE NILL) (QUOTE PROMPTPRINT)) -(MOVD? (QUOTE NILL) (QUOTE CURSORP)) -(MOVD? (QUOTE NILL) (QUOTE CHANGEBACKGROUNDBORDER)) -(LOGOUT) -" From 9d26047d8c844d1081029d7b2d0c1d40d450d6a8 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Wed, 2 Aug 2023 13:41:36 -0700 Subject: [PATCH 10/36] WIP fixing up scripts/release_medley.sh and syncing with buildLoadup.yml --- .gitignore | 4 ++ scripts/release-make-tars.sh | 86 ++++++++++++++++++++++++++++++++++++ scripts/release-medley.sh | 49 +++++--------------- 3 files changed, 101 insertions(+), 38 deletions(-) create mode 100755 scripts/release-make-tars.sh diff --git a/.gitignore b/.gitignore index aeae2bea..223b84a6 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,10 @@ tmp/* +# releases directory +releases/* + + # all loadup files loadups/exports.all diff --git a/scripts/release-make-tars.sh b/scripts/release-make-tars.sh new file mode 100755 index 00000000..f62d9236 --- /dev/null +++ b/scripts/release-make-tars.sh @@ -0,0 +1,86 @@ +#!/bin/sh + +######### Functions ######## +check_exists () { + f="$1" + if [ -e "${f}" ] + then + echo "${f}" + else + echo "Warning: $f does not exist. $(basename ${f}) will not be included in release tars" 1>&2 + echo " " + fi +} +######## End Functions ####### + + +if [ ! -x run-medley ] ; then + echo run from MEDLEYDIR + exit 1 +fi +export MEDLEYDIR=`pwd` + +if [ -z "$1" ] ; then + tag=medley-$(date +%y%m%d)-$(date +%s) +else + tag="$1" +fi +short_tag="${tag#medley-}" + +dirname=$(basename "${MEDLEYDIR}") +if [ "${dirname}" = "medley" ] +then + name_xform=" " +else + uname | grep -q -i Linux + if [ $? -eq 0 ] + then + name_xform="--xform s/^${dirname}/medley/" + else + name_xform="-s /^${dirname}/medley/" + fi +fi + +cd .. +release_dir="${dirname}"/releases/"${short_tag}" +mkdir -p "${release_dir}" + +echo making releases/${short_tag}/$tag-loadups.tgz + + +tar -c -z -f "${release_dir}"/$tag-loadups.tgz \ + ${name_xform} \ + "${dirname}"/loadups/lisp.sysout \ + "${dirname}"/loadups/full.sysout \ + $(check_exists "${dirname}/loadups/apps.sysout") \ + "${dirname}"/loadups/*.dribble \ + "${dirname}"/loadups/whereis.hash \ + "${dirname}"/loadups/exports.all \ + $(check_exists "${dirname}/loadups/fuller.database") ; + +echo making releases/${short_tag}/$tag-runtime.tgz + +tar -c -z -f "${release_dir}"/$tag-runtime.tgz \ + --exclude "*~" --exclude "*#*" \ + --exclude exports.all \ + ${name_xform} \ + "${dirname}"/clos \ + "${dirname}"/docs/dinfo \ + "${dirname}"/docs/man-page/medley.1.gz \ + "${dirname}"/doctools \ + "${dirname}"/greetfiles \ + "${dirname}"/rooms \ + "${dirname}"/medley \ + "${dirname}"/run-medley \ + "${dirname}"/scripts \ + "${dirname}"/fonts/displayfonts \ + "${dirname}"/fonts/altofonts \ + "${dirname}"/fonts/adobe \ + "${dirname}"/fonts/postscriptfonts \ + "${dirname}"/fonts/ipfonts \ + "${dirname}"/library \ + "${dirname}"/lispusers \ + "${dirname}"/sources \ + "${dirname}"/internal ; + +echo "Done with release tars" diff --git a/scripts/release-medley.sh b/scripts/release-medley.sh index a4fcf0df..3834d7e9 100755 --- a/scripts/release-medley.sh +++ b/scripts/release-medley.sh @@ -6,48 +6,21 @@ if [ ! -x run-medley ] ; then exit 1 fi -tag=$1 - -if [ -z "$tag" ] ; then - tag=medley-`date +%y%m%d` +if [ -z "$1" ] ; then + tag=medley-$(date +%y%m%d)-$(date +%s) +else + tag="$1" fi +short_tag="${tag#medley-}" -cd .. - -echo making $tag-loadups.tgz - -tar cfz medley/tmp/$tag-loadups.tgz \ - medley/loadups/lisp.sysout \ - medley/loadups/full.sysout \ - medley/loadups/fuller.database \ - medley/loadups/*.dribble \ - medley/loadups/whereis.hash \ - medley/loadups//exports.all - -echo making $tag-runtime.tgz - -tar cfz medley/tmp/$tag-runtime.tgz \ - --exclude "*~" --exclude "*#*" \ - medley/docs/dinfo \ - medley/doctools \ - medley/greetfiles \ - medley/rooms \ - medley/run-medley \ - medley/scripts \ - medley/fonts/displayfonts medley/fonts/altofonts \ - medley/fonts/adobe \ - medley/fonts/postscriptfonts \ - medley/library \ - medley/lispusers \ - medley/sources \ - medley/internal - -cd medley +scripts/release-make-tars.sh "${tag}" echo making release -sed s/'$tag'/$tag/g < release-notes.md > tmp/release-notes.md -gh release create $tag -F tmp/release-notes.md -p -t $tag +sed s/'$tag'/$tag/g < release-notes.md > releases/${short_tag}/release-notes.md +gh release create $tag -F releases/${short_tag}/release-notes.md -p -t $tag echo uploading -gh release upload $tag tmp/$tag-loadups.tgz tmp/$tag-runtime.tgz --clobber +gh release upload $tag releases/${short_tag}/$tag-loadups.tgz releases/${short_tag}/$tag-runtime.tgz --clobber + +echo done From 41608a1b27745e499f53cbaa61119ee29355f764 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Wed, 2 Aug 2023 16:43:35 -0700 Subject: [PATCH 11/36] First pass a complete new make-release.sh --- scripts/README.md | 7 +++++++ scripts/release-medley.sh | 22 ++++++++++++++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/scripts/README.md b/scripts/README.md index 413d08e1..6430dfb0 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -25,6 +25,13 @@ if workdir and loadups are on the same filesystem, otherwise they are copied. * loadup-full.sh -- Phases 1-4 only, no copy into loadups at the end. +## releases + +* release-medley.sh -- will create Medley release tars and upload as a release on github. + Arguments: -d to make a draft release. to uses as a tag for this + release on github (defaults to meldey-\-\). + +* release-make-tars.sh -- will create the Medley release tars and store them in the releases directory. ## possibly handy scripts diff --git a/scripts/release-medley.sh b/scripts/release-medley.sh index 3834d7e9..68f5f77f 100755 --- a/scripts/release-medley.sh +++ b/scripts/release-medley.sh @@ -6,6 +6,24 @@ if [ ! -x run-medley ] ; then exit 1 fi +if [ -z "$(which gh)" ]; then + echo "Error: this script requires gh (github cli) to be installed. Exiting." + exit 1 +fi + +gh auth status 2>&1 | grep -i -q "Logged in to github.com" +if [ $? -ne 0 ]; then + echo 'Error: this script requires you to be logged into github. Use "gh auth login" to do so. Exiting.' + exit 1 +fi + +if [ "$1" = "-d" ]; then + draft="-d" + shift +else + draft="" +fi + if [ -z "$1" ] ; then tag=medley-$(date +%y%m%d)-$(date +%s) else @@ -17,10 +35,10 @@ scripts/release-make-tars.sh "${tag}" echo making release sed s/'$tag'/$tag/g < release-notes.md > releases/${short_tag}/release-notes.md -gh release create $tag -F releases/${short_tag}/release-notes.md -p -t $tag +gh release create $tag -F releases/${short_tag}/release-notes.md -p -t $tag ${draft} echo uploading gh release upload $tag releases/${short_tag}/$tag-loadups.tgz releases/${short_tag}/$tag-runtime.tgz --clobber -echo done +echo "Done with release ${tag}" From 0c9744455c673bb5803d8bc9e82535fe3a70cd81 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Wed, 2 Aug 2023 16:47:04 -0700 Subject: [PATCH 12/36] Fix scripts/README.md --- scripts/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/README.md b/scripts/README.md index 6430dfb0..f62e02bb 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -28,8 +28,9 @@ if workdir and loadups are on the same filesystem, otherwise they are copied. ## releases * release-medley.sh -- will create Medley release tars and upload as a release on github. - Arguments: -d to make a draft release. to uses as a tag for this + Arguments: -d to make a draft release. \ to use as a tag for this release on github (defaults to meldey-\-\). + Both are optional. * release-make-tars.sh -- will create the Medley release tars and store them in the releases directory. From 51ef95d30f0d0abc50366f36bed91b1f137f22e1 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Wed, 2 Aug 2023 22:03:38 -0700 Subject: [PATCH 13/36] update buildLOadup.yml to use new scripts/release-make-tars.sh instead of its almost but not quite equivalent make tars code --- .github/workflows/buildLoadup.yml | 41 +++---------------------------- 1 file changed, 3 insertions(+), 38 deletions(-) diff --git a/.github/workflows/buildLoadup.yml b/.github/workflows/buildLoadup.yml index e3d5b618..54da1136 100644 --- a/.github/workflows/buildLoadup.yml +++ b/.github/workflows/buildLoadup.yml @@ -228,45 +228,10 @@ jobs: scripts/loadup-all.sh -apps scripts/loadup-db.sh - - name: Build loadups release tar + - name: Build release tars run: | - cd .. - mkdir -p medley/${TARBALL_DIR} - tar cfz medley/${TARBALL_DIR}/${MEDLEY_RELEASE_TAG}-loadups.tgz \ - medley/loadups/lisp.sysout \ - medley/loadups/full.sysout \ - medley/loadups/apps.sysout \ - medley/loadups/whereis.hash \ - medley/loadups/*.dribble \ - medley/loadups/fuller.database \ - medley/loadups/exports.all - - - name: Build runtime release tar - run: | - cd .. - mkdir -p medley/${TARBALL_DIR} - tar cfz medley/${TARBALL_DIR}/${MEDLEY_RELEASE_TAG}-runtime.tgz \ - --exclude "*~" --exclude "*#*" \ - --exclude exports.all \ - medley/clos \ - medley/docs/dinfo \ - medley/docs/man-page/medley.1.gz \ - medley/doctools \ - medley/greetfiles \ - medley/rooms \ - medley/medley \ - medley/run-medley \ - medley/scripts \ - medley/fonts/displayfonts \ - medley/fonts/altofonts \ - medley/fonts/adobe \ - medley/fonts/postscriptfonts \ - medley/fonts/ipfonts \ - medley/library \ - medley/lispusers \ - medley/sources \ - medley/internal - + scripts/release-make-tars.sh "${MEDLEY_RELEASE_TAG}" + mv releases/"${MEDLEY_SHORT_RELEASE_TAG}"/*.tgz "${TARBALL_DIR}" # Build the deb files as well as the tgz files - name: Build .deb files for 3 architectures From 41f4489e9f7a1a5d949d8693fc2175948de3ea1b Mon Sep 17 00:00:00 2001 From: rmkaplan <69548581+rmkaplan@users.noreply.github.com> Date: Thu, 3 Aug 2023 14:15:16 -0700 Subject: [PATCH 14/36] LLREAD uses \INCCODE.EOLC instead of \INCCODE to coerce LF and CRLF to EOL(=CR) (#1300) --- sources/LLREAD | 37 +++++++++++++++++++------------------ sources/LLREAD.LCOM | Bin 22502 -> 22496 bytes 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/sources/LLREAD b/sources/LLREAD index 606e9bd1..7733498f 100644 --- a/sources/LLREAD +++ b/sources/LLREAD @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "17-Jun-2023 13:12:06" {WMEDLEY}LLREAD.;104 90176 +(FILECREATED "30-Jul-2023 17:42:27" {WMEDLEY}LLREAD.;105 90277 :EDIT-BY rmk - :CHANGES-TO (VARS LLREADCOMS CHARACTERNAMES) + :CHANGES-TO (FNS \SUBREAD) - :PREVIOUS-DATE "19-Jul-2022 23:36:54" {WMEDLEY}LLREAD.;102) + :PREVIOUS-DATE "17-Jun-2023 13:12:06" {WMEDLEY}LLREAD.;104) (* ; " @@ -629,6 +629,7 @@ Copyright (c) 1981-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation. (\SUBREAD [LAMBDA (STRM SA READTYPE PNSTR CASEBASE EOF-SUPPRESS EOF-VALUE CHAR PRESERVE-WHITESPACE) + (* ; "Edited 30-Jul-2023 17:42 by rmk") (* ; "Edited 19-Jul-2022 23:36 by rmk") (* ; "Edited 6-Aug-2021 21:40 by rmk:") @@ -674,7 +675,7 @@ Copyright (c) 1981-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation. then (* ;  "caller specified eof-error-p of NIL. Happens only on top-level calls") (RETURN EOF-VALUE)) (* ; "By Skipping Separator Characters,Happens CHARSET-Mode Exchanging. (Solution of AR#114 in FX, edited by tt [Jan-22-'90])") - (repeatwhile (EQ [SETQ SNX (\SYNCODE SA (SETQ CH (\INCCODE STRM] + (repeatwhile (EQ [SETQ SNX (\SYNCODE SA (SETQ CH (\INCCODE.EOLC STRM] SEPRCHAR.RC)) (COND ((EQ CH CHAR) (* ; @@ -782,7 +783,7 @@ Copyright (c) 1981-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation. (if (AND EOF-POSSIBILITY (SETQ AT-EOF (\EOFP STRM))) then (* ; "EOF terminates atoms at top level") (GO FINISHATOM) - elseif (EQ [SETQ SNX (\SYNCODE SA (SETQ CH (\INCCODE STRM] + elseif (EQ [SETQ SNX (\SYNCODE SA (SETQ CH (\INCCODE.EOLC STRM] OTHER.RC) then (* ;  "normal case tested first--another vanilla constituent char, so keep accumulating atom chars") @@ -1663,17 +1664,17 @@ Copyright (c) 1981-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation. (PUTPROPS LLREAD COPYRIGHT ("Venue & Xerox Corporation" 1981 1982 1983 1984 1985 1986 1987 1988 1990 1991 1993 2021)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (3460 11904 (LASTC 3470 . 3776) (PEEKC 3778 . 4166) (PEEKCCODE 4168 . 4579) (RATOM 4581 - . 5662) (READ 5664 . 6224) (READC 6226 . 6867) (READCCODE 6869 . 7628) (READP 7630 . 8182) ( -SETREADMACROFLG 8184 . 8483) (SKIPSEPRCODES 8485 . 9565) (SKIPSEPRS 9567 . 9953) (SKREAD 9955 . 11902) -) (11950 20559 (CL:READ 11960 . 12509) (CL:READ-PRESERVING-WHITESPACE 12511 . 13233) ( -CL:READ-DELIMITED-LIST 13235 . 14150) (CL:PARSE-INTEGER 14152 . 20557)) (20652 33129 (RSTRING 20662 . -21394) (READ-EXTENDED-TOKEN 21396 . 25268) (\RSTRING2 25270 . 33127)) (33165 63779 (\TOP-LEVEL-READ -33175 . 35158) (\SUBREAD 35160 . 60195) (\SUBREADCONCAT 60197 . 60820) (\ORIG-READ.SYMBOL 60822 . -61890) (\ORIG-INVALID.SYMBOL 61892 . 62791) (\APPLYREADMACRO 62793 . 63209) (INREADMACROP 63211 . -63777)) (63938 64113 (READQUOTE 63948 . 64111)) (64138 76042 (READVBAR 64148 . 65479) (READHASHMACRO -65481 . 71291) (DEFMACRO-LAMBDA-LIST-KEYWORD-P 71293 . 71513) (DIGITBASEP 71515 . 72249) ( -READNUMBERINBASE 72251 . 74137) (ESTIMATE-DIMENSIONALITY 74139 . 74464) (SKIP.HASH.COMMENT 74466 . -75434) (CMLREAD.FEATURE.PARSER 75436 . 76040)) (76086 82430 (CHARACTER.READ 76096 . 77350) ( -CHARCODE.DECODE 77352 . 82428)) (82431 85601 (HEXNUM? 82441 . 84784) (OCTALNUM? 84786 . 85599))))) + (FILEMAP (NIL (3442 11886 (LASTC 3452 . 3758) (PEEKC 3760 . 4148) (PEEKCCODE 4150 . 4561) (RATOM 4563 + . 5644) (READ 5646 . 6206) (READC 6208 . 6849) (READCCODE 6851 . 7610) (READP 7612 . 8164) ( +SETREADMACROFLG 8166 . 8465) (SKIPSEPRCODES 8467 . 9547) (SKIPSEPRS 9549 . 9935) (SKREAD 9937 . 11884) +) (11932 20541 (CL:READ 11942 . 12491) (CL:READ-PRESERVING-WHITESPACE 12493 . 13215) ( +CL:READ-DELIMITED-LIST 13217 . 14132) (CL:PARSE-INTEGER 14134 . 20539)) (20634 33111 (RSTRING 20644 . +21376) (READ-EXTENDED-TOKEN 21378 . 25250) (\RSTRING2 25252 . 33109)) (33147 63880 (\TOP-LEVEL-READ +33157 . 35140) (\SUBREAD 35142 . 60296) (\SUBREADCONCAT 60298 . 60921) (\ORIG-READ.SYMBOL 60923 . +61991) (\ORIG-INVALID.SYMBOL 61993 . 62892) (\APPLYREADMACRO 62894 . 63310) (INREADMACROP 63312 . +63878)) (64039 64214 (READQUOTE 64049 . 64212)) (64239 76143 (READVBAR 64249 . 65580) (READHASHMACRO +65582 . 71392) (DEFMACRO-LAMBDA-LIST-KEYWORD-P 71394 . 71614) (DIGITBASEP 71616 . 72350) ( +READNUMBERINBASE 72352 . 74238) (ESTIMATE-DIMENSIONALITY 74240 . 74565) (SKIP.HASH.COMMENT 74567 . +75535) (CMLREAD.FEATURE.PARSER 75537 . 76141)) (76187 82531 (CHARACTER.READ 76197 . 77451) ( +CHARCODE.DECODE 77453 . 82529)) (82532 85702 (HEXNUM? 82542 . 84885) (OCTALNUM? 84887 . 85700))))) STOP diff --git a/sources/LLREAD.LCOM b/sources/LLREAD.LCOM index 7783332caf0886aa1300db1043dc3fab7cc5a896..d2947fa369c44cd43efcb9af7940d5d008d39de5 100644 GIT binary patch delta 256 zcmaF1p7FtY#tGrV#s<1xr8&Ar21dpThUQi#Mpi}>v-ImtH5Is&j4TmyMut`<=2pfQ zN(xCusmb}d1(`XiDGI3-1x3ZGRthn}p-w@rjxGwBc?wEyp*}te$a?kk^pq4*5=(#@ zuo-G%rliTG;pXY%>I^g^#MMPXNd$|t%qOpBlw&tlurx3-H=pd!C@t&e7p%YqvszQZ sDj>);%+o(KSl0z;%488n)6M4?RrFc)T>X8VCx0@S0byKNkcq5!maaxbGHn}Vf*p}E=QKt^fTFvp-^E(ISSpb8gff8SsQ zXAj39N9PdNAU{W6*I-QrtAHTaFi-!`U|koW89*Z}f!@jidCN$_$k@u*%*xbc@_a@) VMx)L97*+HqKR1}Mxy3L>4FE7FM^FF& From e4c3a16ce497f45dbfcbd62056d7ac970298b1c7 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Mon, 31 Jul 2023 00:42:23 -0700 Subject: [PATCH 15/36] Remake loadup scripts to not use MEDLEYDIR/tmp as a working dir AND cleanly separate loadup-all from loadup-db; adjust buildLoadup.yml accordingly --- .github/workflows/buildLoadup.yml | 1 + scripts/copy-all.sh | 28 ++++++------- scripts/loadup-all.sh | 12 ++++-- scripts/loadup-apps-from-full.sh | 61 ++++------------------------ scripts/loadup-aux.sh | 22 ++-------- scripts/loadup-db.sh | 28 ++++++------- scripts/loadup-full-from-lisp.sh | 18 ++------- scripts/loadup-init.sh | 20 ++-------- scripts/loadup-lisp-from-mid.sh | 19 ++------- scripts/loadup-mid-from-init.sh | 20 ++-------- sources/LOADUP-APPS.CM | 2 +- sources/LOADUP-FULL.CM | 2 +- sources/LOADUP-INIT.LISP | 2 +- sources/LOADUP-LISP.CM | 2 +- sources/MAKEINIT | 64 ++++++++++++++---------------- sources/MAKEINIT.LCOM | Bin 23370 -> 23621 bytes 16 files changed, 92 insertions(+), 209 deletions(-) diff --git a/.github/workflows/buildLoadup.yml b/.github/workflows/buildLoadup.yml index 6a4c89dd..e3d5b618 100644 --- a/.github/workflows/buildLoadup.yml +++ b/.github/workflows/buildLoadup.yml @@ -226,6 +226,7 @@ jobs: export DISPLAY=":0" PATH="$PWD/maiko:$PATH" scripts/loadup-all.sh -apps + scripts/loadup-db.sh - name: Build loadups release tar run: | diff --git a/scripts/copy-all.sh b/scripts/copy-all.sh index 6dfd8eb9..3831f10f 100755 --- a/scripts/copy-all.sh +++ b/scripts/copy-all.sh @@ -1,30 +1,28 @@ #!/bin/sh -export MEDLEYDIR=`pwd` - if [ ! -x run-medley ] ; then echo run from MEDLEYDIR exit 1 fi +. scripts/loadup-setup.sh + # was # cp -p tmp/full.sysout tmp/lisp.sysout tmp/*.dribble tmp/whereis.hash loadups/ # cp -p tmp/exports.all tmp/RDSYS tmp/RDSYS.LCOM library/ # just copy the files that are released -./scripts/cpv tmp/init.dribble loadups -./scripts/cpv tmp/lisp.dribble loadups -./scripts/cpv tmp/full.dribble loadups -./scripts/cpv tmp/fuller.dribble loadups -./scripts/cpv tmp/whereis.dribble loadups - -./scripts/cpv tmp/fuller.database loadups - -./scripts/cpv tmp/full.sysout loadups -./scripts/cpv tmp/lisp.sysout loadups -./scripts/cpv tmp/whereis.hash loadups -./scripts/cpv tmp/exports.all loadups +./scripts/cpv ${LOADUP_WORKDIR}/full.sysout loadups +./scripts/cpv ${LOADUP_WORKDIR}/lisp.sysout loadups if [ "${1}" = "-apps" ]; then - ./scripts/cpv tmp/apps.sysout loadups + ./scripts/cpv ${LOADUP_WORKDIR}/apps.sysout loadups fi +./scripts/cpv ${LOADUP_WORKDIR}/whereis.hash loadups +./scripts/cpv ${LOADUP_WORKDIR}/exports.all loadups + +./scripts/cpv ${LOADUP_WORKDIR}/init.dribble loadups +./scripts/cpv ${LOADUP_WORKDIR}/lisp.dribble loadups +./scripts/cpv ${LOADUP_WORKDIR}/full.dribble loadups +./scripts/cpv ${LOADUP_WORKDIR}/whereis.dribble loadups + diff --git a/scripts/loadup-all.sh b/scripts/loadup-all.sh index c74f3280..5cc8f005 100755 --- a/scripts/loadup-all.sh +++ b/scripts/loadup-all.sh @@ -1,12 +1,12 @@ #!/bin/sh -export MEDLEYDIR=`pwd` - if [ ! -x run-medley ] ; then echo run from MEDLEYDIR exit 1 fi +. scripts/loadup-setup.sh + if [ "$1" = "-apps" ]; then apps="./scripts/loadup-apps-from-full.sh" else @@ -21,7 +21,13 @@ fi ./scripts/loadup-aux.sh && \ ./scripts/copy-all.sh $1 -echo "**** DONE ****" +if [ $? -eq 0 ]; +then + echo "+++++ loadup-all.sh: SUCCESS +++++" +else + echo "----- loadup-all.sh: FAILURE -----" +fi + diff --git a/scripts/loadup-apps-from-full.sh b/scripts/loadup-apps-from-full.sh index e3a48101..a00d54f0 100755 --- a/scripts/loadup-apps-from-full.sh +++ b/scripts/loadup-apps-from-full.sh @@ -1,32 +1,12 @@ -#!/bin/bash +#!/bin/sh -#set -x +if [ ! -x run-medley ] ; then + echo must run from MEDLEYDIR ; + exit 1 ; +fi -# function to discover what directory this script is being executed from -where_am_i() { +. scripts/loadup-setup.sh - # call this with ${BASH_SOURCE[0]:-$0} as its (only) parameter - - local SCRIPT_PATH="$1"; - - pushd . > '/dev/null'; - - while [ -h "$SCRIPT_PATH" ]; - do - cd "$( dirname -- "$SCRIPT_PATH"; )"; - SCRIPT_PATH="$( readlink -f -- "$SCRIPT_PATH"; )"; - done - - cd "$( dirname -- "$SCRIPT_PATH"; )" > '/dev/null'; - SCRIPT_PATH="$( pwd; )"; - - popd > '/dev/null'; - - echo "${SCRIPT_PATH}" -} - -SCRIPTDIR=$(where_am_i "${BASH_SOURCE[0]:-$0}") -export MEDLEYDIR=$(cd ${SCRIPTDIR} && cd .. && pwd) export ROOMSDIR=${MEDLEYDIR}/rooms export CLOSDIR=${MEDLEYDIR}/clos @@ -41,33 +21,8 @@ if [ ! -e ${NOTECARDSDIR} ]; then fi fi -if [ -z "${SYSOUTDIR}" ]; then - export SYSOUTDIR=${MEDLEYDIR}/tmp -fi +./run-medley $scr -loadup "${MEDLEYDIR}/sources/LOADUP-APPS.CM" "${LOADUP_TMP}/full.sysout" -if [ -z "${FULLSYSOUTPATH}" ]; then - FULLSYSOUTPATH=${SYSOUTDIR}/full.sysout - if [ ! -e ${FULLSYSOUTPATH} ]; then - FULLSYSOUTPATH=${MEDLEYDIR}/loadups/full.sysout - fi -fi +loadup_finish "loadup-apps-from-full" "apps.sysout" "apps.*" -cd ${MEDLEYDIR} - -scr="-sc 1024x768 -g 1042x790" - -mkdir -p ${SYSOUTDIR} -touch ${SYSOUTDIR}/loadup.timestamp - -./run-medley $scr -loadup "${MEDLEYDIR}/sources/LOADUP-APPS.CM" "${FULLSYSOUTPATH}" - -if [ ${SYSOUTDIR}/apps.sysout -nt ${SYSOUTDIR}/loadup.timestamp ]; then - echo ---- made ---- - ls -l ${SYSOUTDIR}/apps.* - echo -------------- -else - echo XXXXX FAILURE XXXXX - ls -l ${SYSOUTDIR}/apps.* - exit 1 -fi diff --git a/scripts/loadup-aux.sh b/scripts/loadup-aux.sh index 211accbe..5dffc2e1 100755 --- a/scripts/loadup-aux.sh +++ b/scripts/loadup-aux.sh @@ -1,28 +1,14 @@ #!/bin/sh -export MEDLEYDIR=`pwd` - if [ ! -f run-medley ] ; then echo run from MEDLEYDIR exit 1 fi -mkdir -p tmp -touch tmp/loadup.timestamp +. scripts/loadup-setup.sh -scr="-sc 1024x768 -g 1042x790" +echo '" (IL:MEDLEY-INIT-VARS)(IL:LOAD(QUOTE MEDLEY-UTILS))(IL:MAKE-EXPORTS-ALL)(IL:MAKE-WHEREIS-HASH)(IL:LOGOUT T)"' > ${LOADUP_WORKDIR}/loadup-aux.cm -echo '" (IL:MEDLEY-INIT-VARS)(IL:LOAD(QUOTE MEDLEY-UTILS))(IL:MAKE-EXPORTS-ALL)(IL:MAKE-WHEREIS-HASH)(IL:LOGOUT T)"' > tmp/loadup-aux.cm -./run-medley $scr -loadup "$MEDLEYDIR"/tmp/loadup-aux.cm tmp/full.sysout +./run-medley $scr -loadup "${LOADUP_WORKDIR}/loadup-aux.cm ${LOADUP_WORKDIR}/full.sysout -if [ tmp/whereis.hash -nt tmp/loadup.timestamp ]; then - - echo ---- made ---- - ls -l tmp/whereis.hash tmp/exports.all - echo -------------- - -else - echo XXXXX FAILURE XXXXX - ls -l tmp/whereis.hash tmp/exports.all - exit 1 -fi +loadup_finish "loadup-aux" "whereis.hash" "whereis.hash" "exports.all" diff --git a/scripts/loadup-db.sh b/scripts/loadup-db.sh index 4b47839d..d0f89f7a 100755 --- a/scripts/loadup-db.sh +++ b/scripts/loadup-db.sh @@ -1,26 +1,22 @@ #!/bin/sh -export MEDLEYDIR=`pwd` - -if [ ! -f run-medley ] ; then +if [ ! -x run-medley ] ; then echo run from MEDLEYDIR exit 1 fi -touch tmp/db.timestamp +. scripts/loadup-setup.sh -scr="-sc 1024x768 -g 1042x790" - -echo '" (IL:MEDLEY-INIT-VARS)(IL:FILESLOAD MEDLEY-UTILS)(IL:MAKE-FULLER-DB)(IL:LOGOUT T)"' > tmp/db.cm -./run-medley $scr -loadup "$MEDLEYDIR"/tmp/db.cm -n -if [ tmp/fuller.database -nt tmp/db.timestamp ]; then - - echo ---- made ---- - ls -l tmp/fuller* - echo -------------- +./scripts/loadup-db-from-full.sh && ./scripts/copy-db.sh +if [ $? -eq 0 ]; +then + echo "+++++ loadup-db.sh: SUCCESS +++++" else - echo XXXXX FAILURE XXXXX - ls -l tmp/fuller* - exit 1 + echo "----- loadup-db.sh: FAILURE -----" fi + + + + + diff --git a/scripts/loadup-full-from-lisp.sh b/scripts/loadup-full-from-lisp.sh index 14277016..509d5111 100755 --- a/scripts/loadup-full-from-lisp.sh +++ b/scripts/loadup-full-from-lisp.sh @@ -1,25 +1,13 @@ #!/bin/sh -export MEDLEYDIR=`pwd` - if [ ! -x run-medley ] ; then echo must run from MEDLEYDIR ; exit 1 ; fi -scr="-sc 1024x768 -g 1042x790" -touch tmp/loadup.timestamp +. scripts/loadup-setup.sh -./run-medley $scr -loadup "$MEDLEYDIR/sources/LOADUP-FULL.CM" "$MEDLEYDIR/tmp/lisp.sysout" +./run-medley $scr -loadup "$MEDLEYDIR/sources/LOADUP-FULL.CM" "${LOADUP_WORKDIR}/lisp.sysout" -if [ tmp/full.sysout -nt tmp/loadup.timestamp ]; then - - echo ---- made ---- - ls -l tmp/full.* - echo -------------- +loadup_finish "loadup-full-from-lisp" "full.sysout" "full.*" -else - echo XXXXX FAILURE XXXXX - ls -l tmp/full.* - exit 1 -fi diff --git a/scripts/loadup-init.sh b/scripts/loadup-init.sh index 9d97dc13..947f42af 100755 --- a/scripts/loadup-init.sh +++ b/scripts/loadup-init.sh @@ -1,26 +1,12 @@ #!/bin/sh -export MEDLEYDIR=`pwd` - if [ ! -f run-medley ] ; then echo run from MEDLEYDIR exit 1 fi -scr="-sc 1024x768 -g 1042x790" +. scripts/loadup-setup.sh -mkdir -p tmp -touch tmp/loadup.timestamp +./run-medley $scr -loadup "${MEDLEYDIR}"/sources/LOADUP-INIT.LISP loadups/starter.sysout -./run-medley $scr -loadup "$MEDLEYDIR"/sources/LOADUP-INIT.LISP loadups/starter.sysout - -if [ tmp/init.dlinit -nt tmp/loadup.timestamp ]; then - - echo ---- made ---- - ls -l tmp/init.* tmp/RDSYS* tmp/I-NEW* - echo -------------- - -else - echo XXXXX FAILURE XXXXX - exit 1 -fi +loadup_finish "loadup-init" "init.dlinit" "init.*" "RDSYS*" "I-NEW*" diff --git a/scripts/loadup-lisp-from-mid.sh b/scripts/loadup-lisp-from-mid.sh index 1c84b3e4..222466f8 100755 --- a/scripts/loadup-lisp-from-mid.sh +++ b/scripts/loadup-lisp-from-mid.sh @@ -1,25 +1,12 @@ #!/bin/sh -export MEDLEYDIR=`pwd` - if [ ! -f run-medley ] ; then echo run from MEDLEYDIR exit 1 fi -touch tmp/loadup.timestamp +. scripts/loadup-setup.sh -scr="-sc 1024x768 -g 1042x790" +./run-medley $scr -loadup "$MEDLEYDIR/sources/LOADUP-LISP.CM" ${LOADUP_WORKDIR}/init-mid.sysout - -./run-medley $scr -loadup "$MEDLEYDIR/sources/LOADUP-LISP.CM" tmp/init-mid.sysout - -if [ tmp/lisp.sysout -nt tmp/loadup.timestamp ]; then - - echo ---- made ---- - ls -l tmp/lisp.* - echo -------------- -else - echo XXXXX FAILURE XXXXX - exit 1 -fi +loadup_finish "loadup-lisp-from-mid" "lisp.sysout" "lisp.*" diff --git a/scripts/loadup-mid-from-init.sh b/scripts/loadup-mid-from-init.sh index 8208bcda..afb12fa3 100755 --- a/scripts/loadup-mid-from-init.sh +++ b/scripts/loadup-mid-from-init.sh @@ -1,26 +1,12 @@ #!/bin/sh -export MEDLEYDIR=`pwd` - if [ ! -x run-medley ] ; then echo run from MEDLEYDIR exit 1 fi -mkdir -p "$MEDLEYDIR/tmp" -touch tmp/loadup.timestamp +. scripts/loadup-setup.sh -scr="-sc 1024x768 -g 1042x790" +./run-medley -prog "ldeinit" -NF -loadup $MEDLEYDIR/sources/XREM.CM $scr -vmem tmp/init-mid.sysout ${LOADUP_WORKDIR}/init.dlinit -./run-medley -prog "ldeinit" -NF -loadup $MEDLEYDIR/sources/XREM.CM $scr -vmem tmp/init-mid.sysout tmp/init.dlinit - - -echo -if [ tmp/loadup.timestamp -nt tmp/init-mid.sysout ]; then - echo XXXXX FAILURE XXXXX - exit 1 -else - echo ---- made ---- - ls -l tmp/init-mid.sysout - echo -------------- -fi +loadup_finish "loadup-mid-from-init" "init-mid.sysout" "init-mid.sysout" diff --git a/sources/LOADUP-APPS.CM b/sources/LOADUP-APPS.CM index d41a71c3..f8d37768 100644 --- a/sources/LOADUP-APPS.CM +++ b/sources/LOADUP-APPS.CM @@ -1 +1 @@ -" (PROGN (IL:MEDLEY-INIT-VARS 'IL:GREET) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE NOTECARDSDIR))(QUOTE |/system/NOTECARDS.LCOM|)) 'IL:SYSLOAD) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE ROOMSDIR))(QUOTE /ROOMS)) 'IL:SYSLOAD) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE CLOSDIR))(QUOTE /DEFSYS.DFASL)) 'IL:SYSLOAD) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE |lispusers/BUTTONS.LCOM|)) 'IL:SYSLOAD) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE |/sources/LOADUP-APPS.LCOM|)) 'IL:SYSLOAD ) (IL:HARDRESET) ) SHH (PROGN (IL:ENDLOADUP) (CLOS::LOAD-CLOS) (IL:|Apps.LOADUP|) (IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE SYSOUTDIR))(IL:L-CASE (QUOTE /apps.sysout))) :APPS) ) (IL:LOGOUT T) " \ No newline at end of file +" (PROGN (IL:MEDLEY-INIT-VARS 'IL:GREET) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE NOTECARDSDIR))(QUOTE |/system/NOTECARDS.LCOM|)) 'IL:SYSLOAD) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE ROOMSDIR))(QUOTE /ROOMS)) 'IL:SYSLOAD) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE CLOSDIR))(QUOTE /DEFSYS.DFASL)) 'IL:SYSLOAD) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE |lispusers/BUTTONS.LCOM|)) 'IL:SYSLOAD) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE |/sources/LOADUP-APPS.LCOM|)) 'IL:SYSLOAD ) (IL:HARDRESET) ) SHH (PROGN (IL:ENDLOADUP) (CLOS::LOAD-CLOS) (IL:|Apps.LOADUP|) (IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /apps.sysout))) :APPS) ) (IL:LOGOUT T) " \ No newline at end of file diff --git a/sources/LOADUP-FULL.CM b/sources/LOADUP-FULL.CM index 5f13dad3..3ba363d4 100644 --- a/sources/LOADUP-FULL.CM +++ b/sources/LOADUP-FULL.CM @@ -1 +1 @@ -" (PROGN(IL:LOAD(IL:CONCAT(QUOTE {DSK})(IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE /sources/LOADUP-FULL.LCOM)))(IL:LOADUP-FULL)(IL:HARDRESET)) SHH(PROGN(IL:ENDLOADUP)(IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE MEDLEYDIR))(IL:L-CASE (QUOTE /tmp/full.sysout))) :FULL)) (IL:LOGOUT T) " \ No newline at end of file +" (PROGN(IL:LOAD(IL:CONCAT(QUOTE {DSK})(IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE /sources/LOADUP-FULL.LCOM)))(IL:LOADUP-FULL)(IL:HARDRESET)) SHH(PROGN(IL:ENDLOADUP)(IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /full.sysout))) :FULL)) (IL:LOGOUT T) " \ No newline at end of file diff --git a/sources/LOADUP-INIT.LISP b/sources/LOADUP-INIT.LISP index 31cb03b3..016338d7 100644 --- a/sources/LOADUP-INIT.LISP +++ b/sources/LOADUP-INIT.LISP @@ -1,7 +1,7 @@ (* "make init files; this file is loaded as a 'greet' file by scripts/loadup-init.sh") (LOAD (CONCAT (UNIX-GETENV "MEDLEYDIR") "/sources/MEDLEYDIR.LCOM")) -(CNDIR (MEDLEYDIR "tmp")) +(CNDIR (UNIX-GETENV "LOADUP_WORKDIR")) (DRIBBLE "init.dribble") (UNADVISE) diff --git a/sources/LOADUP-LISP.CM b/sources/LOADUP-LISP.CM index 641c5f83..150fb0ee 100644 --- a/sources/LOADUP-LISP.CM +++ b/sources/LOADUP-LISP.CM @@ -1 +1 @@ -" (PROGN(LOAD(CONCAT(QUOTE {DSK})(UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE /sources/LOADUP-LISP.LCOM)))(LOADUP-LISP)(HARDRESET)) SHH(PROGN(IL:ENDLOADUP)':MEDLEY)(IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE MEDLEYDIR))(IL:L-CASE (QUOTE /tmp/lisp.sysout))))) (IL:LOGOUT T) " \ No newline at end of file +" (PROGN(LOAD(CONCAT(QUOTE {DSK})(UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE /sources/LOADUP-LISP.LCOM)))(LOADUP-LISP)(HARDRESET)) SHH(PROGN(IL:ENDLOADUP)':MEDLEY)(IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /lisp.sysout))))) (IL:LOGOUT T) " \ No newline at end of file diff --git a/sources/MAKEINIT b/sources/MAKEINIT index 3f939a04..b1cd3577 100644 --- a/sources/MAKEINIT +++ b/sources/MAKEINIT @@ -1,18 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "11-Jul-2022 20:00:23"  -{DSK}kaplan>local>medley3.5>working-medley>sources>MAKEINIT.;3 54607 +(FILECREATED "30-Jul-2023 23:39:21" {DSK}frank>il>medley>gmedley>sources>MAKEINIT.;4 54459 - :CHANGES-TO (FNS I.FIXUPNUM I.FIXUPSYM) + :CHANGES-TO (FNS MAKEINITGREET) - :PREVIOUS-DATE "19-Jul-2021 23:50:29" -{DSK}kaplan>local>medley3.5>working-medley>sources>MAKEINIT.;2) + :PREVIOUS-DATE "11-Jul-2022 20:00:23" {DSK}frank>il>medley>gmedley>sources>MAKEINIT.;1) -(* ; " -Copyright (c) 1982-1988, 1990-1992, 1998, 2021 by Venue & Xerox Corporation. -") - (PRETTYCOMPRINT MAKEINITCOMS) (RPAQQ MAKEINITCOMS @@ -83,7 +77,7 @@ Copyright (c) 1982-1988, 1990-1992, 1998, 2021 by Venue & Xerox Corporation. (DEFINEQ (MAKEINITGREET - [LAMBDA NIL (* ; "Edited 11-Mar-2021 22:14 by larry") + [LAMBDA NIL (* ; "Edited 11-Mar-2021 22:14 by larry") (* ; "Edited 5-Dec-2017 15:26 by rmk:") (* ;; "") @@ -96,9 +90,11 @@ Copyright (c) 1982-1988, 1990-1992, 1998, 2021 by Venue & Xerox Corporation. (DORENAME 'I) (DORENAME 'R) (DLFIXINIT (MAKEINIT '(39424 5682 11008) - (MEDLEYDIR "tmp" "init.sysout" T) - NIL DIRECTORIES DISPLAYFONTDIRECTORIES) - (MEDLEYDIR "tmp" "init.dlinit" T]) + (CONCAT "{DSK}" (UNIX-GETENV "LOADUP_WORKDIR") + "/init.sysout") + NIL DIRECTORIES DISPLAYFONTDIRECTORIES) + (CONCAT "{DSK}" (UNIX-GETENV "LOADUP_WORKDIR") + "/init.dlinit"]) ) (FILESLOAD (SOURCE) @@ -1053,28 +1049,26 @@ DONTCOPY (GLOBALVARS DLPRIMARYMAP DLSECONDARYMAP DLLOCKBITS DLLASTDOMINOPAGE DLIFPAGE DLNEXTPM DLPAGEMAPFP FPTOVP NEWFPFROMOLD VMEMFILE VMEMFILEX) ) -(PUTPROPS MAKEINIT COPYRIGHT ("Venue & Xerox Corporation" 1982 1983 1984 1985 1986 1987 1988 1990 1991 - 1992 1998 2021)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (3971 4718 (MAKEINITGREET 3981 . 4716)) (4901 11286 (LOADMAKEINIT 4911 . 6114) ( -LOADMKIFILES 6116 . 6431) (RELOAD 6433 . 6916) (MAKEINIT 6918 . 10578) (MKI.START 10580 . 11284)) ( -11364 17082 (MKI.PASSFILE 11374 . 14984) (SCRATCHARRAY 14986 . 15635) (DOFORM 15637 . 16314) ( -CONSTFORMP 16316 . 16550) (NOTICECOMS 16552 . 16860) (EVALFORMAKEINIT 16862 . 17080)) (17083 19203 ( -I.ADDTOVAR 17093 . 17187) (I.DECLARE%: 17189 . 17465) (I.DEFINE-FILE-INFO 17467 . 17657) ( -I.FILECREATED 17659 . 18033) (I.PUTPROPS 18035 . 18148) (I.RPAQ 18150 . 18371) (I.RPAQQ 18373 . 18569) - (I.RPAQ? 18571 . 18786) (I.SETTOPVAL 18788 . 19020) (I.NOUNDO 19022 . 19201)) (19839 26055 ( -I.ATOMNUMBER 19849 . 20340) (I.\ATOMCELL 20342 . 22095) (I.FIXUPNUM 22097 . 23022) (I.FIXUPPTR 23024 - . 23505) (I.FIXUPSYM 23507 . 24563) (I.WORDSPERNAMEENTRY 24565 . 25320) (I.SETSTKNTOFFSET 25322 . -26053)) (26087 27595 (MKI.ATOM 26097 . 26293) (MKI.IEEE 26295 . 27593)) (27692 28457 (MKI.DSET 27702 - . 27985) (MKI.ADDTO 27987 . 28172) (MKI.PUTPROP 28174 . 28455)) (28631 29183 (DUMPVP 28641 . 28738) ( -BOUTZEROS 28740 . 28819) (BIN16 28821 . 29002) (BOUT16 29004 . 29181)) (30074 52808 (DLFIXINIT 30084 - . 31059) (DLSORTSYSOUTPAGES 31061 . 36187) (DLNEXTFP 36189 . 36526) (DLLOCKEDPAGEP 36528 . 36742) ( -DLSETLOCKBIT 36744 . 37006) (DLCOPYPAGEMAP 37008 . 40059) (DLCOPYVMPAGE 40061 . 40451) ( -DLADDPAGEMAPENTRIES 40453 . 41268) (ASSIGNFILEPAGE 41270 . 42503) (ASSIGNFILEPAGERANGE 42505 . 42912) -(DLDUMPSYSOUT 42914 . 44666) (DLDUMPFPTOVP 44668 . 45707) (DLDUMPPAGEMAPS 45709 . 46409) ( -DLDUMPVMEMPAGES 46411 . 47067) (DLSETBOOTPTR 47069 . 47299) (DLDUMPARRAY 47301 . 47688) ( -DLMARKASDUMPED 47690 . 48143) (DLDUMPVMEMPAGE 48145 . 48833) (INSTALLDOMINO 48835 . 49482) ( -INSTALLDOMINO.DIRECT 49484 . 50636) (INSTALLNEWDOMINO 50638 . 52806)) (52830 54187 (DLPRINTFPTOVP -52840 . 53129) (PRINTPRIMARYMAP 53131 . 53845) (DLREADPAGEOFWORDS 53847 . 54014) (SETDIF 54016 . 54185 + (FILEMAP (NIL (3843 4691 (MAKEINITGREET 3853 . 4689)) (4874 11259 (LOADMAKEINIT 4884 . 6087) ( +LOADMKIFILES 6089 . 6404) (RELOAD 6406 . 6889) (MAKEINIT 6891 . 10551) (MKI.START 10553 . 11257)) ( +11337 17055 (MKI.PASSFILE 11347 . 14957) (SCRATCHARRAY 14959 . 15608) (DOFORM 15610 . 16287) ( +CONSTFORMP 16289 . 16523) (NOTICECOMS 16525 . 16833) (EVALFORMAKEINIT 16835 . 17053)) (17056 19176 ( +I.ADDTOVAR 17066 . 17160) (I.DECLARE%: 17162 . 17438) (I.DEFINE-FILE-INFO 17440 . 17630) ( +I.FILECREATED 17632 . 18006) (I.PUTPROPS 18008 . 18121) (I.RPAQ 18123 . 18344) (I.RPAQQ 18346 . 18542) + (I.RPAQ? 18544 . 18759) (I.SETTOPVAL 18761 . 18993) (I.NOUNDO 18995 . 19174)) (19812 26028 ( +I.ATOMNUMBER 19822 . 20313) (I.\ATOMCELL 20315 . 22068) (I.FIXUPNUM 22070 . 22995) (I.FIXUPPTR 22997 + . 23478) (I.FIXUPSYM 23480 . 24536) (I.WORDSPERNAMEENTRY 24538 . 25293) (I.SETSTKNTOFFSET 25295 . +26026)) (26060 27568 (MKI.ATOM 26070 . 26266) (MKI.IEEE 26268 . 27566)) (27665 28430 (MKI.DSET 27675 + . 27958) (MKI.ADDTO 27960 . 28145) (MKI.PUTPROP 28147 . 28428)) (28604 29156 (DUMPVP 28614 . 28711) ( +BOUTZEROS 28713 . 28792) (BIN16 28794 . 28975) (BOUT16 28977 . 29154)) (30047 52781 (DLFIXINIT 30057 + . 31032) (DLSORTSYSOUTPAGES 31034 . 36160) (DLNEXTFP 36162 . 36499) (DLLOCKEDPAGEP 36501 . 36715) ( +DLSETLOCKBIT 36717 . 36979) (DLCOPYPAGEMAP 36981 . 40032) (DLCOPYVMPAGE 40034 . 40424) ( +DLADDPAGEMAPENTRIES 40426 . 41241) (ASSIGNFILEPAGE 41243 . 42476) (ASSIGNFILEPAGERANGE 42478 . 42885) +(DLDUMPSYSOUT 42887 . 44639) (DLDUMPFPTOVP 44641 . 45680) (DLDUMPPAGEMAPS 45682 . 46382) ( +DLDUMPVMEMPAGES 46384 . 47040) (DLSETBOOTPTR 47042 . 47272) (DLDUMPARRAY 47274 . 47661) ( +DLMARKASDUMPED 47663 . 48116) (DLDUMPVMEMPAGE 48118 . 48806) (INSTALLDOMINO 48808 . 49455) ( +INSTALLDOMINO.DIRECT 49457 . 50609) (INSTALLNEWDOMINO 50611 . 52779)) (52803 54160 (DLPRINTFPTOVP +52813 . 53102) (PRINTPRIMARYMAP 53104 . 53818) (DLREADPAGEOFWORDS 53820 . 53987) (SETDIF 53989 . 54158 ))))) STOP diff --git a/sources/MAKEINIT.LCOM b/sources/MAKEINIT.LCOM index 9342cf53044d7cee8dea0863ec487e3fbf2ca714..3af36c6cc762407e7110b8077c0296917c5dad86 100644 GIT binary patch delta 4778 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 AMF0Q* From 5b3cf9b7d58848e89da06c69081a6e7bf9e73931 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Mon, 31 Jul 2023 01:07:39 -0700 Subject: [PATCH 16/36] Add new files left out from last commit; add RDSYS to library as part of loadups-all --- scripts/copy-all.sh | 3 +++ scripts/copy-db.sh | 12 +++++++++++ scripts/loadup-db-from-full.sh | 17 +++++++++++++++ scripts/loadup-setup.sh | 38 ++++++++++++++++++++++++++++++++++ 4 files changed, 70 insertions(+) create mode 100755 scripts/copy-db.sh create mode 100755 scripts/loadup-db-from-full.sh create mode 100644 scripts/loadup-setup.sh diff --git a/scripts/copy-all.sh b/scripts/copy-all.sh index 3831f10f..6c1f9053 100755 --- a/scripts/copy-all.sh +++ b/scripts/copy-all.sh @@ -26,3 +26,6 @@ fi ./scripts/cpv ${LOADUP_WORKDIR}/full.dribble loadups ./scripts/cpv ${LOADUP_WORKDIR}/whereis.dribble loadups +./scripts/cpv ${LOADUP_WORKDIR}/RDSYS library +./scripts/cpv ${LOADUP_WORKDIR}/RDSYS.LCOM library + diff --git a/scripts/copy-db.sh b/scripts/copy-db.sh new file mode 100755 index 00000000..25044ad1 --- /dev/null +++ b/scripts/copy-db.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +if [ ! -x run-medley ] ; then + echo run from MEDLEYDIR + exit 1 +fi + +. scripts/loadup-setup.sh + +./scripts/cpv ${LOADUP_WORKDIR}/fuller.database loadups +./scripts/cpv ${LOADUP_WORKDIR}/fuller.dribble loadups + diff --git a/scripts/loadup-db-from-full.sh b/scripts/loadup-db-from-full.sh new file mode 100755 index 00000000..b1793a11 --- /dev/null +++ b/scripts/loadup-db-from-full.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +if [ ! -x run-medley ] ; then + echo run from MEDLEYDIR + exit 1 +fi + +. scripts/loadup-setup.sh + +DBCM="${LOADUP_WORKDIR}"/db.cm + +echo '" (IL:MEDLEY-INIT-VARS)(IL:FILESLOAD MEDLEY-UTILS)(IL:MAKE-FULLER-DB)(IL:LOGOUT T)"' > ${DBCM} + +./run-medley $scr -loadup "${DBCM}" -full + +loadup_finish "loadup-db" "fuller.database" "fuller*" + diff --git a/scripts/loadup-setup.sh b/scripts/loadup-setup.sh new file mode 100644 index 00000000..194bde91 --- /dev/null +++ b/scripts/loadup-setup.sh @@ -0,0 +1,38 @@ + +export MEDLEYDIR=`pwd` + +# echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%${LOADUP_WORKDIR}=============" + +if [ -z "${LOADUP_WORKDIR}" ]; +then + export LOADUP_WORKDIR=/tmp/loadups-$$ +fi + +mkdir -p "${LOADUP_WORKDIR}" + +scr="-sc 1024x768 -g 1042x790" + +touch "${LOADUP_WORKDIR}"/loadup.timestamp + +loadup_finish () { + echo "===== ${1}" + if [ "${LOADUP_WORKDIR}/${2}" -nt "${LOADUP_WORKDIR}"/loadup.timestamp ]; + then + echo "+++++ SUCCESS +++++" + exit_code=0 + else + echo "----- FAILURE -----" + exit_code=1 + fi + echo "===== files created ======" + shift; shift + for f in ${*}; + do + ls -l "${LOADUP_WORKDIR}"/$f 2>/dev/null + done + echo "=======================================" + exit ${exit_code} +} + + + From ca3280f8946dc0596fb70ec9fa46600a02850d13 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Tue, 1 Aug 2023 12:08:55 -0700 Subject: [PATCH 17/36] WIP updating loadups scripts --- internal/MEDLEY-UTILS | 28 +++++++++++++++------------- internal/MEDLEY-UTILS.LCOM | Bin 7036 -> 7148 bytes scripts/cpv | 28 +++++++++++++++++++--------- scripts/loadup-apps-from-full.sh | 4 +++- scripts/loadup-aux.sh | 14 ++++++++++++-- scripts/loadup-full-from-lisp.sh | 2 ++ scripts/loadup-init.sh | 2 ++ scripts/loadup-lisp-from-mid.sh | 2 ++ scripts/loadup-mid-from-init.sh | 4 +++- scripts/loadup-setup.sh | 14 +++++++++----- sources/LOADUP-FULL | 12 +++++------- sources/LOADUP-FULL.CM | 2 +- sources/LOADUP-FULL.LCOM | Bin 3665 -> 3505 bytes sources/LOADUP-LISP | 13 ++++++------- sources/LOADUP-LISP.CM | 2 +- sources/LOADUP-LISP.LCOM | Bin 3566 -> 3508 bytes 16 files changed, 80 insertions(+), 47 deletions(-) diff --git a/internal/MEDLEY-UTILS b/internal/MEDLEY-UTILS index abf4d00e..c4c6c9ca 100644 --- a/internal/MEDLEY-UTILS +++ b/internal/MEDLEY-UTILS @@ -1,12 +1,11 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "XCL" BASE 10) -(FILECREATED "23-May-2023 07:10:58" |{DSK}larry>il>medley>internal>MEDLEY-UTILS.;12| 10354 +(FILECREATED "31-Jul-2023 18:34:20" |{DSK}frank>il>medley>gmedley>internal>MEDLEY-UTILS.;3| 10550 - :EDIT-BY "lmm" + :CHANGES-TO (FNS MAKE-WHEREIS-HASH) - :CHANGES-TO (FNS GATHER-INFO) - - :PREVIOUS-DATE "22-May-2023 22:57:21" |{DSK}larry>il>medley>internal>MEDLEY-UTILS.;11|) + :PREVIOUS-DATE "31-Jul-2023 18:07:23" +|{DSK}frank>il>medley>gmedley>internal>MEDLEY-UTILS.;2|) (PRETTYCOMPRINT MEDLEY-UTILSCOMS) @@ -156,24 +155,27 @@  "Edited September 29, 1986 by van Melle") (CNDIR (MEDLEYDIR "sources")) (LOAD 'FILESETS) - (GATHEREXPORTS EXPORTFILES (MEDLEYDIR "tmp" "exports.all" T)))) + (GATHEREXPORTS EXPORTFILES (CONCAT '{DSK} (UNIX-GETENV "LOADUP_WORKDIR") + "/" "exports.all")))) (MAKE-WHEREIS-HASH - (LAMBDA NIL (* \; "Edited 12-Mar-2022 12:46 by rmk") + (LAMBDA (DRIBBLEFILE) (* \; "Edited 12-Mar-2022 12:46 by rmk") (* \; "Edited 24-Mar-2021 13:26 by larry") (LET ((FILING.ENUMERATION.DEPTH 2) HASHFILE) - (DRIBBLE (MEDLEYDIR "tmp" "whereis.dribble" T)) - (SETQ HASHFILE (XCL::WHERE-IS-NOTICE (MEDLEYDIR "tmp" "whereis.hash-tmp" T) + (DRIBBLE DRIBBLEFILE) + (SETQ HASHFILE (XCL::WHERE-IS-NOTICE (CONCAT "{DSK}" (UNIX-GETENV "LOADUP_WORKDIR") + "/" "whereis.hash-tmp") :FILES (|for| X |in| MEDLEY-FIX-DIRS |collect| (CONCAT (MEDLEYDIR X) "*.;")) :HASH-FILE-SIZE 60000 :NEW T)) - (RENAMEFILE HASHFILE (MEDLEYDIR "tmp" "whereis.hash" T)) + (RENAMEFILE HASHFILE (CONCAT "{DSK}" (UNIX-GETENV "LOADUP_WORKDIR") + "/" "whereis.hash")) (DRIBBLE)))) ) (DECLARE\: DONTCOPY - (FILEMAP (NIL (624 7499 (GATHER-INFO 634 . 6162) (MAKE-FULLER-DB 6164 . 6854) (MEDLEY-FIX-LINKS 6856 - . 7253) (MEDLEY-FIX-DATES 7255 . 7497)) (8538 10331 (MAKE-EXPORTS-ALL 8548 . 9507) (MAKE-WHEREIS-HASH - 9509 . 10329))))) + (FILEMAP (NIL (623 7498 (GATHER-INFO 633 . 6161) (MAKE-FULLER-DB 6163 . 6853) (MEDLEY-FIX-LINKS 6855 + . 7252) (MEDLEY-FIX-DATES 7254 . 7496)) (8537 10527 (MAKE-EXPORTS-ALL 8547 . 9575) (MAKE-WHEREIS-HASH + 9577 . 10525))))) STOP diff --git a/internal/MEDLEY-UTILS.LCOM b/internal/MEDLEY-UTILS.LCOM index f4ccfed11a663695d6512a233e5e72a74bb90390..acc62cc9a2efcc4c6fc909397450126bcadb30e3 100644 GIT binary patch delta 863 zcmaKqUvJV-7{*~5|I{S|h3#&>Yhr|p;yL{Tv@vL*XHbC_+wwKxIdYTY0_vDSo@rV}y=M_Oz z1hjPT#t$dm(Q#qm6^3rlbKe(^mLGQ)!aNP^+6|OfaGr(v?A3U9;@$7fVLlkmfnn7~ z!-k9EOeRBhz3$AVqDyReflV{1eZ59X7Ev9dt&8pj@pwc{PBpvw;bDI~bPN9o3JgY) zgg_}(RHIC6&M_giZ`e>*tAuM;h(&aptEhG*4NAizE!}L|oJPm4PgPJ(q0xZ(@6>Zl zgVD^LjFw;GQT{Bk@#1#$k^efed*vt+@eg9#+06)jnBWzQq_POgsuLvXG)&8}L6V?k z8YR^M5kb??J6xGK#Ax~75>ONngj)laAz)+^$ELV|?#R0DPR5hjG}HAw7DNfy2P_Em zQ!`bq**IvMR#nq2|5mcKr2_)Z(u>6!30(Y_$(=i&uSFwKZzCR$KE4@b8~;ul-SodE zZT~Q~wfLL+#(8)w$}1nhq6ii-)Ou(MSddqHU|zhq2w;?hPN}9SVF4U%z%U)XL?HX; ziX=mwXf^VTCJs0RL>3eYFReMP##0Cw(V`8~2AKyX=#&d~<81vo32-POuK*SnL}1_c z-HAJxX8PS}p9RdzAumk1t^uQmnCefp>-2A9AuIadxA*oaTOKi&Xescpp|kkT@zq~D CNZbbi delta 823 zcmZuv%Wl&^6m_DiqJag4M%}?>HY5v2o^hPV2n9LzxUq1YV7pCtp2Ked3{7=u|2pJi9}?OsuW99seSdI z9t49hylzZ_M%>FhxxpkV0wQFCB@!(wRFV)x!_dE+PZyKGA4QOhF2{q}mA|ABoTy%l zIihJB9f&5g2#|4VS+Gr0DwR0HXs}9lcL|hHF;}P=ro}XesUFigYKLV`@X)>11w{3 zn60*1;sY@GqrvHU{Wa)o7NtG@Aed;nqTTUKjX_lctz&Dd2Nh|P=&yJ{ltknrRUum_ zo)b$LsLgs%mw~oax5WclOmxjR40vZWtt9CK^F{P-?1%njSsD+PV+0uUj(8;qDoXtF a_!*>kT;AYD;bb@rd<69rc>C%2?cQ(byUT+B diff --git a/scripts/cpv b/scripts/cpv index 29fc5604..7f0e7ece 100755 --- a/scripts/cpv +++ b/scripts/cpv @@ -4,6 +4,13 @@ # could extend with -r or copying multiple files # could change from cp to ln +ln_or_cp () { + f=$(df $(dirname $1) | tail -1 | awk '{ print $1 }') + d=$(df $(dirname $2) | tail -1 | awk '{ print $1 }') + if [ "$f" != "$d" ]; then cmd="cp -p"; else cmd="ln"; fi + echo $cmd +} + file="$1" dest="$2" @@ -18,9 +25,15 @@ if [ -d "$dest" ]; then dest=$dest/`basename $file` fi +# if (the new) $dest is a directory, then just bail +if [ -d "$dest" ]; then + echo "Error: destination file ($dest) is a directory. Exiting." + exit 1 +fi + # if no such file $dest then just copy if [ ! -f "$dest" ]; then - ln $file $dest #WAS cp -p $file $dest + $(ln_or_cp $file $dest) $file $dest exit 0 fi @@ -41,7 +54,7 @@ if [ $max -eq 0 ]; then # no current versions new=2 else if cmp -q $dest $dest.~$max~ >/dev/null 2>&1 - then # they're different + then # they're different max=`expr $max + 1` # make newer version mv $dest $dest.~$max~ new=`expr $max + 1` @@ -51,11 +64,8 @@ else fi fi -# make new version +# make new version and link it -ln $file $dest.~$new~ # cp -p $file $dest.~$new~ -ln $dest.~$new~ $dest # and link it - - - - +$(ln_or_cp $file $dest.~new~) $file $dest.~$new~ +rm -f $dest +ln $dest.~$new~ $dest diff --git a/scripts/loadup-apps-from-full.sh b/scripts/loadup-apps-from-full.sh index a00d54f0..d7b6cb7d 100755 --- a/scripts/loadup-apps-from-full.sh +++ b/scripts/loadup-apps-from-full.sh @@ -7,6 +7,8 @@ fi . scripts/loadup-setup.sh +loadup_start "loadup-apps-from-full" + export ROOMSDIR=${MEDLEYDIR}/rooms export CLOSDIR=${MEDLEYDIR}/clos @@ -21,7 +23,7 @@ if [ ! -e ${NOTECARDSDIR} ]; then fi fi -./run-medley $scr -loadup "${MEDLEYDIR}/sources/LOADUP-APPS.CM" "${LOADUP_TMP}/full.sysout" +./run-medley $scr -loadup "${MEDLEYDIR}/sources/LOADUP-APPS.CM" "${LOADUP_WORKDIR}/full.sysout" loadup_finish "loadup-apps-from-full" "apps.sysout" "apps.*" diff --git a/scripts/loadup-aux.sh b/scripts/loadup-aux.sh index 5dffc2e1..f0abfb47 100755 --- a/scripts/loadup-aux.sh +++ b/scripts/loadup-aux.sh @@ -7,8 +7,18 @@ fi . scripts/loadup-setup.sh -echo '" (IL:MEDLEY-INIT-VARS)(IL:LOAD(QUOTE MEDLEY-UTILS))(IL:MAKE-EXPORTS-ALL)(IL:MAKE-WHEREIS-HASH)(IL:LOGOUT T)"' > ${LOADUP_WORKDIR}/loadup-aux.cm +loadup_start "loadup-aux" -./run-medley $scr -loadup "${LOADUP_WORKDIR}/loadup-aux.cm ${LOADUP_WORKDIR}/full.sysout +cat >"${LOADUP_WORKDIR}"/loadup-aux.cm <<"EOF" +" + (IL:MEDLEY-INIT-VARS) + (IL:LOAD(QUOTE MEDLEY-UTILS)) + (IL:MAKE-EXPORTS-ALL) + (IL:MAKE-WHEREIS-HASH (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /whereis.dribble)))) + (IL:LOGOUT T) +" +EOF + +./run-medley $scr -loadup "${LOADUP_WORKDIR}"/loadup-aux.cm "${LOADUP_WORKDIR}"/full.sysout loadup_finish "loadup-aux" "whereis.hash" "whereis.hash" "exports.all" diff --git a/scripts/loadup-full-from-lisp.sh b/scripts/loadup-full-from-lisp.sh index 509d5111..351ab260 100755 --- a/scripts/loadup-full-from-lisp.sh +++ b/scripts/loadup-full-from-lisp.sh @@ -7,6 +7,8 @@ fi . scripts/loadup-setup.sh +loadup_start "loadup-full-from-lisp" + ./run-medley $scr -loadup "$MEDLEYDIR/sources/LOADUP-FULL.CM" "${LOADUP_WORKDIR}/lisp.sysout" loadup_finish "loadup-full-from-lisp" "full.sysout" "full.*" diff --git a/scripts/loadup-init.sh b/scripts/loadup-init.sh index 947f42af..4c7be321 100755 --- a/scripts/loadup-init.sh +++ b/scripts/loadup-init.sh @@ -7,6 +7,8 @@ fi . scripts/loadup-setup.sh +loadup_start "loadup-init" + ./run-medley $scr -loadup "${MEDLEYDIR}"/sources/LOADUP-INIT.LISP loadups/starter.sysout loadup_finish "loadup-init" "init.dlinit" "init.*" "RDSYS*" "I-NEW*" diff --git a/scripts/loadup-lisp-from-mid.sh b/scripts/loadup-lisp-from-mid.sh index 222466f8..283b8ba6 100755 --- a/scripts/loadup-lisp-from-mid.sh +++ b/scripts/loadup-lisp-from-mid.sh @@ -7,6 +7,8 @@ fi . scripts/loadup-setup.sh +loadup_start "loadup-lisp-from-mid" + ./run-medley $scr -loadup "$MEDLEYDIR/sources/LOADUP-LISP.CM" ${LOADUP_WORKDIR}/init-mid.sysout loadup_finish "loadup-lisp-from-mid" "lisp.sysout" "lisp.*" diff --git a/scripts/loadup-mid-from-init.sh b/scripts/loadup-mid-from-init.sh index afb12fa3..d5f4ff26 100755 --- a/scripts/loadup-mid-from-init.sh +++ b/scripts/loadup-mid-from-init.sh @@ -7,6 +7,8 @@ fi . scripts/loadup-setup.sh -./run-medley -prog "ldeinit" -NF -loadup $MEDLEYDIR/sources/XREM.CM $scr -vmem tmp/init-mid.sysout ${LOADUP_WORKDIR}/init.dlinit +loadup_start "loadup-mid-from-init" + +./run-medley -prog "ldeinit" -NF -loadup $MEDLEYDIR/sources/XREM.CM $scr -vmem ${LOADUP_WORKDIR}/init-mid.sysout ${LOADUP_WORKDIR}/init.dlinit loadup_finish "loadup-mid-from-init" "init-mid.sysout" "init-mid.sysout" diff --git a/scripts/loadup-setup.sh b/scripts/loadup-setup.sh index 194bde91..2fca51be 100644 --- a/scripts/loadup-setup.sh +++ b/scripts/loadup-setup.sh @@ -1,8 +1,6 @@ export MEDLEYDIR=`pwd` -# echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%${LOADUP_WORKDIR}=============" - if [ -z "${LOADUP_WORKDIR}" ]; then export LOADUP_WORKDIR=/tmp/loadups-$$ @@ -14,8 +12,13 @@ scr="-sc 1024x768 -g 1042x790" touch "${LOADUP_WORKDIR}"/loadup.timestamp + +loadup_start () { + echo ">>>>> START ${1}" +} + loadup_finish () { - echo "===== ${1}" + local script_name=${1} if [ "${LOADUP_WORKDIR}/${2}" -nt "${LOADUP_WORKDIR}"/loadup.timestamp ]; then echo "+++++ SUCCESS +++++" @@ -24,13 +27,14 @@ loadup_finish () { echo "----- FAILURE -----" exit_code=1 fi - echo "===== files created ======" + echo "..... files created ....." shift; shift for f in ${*}; do ls -l "${LOADUP_WORKDIR}"/$f 2>/dev/null done - echo "=======================================" + echo "<<<<< END ${script_name}" + echo "" exit ${exit_code} } diff --git a/sources/LOADUP-FULL b/sources/LOADUP-FULL index 104dbbee..55171e07 100644 --- a/sources/LOADUP-FULL +++ b/sources/LOADUP-FULL @@ -1,10 +1,10 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "18-Jan-2023 16:23:36" {DSK}frank>il>medley>gmedley>sources>LOADUP-FULL.;2 4636 +(FILECREATED "31-Jul-2023 18:28:53" {DSK}frank>il>medley>gmedley>sources>LOADUP-FULL.;4 4521 :CHANGES-TO (FNS LOADUP-FULL) - :PREVIOUS-DATE "12-Aug-2022 12:30:09" {DSK}frank>il>medley>gmedley>sources>LOADUP-FULL.;1 + :PREVIOUS-DATE "18-Jan-2023 16:23:36" {DSK}frank>il>medley>gmedley>sources>LOADUP-FULL.;3 ) @@ -39,7 +39,7 @@ (PRINTOUT T "FULL fonts loaded" T]) (LOADUP-FULL - [LAMBDA NIL (* ; "Edited 18-Jan-2023 16:22 by FGH") + [LAMBDA (DRIBBLEFILE) (* ; "Edited 18-Jan-2023 16:22 by FGH") (* ; "Edited 12-Aug-2022 11:17 by lmm") (* ; "Edited 14-Jul-2022 12:32 by rmk") (* ; "Edited 12-Jul-2022 21:57 by rmk") @@ -55,9 +55,7 @@ (PROGN (SETQ MEDLEYDIR) (CNDIR (MEDLEYDIR))) (MEDLEY-INIT-VARS) - (SETQ MAKESYSFILENAME (MEDLEYDIR "tmp" "full.sysout" T)) - (SETQ MAKESYSNAME :MEDLEY) - (DRIBBLE (MEDLEYDIR "tmp" "full.dribble" T)) + (DRIBBLE DRIBBLEFILE) (* ;; "BKSYSBUF stops page holding ") @@ -88,5 +86,5 @@ (FIXMETA) (DECLARE%: DONTCOPY - (FILEMAP (NIL (467 4598 (LOADFULLFONTS 477 . 1918) (LOADUP-FULL 1920 . 4348) (FIXMETA 4350 . 4596))))) + (FILEMAP (NIL (467 4483 (LOADFULLFONTS 477 . 1918) (LOADUP-FULL 1920 . 4233) (FIXMETA 4235 . 4481))))) STOP diff --git a/sources/LOADUP-FULL.CM b/sources/LOADUP-FULL.CM index 3ba363d4..8ebb9a67 100644 --- a/sources/LOADUP-FULL.CM +++ b/sources/LOADUP-FULL.CM @@ -1 +1 @@ -" (PROGN(IL:LOAD(IL:CONCAT(QUOTE {DSK})(IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE /sources/LOADUP-FULL.LCOM)))(IL:LOADUP-FULL)(IL:HARDRESET)) SHH(PROGN(IL:ENDLOADUP)(IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /full.sysout))) :FULL)) (IL:LOGOUT T) " \ No newline at end of file +" (PROGN (IL:LOAD(IL:CONCAT(QUOTE {DSK})(IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE /sources/LOADUP-FULL.LCOM))) (IL:LOADUP-FULL (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /full.dribble)))) (IL:HARDRESET) ) SHH (PROGN (IL:ENDLOADUP) (IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /full.sysout))) :FULL)) (IL:LOGOUT T) ) " \ No newline at end of file diff --git a/sources/LOADUP-FULL.LCOM b/sources/LOADUP-FULL.LCOM index 2db7026c038af6c2705c6700cec9fdbf4eb20cc1..518982003d573a98392da20b61201494ded38524 100644 GIT binary patch delta 638 zcmZuvO>fgc5RH4NND3!FRJ5Rng+x**k;m)LoJis|Z0p#T?I_AIN-CfPT7h#xg8l`9 ze+LH??)(PMTsd;&2e6Kkh_5|7y?Ha5eLJ&X4?i8eAKqZpJf6>*x~4Ob)7IU#W-p$f zTpA6if8{i%O^%9ua{l6C_F#%ey;3Pl&7~U@_e~cVzq=7dsv)SC)eXArEs=a;)+goif`5WCE51o0+3DU1yRa} zAWOqggkCg^L8gWv>UaZ58ABk_EFNSaomR3x2m(I}vlK+uwotQ>@gz2}Mg2IC?rmhE&m;K~6MZgcI+C8`&OnB_e6x33*(X9hj?ygcB_ht! sOfItDfX#}JSNB!Jh3d~|GtAD%)AJY*pQ-hi!&#kEE&@|@F6y$h zeA_wWH6YhDN_8gbTp^Gq^W&50vk^>YP$5PTL~uQ@(P$7D4b$=He+fiNYL%+(xK=x~ zjMy@72Ay{xDnx+gXLW;vq=-tE3T&I#jm2T!CI`lKk?K@ie%uq->bLM~qiO>M&*)gu zAj)%h4bK7_7&xYDHG!Si_uzv7r|<}fK8=D&ye@voLC z8kkOK9kpXW928SCG-xd{ zdV#0}CYlYJx@J`6BAH5|)j``@JsX-=LntzM7MeG}^dL5`F4@;geaNW>yZsk_-F3Rw zE{>+&xT*|VZQl!AoRmWBc$SZo;wlarry>il>medley>sources>LOADUP-LISP.;2| 5263 - - :EDIT-BY "lmm" +(FILECREATED "31-Jul-2023 18:22:53" |{DSK}frank>il>medley>gmedley>sources>LOADUP-LISP.;2| 5235 :CHANGES-TO (FNS LOADUP-LISP) - :PREVIOUS-DATE "12-Aug-2022 12:29:57" |{DSK}larry>il>medley>sources>LOADUP-LISP.;1|) + :PREVIOUS-DATE "27-Feb-2023 17:15:53" +|{DSK}frank>il>medley>gmedley>sources>LOADUP-LISP.;1|) (PRETTYCOMPRINT LOADUP-LISPCOMS) @@ -19,13 +18,13 @@ (DEFINEQ (LOADUP-LISP - (LAMBDA NIL (* \; "Edited 26-Feb-2023 12:17 by lmm") + (LAMBDA (DRIBBLEFILE) (* \; "Edited 26-Feb-2023 12:17 by lmm") (* \; "Edited 13-Jul-2022 14:09 by rmk") (* \; "Edited 4-Mar-2022 19:13 by larry") (* \; "Edited 29-Apr-2021 22:30 by rmk:") (SETQQ COMPILE.EXT LCOM) (MEDLEY-INIT-VARS) (* \; "should be set earlier") - (DRIBBLE (MEDLEYDIR "tmp" "lisp.dribble" T)) + (DRIBBLE DRIBBLEFILE) (FOR X IN BOOTLOADEDFILES DO (CL:UNLESS (MEMB X SYSFILES) (PRINTOUT T X " bootloaded" T) (SETQ SYSFILES (CONS X SYSFILES)))) @@ -124,5 +123,5 @@ (GLOBALVARS MAKESYSFILENAME MEDLEY-INIT-VARS MEDLEYDIR SYSTEMINITVARS USERRECLST) ) (DECLARE\: DONTCOPY - (FILEMAP (NIL (654 5057 (LOADUP-LISP 664 . 5055))))) + (FILEMAP (NIL (649 5029 (LOADUP-LISP 659 . 5027))))) STOP diff --git a/sources/LOADUP-LISP.CM b/sources/LOADUP-LISP.CM index 150fb0ee..d08bdff7 100644 --- a/sources/LOADUP-LISP.CM +++ b/sources/LOADUP-LISP.CM @@ -1 +1 @@ -" (PROGN(LOAD(CONCAT(QUOTE {DSK})(UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE /sources/LOADUP-LISP.LCOM)))(LOADUP-LISP)(HARDRESET)) SHH(PROGN(IL:ENDLOADUP)':MEDLEY)(IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /lisp.sysout))))) (IL:LOGOUT T) " \ No newline at end of file +" (PROGN (LOAD(CONCAT(QUOTE {DSK})(UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE /sources/LOADUP-LISP.LCOM))) (LOADUP-LISP(CONCAT(QUOTE {DSK})(UNIX-GETENV(QUOTE LOADUP_WORKDIR))(QUOTE /lisp.dribble))) (HARDRESET) ) SHH (PROGN (IL:ENDLOADUP)':MEDLEY) (IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /lisp.sysout))))) (IL:LOGOUT T) ) " \ No newline at end of file diff --git a/sources/LOADUP-LISP.LCOM b/sources/LOADUP-LISP.LCOM index 8e01adf6921b2a5f9bc93bd2c7f74f25e296318e..46a716e563eadef79e7c50efe17e315594777aa3 100644 GIT binary patch delta 1107 zcmaiy&rcIU6vydeC@f6~5itRRkD{?PX|wZY+in}vFzt?YZMT%&Mc`!6RwNc`NHtMw zdh$eKBoi+l{3r12-J1uaSN{UNnRs(Ht&BfN+{5g5-+tfs^CmN2=iko1T$`aJb>m?> zg$7a}Rsm^&7)PxO({~TH_wN^X+r_)z??J!oHU z_Mo@B-vd3)8Vw(QH>cBS>1%FxTheq&4AOW~Ph4|qyzFrnaQhzWyn+8uRgna zud~-Go;K&w8JYoIh)DWqZFW)rpM610X!BDJ7+`x&sZ`_P3}RVJoqHY8Mj|^S@;M(a z>veVWhxvIET{)K;0j-T-PLG+4RHDm=yOOojo?I_^yJ%%(z3kR}mw5s6D&Ze(e#`gFj4ZV_C{U0u28wSJE2Bi_pk54f4)o_?&JX=cm~&~8ggKk? sWuiEoe5A?#(O4zyufKR76owmDG;LCWP%DAj3Z6`dq^hIb+0Mllit5Bpuxh8lc4#Z6q>0){NmI22 z2?)x>!~(KdSeO}6k(e3T*eW4LCI(hko=M5IQt@#9@7=xsdw2IfF8*44b$^~RsoZW# zG)rY5OedKDz{wEcqZ~&$ zj&dC3ILdJpaptD&0zHEvi*gp;C^*Bv9RP&G2!|04BOFFJjBps?XCp*`;zqq{)&RW% z%d2@dFct7uC4lcd5~>2OHFS$0tK%1tvlufSYumIvK%3D-va8q^4-C)8R#WgWuCZ?U z+kVw>@zDqaeY6h`%AkZ@LICrvQn2CKmJcMWU6^YsU~(Bd)`zQkjZYLU{CP#3RI)U@ zHuYvM&mdK_D@8kSjhdeZnX&NG)N($D@sjKKuHglSSBX~CQRu8=FrZ*ytK>-5R^S;} zHpnsy=i-?KtT0vd*3Hc-?!wYjf$dr-vn+fV7X^)l!}u*B&%$?c5D@q|J}=~0cpCq5 zJ%SjfX?S*UFAY>-;fHBcK;PffrvhQ&*O|3Riav9RLgeEoUPM0M5-X9R+BMETO}nm}3DpIutXX&^$g-#_m58?AOrL=1@C&e1`pb=YY(yKNDB1;pdt K!O7d%h1ehet16=a From 1c077d1b3d724cd68aefea51630bc20ac22ccb93 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Tue, 1 Aug 2023 22:59:01 -0700 Subject: [PATCH 18/36] First full pass at loadups revamp. --- internal/MEDLEY-UTILS | 23 +++++++++++---------- internal/MEDLEY-UTILS.LCOM | Bin 7148 -> 7317 bytes scripts/copy-all.sh | 27 ++++++++++++++----------- scripts/copy-db.sh | 9 +++++++-- scripts/cpv | 7 ++++--- scripts/loadup-apps-from-full.sh | 33 ++++++++++++++++++++++++++++--- scripts/loadup-aux.sh | 8 ++++---- scripts/loadup-db-from-full.sh | 17 ++++++++++++---- scripts/loadup-full-from-lisp.sh | 24 +++++++++++++++++++--- scripts/loadup-full.sh | 11 +++++------ scripts/loadup-init.sh | 27 ++++++++++++++++++++++--- scripts/loadup-lisp-from-mid.sh | 24 +++++++++++++++++++--- scripts/loadup-mid-from-init.sh | 18 ++++++++++++++--- scripts/loadup-setup.sh | 15 ++++++++++---- 14 files changed, 184 insertions(+), 59 deletions(-) diff --git a/internal/MEDLEY-UTILS b/internal/MEDLEY-UTILS index c4c6c9ca..47d52d5e 100644 --- a/internal/MEDLEY-UTILS +++ b/internal/MEDLEY-UTILS @@ -1,11 +1,11 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "XCL" BASE 10) -(FILECREATED "31-Jul-2023 18:34:20" |{DSK}frank>il>medley>gmedley>internal>MEDLEY-UTILS.;3| 10550 +(FILECREATED " 1-Aug-2023 22:43:13" |{DSK}frank>il>medley>gmedley>internal>MEDLEY-UTILS.;5| 10714 - :CHANGES-TO (FNS MAKE-WHEREIS-HASH) + :CHANGES-TO (FNS MAKE-FULLER-DB) - :PREVIOUS-DATE "31-Jul-2023 18:07:23" -|{DSK}frank>il>medley>gmedley>internal>MEDLEY-UTILS.;2|) + :PREVIOUS-DATE " 1-Aug-2023 22:22:02" +|{DSK}frank>il>medley>gmedley>internal>MEDLEY-UTILS.;4|) (PRETTYCOMPRINT MEDLEY-UTILSCOMS) @@ -105,14 +105,17 @@ (* \; "Edited 20-Jun-2022 17:23 by larry") (FILESLOAD (SOURCE) FILESETS) - (DRIBBLE (MEDLEYDIR "tmp" "fuller.dribble" T T)) + (DRIBBLE (CONCAT "{DSK}" (UNIX-GETENV "LOADUP_WORKDIR") + "/" "fuller.dribble")) (DOFILESLOAD (SUBSET (APPEND OKSOURCES OKLIBRARY OKLISPUSERS OKINTERNAL) 'FINDFILE)) (GATHER-INFO 'ALL) (MASTERSCOPE '(WHO CALLS XYZZY)) - (DUMPDATABASE NIL (MKATOM (MEDLEYDIR "tmp" "fuller.database" T T))) + (DUMPDATABASE NIL (MKATOM (CONCAT "{DSK}" (UNIX-GETENV "LOADUP_WORKDIR") + "/" "fuller.database"))) (DRIBBLE) - (MAKESYS (MEDLEYDIR "tmp" "fuller.sysout" T T) + (MAKESYS (CONCAT "{DSK}" (UNIX-GETENV "LOADUP_WORKDIR") + "/" "fuller.sysout") "Welcome to Fuller sysout"))) (MEDLEY-FIX-LINKS @@ -175,7 +178,7 @@ (DRIBBLE)))) ) (DECLARE\: DONTCOPY - (FILEMAP (NIL (623 7498 (GATHER-INFO 633 . 6161) (MAKE-FULLER-DB 6163 . 6853) (MEDLEY-FIX-LINKS 6855 - . 7252) (MEDLEY-FIX-DATES 7254 . 7496)) (8537 10527 (MAKE-EXPORTS-ALL 8547 . 9575) (MAKE-WHEREIS-HASH - 9577 . 10525))))) + (FILEMAP (NIL (620 7662 (GATHER-INFO 630 . 6158) (MAKE-FULLER-DB 6160 . 7017) (MEDLEY-FIX-LINKS 7019 + . 7416) (MEDLEY-FIX-DATES 7418 . 7660)) (8701 10691 (MAKE-EXPORTS-ALL 8711 . 9739) (MAKE-WHEREIS-HASH + 9741 . 10689))))) STOP diff --git a/internal/MEDLEY-UTILS.LCOM b/internal/MEDLEY-UTILS.LCOM index acc62cc9a2efcc4c6fc909397450126bcadb30e3..4a353503f00571c86078e35bfd0c85c18b11ca6d 100644 GIT binary patch delta 773 zcmZva&2G~`5XWl{m6`*JPzB^R@+lFr@vgsOBMzJFrm^DK#&(*fDndzP5K^*MM5#wm@G79Tvb|JnJ?f9?Ha|8jo5I|ib#-k$4;R^Z_1_Ltu9d1S&lk;DuvG8|n>I6vp4X+fN9GDj zM6-#J|BznLR?qiEtnfw++$a{OUf4?%j)+GDG_Fw@O1Ue&k&K(eC+(-wZ620i=C7U~ z=U>b3H}SSyDdKv1fKRD-l@F>^v!Tm6A{pSR92=Tp&}1o)I)z@~ohc_G6~QSG%LX2M zjfO8Ur@(vN2(7RNOHeS8(P3%W#guLly1kE}1SciwTEs~+jIfOmIALiU&*%lM5Qs*A zhsBpl{E%_5O=x)mF9fhGxVT_ZBmz#sB0CFnw_+Gum%4Lrgc^H3)(&F-&A>lHGz*yT zV+ME$K<;Og%juU47E@>~CzEUj^KbL%a)Fn@!SctArf#*m4f1QO*%%Agz34+fj62+m z3lST>^Q3cyxq%xt&Fh(pw`DjQ&NI1$I_@a|I>tu;icR+bVnMav4xx!|6F3{3pATxF g8(T}`+2_${lF2}wJ0gY$z+xO6-Vtx6&#sRC0@H88UH||9 delta 659 zcmZuu(Q4Z;6s^0L#f%ZQ!Pddx;wSsTL9%RD_Sl0GDYaK8_N-)GN?#I^K_I20Ngf7a z`Gpm;uh?UMqo2}`sFXG(tkc8g>KvVOuB1QF?cwh)ZwPijFK4cYJOY@;#E%KOnsg7y z$^q*i644mbtD6J4i#Hk#3s&RdVlrO+PvH^EG3|DmiB>6CPw*#)RHlb2YJ94Z6_^+W z0jho(Z-bLWlp>XG!ert=T$JK#n)jv4mCF+obQr57Fss=3Xn5Dp_LG;!-zuxW+n#2LXX}6sNrNDFjR5HsM zhtPv|+T|L6fWX-qD+p#HSv~lw?}!MnEK?2OkW}c^hjoC# z`o5gaCYO!*&-ul2VW~TYU@gvns18SutorHUXgHr})Zg-mfPIqW&{D1vz70-K2aXB5 cs>|tUG}EH3#s}M$dB1E4M~!xEzdo>>>> START ${script_name}" + # was # cp -p tmp/full.sysout tmp/lisp.sysout tmp/*.dribble tmp/whereis.hash loadups/ # cp -p tmp/exports.all tmp/RDSYS tmp/RDSYS.LCOM library/ # just copy the files that are released -./scripts/cpv ${LOADUP_WORKDIR}/full.sysout loadups -./scripts/cpv ${LOADUP_WORKDIR}/lisp.sysout loadups +./scripts/cpv "${LOADUP_WORKDIR}"/full.sysout loadups +./scripts/cpv "${LOADUP_WORKDIR}"/lisp.sysout loadups if [ "${1}" = "-apps" ]; then - ./scripts/cpv ${LOADUP_WORKDIR}/apps.sysout loadups + ./scripts/cpv "${LOADUP_WORKDIR}"/apps.sysout loadups fi -./scripts/cpv ${LOADUP_WORKDIR}/whereis.hash loadups -./scripts/cpv ${LOADUP_WORKDIR}/exports.all loadups +./scripts/cpv "${LOADUP_WORKDIR}"/whereis.hash loadups +./scripts/cpv "${LOADUP_WORKDIR}"/exports.all loadups -./scripts/cpv ${LOADUP_WORKDIR}/init.dribble loadups -./scripts/cpv ${LOADUP_WORKDIR}/lisp.dribble loadups -./scripts/cpv ${LOADUP_WORKDIR}/full.dribble loadups -./scripts/cpv ${LOADUP_WORKDIR}/whereis.dribble loadups +./scripts/cpv "${LOADUP_WORKDIR}"/init.dribble loadups +./scripts/cpv "${LOADUP_WORKDIR}"/lisp.dribble loadups +./scripts/cpv "${LOADUP_WORKDIR}"/full.dribble loadups +./scripts/cpv "${LOADUP_WORKDIR}"/whereis.dribble loadups -./scripts/cpv ${LOADUP_WORKDIR}/RDSYS library -./scripts/cpv ${LOADUP_WORKDIR}/RDSYS.LCOM library +./scripts/cpv "${LOADUP_WORKDIR}"/RDSYS library +./scripts/cpv "${LOADUP_WORKDIR}"/RDSYS.LCOM library +echo "<<<<< END ${script_name}" +echo "" +exit 0 diff --git a/scripts/copy-db.sh b/scripts/copy-db.sh index 25044ad1..4c22b420 100755 --- a/scripts/copy-db.sh +++ b/scripts/copy-db.sh @@ -7,6 +7,11 @@ fi . scripts/loadup-setup.sh -./scripts/cpv ${LOADUP_WORKDIR}/fuller.database loadups -./scripts/cpv ${LOADUP_WORKDIR}/fuller.dribble loadups +echo ">>>>> START ${script_name}" +./scripts/cpv "${LOADUP_WORKDIR}"/fuller.database loadups +./scripts/cpv "${LOADUP_WORKDIR}"/fuller.dribble loadups + +echo "<<<<< END ${script_name}" +echo "" +exit 0 diff --git a/scripts/cpv b/scripts/cpv index 7f0e7ece..4d84e663 100755 --- a/scripts/cpv +++ b/scripts/cpv @@ -2,7 +2,6 @@ # cpv file dest # could extend with -r or copying multiple files -# could change from cp to ln ln_or_cp () { f=$(df $(dirname $1) | tail -1 | awk '{ print $1 }') @@ -14,9 +13,8 @@ ln_or_cp () { file="$1" dest="$2" - if [ ! -f "$file" ]; then - echo no such file "$file" + echo "Error: no such file "$file". Exiting." exit 1 fi @@ -34,6 +32,7 @@ fi # if no such file $dest then just copy if [ ! -f "$dest" ]; then $(ln_or_cp $file $dest) $file $dest + echo "Added $(basename $dest) to $(dirname $dest)" exit 0 fi @@ -67,5 +66,7 @@ fi # make new version and link it $(ln_or_cp $file $dest.~new~) $file $dest.~$new~ +echo "Added $(basename $dest.~$new~) to $(dirname $dest.~$new~)" rm -f $dest ln $dest.~$new~ $dest +echo "Linked $(basename $dest) to $(basename $dest.~$new~) in $(dirname $dest)" diff --git a/scripts/loadup-apps-from-full.sh b/scripts/loadup-apps-from-full.sh index d7b6cb7d..c4ba2e47 100755 --- a/scripts/loadup-apps-from-full.sh +++ b/scripts/loadup-apps-from-full.sh @@ -7,7 +7,7 @@ fi . scripts/loadup-setup.sh -loadup_start "loadup-apps-from-full" +loadup_start export ROOMSDIR=${MEDLEYDIR}/rooms export CLOSDIR=${MEDLEYDIR}/clos @@ -23,8 +23,35 @@ if [ ! -e ${NOTECARDSDIR} ]; then fi fi -./run-medley $scr -loadup "${MEDLEYDIR}/sources/LOADUP-APPS.CM" "${LOADUP_WORKDIR}/full.sysout" +cat >"${cmfile}" <<"EOF" +" -loadup_finish "loadup-apps-from-full" "apps.sysout" "apps.*" +(PROGN + (IL:MEDLEY-INIT-VARS 'IL:GREET) + (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE NOTECARDSDIR))(QUOTE |/system/NOTECARDS.LCOM|)) 'IL:SYSLOAD) + (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE ROOMSDIR))(QUOTE /ROOMS)) 'IL:SYSLOAD) + (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE CLOSDIR))(QUOTE /DEFSYS.DFASL)) 'IL:SYSLOAD) + (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE |lispusers/BUTTONS.LCOM|)) 'IL:SYSLOAD) + (IL:LOAD + (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE |/sources/LOADUP-APPS.LCOM|)) + 'IL:SYSLOAD + ) + (IL:HARDRESET) +) +SHH +(PROGN + (IL:ENDLOADUP) + (CLOS::LOAD-CLOS) + (IL:|Apps.LOADUP|) + (IL:MAKESYS + (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /apps.sysout))) + :APPS) +) +(IL:LOGOUT T) +" +EOF +./run-medley ${scr} -loadup "${cmfile}" "${LOADUP_WORKDIR}/full.sysout" + +loadup_finish "apps.sysout" "apps.*" diff --git a/scripts/loadup-aux.sh b/scripts/loadup-aux.sh index f0abfb47..4a48f779 100755 --- a/scripts/loadup-aux.sh +++ b/scripts/loadup-aux.sh @@ -7,9 +7,9 @@ fi . scripts/loadup-setup.sh -loadup_start "loadup-aux" +loadup_start -cat >"${LOADUP_WORKDIR}"/loadup-aux.cm <<"EOF" +cat >"${cmfile}" <<"EOF" " (IL:MEDLEY-INIT-VARS) (IL:LOAD(QUOTE MEDLEY-UTILS)) @@ -19,6 +19,6 @@ cat >"${LOADUP_WORKDIR}"/loadup-aux.cm <<"EOF" " EOF -./run-medley $scr -loadup "${LOADUP_WORKDIR}"/loadup-aux.cm "${LOADUP_WORKDIR}"/full.sysout +./run-medley ${scr} -loadup "${cmfile}" "${LOADUP_WORKDIR}"/full.sysout -loadup_finish "loadup-aux" "whereis.hash" "whereis.hash" "exports.all" +loadup_finish "whereis.hash" "whereis.hash" "exports.all" diff --git a/scripts/loadup-db-from-full.sh b/scripts/loadup-db-from-full.sh index b1793a11..c972491a 100755 --- a/scripts/loadup-db-from-full.sh +++ b/scripts/loadup-db-from-full.sh @@ -7,11 +7,20 @@ fi . scripts/loadup-setup.sh -DBCM="${LOADUP_WORKDIR}"/db.cm +loadup_start -echo '" (IL:MEDLEY-INIT-VARS)(IL:FILESLOAD MEDLEY-UTILS)(IL:MAKE-FULLER-DB)(IL:LOGOUT T)"' > ${DBCM} +cat >"${cmfile}" <<"EOF" +" -./run-medley $scr -loadup "${DBCM}" -full +(IL:MEDLEY-INIT-VARS) +(IL:FILESLOAD MEDLEY-UTILS) +(IL:MAKE-FULLER-DB) +(IL:LOGOUT T) -loadup_finish "loadup-db" "fuller.database" "fuller*" +" +EOF + +./run-medley ${scr} -loadup "${cmfile}" -full + +loadup_finish "fuller.database" "fuller*" diff --git a/scripts/loadup-full-from-lisp.sh b/scripts/loadup-full-from-lisp.sh index 351ab260..6c027ec4 100755 --- a/scripts/loadup-full-from-lisp.sh +++ b/scripts/loadup-full-from-lisp.sh @@ -7,9 +7,27 @@ fi . scripts/loadup-setup.sh -loadup_start "loadup-full-from-lisp" +loadup_start -./run-medley $scr -loadup "$MEDLEYDIR/sources/LOADUP-FULL.CM" "${LOADUP_WORKDIR}/lisp.sysout" +cat >"${cmfile}" <<"EOF" +" -loadup_finish "loadup-full-from-lisp" "full.sysout" "full.*" +(PROGN + (IL:LOAD(IL:CONCAT(QUOTE {DSK})(IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE /sources/LOADUP-FULL.LCOM))) + (IL:LOADUP-FULL (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /full.dribble)))) + (IL:HARDRESET) +) +SHH +(PROGN + (IL:ENDLOADUP) + (IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /full.sysout))) :FULL)) + (IL:LOGOUT T) +) + +" +EOF + +./run-medley ${scr} -loadup "${cmfile}" "${LOADUP_WORKDIR}/lisp.sysout" + +loadup_finish "full.sysout" "full.*" diff --git a/scripts/loadup-full.sh b/scripts/loadup-full.sh index a3a06fe1..a49fdd5a 100755 --- a/scripts/loadup-full.sh +++ b/scripts/loadup-full.sh @@ -1,15 +1,14 @@ #!/bin/sh -export MEDLEYDIR=`pwd` - if [ ! -x run-medley ] ; then echo must run from MEDLEYDIR ; exit 1 ; fi +. ./scripts/loadup-setup.sh - ./scripts/loadup-init.sh && \ - ./scripts/loadup-mid-from-init.sh && \ - ./scripts/loadup-lisp-from-mid.sh && \ - ./scripts/loadup-full-from-lisp.sh +./scripts/loadup-init.sh && \ +./scripts/loadup-mid-from-init.sh && \ +./scripts/loadup-lisp-from-mid.sh && \ +./scripts/loadup-full-from-lisp.sh diff --git a/scripts/loadup-init.sh b/scripts/loadup-init.sh index 4c7be321..e08f8ad5 100755 --- a/scripts/loadup-init.sh +++ b/scripts/loadup-init.sh @@ -7,8 +7,29 @@ fi . scripts/loadup-setup.sh -loadup_start "loadup-init" +loadup_start -./run-medley $scr -loadup "${MEDLEYDIR}"/sources/LOADUP-INIT.LISP loadups/starter.sysout +cat >"${cmfile}" <<"EOF" +(* "make init files; this file is loaded as a 'greet' file by scripts/loadup-init.sh") -loadup_finish "loadup-init" "init.dlinit" "init.*" "RDSYS*" "I-NEW*" +(LOAD (CONCAT (UNIX-GETENV "MEDLEYDIR") "/sources/MEDLEYDIR.LCOM")) +(CNDIR (UNIX-GETENV "LOADUP_WORKDIR")) +(DRIBBLE "init.dribble") + +(UNADVISE) +(ADVISE 'PAGEFULLFN '(RETURN)) +(ADVISE '(ERROR IN \DO-DEFINE-FILE-INFO) '(RETURN)) +(MOVD? 'NILL 'SETTEMPLATE) +(DEFINEQ (RRE (LAMBDA (X Y) Y))) +(MOVD? 'RRE 'READ-READER-ENVIRONMENT) + +(LOAD (MEDLEYDIR "sources" "MAKEINIT.LCOM")) +(MAKEINITGREET) +(DRIBBLE) +(LOGOUT T) +STOP +EOF + +./run-medley $scr -loadup "${cmfile}" loadups/starter.sysout + +loadup_finish "init.dlinit" "init.*" "RDSYS*" "I-NEW*" diff --git a/scripts/loadup-lisp-from-mid.sh b/scripts/loadup-lisp-from-mid.sh index 283b8ba6..7233f85b 100755 --- a/scripts/loadup-lisp-from-mid.sh +++ b/scripts/loadup-lisp-from-mid.sh @@ -7,8 +7,26 @@ fi . scripts/loadup-setup.sh -loadup_start "loadup-lisp-from-mid" +loadup_start -./run-medley $scr -loadup "$MEDLEYDIR/sources/LOADUP-LISP.CM" ${LOADUP_WORKDIR}/init-mid.sysout +cat >"${cmfile}" <<"EOF" +" -loadup_finish "loadup-lisp-from-mid" "lisp.sysout" "lisp.*" +(PROGN + (LOAD(CONCAT(QUOTE {DSK})(UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE /sources/LOADUP-LISP.LCOM))) + (LOADUP-LISP(CONCAT(QUOTE {DSK})(UNIX-GETENV(QUOTE LOADUP_WORKDIR))(QUOTE /lisp.dribble))) + (HARDRESET) +) +SHH +(PROGN + (IL:ENDLOADUP) + (IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /lisp.sysout))) :LISP) + (IL:LOGOUT T) +) + +" +EOF + +./run-medley ${scr} -loadup "${cmfile}" "${LOADUP_WORKDIR}/init-mid.sysout" + +loadup_finish "lisp.sysout" "lisp.*" diff --git a/scripts/loadup-mid-from-init.sh b/scripts/loadup-mid-from-init.sh index d5f4ff26..7efc13e4 100755 --- a/scripts/loadup-mid-from-init.sh +++ b/scripts/loadup-mid-from-init.sh @@ -7,8 +7,20 @@ fi . scripts/loadup-setup.sh -loadup_start "loadup-mid-from-init" +loadup_start -./run-medley -prog "ldeinit" -NF -loadup $MEDLEYDIR/sources/XREM.CM $scr -vmem ${LOADUP_WORKDIR}/init-mid.sysout ${LOADUP_WORKDIR}/init.dlinit +cat >"${cmfile}" <<"EOF" +" +(MOVD? (QUOTE NILL) (QUOTE PROMPTPRINT)) +(MOVD? (QUOTE NILL) (QUOTE CURSORP)) +(MOVD? (QUOTE NILL) (QUOTE CHANGEBACKGROUNDBORDER)) +(LOGOUT) +" +EOF -loadup_finish "loadup-mid-from-init" "init-mid.sysout" "init-mid.sysout" +./run-medley -prog "ldeinit" \ + -NF \ + -loadup "${cmfile}" ${scr} -vmem "${LOADUP_WORKDIR}/init-mid.sysout" \ + "${LOADUP_WORKDIR}/init.dlinit" + +loadup_finish "init-mid.sysout" "init-mid.sysout" diff --git a/scripts/loadup-setup.sh b/scripts/loadup-setup.sh index 2fca51be..98e15150 100644 --- a/scripts/loadup-setup.sh +++ b/scripts/loadup-setup.sh @@ -12,14 +12,20 @@ scr="-sc 1024x768 -g 1042x790" touch "${LOADUP_WORKDIR}"/loadup.timestamp +script_name=$(basename "$0" ".sh") +cmfile="${LOADUP_WORKDIR}/${script_name}.cm" + + +###################################################################### loadup_start () { - echo ">>>>> START ${1}" + echo ">>>>> START ${script_name}" } loadup_finish () { - local script_name=${1} - if [ "${LOADUP_WORKDIR}/${2}" -nt "${LOADUP_WORKDIR}"/loadup.timestamp ]; + local exit_code + rm -f "${cmfile}" + if [ "${LOADUP_WORKDIR}/${1}" -nt "${LOADUP_WORKDIR}"/loadup.timestamp ]; then echo "+++++ SUCCESS +++++" exit_code=0 @@ -28,7 +34,7 @@ loadup_finish () { exit_code=1 fi echo "..... files created ....." - shift; shift + shift; for f in ${*}; do ls -l "${LOADUP_WORKDIR}"/$f 2>/dev/null @@ -38,5 +44,6 @@ loadup_finish () { exit ${exit_code} } +###################################################################### From b0ec2476d569ff230f2b20ca6107c487dda5775b Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Tue, 1 Aug 2023 23:41:39 -0700 Subject: [PATCH 19/36] Handle case where files already exist in LOADUP_WORKDIR - show only the newly created files - not the old ones --- scripts/loadup-setup.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/scripts/loadup-setup.sh b/scripts/loadup-setup.sh index 98e15150..d838dca4 100644 --- a/scripts/loadup-setup.sh +++ b/scripts/loadup-setup.sh @@ -37,7 +37,13 @@ loadup_finish () { shift; for f in ${*}; do - ls -l "${LOADUP_WORKDIR}"/$f 2>/dev/null + for ff in $(ls -1 "${LOADUP_WORKDIR}"/$f); + do + if [ "${ff}" -nt "${LOADUP_WORKDIR}"/loadup.timestamp ]; + then + ls -l ${ff} 2>/dev/null | grep -v "^.*~[0-9]\+~$" + fi + done done echo "<<<<< END ${script_name}" echo "" From ae2633591e62a67229f74c6e6d59bf49e76d449a Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Wed, 2 Aug 2023 01:02:12 -0700 Subject: [PATCH 20/36] Remove now obsolete sources/*.CM files; update README a bit --- scripts/README.md | 22 +++++++++++++++++----- sources/LOADUP-APPS.CM | 1 - sources/LOADUP-FULL.CM | 1 - sources/LOADUP-INIT.LISP | 19 ------------------- sources/LOADUP-LISP.CM | 1 - sources/XREM.CM | 6 ------ 6 files changed, 17 insertions(+), 33 deletions(-) delete mode 100644 sources/LOADUP-APPS.CM delete mode 100644 sources/LOADUP-FULL.CM delete mode 100644 sources/LOADUP-INIT.LISP delete mode 100644 sources/LOADUP-LISP.CM delete mode 100644 sources/XREM.CM diff --git a/scripts/README.md b/scripts/README.md index d4dd7da1..413d08e1 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -7,18 +7,30 @@ Loading from an old 'starter' sysout * loadup-mid-from-init.sh -- phase 2 (creates init.sysout) * loadup-lisp-from-mid.sh -- phase 3 (creates lisp.sysout) * loadup-full-from-lisp.sh -- phase 4 (creates full.sysout) -* loadup-aux.sh -- phase 5,(creates exports.all whereis.hash +* loadup-apps-from-full.sh -- phase 5 (creates app.sysout, with notecards, rooms and clos; optional) +* loadup-aux.sh -- phase 6 (creates exports.all whereis.hash) +* loadup-db-from-full.sh -- phase 7 (makes unreleased 'fuller.sysout' and fuller.database) -* loadup-full.sh -- Phase 1-4 only +All of these scripts read from and write to a directory specified by the env variable LOADUP_WORKDIR. +LOADUP_WORKDIR defaults to /tmp/loadups-$$ (where $$ is the PID of the script). Note that all /tmp files +are cleared after 10 days or upon system reboot. You can replicate the old work directory scheme +where files were never deleted automatically by simply setting LOADUP_WORKDIR to "./tmp" -* loadup-db.sh -- phase 6 (makes unreleased 'fuller.sysout' and fuller.database -* copy-all.sh -- copy loadups from tmp/ to loadups/ and library/ +* loadup-all.sh [-apps] -- Phases 1-4 & 6 (plus Phase 5 with -apps flag) +* loadup-db.sh -- phase 7 only based on full.syout in loadup directory + +These two scripts call the 7 scripts above as specified and then (if successful) copy (ln) the results +to the loadups directory using a versioned copy. The files are hardlinked into loadups from the workdir +if workdir and loadups are on the same filesystem, otherwise they are copied. + +* loadup-full.sh -- Phases 1-4 only, no copy into loadups at the end. ## possibly handy scripts * lsee -- show lisp file with font-control-characters rendered as linux color changes -* cpv file1 file2 -- copies file1 to file2 (or directory name) adding versions +* cpv file1 file2 -- hardlinks (or copies) file1 to file2 (or directory name) adding versions + choice of hardlink or copy depends on whether the files are on the same filesystem. * restore-versions.sh -- pulls out old versions from git history and links in with medley versioning conventions ## Not useful anymore diff --git a/sources/LOADUP-APPS.CM b/sources/LOADUP-APPS.CM deleted file mode 100644 index f8d37768..00000000 --- a/sources/LOADUP-APPS.CM +++ /dev/null @@ -1 +0,0 @@ -" (PROGN (IL:MEDLEY-INIT-VARS 'IL:GREET) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE NOTECARDSDIR))(QUOTE |/system/NOTECARDS.LCOM|)) 'IL:SYSLOAD) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE ROOMSDIR))(QUOTE /ROOMS)) 'IL:SYSLOAD) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE CLOSDIR))(QUOTE /DEFSYS.DFASL)) 'IL:SYSLOAD) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE |lispusers/BUTTONS.LCOM|)) 'IL:SYSLOAD) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE |/sources/LOADUP-APPS.LCOM|)) 'IL:SYSLOAD ) (IL:HARDRESET) ) SHH (PROGN (IL:ENDLOADUP) (CLOS::LOAD-CLOS) (IL:|Apps.LOADUP|) (IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /apps.sysout))) :APPS) ) (IL:LOGOUT T) " \ No newline at end of file diff --git a/sources/LOADUP-FULL.CM b/sources/LOADUP-FULL.CM deleted file mode 100644 index 8ebb9a67..00000000 --- a/sources/LOADUP-FULL.CM +++ /dev/null @@ -1 +0,0 @@ -" (PROGN (IL:LOAD(IL:CONCAT(QUOTE {DSK})(IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE /sources/LOADUP-FULL.LCOM))) (IL:LOADUP-FULL (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /full.dribble)))) (IL:HARDRESET) ) SHH (PROGN (IL:ENDLOADUP) (IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /full.sysout))) :FULL)) (IL:LOGOUT T) ) " \ No newline at end of file diff --git a/sources/LOADUP-INIT.LISP b/sources/LOADUP-INIT.LISP deleted file mode 100644 index 016338d7..00000000 --- a/sources/LOADUP-INIT.LISP +++ /dev/null @@ -1,19 +0,0 @@ -(* "make init files; this file is loaded as a 'greet' file by scripts/loadup-init.sh") - -(LOAD (CONCAT (UNIX-GETENV "MEDLEYDIR") "/sources/MEDLEYDIR.LCOM")) -(CNDIR (UNIX-GETENV "LOADUP_WORKDIR")) -(DRIBBLE "init.dribble") - -(UNADVISE) -(ADVISE 'PAGEFULLFN '(RETURN)) -(ADVISE '(ERROR IN \DO-DEFINE-FILE-INFO) '(RETURN)) -(MOVD? 'NILL 'SETTEMPLATE) -(DEFINEQ (RRE (LAMBDA (X Y) Y))) -(MOVD? 'RRE 'READ-READER-ENVIRONMENT) - -(LOAD (MEDLEYDIR "sources" "MAKEINIT.LCOM")) -(MAKEINITGREET) -(DRIBBLE) -(LOGOUT T) -STOP - diff --git a/sources/LOADUP-LISP.CM b/sources/LOADUP-LISP.CM deleted file mode 100644 index d08bdff7..00000000 --- a/sources/LOADUP-LISP.CM +++ /dev/null @@ -1 +0,0 @@ -" (PROGN (LOAD(CONCAT(QUOTE {DSK})(UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE /sources/LOADUP-LISP.LCOM))) (LOADUP-LISP(CONCAT(QUOTE {DSK})(UNIX-GETENV(QUOTE LOADUP_WORKDIR))(QUOTE /lisp.dribble))) (HARDRESET) ) SHH (PROGN (IL:ENDLOADUP)':MEDLEY) (IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /lisp.sysout))))) (IL:LOGOUT T) ) " \ No newline at end of file diff --git a/sources/XREM.CM b/sources/XREM.CM deleted file mode 100644 index 1cd92bd7..00000000 --- a/sources/XREM.CM +++ /dev/null @@ -1,6 +0,0 @@ -" -(MOVD? (QUOTE NILL) (QUOTE PROMPTPRINT)) -(MOVD? (QUOTE NILL) (QUOTE CURSORP)) -(MOVD? (QUOTE NILL) (QUOTE CHANGEBACKGROUNDBORDER)) -(LOGOUT) -" From 346c11b0ad446184c07ace1534067d6a97e24b78 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Wed, 2 Aug 2023 13:41:36 -0700 Subject: [PATCH 21/36] WIP fixing up scripts/release_medley.sh and syncing with buildLoadup.yml --- .gitignore | 4 ++ scripts/release-make-tars.sh | 86 ++++++++++++++++++++++++++++++++++++ scripts/release-medley.sh | 49 +++++--------------- 3 files changed, 101 insertions(+), 38 deletions(-) create mode 100755 scripts/release-make-tars.sh diff --git a/.gitignore b/.gitignore index aeae2bea..223b84a6 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,10 @@ tmp/* +# releases directory +releases/* + + # all loadup files loadups/exports.all diff --git a/scripts/release-make-tars.sh b/scripts/release-make-tars.sh new file mode 100755 index 00000000..f62d9236 --- /dev/null +++ b/scripts/release-make-tars.sh @@ -0,0 +1,86 @@ +#!/bin/sh + +######### Functions ######## +check_exists () { + f="$1" + if [ -e "${f}" ] + then + echo "${f}" + else + echo "Warning: $f does not exist. $(basename ${f}) will not be included in release tars" 1>&2 + echo " " + fi +} +######## End Functions ####### + + +if [ ! -x run-medley ] ; then + echo run from MEDLEYDIR + exit 1 +fi +export MEDLEYDIR=`pwd` + +if [ -z "$1" ] ; then + tag=medley-$(date +%y%m%d)-$(date +%s) +else + tag="$1" +fi +short_tag="${tag#medley-}" + +dirname=$(basename "${MEDLEYDIR}") +if [ "${dirname}" = "medley" ] +then + name_xform=" " +else + uname | grep -q -i Linux + if [ $? -eq 0 ] + then + name_xform="--xform s/^${dirname}/medley/" + else + name_xform="-s /^${dirname}/medley/" + fi +fi + +cd .. +release_dir="${dirname}"/releases/"${short_tag}" +mkdir -p "${release_dir}" + +echo making releases/${short_tag}/$tag-loadups.tgz + + +tar -c -z -f "${release_dir}"/$tag-loadups.tgz \ + ${name_xform} \ + "${dirname}"/loadups/lisp.sysout \ + "${dirname}"/loadups/full.sysout \ + $(check_exists "${dirname}/loadups/apps.sysout") \ + "${dirname}"/loadups/*.dribble \ + "${dirname}"/loadups/whereis.hash \ + "${dirname}"/loadups/exports.all \ + $(check_exists "${dirname}/loadups/fuller.database") ; + +echo making releases/${short_tag}/$tag-runtime.tgz + +tar -c -z -f "${release_dir}"/$tag-runtime.tgz \ + --exclude "*~" --exclude "*#*" \ + --exclude exports.all \ + ${name_xform} \ + "${dirname}"/clos \ + "${dirname}"/docs/dinfo \ + "${dirname}"/docs/man-page/medley.1.gz \ + "${dirname}"/doctools \ + "${dirname}"/greetfiles \ + "${dirname}"/rooms \ + "${dirname}"/medley \ + "${dirname}"/run-medley \ + "${dirname}"/scripts \ + "${dirname}"/fonts/displayfonts \ + "${dirname}"/fonts/altofonts \ + "${dirname}"/fonts/adobe \ + "${dirname}"/fonts/postscriptfonts \ + "${dirname}"/fonts/ipfonts \ + "${dirname}"/library \ + "${dirname}"/lispusers \ + "${dirname}"/sources \ + "${dirname}"/internal ; + +echo "Done with release tars" diff --git a/scripts/release-medley.sh b/scripts/release-medley.sh index a4fcf0df..3834d7e9 100755 --- a/scripts/release-medley.sh +++ b/scripts/release-medley.sh @@ -6,48 +6,21 @@ if [ ! -x run-medley ] ; then exit 1 fi -tag=$1 - -if [ -z "$tag" ] ; then - tag=medley-`date +%y%m%d` +if [ -z "$1" ] ; then + tag=medley-$(date +%y%m%d)-$(date +%s) +else + tag="$1" fi +short_tag="${tag#medley-}" -cd .. - -echo making $tag-loadups.tgz - -tar cfz medley/tmp/$tag-loadups.tgz \ - medley/loadups/lisp.sysout \ - medley/loadups/full.sysout \ - medley/loadups/fuller.database \ - medley/loadups/*.dribble \ - medley/loadups/whereis.hash \ - medley/loadups//exports.all - -echo making $tag-runtime.tgz - -tar cfz medley/tmp/$tag-runtime.tgz \ - --exclude "*~" --exclude "*#*" \ - medley/docs/dinfo \ - medley/doctools \ - medley/greetfiles \ - medley/rooms \ - medley/run-medley \ - medley/scripts \ - medley/fonts/displayfonts medley/fonts/altofonts \ - medley/fonts/adobe \ - medley/fonts/postscriptfonts \ - medley/library \ - medley/lispusers \ - medley/sources \ - medley/internal - -cd medley +scripts/release-make-tars.sh "${tag}" echo making release -sed s/'$tag'/$tag/g < release-notes.md > tmp/release-notes.md -gh release create $tag -F tmp/release-notes.md -p -t $tag +sed s/'$tag'/$tag/g < release-notes.md > releases/${short_tag}/release-notes.md +gh release create $tag -F releases/${short_tag}/release-notes.md -p -t $tag echo uploading -gh release upload $tag tmp/$tag-loadups.tgz tmp/$tag-runtime.tgz --clobber +gh release upload $tag releases/${short_tag}/$tag-loadups.tgz releases/${short_tag}/$tag-runtime.tgz --clobber + +echo done From 84391b367b4482ce45540e0c2921a00340874faf Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Wed, 2 Aug 2023 16:43:35 -0700 Subject: [PATCH 22/36] First pass a complete new make-release.sh --- scripts/README.md | 7 +++++++ scripts/release-medley.sh | 22 ++++++++++++++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/scripts/README.md b/scripts/README.md index 413d08e1..6430dfb0 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -25,6 +25,13 @@ if workdir and loadups are on the same filesystem, otherwise they are copied. * loadup-full.sh -- Phases 1-4 only, no copy into loadups at the end. +## releases + +* release-medley.sh -- will create Medley release tars and upload as a release on github. + Arguments: -d to make a draft release. to uses as a tag for this + release on github (defaults to meldey-\-\). + +* release-make-tars.sh -- will create the Medley release tars and store them in the releases directory. ## possibly handy scripts diff --git a/scripts/release-medley.sh b/scripts/release-medley.sh index 3834d7e9..68f5f77f 100755 --- a/scripts/release-medley.sh +++ b/scripts/release-medley.sh @@ -6,6 +6,24 @@ if [ ! -x run-medley ] ; then exit 1 fi +if [ -z "$(which gh)" ]; then + echo "Error: this script requires gh (github cli) to be installed. Exiting." + exit 1 +fi + +gh auth status 2>&1 | grep -i -q "Logged in to github.com" +if [ $? -ne 0 ]; then + echo 'Error: this script requires you to be logged into github. Use "gh auth login" to do so. Exiting.' + exit 1 +fi + +if [ "$1" = "-d" ]; then + draft="-d" + shift +else + draft="" +fi + if [ -z "$1" ] ; then tag=medley-$(date +%y%m%d)-$(date +%s) else @@ -17,10 +35,10 @@ scripts/release-make-tars.sh "${tag}" echo making release sed s/'$tag'/$tag/g < release-notes.md > releases/${short_tag}/release-notes.md -gh release create $tag -F releases/${short_tag}/release-notes.md -p -t $tag +gh release create $tag -F releases/${short_tag}/release-notes.md -p -t $tag ${draft} echo uploading gh release upload $tag releases/${short_tag}/$tag-loadups.tgz releases/${short_tag}/$tag-runtime.tgz --clobber -echo done +echo "Done with release ${tag}" From dfce541a18676745291243360f37987a3c39b77b Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Wed, 2 Aug 2023 16:47:04 -0700 Subject: [PATCH 23/36] Fix scripts/README.md --- scripts/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/README.md b/scripts/README.md index 6430dfb0..f62e02bb 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -28,8 +28,9 @@ if workdir and loadups are on the same filesystem, otherwise they are copied. ## releases * release-medley.sh -- will create Medley release tars and upload as a release on github. - Arguments: -d to make a draft release. to uses as a tag for this + Arguments: -d to make a draft release. \ to use as a tag for this release on github (defaults to meldey-\-\). + Both are optional. * release-make-tars.sh -- will create the Medley release tars and store them in the releases directory. From 1ff71ea15d4317dccaa9e9c1231e36f22a6a56d4 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Wed, 2 Aug 2023 22:03:38 -0700 Subject: [PATCH 24/36] update buildLOadup.yml to use new scripts/release-make-tars.sh instead of its almost but not quite equivalent make tars code --- .github/workflows/buildLoadup.yml | 41 +++---------------------------- 1 file changed, 3 insertions(+), 38 deletions(-) diff --git a/.github/workflows/buildLoadup.yml b/.github/workflows/buildLoadup.yml index e3d5b618..54da1136 100644 --- a/.github/workflows/buildLoadup.yml +++ b/.github/workflows/buildLoadup.yml @@ -228,45 +228,10 @@ jobs: scripts/loadup-all.sh -apps scripts/loadup-db.sh - - name: Build loadups release tar + - name: Build release tars run: | - cd .. - mkdir -p medley/${TARBALL_DIR} - tar cfz medley/${TARBALL_DIR}/${MEDLEY_RELEASE_TAG}-loadups.tgz \ - medley/loadups/lisp.sysout \ - medley/loadups/full.sysout \ - medley/loadups/apps.sysout \ - medley/loadups/whereis.hash \ - medley/loadups/*.dribble \ - medley/loadups/fuller.database \ - medley/loadups/exports.all - - - name: Build runtime release tar - run: | - cd .. - mkdir -p medley/${TARBALL_DIR} - tar cfz medley/${TARBALL_DIR}/${MEDLEY_RELEASE_TAG}-runtime.tgz \ - --exclude "*~" --exclude "*#*" \ - --exclude exports.all \ - medley/clos \ - medley/docs/dinfo \ - medley/docs/man-page/medley.1.gz \ - medley/doctools \ - medley/greetfiles \ - medley/rooms \ - medley/medley \ - medley/run-medley \ - medley/scripts \ - medley/fonts/displayfonts \ - medley/fonts/altofonts \ - medley/fonts/adobe \ - medley/fonts/postscriptfonts \ - medley/fonts/ipfonts \ - medley/library \ - medley/lispusers \ - medley/sources \ - medley/internal - + scripts/release-make-tars.sh "${MEDLEY_RELEASE_TAG}" + mv releases/"${MEDLEY_SHORT_RELEASE_TAG}"/*.tgz "${TARBALL_DIR}" # Build the deb files as well as the tgz files - name: Build .deb files for 3 architectures From 126a8cfb37e1aab43b5e061d3e324a476db25a5e Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Fri, 4 Aug 2023 15:07:43 -0700 Subject: [PATCH 25/36] Remove references to LOADUP_WORKDIR from all lisp code and instead pass the file references down from the callinf .CM files (which are now embedded in the loadup- scripts; also add /unicode subdir to the release tars. --- internal/MEDLEY-UTILS | 45 +++++++++++++------------- internal/MEDLEY-UTILS.LCOM | Bin 7317 -> 6947 bytes scripts/loadup-aux.sh | 11 +++++-- scripts/loadup-db-from-full.sh | 15 ++++++--- scripts/loadup-init.sh | 5 ++- scripts/release-make-tars.sh | 4 ++- sources/MAKEINIT | 56 ++++++++++++++++----------------- sources/MAKEINIT.LCOM | Bin 23621 -> 23471 bytes 8 files changed, 77 insertions(+), 59 deletions(-) diff --git a/internal/MEDLEY-UTILS b/internal/MEDLEY-UTILS index 47d52d5e..2e0ae0e2 100644 --- a/internal/MEDLEY-UTILS +++ b/internal/MEDLEY-UTILS @@ -1,11 +1,13 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "XCL" BASE 10) -(FILECREATED " 1-Aug-2023 22:43:13" |{DSK}frank>il>medley>gmedley>internal>MEDLEY-UTILS.;5| 10714 +(FILECREATED " 3-Aug-2023 18:40:12" |{DSK}frank>il>medley>gmedley>internal>MEDLEY-UTILS.;6| 10695 - :CHANGES-TO (FNS MAKE-FULLER-DB) + :EDIT-BY "frank" - :PREVIOUS-DATE " 1-Aug-2023 22:22:02" -|{DSK}frank>il>medley>gmedley>internal>MEDLEY-UTILS.;4|) + :CHANGES-TO (FNS MAKE-FULLER-DB MAKE-EXPORTS-ALL MAKE-WHEREIS-HASH) + + :PREVIOUS-DATE " 1-Aug-2023 22:43:13" +|{DSK}frank>il>medley>gmedley>internal>MEDLEY-UTILS.;5|) (PRETTYCOMPRINT MEDLEY-UTILSCOMS) @@ -101,21 +103,19 @@ (HELP)))) (MAKE-FULLER-DB - (LAMBDA NIL (* \; "Edited 16-Jul-2022 22:07 by larry") + (LAMBDA (DRIBBLEFILE DBFILE SYSOUTFILE) (* \; "Edited 3-Aug-2023 18:12 by frank") + (* \; "Edited 16-Jul-2022 22:07 by larry") (* \; "Edited 20-Jun-2022 17:23 by larry") (FILESLOAD (SOURCE) FILESETS) - (DRIBBLE (CONCAT "{DSK}" (UNIX-GETENV "LOADUP_WORKDIR") - "/" "fuller.dribble")) + (DRIBBLE (OR DRIBBLEFILE "fuller.dribble")) (DOFILESLOAD (SUBSET (APPEND OKSOURCES OKLIBRARY OKLISPUSERS OKINTERNAL) 'FINDFILE)) (GATHER-INFO 'ALL) (MASTERSCOPE '(WHO CALLS XYZZY)) - (DUMPDATABASE NIL (MKATOM (CONCAT "{DSK}" (UNIX-GETENV "LOADUP_WORKDIR") - "/" "fuller.database"))) + (DUMPDATABASE NIL (MKATOM (OR DBFILE "fuller.database"))) (DRIBBLE) - (MAKESYS (CONCAT "{DSK}" (UNIX-GETENV "LOADUP_WORKDIR") - "/" "fuller.sysout") + (MAKESYS (OR SYSOUTFILE "fuller.sysout") "Welcome to Fuller sysout"))) (MEDLEY-FIX-LINKS @@ -148,7 +148,8 @@ (DEFINEQ (MAKE-EXPORTS-ALL - (LAMBDA NIL (* \; "Edited 9-Mar-2021 16:11 by larry") + (LAMBDA (OUTFILE) (* \; "Edited 3-Aug-2023 18:34 by frank") + (* \; "Edited 9-Mar-2021 16:11 by larry") (* "Edited May 3, 2018 by Ron Kaplan--relative to MEDLEYDIR/lispcore/. Don't know why it does the CORE/RENAME") (*  "Edited Aug 17 94 by Sybalsky -- point it to /king/export/lispcore as the truth directory.") @@ -158,27 +159,25 @@  "Edited September 29, 1986 by van Melle") (CNDIR (MEDLEYDIR "sources")) (LOAD 'FILESETS) - (GATHEREXPORTS EXPORTFILES (CONCAT '{DSK} (UNIX-GETENV "LOADUP_WORKDIR") - "/" "exports.all")))) + (GATHEREXPORTS EXPORTFILES (OR OUTFILE "exports.all")))) (MAKE-WHEREIS-HASH - (LAMBDA (DRIBBLEFILE) (* \; "Edited 12-Mar-2022 12:46 by rmk") + (LAMBDA (DRIBBLEFILE TMPFILE WHEREISFILE) (* \; "Edited 3-Aug-2023 18:37 by frank") + (* \; "Edited 12-Mar-2022 12:46 by rmk") (* \; "Edited 24-Mar-2021 13:26 by larry") (LET ((FILING.ENUMERATION.DEPTH 2) HASHFILE) - (DRIBBLE DRIBBLEFILE) - (SETQ HASHFILE (XCL::WHERE-IS-NOTICE (CONCAT "{DSK}" (UNIX-GETENV "LOADUP_WORKDIR") - "/" "whereis.hash-tmp") + (DRIBBLE (OR DRIBBLEFILE "whereis.dribble")) + (SETQ HASHFILE (XCL::WHERE-IS-NOTICE (OR TMPFILE "whereis.hash-tmp") :FILES (|for| X |in| MEDLEY-FIX-DIRS |collect| (CONCAT (MEDLEYDIR X) "*.;")) :HASH-FILE-SIZE 60000 :NEW T)) - (RENAMEFILE HASHFILE (CONCAT "{DSK}" (UNIX-GETENV "LOADUP_WORKDIR") - "/" "whereis.hash")) + (RENAMEFILE HASHFILE (OR WHEREISFILE "whereis.hash")) (DRIBBLE)))) ) (DECLARE\: DONTCOPY - (FILEMAP (NIL (620 7662 (GATHER-INFO 630 . 6158) (MAKE-FULLER-DB 6160 . 7017) (MEDLEY-FIX-LINKS 7019 - . 7416) (MEDLEY-FIX-DATES 7418 . 7660)) (8701 10691 (MAKE-EXPORTS-ALL 8711 . 9739) (MAKE-WHEREIS-HASH - 9741 . 10689))))) + (FILEMAP (NIL (679 7642 (GATHER-INFO 689 . 6217) (MAKE-FULLER-DB 6219 . 6997) (MEDLEY-FIX-LINKS 6999 + . 7396) (MEDLEY-FIX-DATES 7398 . 7640)) (8681 10672 (MAKE-EXPORTS-ALL 8691 . 9752) (MAKE-WHEREIS-HASH + 9754 . 10670))))) STOP diff --git a/internal/MEDLEY-UTILS.LCOM b/internal/MEDLEY-UTILS.LCOM index 4a353503f00571c86078e35bfd0c85c18b11ca6d..b492e029673249f348f9d10bbe5f8e361aba8011 100644 GIT binary patch delta 978 zcmZvb-D=w~6vyMXbXzV;x{!X2Z3l1ArVwMv&WAk;Q(|Q?wc}vBq$#~gSFa7tnv$e! zg|M=DYIW;c6;u_u`1=A(o8LL40(>HPisOJ9xeg&RMu<;dkp4y#xLR5Eqd z#KkXB{kky9f(&@Js3KFvrf$eE8ouqlzvylrk6_d}A3;*C?l}(JFIE(V*B!Tq5ik1B zF?lR!lUr5Wp%tH!kXpRxA0dlE3Bs%-?Q9fy3#1l|Jebt7!(6!q^1FWf{7hz_Bw&Bm zUd}<1eUqLuO|otm=8{X>Hed)^fwvcm9$*6kt2_=>uzb5*c4$0jOR1go&HO@QzL((N zBQd=G@u0_sspd7|!8Dr`(L*tm$LV-2PNx!ENJrq3UCP@6;xNZe0HG3Cdv3!bAt{r9 z@`MKNE(tvs41;e8Lh1(SebZ^_9WZpm#Zx0jZ^F zj(gcYY7ZhA3>~(bH4iHMfB^Pe2M4VzpyI5u-#I$!Mso6YJ^f31VS@@2AF4d2`wh>J zZ3(iF$R?zO#8R0J5YPqO2~VvwhHwYb?_ABZ44a7R9EJxHJ3JO%dH>Cv8Zw8+Ny*m4c);Hl@*&Bt^wY zeu9-n@m>4{eeuCxA^0x%6MPb1yu0~m8f*7q=g!Q%XYQPH=9BtfKXT?s!Z_SbP?1VN zX-bw-RDM^rx=JSw0*r2wl%l7IC_tzEr19*aerKlxoxSHBhzLfh2 zo?^|Qo~XVtJC~B=6PV`S_IAB00M&aKIE+CA2Mi#NYqLN2YgrJ1ZIo=s3ojc7?mowJ zoWDPR-QFE~WXyTf!N$NDs@PYj2jhaG3<#CQQ9}LC^N^NA2ycKU>e0(QH{eteL8!hw zXf)fcWTjpgKvu#_NI0Cng#UAX!!Iw~TKagA=lJ?WG|E31>u+p2?SELv?VNA+lShGO zC$c`Y2SKYi%rc5BG#ELt3mNkZzGy!hi*?nZp%fj8%q*}?lpm0c{-dGFC@tvc!C|4z zL`Yez3}~*@n&GY`f@2eI?hy+pN%d4h!bqU}i(0i=-D@Rll~xT+6AGWe0LdL=Em#~% i4=RRB$rS-4|0uR_8$}6BN5#k)Whg+X*zuRx{^VakX)B!o diff --git a/scripts/loadup-aux.sh b/scripts/loadup-aux.sh index 4a48f779..598f6955 100755 --- a/scripts/loadup-aux.sh +++ b/scripts/loadup-aux.sh @@ -11,11 +11,18 @@ loadup_start cat >"${cmfile}" <<"EOF" " +(PROG + ((WORKDIR (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV (QUOTE LOADUP_WORKDIR)) (QUOTE /)))) (IL:MEDLEY-INIT-VARS) (IL:LOAD(QUOTE MEDLEY-UTILS)) - (IL:MAKE-EXPORTS-ALL) - (IL:MAKE-WHEREIS-HASH (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /whereis.dribble)))) + (IL:MAKE-EXPORTS-ALL (IL:CONCAT WORKDIR (IL:L-CASE (QUOTE exports.all)))) + (IL:MAKE-WHEREIS-HASH + (IL:CONCAT WORKDIR (IL:L-CASE (QUOTE whereis.dribble))) + (IL:CONCAT WORKDIR (IL:L-CASE (QUOTE whereis.hash-tmp))) + (IL:CONCAT WORKDIR (IL:L-CASE (QUOTE whereis.hash))) + ) (IL:LOGOUT T) +) " EOF diff --git a/scripts/loadup-db-from-full.sh b/scripts/loadup-db-from-full.sh index c972491a..8b368d50 100755 --- a/scripts/loadup-db-from-full.sh +++ b/scripts/loadup-db-from-full.sh @@ -12,10 +12,17 @@ loadup_start cat >"${cmfile}" <<"EOF" " -(IL:MEDLEY-INIT-VARS) -(IL:FILESLOAD MEDLEY-UTILS) -(IL:MAKE-FULLER-DB) -(IL:LOGOUT T) +(PROG + ((WORKDIR (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV (QUOTE LOADUP_WORKDIR)) (QUOTE /)))) + (IL:MEDLEY-INIT-VARS) + (IL:FILESLOAD MEDLEY-UTILS) + (IL:MAKE-FULLER-DB + (IL:CONCAT WORKDIR (IL:L-CASE (QUOTE fuller.dribble))) + (IL:CONCAT WORKDIR (IL:L-CASE (QUOTE fuller.database))) + (IL:CONCAT WORKDIR (IL:L-CASE (QUOTE fuller.sysout))) + ) + (IL:LOGOUT T) +) " EOF diff --git a/scripts/loadup-init.sh b/scripts/loadup-init.sh index e08f8ad5..ce1d5686 100755 --- a/scripts/loadup-init.sh +++ b/scripts/loadup-init.sh @@ -24,7 +24,10 @@ cat >"${cmfile}" <<"EOF" (MOVD? 'RRE 'READ-READER-ENVIRONMENT) (LOAD (MEDLEYDIR "sources" "MAKEINIT.LCOM")) -(MAKEINITGREET) +(PROG + ((WORKDIR (CONCAT "{DSK}" (UNIX-GETENV "LOADUP_WORKDIR") "/"))) + (MAKEINITGREET (CONCAT WORKDIR "init.sysout") (CONCAT WORKDIR "init.dlinit")) +) (DRIBBLE) (LOGOUT T) STOP diff --git a/scripts/release-make-tars.sh b/scripts/release-make-tars.sh index f62d9236..69fae765 100755 --- a/scripts/release-make-tars.sh +++ b/scripts/release-make-tars.sh @@ -81,6 +81,8 @@ tar -c -z -f "${release_dir}"/$tag-runtime.tgz \ "${dirname}"/library \ "${dirname}"/lispusers \ "${dirname}"/sources \ - "${dirname}"/internal ; + "${dirname}"/internal \ + "${dirname}"/unicode ; + echo "Done with release tars" diff --git a/sources/MAKEINIT b/sources/MAKEINIT index b1cd3577..f4f13448 100644 --- a/sources/MAKEINIT +++ b/sources/MAKEINIT @@ -1,10 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "30-Jul-2023 23:39:21" {DSK}frank>il>medley>gmedley>sources>MAKEINIT.;4 54459 +(FILECREATED " 3-Aug-2023 17:37:51" {DSK}frank>il>medley>gmedley>sources>MAKEINIT.;7 54420 + + :EDIT-BY "frank" :CHANGES-TO (FNS MAKEINITGREET) - :PREVIOUS-DATE "11-Jul-2022 20:00:23" {DSK}frank>il>medley>gmedley>sources>MAKEINIT.;1) + :PREVIOUS-DATE "30-Jul-2023 23:39:21" {DSK}frank>il>medley>gmedley>sources>MAKEINIT.;6) (PRETTYCOMPRINT MAKEINITCOMS) @@ -77,7 +79,8 @@ (DEFINEQ (MAKEINITGREET - [LAMBDA NIL (* ; "Edited 11-Mar-2021 22:14 by larry") + [LAMBDA (SYSOUTFILE DLINITFILE) (* ; "Edited 3-Aug-2023 17:37 by frank") + (* ; "Edited 11-Mar-2021 22:14 by larry") (* ; "Edited 5-Dec-2017 15:26 by rmk:") (* ;; "") @@ -90,11 +93,8 @@ (DORENAME 'I) (DORENAME 'R) (DLFIXINIT (MAKEINIT '(39424 5682 11008) - (CONCAT "{DSK}" (UNIX-GETENV "LOADUP_WORKDIR") - "/init.sysout") - NIL DIRECTORIES DISPLAYFONTDIRECTORIES) - (CONCAT "{DSK}" (UNIX-GETENV "LOADUP_WORKDIR") - "/init.dlinit"]) + SYSOUTFILE NIL DIRECTORIES DISPLAYFONTDIRECTORIES) + DLINITFILE]) ) (FILESLOAD (SOURCE) @@ -1050,25 +1050,25 @@ DONTCOPY FPTOVP NEWFPFROMOLD VMEMFILE VMEMFILEX) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (3843 4691 (MAKEINITGREET 3853 . 4689)) (4874 11259 (LOADMAKEINIT 4884 . 6087) ( -LOADMKIFILES 6089 . 6404) (RELOAD 6406 . 6889) (MAKEINIT 6891 . 10551) (MKI.START 10553 . 11257)) ( -11337 17055 (MKI.PASSFILE 11347 . 14957) (SCRATCHARRAY 14959 . 15608) (DOFORM 15610 . 16287) ( -CONSTFORMP 16289 . 16523) (NOTICECOMS 16525 . 16833) (EVALFORMAKEINIT 16835 . 17053)) (17056 19176 ( -I.ADDTOVAR 17066 . 17160) (I.DECLARE%: 17162 . 17438) (I.DEFINE-FILE-INFO 17440 . 17630) ( -I.FILECREATED 17632 . 18006) (I.PUTPROPS 18008 . 18121) (I.RPAQ 18123 . 18344) (I.RPAQQ 18346 . 18542) - (I.RPAQ? 18544 . 18759) (I.SETTOPVAL 18761 . 18993) (I.NOUNDO 18995 . 19174)) (19812 26028 ( -I.ATOMNUMBER 19822 . 20313) (I.\ATOMCELL 20315 . 22068) (I.FIXUPNUM 22070 . 22995) (I.FIXUPPTR 22997 - . 23478) (I.FIXUPSYM 23480 . 24536) (I.WORDSPERNAMEENTRY 24538 . 25293) (I.SETSTKNTOFFSET 25295 . -26026)) (26060 27568 (MKI.ATOM 26070 . 26266) (MKI.IEEE 26268 . 27566)) (27665 28430 (MKI.DSET 27675 - . 27958) (MKI.ADDTO 27960 . 28145) (MKI.PUTPROP 28147 . 28428)) (28604 29156 (DUMPVP 28614 . 28711) ( -BOUTZEROS 28713 . 28792) (BIN16 28794 . 28975) (BOUT16 28977 . 29154)) (30047 52781 (DLFIXINIT 30057 - . 31032) (DLSORTSYSOUTPAGES 31034 . 36160) (DLNEXTFP 36162 . 36499) (DLLOCKEDPAGEP 36501 . 36715) ( -DLSETLOCKBIT 36717 . 36979) (DLCOPYPAGEMAP 36981 . 40032) (DLCOPYVMPAGE 40034 . 40424) ( -DLADDPAGEMAPENTRIES 40426 . 41241) (ASSIGNFILEPAGE 41243 . 42476) (ASSIGNFILEPAGERANGE 42478 . 42885) -(DLDUMPSYSOUT 42887 . 44639) (DLDUMPFPTOVP 44641 . 45680) (DLDUMPPAGEMAPS 45682 . 46382) ( -DLDUMPVMEMPAGES 46384 . 47040) (DLSETBOOTPTR 47042 . 47272) (DLDUMPARRAY 47274 . 47661) ( -DLMARKASDUMPED 47663 . 48116) (DLDUMPVMEMPAGE 48118 . 48806) (INSTALLDOMINO 48808 . 49455) ( -INSTALLDOMINO.DIRECT 49457 . 50609) (INSTALLNEWDOMINO 50611 . 52779)) (52803 54160 (DLPRINTFPTOVP -52813 . 53102) (PRINTPRIMARYMAP 53104 . 53818) (DLREADPAGEOFWORDS 53820 . 53987) (SETDIF 53989 . 54158 + (FILEMAP (NIL (3867 4652 (MAKEINITGREET 3877 . 4650)) (4835 11220 (LOADMAKEINIT 4845 . 6048) ( +LOADMKIFILES 6050 . 6365) (RELOAD 6367 . 6850) (MAKEINIT 6852 . 10512) (MKI.START 10514 . 11218)) ( +11298 17016 (MKI.PASSFILE 11308 . 14918) (SCRATCHARRAY 14920 . 15569) (DOFORM 15571 . 16248) ( +CONSTFORMP 16250 . 16484) (NOTICECOMS 16486 . 16794) (EVALFORMAKEINIT 16796 . 17014)) (17017 19137 ( +I.ADDTOVAR 17027 . 17121) (I.DECLARE%: 17123 . 17399) (I.DEFINE-FILE-INFO 17401 . 17591) ( +I.FILECREATED 17593 . 17967) (I.PUTPROPS 17969 . 18082) (I.RPAQ 18084 . 18305) (I.RPAQQ 18307 . 18503) + (I.RPAQ? 18505 . 18720) (I.SETTOPVAL 18722 . 18954) (I.NOUNDO 18956 . 19135)) (19773 25989 ( +I.ATOMNUMBER 19783 . 20274) (I.\ATOMCELL 20276 . 22029) (I.FIXUPNUM 22031 . 22956) (I.FIXUPPTR 22958 + . 23439) (I.FIXUPSYM 23441 . 24497) (I.WORDSPERNAMEENTRY 24499 . 25254) (I.SETSTKNTOFFSET 25256 . +25987)) (26021 27529 (MKI.ATOM 26031 . 26227) (MKI.IEEE 26229 . 27527)) (27626 28391 (MKI.DSET 27636 + . 27919) (MKI.ADDTO 27921 . 28106) (MKI.PUTPROP 28108 . 28389)) (28565 29117 (DUMPVP 28575 . 28672) ( +BOUTZEROS 28674 . 28753) (BIN16 28755 . 28936) (BOUT16 28938 . 29115)) (30008 52742 (DLFIXINIT 30018 + . 30993) (DLSORTSYSOUTPAGES 30995 . 36121) (DLNEXTFP 36123 . 36460) (DLLOCKEDPAGEP 36462 . 36676) ( +DLSETLOCKBIT 36678 . 36940) (DLCOPYPAGEMAP 36942 . 39993) (DLCOPYVMPAGE 39995 . 40385) ( +DLADDPAGEMAPENTRIES 40387 . 41202) (ASSIGNFILEPAGE 41204 . 42437) (ASSIGNFILEPAGERANGE 42439 . 42846) +(DLDUMPSYSOUT 42848 . 44600) (DLDUMPFPTOVP 44602 . 45641) (DLDUMPPAGEMAPS 45643 . 46343) ( +DLDUMPVMEMPAGES 46345 . 47001) (DLSETBOOTPTR 47003 . 47233) (DLDUMPARRAY 47235 . 47622) ( +DLMARKASDUMPED 47624 . 48077) (DLDUMPVMEMPAGE 48079 . 48767) (INSTALLDOMINO 48769 . 49416) ( +INSTALLDOMINO.DIRECT 49418 . 50570) (INSTALLNEWDOMINO 50572 . 52740)) (52764 54121 (DLPRINTFPTOVP +52774 . 53063) (PRINTPRIMARYMAP 53065 . 53779) (DLREADPAGEOFWORDS 53781 . 53948) (SETDIF 53950 . 54119 ))))) STOP diff --git a/sources/MAKEINIT.LCOM b/sources/MAKEINIT.LCOM index 3af36c6cc762407e7110b8077c0296917c5dad86..2a2c0084cb2ad6a9865cfe9dba267d11dbda2ec3 100644 GIT binary patch delta 505 zcmZutO-md>5S`gI5C?<=1Vcc0%*EZqE?wO{J3D<4$DLl&$r@#Lmgr4!jf&r*ASeWK z@T}|)@h}Jd13BiFbB_5P>DEXhqz+ZDx?c5r-QVv0+dKdI(j=UB&KN1il}tjMZXE6(?ad6abATZ14thQOOKdiqA%^Rxo5TNI5b>}c)Vijp zJGo8^omtXz2O?Gxg(L2_-o}We_Tquz! zPB$0rxK$4p(+}EwG{r)$bpe&NgPH*$>$yXx4g-e%YJX|)*ml82ug9kbb$HVAy~<0^ z#+FOt&(Wc4=eE~eS)O>|N*cKQ%B#u5Ds;_?6M+=pHw9#%Z+GuY>HTnWpJd7Sj!@MKv8+0T#i{*yNqXlRjNd+M0!=3A(ECP W9f^cR!oKd$I`OAP@aVxW;L(%cK_`J-tLPlw`@i>o|2GWt?j!m9iM(AaKaeXr=O;V& zwnYmlV*CEVxQz@spw$(uYa@l}=4AKTc)5Vl9vIY5(;=J%P1B@MY)rR`e=cxo%UJ2j zK@?<>pGRT&o-CD|*oy*eA#4wf@)coMEo*i)08 Date: Mon, 7 Aug 2023 12:34:11 -0700 Subject: [PATCH 26/36] move all loadups-related source files into internal/loadups; adjust scripts accordingly; move venuesysouts from loadups into internal/venuesysouts; fix issues in .CM files to allow starting loadups-all from any lisp/full.sysout --- {sources => internal/loadups}/LOADUP-APPS | 0 .../loadups}/LOADUP-APPS.LCOM | Bin {sources => internal/loadups}/LOADUP-FULL | 0 .../loadups}/LOADUP-FULL.LCOM | Bin {sources => internal/loadups}/LOADUP-LISP | 0 .../loadups}/LOADUP-LISP.LCOM | Bin {sources => internal/loadups}/MAKEINIT | 0 {sources => internal/loadups}/MAKEINIT.LCOM | Bin {loadups => internal/loadups}/README.md | 0 {loadups => internal/loadups}/starter.sysout | Bin .../venuesysouts}/full.venuesysout | Bin .../venuesysouts}/lisp.venuesysout | Bin scripts/copy-all.sh | 27 ++++++------- scripts/copy-db.sh | 4 +- scripts/loadup-apps-from-full.sh | 6 +-- scripts/loadup-db.sh | 36 ++++++++++++++++++ scripts/loadup-full-from-lisp.sh | 2 +- scripts/loadup-init.sh | 15 ++++++-- scripts/loadup-lisp-from-mid.sh | 8 ++-- scripts/loadup-setup.sh | 10 +++++ 20 files changed, 79 insertions(+), 29 deletions(-) rename {sources => internal/loadups}/LOADUP-APPS (100%) rename {sources => internal/loadups}/LOADUP-APPS.LCOM (100%) rename {sources => internal/loadups}/LOADUP-FULL (100%) rename {sources => internal/loadups}/LOADUP-FULL.LCOM (100%) rename {sources => internal/loadups}/LOADUP-LISP (100%) rename {sources => internal/loadups}/LOADUP-LISP.LCOM (100%) rename {sources => internal/loadups}/MAKEINIT (100%) rename {sources => internal/loadups}/MAKEINIT.LCOM (100%) rename {loadups => internal/loadups}/README.md (100%) rename {loadups => internal/loadups}/starter.sysout (100%) rename {loadups => internal/venuesysouts}/full.venuesysout (100%) rename {loadups => internal/venuesysouts}/lisp.venuesysout (100%) diff --git a/sources/LOADUP-APPS b/internal/loadups/LOADUP-APPS similarity index 100% rename from sources/LOADUP-APPS rename to internal/loadups/LOADUP-APPS diff --git a/sources/LOADUP-APPS.LCOM b/internal/loadups/LOADUP-APPS.LCOM similarity index 100% rename from sources/LOADUP-APPS.LCOM rename to internal/loadups/LOADUP-APPS.LCOM diff --git a/sources/LOADUP-FULL b/internal/loadups/LOADUP-FULL similarity index 100% rename from sources/LOADUP-FULL rename to internal/loadups/LOADUP-FULL diff --git a/sources/LOADUP-FULL.LCOM b/internal/loadups/LOADUP-FULL.LCOM similarity index 100% rename from sources/LOADUP-FULL.LCOM rename to internal/loadups/LOADUP-FULL.LCOM diff --git a/sources/LOADUP-LISP b/internal/loadups/LOADUP-LISP similarity index 100% rename from sources/LOADUP-LISP rename to internal/loadups/LOADUP-LISP diff --git a/sources/LOADUP-LISP.LCOM b/internal/loadups/LOADUP-LISP.LCOM similarity index 100% rename from sources/LOADUP-LISP.LCOM rename to internal/loadups/LOADUP-LISP.LCOM diff --git a/sources/MAKEINIT b/internal/loadups/MAKEINIT similarity index 100% rename from sources/MAKEINIT rename to internal/loadups/MAKEINIT diff --git a/sources/MAKEINIT.LCOM b/internal/loadups/MAKEINIT.LCOM similarity index 100% rename from sources/MAKEINIT.LCOM rename to internal/loadups/MAKEINIT.LCOM diff --git a/loadups/README.md b/internal/loadups/README.md similarity index 100% rename from loadups/README.md rename to internal/loadups/README.md diff --git a/loadups/starter.sysout b/internal/loadups/starter.sysout similarity index 100% rename from loadups/starter.sysout rename to internal/loadups/starter.sysout diff --git a/loadups/full.venuesysout b/internal/venuesysouts/full.venuesysout similarity index 100% rename from loadups/full.venuesysout rename to internal/venuesysouts/full.venuesysout diff --git a/loadups/lisp.venuesysout b/internal/venuesysouts/lisp.venuesysout similarity index 100% rename from loadups/lisp.venuesysout rename to internal/venuesysouts/lisp.venuesysout diff --git a/scripts/copy-all.sh b/scripts/copy-all.sh index 339dde4a..f04a5e7f 100755 --- a/scripts/copy-all.sh +++ b/scripts/copy-all.sh @@ -9,27 +9,22 @@ fi echo ">>>>> START ${script_name}" -# was -# cp -p tmp/full.sysout tmp/lisp.sysout tmp/*.dribble tmp/whereis.hash loadups/ -# cp -p tmp/exports.all tmp/RDSYS tmp/RDSYS.LCOM library/ -# just copy the files that are released - -./scripts/cpv "${LOADUP_WORKDIR}"/full.sysout loadups -./scripts/cpv "${LOADUP_WORKDIR}"/lisp.sysout loadups +./scripts/cpv "${LOADUP_WORKDIR}"/full.sysout "${LOADUP_OUTDIR}" | sed -e "s#${MEDLEYDIR}/##g" +./scripts/cpv "${LOADUP_WORKDIR}"/lisp.sysout "${LOADUP_OUTDIR}" | sed -e "s#${MEDLEYDIR}/##g" if [ "${1}" = "-apps" ]; then - ./scripts/cpv "${LOADUP_WORKDIR}"/apps.sysout loadups + ./scripts/cpv "${LOADUP_WORKDIR}"/apps.sysout "${LOADUP_OUTDIR}" | sed -e "s#${MEDLEYDIR}/##g" fi -./scripts/cpv "${LOADUP_WORKDIR}"/whereis.hash loadups -./scripts/cpv "${LOADUP_WORKDIR}"/exports.all loadups +./scripts/cpv "${LOADUP_WORKDIR}"/whereis.hash "${LOADUP_OUTDIR}" | sed -e "s#${MEDLEYDIR}/##g" +./scripts/cpv "${LOADUP_WORKDIR}"/exports.all "${LOADUP_OUTDIR}" | sed -e "s#${MEDLEYDIR}/##g" -./scripts/cpv "${LOADUP_WORKDIR}"/init.dribble loadups -./scripts/cpv "${LOADUP_WORKDIR}"/lisp.dribble loadups -./scripts/cpv "${LOADUP_WORKDIR}"/full.dribble loadups -./scripts/cpv "${LOADUP_WORKDIR}"/whereis.dribble loadups +./scripts/cpv "${LOADUP_WORKDIR}"/init.dribble "${LOADUP_OUTDIR}" | sed -e "s#${MEDLEYDIR}/##g" +./scripts/cpv "${LOADUP_WORKDIR}"/lisp.dribble "${LOADUP_OUTDIR}" | sed -e "s#${MEDLEYDIR}/##g" +./scripts/cpv "${LOADUP_WORKDIR}"/full.dribble "${LOADUP_OUTDIR}" | sed -e "s#${MEDLEYDIR}/##g" +./scripts/cpv "${LOADUP_WORKDIR}"/whereis.dribble "${LOADUP_OUTDIR}" | sed -e "s#${MEDLEYDIR}/##g" -./scripts/cpv "${LOADUP_WORKDIR}"/RDSYS library -./scripts/cpv "${LOADUP_WORKDIR}"/RDSYS.LCOM library +./scripts/cpv "${LOADUP_WORKDIR}"/RDSYS library | sed -e "s#${MEDLEYDIR}/##g" +./scripts/cpv "${LOADUP_WORKDIR}"/RDSYS.LCOM library | sed -e "s#${MEDLEYDIR}/##g" echo "<<<<< END ${script_name}" echo "" diff --git a/scripts/copy-db.sh b/scripts/copy-db.sh index 4c22b420..77a76b92 100755 --- a/scripts/copy-db.sh +++ b/scripts/copy-db.sh @@ -9,8 +9,8 @@ fi echo ">>>>> START ${script_name}" -./scripts/cpv "${LOADUP_WORKDIR}"/fuller.database loadups -./scripts/cpv "${LOADUP_WORKDIR}"/fuller.dribble loadups +./scripts/cpv "${LOADUP_WORKDIR}"/fuller.database "${LOADUP_OUTDIR}" +./scripts/cpv "${LOADUP_WORKDIR}"/fuller.dribble "${LOADUP_OUTDIR}" echo "<<<<< END ${script_name}" echo "" diff --git a/scripts/loadup-apps-from-full.sh b/scripts/loadup-apps-from-full.sh index c4ba2e47..86a59d47 100755 --- a/scripts/loadup-apps-from-full.sh +++ b/scripts/loadup-apps-from-full.sh @@ -32,14 +32,14 @@ cat >"${cmfile}" <<"EOF" (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE ROOMSDIR))(QUOTE /ROOMS)) 'IL:SYSLOAD) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE CLOSDIR))(QUOTE /DEFSYS.DFASL)) 'IL:SYSLOAD) (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE |lispusers/BUTTONS.LCOM|)) 'IL:SYSLOAD) - (IL:LOAD - (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE |/sources/LOADUP-APPS.LCOM|)) + (IL:LOAD + (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV (QUOTE LOADUP_SOURCEDIR)) (QUOTE /LOADUP-APPS.LCOM)) 'IL:SYSLOAD ) (IL:HARDRESET) ) SHH -(PROGN +(PROGN (IL:ENDLOADUP) (CLOS::LOAD-CLOS) (IL:|Apps.LOADUP|) diff --git a/scripts/loadup-db.sh b/scripts/loadup-db.sh index d0f89f7a..ebd7841e 100755 --- a/scripts/loadup-db.sh +++ b/scripts/loadup-db.sh @@ -7,6 +7,42 @@ fi . scripts/loadup-setup.sh +loadup_start + +cat >"${cmfile}" <<"EOF" +" + +(PROG + ((WORKDIR (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV (QUOTE LOADUP_WORKDIR)) (QUOTE /))) + (LOADUP-SOURCE-DIR (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV (QUOTE LOADUP_SOURCEDIR)) (QUOTE /))) + ) + (IL:MEDLEY-INIT-VARS) + (IL:FILESLOAD MEDLEY-UTILS) + (SETQ IL:DIRECTORIES (CONS LOADUP-SOURCE-DIR IL:DIRECTORIES)) + (IL:MAKE-FULLER-DB + (IL:CONCAT WORKDIR (IL:L-CASE (QUOTE fuller.dribble))) + (IL:CONCAT WORKDIR (IL:L-CASE (QUOTE fuller.database))) + (IL:CONCAT WORKDIR (IL:L-CASE (QUOTE fuller.sysout))) + ) + (IL:LOGOUT T) +) + +" +EOF + +./run-medley ${scr} -loadup "${cmfile}" -full + +loadup_finish "fuller.database" "fuller*" + +#!/bin/sh + +if [ ! -x run-medley ] ; then + echo run from MEDLEYDIR + exit 1 +fi + +. scripts/loadup-setup.sh + ./scripts/loadup-db-from-full.sh && ./scripts/copy-db.sh if [ $? -eq 0 ]; diff --git a/scripts/loadup-full-from-lisp.sh b/scripts/loadup-full-from-lisp.sh index 6c027ec4..638e839b 100755 --- a/scripts/loadup-full-from-lisp.sh +++ b/scripts/loadup-full-from-lisp.sh @@ -13,7 +13,7 @@ cat >"${cmfile}" <<"EOF" " (PROGN - (IL:LOAD(IL:CONCAT(QUOTE {DSK})(IL:UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE /sources/LOADUP-FULL.LCOM))) + (IL:LOAD (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV (QUOTE LOADUP_SOURCEDIR))(QUOTE /LOADUP-FULL.LCOM))) (IL:LOADUP-FULL (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /full.dribble)))) (IL:HARDRESET) ) diff --git a/scripts/loadup-init.sh b/scripts/loadup-init.sh index ce1d5686..5db49820 100755 --- a/scripts/loadup-init.sh +++ b/scripts/loadup-init.sh @@ -12,7 +12,9 @@ loadup_start cat >"${cmfile}" <<"EOF" (* "make init files; this file is loaded as a 'greet' file by scripts/loadup-init.sh") +(SETQ MEDLEYDIR NIL) (LOAD (CONCAT (UNIX-GETENV "MEDLEYDIR") "/sources/MEDLEYDIR.LCOM")) +(MEDLEY-INIT-VARS) (CNDIR (UNIX-GETENV "LOADUP_WORKDIR")) (DRIBBLE "init.dribble") @@ -23,16 +25,21 @@ cat >"${cmfile}" <<"EOF" (DEFINEQ (RRE (LAMBDA (X Y) Y))) (MOVD? 'RRE 'READ-READER-ENVIRONMENT) -(LOAD (MEDLEYDIR "sources" "MAKEINIT.LCOM")) +(LOAD (CONCAT "{DSK}" (UNIX-GETENV "LOADUP_SOURCEDIR") "/" "MAKEINIT.LCOM")) (PROG - ((WORKDIR (CONCAT "{DSK}" (UNIX-GETENV "LOADUP_WORKDIR") "/"))) - (MAKEINITGREET (CONCAT WORKDIR "init.sysout") (CONCAT WORKDIR "init.dlinit")) + ((WORKDIR (CONCAT "{DSK}" (UNIX-GETENV "LOADUP_WORKDIR") "/")) + (LOADUP-SOURCE-DIR (CONCAT "{DSK}" (UNIX-GETENV "LOADUP_SOURCEDIR") "/")) + ) + (SETQ DIRECTORIES (CONS LOADUP-SOURCE-DIR DIRECTORIES)) + (RESETLST (RESETSAVE OK.TO.MODIFY.FNS T) + (MAKEINITGREET (CONCAT WORKDIR "init.sysout") (CONCAT WORKDIR "init.dlinit")) + ) ) (DRIBBLE) (LOGOUT T) STOP EOF -./run-medley $scr -loadup "${cmfile}" loadups/starter.sysout +./run-medley $scr -loadup "${cmfile}" "${LOADUP_SOURCEDIR}"/starter.sysout loadup_finish "init.dlinit" "init.*" "RDSYS*" "I-NEW*" diff --git a/scripts/loadup-lisp-from-mid.sh b/scripts/loadup-lisp-from-mid.sh index 7233f85b..6888da26 100755 --- a/scripts/loadup-lisp-from-mid.sh +++ b/scripts/loadup-lisp-from-mid.sh @@ -13,14 +13,16 @@ cat >"${cmfile}" <<"EOF" " (PROGN - (LOAD(CONCAT(QUOTE {DSK})(UNIX-GETENV(QUOTE MEDLEYDIR))(QUOTE /sources/LOADUP-LISP.LCOM))) - (LOADUP-LISP(CONCAT(QUOTE {DSK})(UNIX-GETENV(QUOTE LOADUP_WORKDIR))(QUOTE /lisp.dribble))) + (LOAD (CONCAT (QUOTE {DSK}) (UNIX-GETENV (QUOTE MEDLEYDIR)) (QUOTE /sources/MEDLEYDIR.LCOM))) + (MEDLEY-INIT-VARS) + (LOAD (CONCAT (QUOTE {DSK}) (UNIX-GETENV (QUOTE LOADUP_SOURCEDIR)) (QUOTE /LOADUP-LISP.LCOM))) + (LOADUP-LISP (CONCAT (QUOTE {DSK}) (UNIX-GETENV (QUOTE LOADUP_WORKDIR)) (QUOTE /lisp.dribble))) (HARDRESET) ) SHH (PROGN (IL:ENDLOADUP) - (IL:MAKESYS (IL:CONCAT (QUOTE {DSK})(IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR))(IL:L-CASE (QUOTE /lisp.sysout))) :LISP) + (IL:MAKESYS (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV(QUOTE LOADUP_WORKDIR)) (IL:L-CASE (QUOTE /lisp.sysout))) :LISP) (IL:LOGOUT T) ) diff --git a/scripts/loadup-setup.sh b/scripts/loadup-setup.sh index d838dca4..c94e73b7 100644 --- a/scripts/loadup-setup.sh +++ b/scripts/loadup-setup.sh @@ -6,6 +6,16 @@ then export LOADUP_WORKDIR=/tmp/loadups-$$ fi +if [ -z "${LOADUP_SOURCEDIR}" ]; +then + export LOADUP_SOURCEDIR="${MEDLEYDIR}"/internal/loadups +fi + +if [ -z "${LOADUP_OUTDIR}" ]; +then + export LOADUP_OUTDIR="${MEDLEYDIR}"/loadups +fi + mkdir -p "${LOADUP_WORKDIR}" scr="-sc 1024x768 -g 1042x790" From 62422cd4ce3533c896220ecaf4eaf54514fcdbbe Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Mon, 7 Aug 2023 13:35:25 -0700 Subject: [PATCH 27/36] Add changes from PR#1307 (@masinter). Can't easily merge PR#1307 in directly because MAKEINIT has moved. These changes set OK.TO.MODIFYFNS to T for all loadups to prevent loadups asking if its OK to modify system functions --- internal/loadups/MAKEINIT | 59 +++++++++++++++++---------------- internal/loadups/MAKEINIT.LCOM | Bin 23471 -> 23879 bytes 2 files changed, 30 insertions(+), 29 deletions(-) diff --git a/internal/loadups/MAKEINIT b/internal/loadups/MAKEINIT index f4f13448..cae408c3 100644 --- a/internal/loadups/MAKEINIT +++ b/internal/loadups/MAKEINIT @@ -1,12 +1,11 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED " 3-Aug-2023 17:37:51" {DSK}frank>il>medley>gmedley>sources>MAKEINIT.;7 54420 - - :EDIT-BY "frank" +(FILECREATED " 7-Aug-2023 13:31:49" {DSK}frank>il>medley>gmedley>internal>loadups>MAKEINIT.;4 54490 :CHANGES-TO (FNS MAKEINITGREET) - :PREVIOUS-DATE "30-Jul-2023 23:39:21" {DSK}frank>il>medley>gmedley>sources>MAKEINIT.;6) + :PREVIOUS-DATE " 3-Aug-2023 17:37:51" +{DSK}frank>il>medley>gmedley>internal>loadups>MAKEINIT.;1) (PRETTYCOMPRINT MAKEINITCOMS) @@ -90,11 +89,13 @@ (* ;; "") (* Versions are Lisp Microcode Bcpl) (MEDLEY-INIT-VARS) - (DORENAME 'I) - (DORENAME 'R) - (DLFIXINIT (MAKEINIT '(39424 5682 11008) - SYSOUTFILE NIL DIRECTORIES DISPLAYFONTDIRECTORIES) - DLINITFILE]) + (RESETLST + (RESETSAVE OK.TO.MODIFY.FNS T) + (DORENAME 'I) + (DORENAME 'R) + (DLFIXINIT (MAKEINIT '(39424 5682 11008) + SYSOUTFILE NIL DIRECTORIES DISPLAYFONTDIRECTORIES) + DLINITFILE))]) ) (FILESLOAD (SOURCE) @@ -1050,25 +1051,25 @@ DONTCOPY FPTOVP NEWFPFROMOLD VMEMFILE VMEMFILEX) ) (DECLARE%: DONTCOPY - (FILEMAP (NIL (3867 4652 (MAKEINITGREET 3877 . 4650)) (4835 11220 (LOADMAKEINIT 4845 . 6048) ( -LOADMKIFILES 6050 . 6365) (RELOAD 6367 . 6850) (MAKEINIT 6852 . 10512) (MKI.START 10514 . 11218)) ( -11298 17016 (MKI.PASSFILE 11308 . 14918) (SCRATCHARRAY 14920 . 15569) (DOFORM 15571 . 16248) ( -CONSTFORMP 16250 . 16484) (NOTICECOMS 16486 . 16794) (EVALFORMAKEINIT 16796 . 17014)) (17017 19137 ( -I.ADDTOVAR 17027 . 17121) (I.DECLARE%: 17123 . 17399) (I.DEFINE-FILE-INFO 17401 . 17591) ( -I.FILECREATED 17593 . 17967) (I.PUTPROPS 17969 . 18082) (I.RPAQ 18084 . 18305) (I.RPAQQ 18307 . 18503) - (I.RPAQ? 18505 . 18720) (I.SETTOPVAL 18722 . 18954) (I.NOUNDO 18956 . 19135)) (19773 25989 ( -I.ATOMNUMBER 19783 . 20274) (I.\ATOMCELL 20276 . 22029) (I.FIXUPNUM 22031 . 22956) (I.FIXUPPTR 22958 - . 23439) (I.FIXUPSYM 23441 . 24497) (I.WORDSPERNAMEENTRY 24499 . 25254) (I.SETSTKNTOFFSET 25256 . -25987)) (26021 27529 (MKI.ATOM 26031 . 26227) (MKI.IEEE 26229 . 27527)) (27626 28391 (MKI.DSET 27636 - . 27919) (MKI.ADDTO 27921 . 28106) (MKI.PUTPROP 28108 . 28389)) (28565 29117 (DUMPVP 28575 . 28672) ( -BOUTZEROS 28674 . 28753) (BIN16 28755 . 28936) (BOUT16 28938 . 29115)) (30008 52742 (DLFIXINIT 30018 - . 30993) (DLSORTSYSOUTPAGES 30995 . 36121) (DLNEXTFP 36123 . 36460) (DLLOCKEDPAGEP 36462 . 36676) ( -DLSETLOCKBIT 36678 . 36940) (DLCOPYPAGEMAP 36942 . 39993) (DLCOPYVMPAGE 39995 . 40385) ( -DLADDPAGEMAPENTRIES 40387 . 41202) (ASSIGNFILEPAGE 41204 . 42437) (ASSIGNFILEPAGERANGE 42439 . 42846) -(DLDUMPSYSOUT 42848 . 44600) (DLDUMPFPTOVP 44602 . 45641) (DLDUMPPAGEMAPS 45643 . 46343) ( -DLDUMPVMEMPAGES 46345 . 47001) (DLSETBOOTPTR 47003 . 47233) (DLDUMPARRAY 47235 . 47622) ( -DLMARKASDUMPED 47624 . 48077) (DLDUMPVMEMPAGE 48079 . 48767) (INSTALLDOMINO 48769 . 49416) ( -INSTALLDOMINO.DIRECT 49418 . 50570) (INSTALLNEWDOMINO 50572 . 52740)) (52764 54121 (DLPRINTFPTOVP -52774 . 53063) (PRINTPRIMARYMAP 53065 . 53779) (DLREADPAGEOFWORDS 53781 . 53948) (SETDIF 53950 . 54119 + (FILEMAP (NIL (3862 4722 (MAKEINITGREET 3872 . 4720)) (4905 11290 (LOADMAKEINIT 4915 . 6118) ( +LOADMKIFILES 6120 . 6435) (RELOAD 6437 . 6920) (MAKEINIT 6922 . 10582) (MKI.START 10584 . 11288)) ( +11368 17086 (MKI.PASSFILE 11378 . 14988) (SCRATCHARRAY 14990 . 15639) (DOFORM 15641 . 16318) ( +CONSTFORMP 16320 . 16554) (NOTICECOMS 16556 . 16864) (EVALFORMAKEINIT 16866 . 17084)) (17087 19207 ( +I.ADDTOVAR 17097 . 17191) (I.DECLARE%: 17193 . 17469) (I.DEFINE-FILE-INFO 17471 . 17661) ( +I.FILECREATED 17663 . 18037) (I.PUTPROPS 18039 . 18152) (I.RPAQ 18154 . 18375) (I.RPAQQ 18377 . 18573) + (I.RPAQ? 18575 . 18790) (I.SETTOPVAL 18792 . 19024) (I.NOUNDO 19026 . 19205)) (19843 26059 ( +I.ATOMNUMBER 19853 . 20344) (I.\ATOMCELL 20346 . 22099) (I.FIXUPNUM 22101 . 23026) (I.FIXUPPTR 23028 + . 23509) (I.FIXUPSYM 23511 . 24567) (I.WORDSPERNAMEENTRY 24569 . 25324) (I.SETSTKNTOFFSET 25326 . +26057)) (26091 27599 (MKI.ATOM 26101 . 26297) (MKI.IEEE 26299 . 27597)) (27696 28461 (MKI.DSET 27706 + . 27989) (MKI.ADDTO 27991 . 28176) (MKI.PUTPROP 28178 . 28459)) (28635 29187 (DUMPVP 28645 . 28742) ( +BOUTZEROS 28744 . 28823) (BIN16 28825 . 29006) (BOUT16 29008 . 29185)) (30078 52812 (DLFIXINIT 30088 + . 31063) (DLSORTSYSOUTPAGES 31065 . 36191) (DLNEXTFP 36193 . 36530) (DLLOCKEDPAGEP 36532 . 36746) ( +DLSETLOCKBIT 36748 . 37010) (DLCOPYPAGEMAP 37012 . 40063) (DLCOPYVMPAGE 40065 . 40455) ( +DLADDPAGEMAPENTRIES 40457 . 41272) (ASSIGNFILEPAGE 41274 . 42507) (ASSIGNFILEPAGERANGE 42509 . 42916) +(DLDUMPSYSOUT 42918 . 44670) (DLDUMPFPTOVP 44672 . 45711) (DLDUMPPAGEMAPS 45713 . 46413) ( +DLDUMPVMEMPAGES 46415 . 47071) (DLSETBOOTPTR 47073 . 47303) (DLDUMPARRAY 47305 . 47692) ( +DLMARKASDUMPED 47694 . 48147) (DLDUMPVMEMPAGE 48149 . 48837) (INSTALLDOMINO 48839 . 49486) ( +INSTALLDOMINO.DIRECT 49488 . 50640) (INSTALLNEWDOMINO 50642 . 52810)) (52834 54191 (DLPRINTFPTOVP +52844 . 53133) (PRINTPRIMARYMAP 53135 . 53849) (DLREADPAGEOFWORDS 53851 . 54018) (SETDIF 54020 . 54189 ))))) STOP diff --git a/internal/loadups/MAKEINIT.LCOM b/internal/loadups/MAKEINIT.LCOM index 2a2c0084cb2ad6a9865cfe9dba267d11dbda2ec3..004bbd16bc05641c06360483d5644ff5a21de211 100644 GIT binary patch delta 858 zcmaJ=%Wl&^6tzPtK_nz3sD!e*q_iYOvF71NY(%LQk0U331ltXX1QJnGm57j3kS-7s z5i7*5m4ARgV37ra4NErt57vA^8M_3cg6hT0xijZJ&b{MLpT+NA#iQ;$U=V z0K+j9N@lwq!7@>jq!JAJ)4joe1L&nnp=>)YtB0&;#>_g$;?-e8))OqQuU%9g6ckz3 zQSwg2H-Ik5(+sK^3O;_barXj$Tq!KHHbTbYh5_Wc4@*9TxE`3YMETFlAOiXbE{i+!y#axRS2L3=az_ z{?;z;3YncI*LJ#T5>QoGr~p|5D+rlydJO0i zCIq;YIB0iF7chdx!r*gIbgtxY`7!}J1WLdGtU}O|;z05O%dvZs?MER0bHqb{LZD1_ znaH51H3AqTRI4PX;%d@uYAabYlB4GB!rCQK$X!mgBww2Fq?YwLYx9o($nh=UZ}YL& zah)gzT>GOdn~sSP!aTpnESL4FsrG8e3?rT&)AND&;rujrf<=9PB5&tcbq(5lWG2G8 y$`Q`c{FeSU&lw-@|H$PCnt#}SpW7fv<^-7&2%;QO-iR|-{^$I5l delta 614 zcmZutO=}cE5S>|8&;cP310Kr};tn!PS9kC1P79hzx<^`PKbVnUuo!#Td-Q>B_JzX{*wFB^h{$~>ugbE(}aI!Og`|jYu2;Llm=ck)l2J^&b zv+2WV`($^tXh4hlf!9cNrZ#ewlu8;B3$H%A%hS{Q4;RRQ7Uz_JCzRA>xIP5`)zS9h zzJGP@;vGi9XOn|#JCq3)3yRYZs|)Nzfj9H^G*_wwAv<0}1A@$~VXFu<5GaO4fAhLb zO(}IT$dX~&@0C*LYNPDuS``5}+;N@SO~<@F8*a^`GshX*dhPW~n+CUU*pzrSE;$Vz zo29AVvU`CumQLH2XiOS%eh4s+-#nW Date: Mon, 7 Aug 2023 14:53:33 -0700 Subject: [PATCH 28/36] Remove venuesysouts from release tars --- scripts/release-make-tars.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/release-make-tars.sh b/scripts/release-make-tars.sh index 69fae765..64fc055c 100755 --- a/scripts/release-make-tars.sh +++ b/scripts/release-make-tars.sh @@ -61,8 +61,10 @@ tar -c -z -f "${release_dir}"/$tag-loadups.tgz \ echo making releases/${short_tag}/$tag-runtime.tgz tar -c -z -f "${release_dir}"/$tag-runtime.tgz \ - --exclude "*~" --exclude "*#*" \ + --exclude "*~" \ + --exclude "*#*" \ --exclude exports.all \ + --exclude "venuesysouts" \ ${name_xform} \ "${dirname}"/clos \ "${dirname}"/docs/dinfo \ From 3cefaf338c3f6812be51f12b8ef9a472c5bd2ce4 Mon Sep 17 00:00:00 2001 From: Nick Briggs Date: Mon, 7 Aug 2023 17:24:38 -0700 Subject: [PATCH 29/36] Ensure that the LOADUP_OUTDIR directory exists as part of the loadup-setup.sh --- scripts/loadup-setup.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/loadup-setup.sh b/scripts/loadup-setup.sh index c94e73b7..acd49194 100644 --- a/scripts/loadup-setup.sh +++ b/scripts/loadup-setup.sh @@ -17,6 +17,7 @@ then fi mkdir -p "${LOADUP_WORKDIR}" +mkdir -p "${LOADUP_OUTDIR}" scr="-sc 1024x768 -g 1042x790" From 3aa01c7a38b83e62720f6f72a438a41df8eb97fc Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Mon, 7 Aug 2023 18:00:53 -0700 Subject: [PATCH 30/36] Making @nbrigg's check for existance of LOADUP_OUTDIR and LOADUP_WORKDIR a bit fancier --- scripts/loadup-setup.sh | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/scripts/loadup-setup.sh b/scripts/loadup-setup.sh index acd49194..61affc98 100644 --- a/scripts/loadup-setup.sh +++ b/scripts/loadup-setup.sh @@ -16,8 +16,26 @@ then export LOADUP_OUTDIR="${MEDLEYDIR}"/loadups fi -mkdir -p "${LOADUP_WORKDIR}" -mkdir -p "${LOADUP_OUTDIR}" +if [ ! -d "${LOADUP_OUTDIR}" ]; +then + if [ ! -e "${LOADUP_OUTDIR}" ]; + then + mkdir -p "${LOADUP_OUTDIR}" + else + "Error: ${LOADUP_OUTDIR} exists but is not a directory. Exiting." + fi +fi + +if [ ! -d "${LOADUP_WORKDIR}" ]; +then + if [ ! -e "${LOADUP_WORKDIR}" ]; + then + mkdir -p "${LOADUP_WORKDIR}" + else + "Error: ${LOADUP_WORKDIR} exists but is not a directory. Exiting." + fi +fi + scr="-sc 1024x768 -g 1042x790" From 3ed4d52f532f4d3a84c967c81915b3c8559d2916 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Mon, 7 Aug 2023 22:30:12 -0700 Subject: [PATCH 31/36] Remove junk accidently added to loadup-db.sh. Fix CM file in loadup-db-from-full.sh to add internal/loadups to DIRECTORIES so files in this subdir can be analyzed. Add delay into loadup-mid-from-init.sh to make sure timestamp race conditions are avoided. --- scripts/loadup-db-from-full.sh | 10 ++++++++- scripts/loadup-db.sh | 36 --------------------------------- scripts/loadup-mid-from-init.sh | 3 +++ 3 files changed, 12 insertions(+), 37 deletions(-) diff --git a/scripts/loadup-db-from-full.sh b/scripts/loadup-db-from-full.sh index 8b368d50..6517fb3e 100755 --- a/scripts/loadup-db-from-full.sh +++ b/scripts/loadup-db-from-full.sh @@ -9,6 +9,13 @@ fi loadup_start +SYSOUT="${MEDLEYDIR}/loadups/full.sysout" +if [ ! -f "${SYSOUT}" ]; +then + echo "Error: cannot find ${SYSOUT}. Exiting." + exit 1 +fi + cat >"${cmfile}" <<"EOF" " @@ -16,6 +23,7 @@ cat >"${cmfile}" <<"EOF" ((WORKDIR (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV (QUOTE LOADUP_WORKDIR)) (QUOTE /)))) (IL:MEDLEY-INIT-VARS) (IL:FILESLOAD MEDLEY-UTILS) + (SETQ IL:DIRECTORIES (CONS (IL:UNIX-GETENV (QUOTE LOADUP_SOURCEDIR)) IL:DIRECTORIES)) (IL:MAKE-FULLER-DB (IL:CONCAT WORKDIR (IL:L-CASE (QUOTE fuller.dribble))) (IL:CONCAT WORKDIR (IL:L-CASE (QUOTE fuller.database))) @@ -27,7 +35,7 @@ cat >"${cmfile}" <<"EOF" " EOF -./run-medley ${scr} -loadup "${cmfile}" -full +./run-medley ${scr} -loadup "${cmfile}" "${SYSOUT}" loadup_finish "fuller.database" "fuller*" diff --git a/scripts/loadup-db.sh b/scripts/loadup-db.sh index ebd7841e..d0f89f7a 100755 --- a/scripts/loadup-db.sh +++ b/scripts/loadup-db.sh @@ -7,42 +7,6 @@ fi . scripts/loadup-setup.sh -loadup_start - -cat >"${cmfile}" <<"EOF" -" - -(PROG - ((WORKDIR (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV (QUOTE LOADUP_WORKDIR)) (QUOTE /))) - (LOADUP-SOURCE-DIR (IL:CONCAT (QUOTE {DSK}) (IL:UNIX-GETENV (QUOTE LOADUP_SOURCEDIR)) (QUOTE /))) - ) - (IL:MEDLEY-INIT-VARS) - (IL:FILESLOAD MEDLEY-UTILS) - (SETQ IL:DIRECTORIES (CONS LOADUP-SOURCE-DIR IL:DIRECTORIES)) - (IL:MAKE-FULLER-DB - (IL:CONCAT WORKDIR (IL:L-CASE (QUOTE fuller.dribble))) - (IL:CONCAT WORKDIR (IL:L-CASE (QUOTE fuller.database))) - (IL:CONCAT WORKDIR (IL:L-CASE (QUOTE fuller.sysout))) - ) - (IL:LOGOUT T) -) - -" -EOF - -./run-medley ${scr} -loadup "${cmfile}" -full - -loadup_finish "fuller.database" "fuller*" - -#!/bin/sh - -if [ ! -x run-medley ] ; then - echo run from MEDLEYDIR - exit 1 -fi - -. scripts/loadup-setup.sh - ./scripts/loadup-db-from-full.sh && ./scripts/copy-db.sh if [ $? -eq 0 ]; diff --git a/scripts/loadup-mid-from-init.sh b/scripts/loadup-mid-from-init.sh index 7efc13e4..056411a3 100755 --- a/scripts/loadup-mid-from-init.sh +++ b/scripts/loadup-mid-from-init.sh @@ -9,6 +9,9 @@ fi loadup_start +# wait to make sure timestamp ages enough since this run-medley is very short +sleep 2 + cat >"${cmfile}" <<"EOF" " (MOVD? (QUOTE NILL) (QUOTE PROMPTPRINT)) From 41b5870164902b7c822bccfdbb4645a23cdc11a8 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Sun, 13 Aug 2023 21:13:48 -0700 Subject: [PATCH 32/36] Switch comparison of timestamp tocraeted file to ensure that when the times are equal it is counted as success and not failure. Remove two second wait from loadup-mid-from-init, which was a previous attempt to solve same issue. --- scripts/loadup-mid-from-init.sh | 3 --- scripts/loadup-setup.sh | 8 ++++---- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/scripts/loadup-mid-from-init.sh b/scripts/loadup-mid-from-init.sh index 056411a3..7efc13e4 100755 --- a/scripts/loadup-mid-from-init.sh +++ b/scripts/loadup-mid-from-init.sh @@ -9,9 +9,6 @@ fi loadup_start -# wait to make sure timestamp ages enough since this run-medley is very short -sleep 2 - cat >"${cmfile}" <<"EOF" " (MOVD? (QUOTE NILL) (QUOTE PROMPTPRINT)) diff --git a/scripts/loadup-setup.sh b/scripts/loadup-setup.sh index 61affc98..28b4cb00 100644 --- a/scripts/loadup-setup.sh +++ b/scripts/loadup-setup.sh @@ -54,13 +54,13 @@ loadup_start () { loadup_finish () { local exit_code rm -f "${cmfile}" - if [ "${LOADUP_WORKDIR}/${1}" -nt "${LOADUP_WORKDIR}"/loadup.timestamp ]; + if [ "${LOADUP_WORKDIR}"/loadup.timestamp -nt "${LOADUP_WORKDIR}/${1}" ]; then - echo "+++++ SUCCESS +++++" - exit_code=0 - else echo "----- FAILURE -----" exit_code=1 + else + echo "+++++ SUCCESS +++++" + exit_code=0 fi echo "..... files created ....." shift; From 7f99792afec16d3ff6ac5cc0b60cb75fc22a874b Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Mon, 14 Aug 2023 23:29:38 -0700 Subject: [PATCH 33/36] In loadup- scripts, at end remove the tmp and tmp/logindir directories if they don't exist before the script runs --- scripts/loadup-setup.sh | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/scripts/loadup-setup.sh b/scripts/loadup-setup.sh index 28b4cb00..7f197685 100644 --- a/scripts/loadup-setup.sh +++ b/scripts/loadup-setup.sh @@ -49,6 +49,19 @@ cmfile="${LOADUP_WORKDIR}/${script_name}.cm" loadup_start () { echo ">>>>> START ${script_name}" + if [ -d "${MEDLEYDIR}/tmp" ]; + then + TMP_PRE_EXISTS="true" + if [ -d "${MEDLEYDIR}/tmp/logindir" ]; + then + LOGINDIR_PRE_EXISTS="true" + else + LOGINDIR_PRE_EXISTS="false" + fi + else + LOGINDIR_PRE_EXISTS="false" + TMP_PRE_EXISTS="false" + fi } loadup_finish () { @@ -74,6 +87,15 @@ loadup_finish () { fi done done + if [ "${TMP_PRE_EXISTS}" = "false" ]; + then + rm -rf "${MEDLEYDIR}/tmp" + else + if [ "${LOGINDIR_PRE_EXISTS}" = "false" ]; + then + rm -rf "${MEDLEYDIR}/tmp/logindir" + fi + fi echo "<<<<< END ${script_name}" echo "" exit ${exit_code} From b772b8383c0f0bbd716a9a79249795dba1cd865e Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Mon, 4 Sep 2023 10:39:52 -0700 Subject: [PATCH 34/36] Moving vncviewer to online.interlisp.org/downloads to bypass issues with sourceforge in buildLoadup.yml (#1319) --- .github/workflows/buildLoadup.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/buildLoadup.yml b/.github/workflows/buildLoadup.yml index 54da1136..3079bbbd 100644 --- a/.github/workflows/buildLoadup.yml +++ b/.github/workflows/buildLoadup.yml @@ -301,7 +301,7 @@ jobs: - name: Download vncviewer shell: powershell run: | - $url = "https://sourceforge.net/projects/tigervnc/files/stable/1.12.0/vncviewer64-1.12.0.exe" + $url = "https://online.interlisp.org/downloads/vncviewer64-1.12.0.exe" $output = "installers\win\vncviewer64-1.12.0.exe" (New-Object System.Net.WebClient).DownloadFile($url, $output) From b819e18c64543c198de8cc30a7b66c07b88e9f54 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Sat, 16 Sep 2023 18:09:34 -0700 Subject: [PATCH 35/36] Fix Issue#1323: buildDocker.yml Github Action is failing due to Ubuntu 22.10 being deprecated (#1324) * Remove trailing whitespaces in buildDocker.yml; move Dockerfile_medley base back to 20.04 since 22.10 deprecated. * In Dockerfile_medley load tzdata early so as to avaoid problems later on. * In Dockerfile_medley do an apt update before tzdata * Changing dockerfile_medley to be based on 22.04 to take care on glibc problems in online_medley docker --- .github/workflows/Dockerfile_medley | 8 +++++++- .github/workflows/buildDocker.yml | 26 +++++++++++++------------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/.github/workflows/Dockerfile_medley b/.github/workflows/Dockerfile_medley index 6a26d93a..9f2af48a 100644 --- a/.github/workflows/Dockerfile_medley +++ b/.github/workflows/Dockerfile_medley @@ -7,7 +7,7 @@ # # ****************************************************************************** -FROM ubuntu:22.10 +FROM ubuntu:22.04 ARG TARGETPLATFORM # Handle ARGs, ENV variables, and LABELs @@ -31,6 +31,12 @@ ENV LANG=C.UTF-8 # Copy over the release deb files ADD ./*.deb /tmp +# Get tzdata setup ahead of time +RUN apt-get update; \ + ln -fs /usr/share/zoneinfo/America/Los_Angeles /etc/localtime; \ + DEBIAN_FRONTEND=noninteractive apt-get install -y tzdata; \ + dpkg-reconfigure --frontend noninteractive tzdata + # Install Medley/Maiko and add tightvnc server and xclip to the image RUN apt-get update \ && apt-get install -y apt-utils \ diff --git a/.github/workflows/buildDocker.yml b/.github/workflows/buildDocker.yml index c9171daa..13fea618 100644 --- a/.github/workflows/buildDocker.yml +++ b/.github/workflows/buildDocker.yml @@ -20,7 +20,7 @@ name: 'Build/Push Docker Image' # Run this workflow on ... on: workflow_dispatch: - inputs: + inputs: draft: description: "Mark this as a draft release" type: choice @@ -33,7 +33,7 @@ on: options: - 'false' - 'true' - + workflow_call: outputs: successful: @@ -59,7 +59,7 @@ on: defaults: run: shell: bash - + jobs: @@ -86,7 +86,7 @@ jobs: echo "draft=${{ inputs.draft }}" >> $GITHUB_OUTPUT; echo "force=${{ inputs.force }}" >> $GITHUB_OUTPUT; fi - + ###################################################################################### @@ -100,7 +100,7 @@ jobs: outputs: release_not_built: ${{ steps.check.outputs.release_not_built }} - steps: + steps: # Checkout the actions for this repo owner - name: Checkout Actions uses: actions/checkout@v3 @@ -110,7 +110,7 @@ jobs: - run: mv ./Actions_${{ github.sha }}/actions ../actions && rm -rf ./Actions_${{ github.sha }} # Check if build already run for this commit - - name: Build already completed? + - name: Build already completed? id: check continue-on-error: true uses: ./../actions/check-sentry-action @@ -131,12 +131,12 @@ jobs: if: | needs.sentry.outputs.release_not_built == 'true' || needs.inputs.outputs.force == 'true' - + steps: # Checkout latest commit - name: Checkout Medley uses: actions/checkout@v3 - + # Find latest release (draft or normal) # and download its assets - name: Download linux debs from latest (draft) release @@ -176,10 +176,10 @@ jobs: docker_namespace="$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]')" docker_image="${docker_namespace}/${repo_name}" if [ "${{ needs.inputs.outputs.draft }}" = "false" ]; - then + then docker_tags="${docker_image}:latest,${docker_image}:${MEDLEY_RELEASE#*-}_${MAIKO_RELEASE#*-}" platforms="linux/amd64,linux/arm64" - else + else docker_tags="${docker_image}:draft" platforms="linux/amd64" fi @@ -242,7 +242,7 @@ jobs: needs: [inputs, sentry, build_and-push] - steps: + steps: # Checkout the actions for this repo owner - name: Checkout Actions uses: actions/checkout@v3 @@ -257,10 +257,10 @@ jobs: uses: ./../actions/set-sentry-action with: tag: "docker" - + - name: Output id: output run: | echo "build_successful='true'" >> ${GITHUB_OUTPUT} - + ###################################################################################### From 02665ca91b3945a97f5b9f8d4f35a3acf5958ea5 Mon Sep 17 00:00:00 2001 From: Frank Halasz Date: Sun, 17 Sep 2023 23:03:18 -0700 Subject: [PATCH 36/36] Change github workflows to provide MacOs full release zip file (#1290) --- .github/workflows/buildLoadup.yml | 339 +++- .github/workflows/buildReleaseInclDocker.yml | 1 + installers/deb/build_deb.sh | 26 +- .../downloads_page/medley_downloads.html | 34 +- installers/downloads_page/medley_downloads.md | 35 +- installers/macos/.gitignore | 7 + installers/macos/app/Info.plist | 33 + installers/macos/app/PkgInfo | 1 + installers/macos/build_app.sh | 170 ++ installers/macos/build_artifacts.sh | 66 + installers/macos/build_dmg.sh | 185 ++ installers/macos/images/A2P_icon.svg | 209 +++ installers/macos/images/A2P_icon128.png | Bin 0 -> 6147 bytes installers/macos/images/A2P_icon256.png | Bin 0 -> 11610 bytes installers/macos/images/App_icon.svg | 209 +++ installers/macos/images/App_icon1024.png | Bin 0 -> 37270 bytes installers/macos/images/App_icon512.png | Bin 0 -> 18314 bytes installers/macos/images/Command_icon.svg | 209 +++ installers/macos/images/Command_icon128.png | Bin 0 -> 5917 bytes installers/macos/images/Command_icon256.png | Bin 0 -> 11025 bytes installers/macos/images/Install_Message.png | Bin 0 -> 54660 bytes installers/macos/images/Install_Message.svg | 1556 +++++++++++++++++ installers/macos/images/Install_icon.svg | 209 +++ installers/macos/images/Install_icon128.png | Bin 0 -> 5960 bytes installers/macos/images/Install_icon256.png | Bin 0 -> 5960 bytes installers/macos/images/MedleyIcon.png | Bin 0 -> 29321 bytes installers/macos/images/MedleyIcon.svg | 199 +++ installers/macos/images/MedleyIcon128.png | Bin 0 -> 4212 bytes installers/macos/images/MedleyIcon256.png | Bin 0 -> 7444 bytes installers/macos/pkg/Distribution.xml | 29 + installers/macos/scripts/medley_add2path | 43 + installers/win/medley.iss | 2 +- medley | 2 +- run-medley | 1 - scripts/medley/medley.command | 151 ++ scripts/medley/medley.sh | 143 +- scripts/medley/medley_args.sh | 29 +- 37 files changed, 3614 insertions(+), 274 deletions(-) create mode 100644 installers/macos/.gitignore create mode 100644 installers/macos/app/Info.plist create mode 100644 installers/macos/app/PkgInfo create mode 100755 installers/macos/build_app.sh create mode 100755 installers/macos/build_artifacts.sh create mode 100755 installers/macos/build_dmg.sh create mode 100644 installers/macos/images/A2P_icon.svg create mode 100644 installers/macos/images/A2P_icon128.png create mode 100644 installers/macos/images/A2P_icon256.png create mode 100644 installers/macos/images/App_icon.svg create mode 100644 installers/macos/images/App_icon1024.png create mode 100644 installers/macos/images/App_icon512.png create mode 100644 installers/macos/images/Command_icon.svg create mode 100644 installers/macos/images/Command_icon128.png create mode 100644 installers/macos/images/Command_icon256.png create mode 100644 installers/macos/images/Install_Message.png create mode 100644 installers/macos/images/Install_Message.svg create mode 100644 installers/macos/images/Install_icon.svg create mode 100644 installers/macos/images/Install_icon128.png create mode 100644 installers/macos/images/Install_icon256.png create mode 100644 installers/macos/images/MedleyIcon.png create mode 100644 installers/macos/images/MedleyIcon.svg create mode 100644 installers/macos/images/MedleyIcon128.png create mode 100644 installers/macos/images/MedleyIcon256.png create mode 100644 installers/macos/pkg/Distribution.xml create mode 100755 installers/macos/scripts/medley_add2path create mode 100755 scripts/medley/medley.command mode change 100755 => 120000 scripts/medley/medley.sh diff --git a/.github/workflows/buildLoadup.yml b/.github/workflows/buildLoadup.yml index 3079bbbd..635d0a8a 100644 --- a/.github/workflows/buildLoadup.yml +++ b/.github/workflows/buildLoadup.yml @@ -60,7 +60,7 @@ defaults: jobs: -###################################################################################### +# JOB: inputs ####################################################################### # Regularize the inputs so they can be referenced the same way whether they are # the result of a workflow_dispatch or a workflow_call @@ -85,8 +85,7 @@ jobs: fi - -###################################################################################### +# JOB: sentry ####################################################################### # Use sentry-action to determine if this release has already been built # based on the latest commit to the repo @@ -114,11 +113,11 @@ jobs: with: tag: "loadup" -###################################################################################### +# JOB: loadup ####################################################################### # - # Do the loadup + # Do the loadup and push to release on github # loadup: @@ -129,7 +128,8 @@ jobs: combined_release_tag: ${{ steps.job_outputs.outputs.COMBINED_RELEASE_TAG }} medley_release_tag: ${{ steps.job_outputs.outputs.MEDLEY_RELEASE_TAG }} medley_short_release_tag: ${{ steps.job_outputs.outputs.MEDLEY_SHORT_RELEASE_TAG }} - debs_filename_base: ${{ steps.debs.outputs.DEBS_FILENAME_BASE }} + artifacts_filename_template: ${{ steps.job_outputs.outputs.ARTIFACTS_FILENAME_TEMPLATE }} + release_url: ${{ steps.push.outputs.html_url }} needs: [inputs, sentry] if: | @@ -156,22 +156,35 @@ jobs: # Get Maiko release information, retrieves the name of the latest # release. Used to download the correct Maiko release - - name: Get Maiko Release Information + # Find latest release (draft or normal) + - name: Get maiko release information id: maiko - uses: abatilo/release-info-action@v1.3.2 - with: - owner: ${{ github.repository_owner }} - repo: maiko + run: | + tag="" + if [ "${{ needs.inputs.outputs.draft }}" = "true" ]; + then + gh release list --repo ${{ github.repository_owner }}/maiko | grep Draft >/tmp/releases-$$ + if [ $? -eq 0 ]; + then + tag=$(head -n 1 /tmp/releases-$$ | awk '{ print $3 }') + fi + fi + if [ -z "${tag}" ]; + then + tag=$(gh release list --repo ${{ github.repository_owner }}/maiko | grep Latest | head -n 1 | awk '{ print $3 }') + fi + echo "maiko_tag=${tag}" >> ${GITHUB_OUTPUT} + env: + GITHUB_TOKEN: ${{ secrets.MAIKO_TOKEN }} # Setup environment variables & establish job outputs - name: Setup Environment Variables run: | echo "build_time=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> ${GITHUB_OUTPUT} - echo "TARBALL_DIR=installers/deb/tmp/tarballs" >>${GITHUB_ENV} - echo "DEBS_DIR=installers/deb/debs" >>${GITHUB_ENV} - echo "TARS_DIR=installers/deb/tars" >>${GITHUB_ENV} + echo "TARBALL_DIR=/tmp/tarballs" >>${GITHUB_ENV} echo "MEDLEY_RELEASE_TAG=${RELEASE_TAG}" >>${GITHUB_ENV} - echo "MAIKO_RELEASE_TAG=${{ steps.maiko.outputs.latest_tag }}" >>${GITHUB_ENV} + echo "MAIKO_RELEASE_TAG=${{ steps.maiko.outputs.maiko_tag }}" >>${GITHUB_ENV} + echo "ARTIFACTS_FILENAME_TEMPLATE=medley-full-@@PLATFORM@@-@@ARCH@@-@@MEDLEY.RELEASE@@_@@MAIKO.RELEASE@@" >>${GITHUB_ENV} - name: More Environment Variables run: | echo "MEDLEY_SHORT_RELEASE_TAG=${MEDLEY_RELEASE_TAG#medley-}" >>${GITHUB_ENV} @@ -182,27 +195,25 @@ jobs: - name: Establish job outputs id: job_outputs run: | - echo "COMBINED_RELEASE_TAG=${COMBINED_RELEASE_TAG}" >> $GITHUB_OUTPUT; - echo "MEDLEY_RELEASE_TAG=${MEDLEY_RELEASE_TAG}" >> $GITHUB_OUTPUT; - echo "MEDLEY_SHORT_RELEASE_TAG=${MEDLEY_SHORT_RELEASE_TAG}" >> $GITHUB_OUTPUT; + echo "COMBINED_RELEASE_TAG=${COMBINED_RELEASE_TAG}" >> ${GITHUB_OUTPUT} + echo "MEDLEY_RELEASE_TAG=${MEDLEY_RELEASE_TAG}" >> ${GITHUB_OUTPUT} + echo "MEDLEY_SHORT_RELEASE_TAG=${MEDLEY_SHORT_RELEASE_TAG}" >> ${GITHUB_OUTPUT} + echo "ARTIFACTS_FILENAME_TEMPLATE=${ARTIFACTS_FILENAME_TEMPLATE}" >> ${GITHUB_OUTPUT} # Setup some needed dirs in workspace - name: Create work dirs run: mkdir -p ${TARBALL_DIR} - # Download Maiko Release Assets + # Download Maiko Release Assets and untar it - name: Download Release Assets - uses: robinraju/release-downloader@v1.6 - with: - repository: ${{ github.repository_owner }}/maiko - token: ${{ secrets.GITHUB_TOKEN }} - latest: true - out-file-path: ${{ env.TARBALL_DIR }} - fileName: "${{ env.MAIKO_RELEASE_TAG }}-linux.*.tgz" - - - name: Untar Maiko Release for use in loadup run: | - tar -xzf "${TARBALL_DIR}/${{ env.MAIKO_RELEASE_TAG }}-linux.x86_64.tgz" + gh release download ${MAIKO_RELEASE_TAG} \ + -D ${TARBALL_DIR} \ + --repo ${{ github.repository_owner }}/maiko \ + -p '*.tgz' + tar -xzf "${TARBALL_DIR}/${MAIKO_RELEASE_TAG}-linux.x86_64.tgz" + env: + GITHUB_TOKEN: ${{ secrets.MAIKO_TOKEN }} # Checkout Notecards and tar it in the tarballsdir - name: Checkout Notecards @@ -210,11 +221,11 @@ jobs: with: repository: ${{ github.repository_owner }}/notecards path: ./notecards - - run: mv ./notecards ../notecards - name: Tar notecards into tarball dir run: | - cd .. - tar cfz medley/${TARBALL_DIR}/notecards.tgz notecards + mv ./notecards ../notecards + cd ../notecards + git archive --format=tgz --output="${TARBALL_DIR}/notecards.tgz" --prefix=notecards/ main # Install vnc - name: Install vnc @@ -224,7 +235,6 @@ jobs: run: | Xvnc -geometry 1280x720 :0 & export DISPLAY=":0" - PATH="$PWD/maiko:$PATH" scripts/loadup-all.sh -apps scripts/loadup-db.sh @@ -233,15 +243,6 @@ jobs: scripts/release-make-tars.sh "${MEDLEY_RELEASE_TAG}" mv releases/"${MEDLEY_SHORT_RELEASE_TAG}"/*.tgz "${TARBALL_DIR}" - # Build the deb files as well as the tgz files - - name: Build .deb files for 3 architectures - id: debs - run: | - cd installers/deb - debs_filename_base=$(./build_deb.sh) - echo "DEBS_FILENAME_BASE=${debs_filename_base}" >> $GITHUB_ENV; - echo "DEBS_FILENAME_BASE=${debs_filename_base}" >> $GITHUB_OUTPUT; - # Push the release up to github releases - name: Delete existing release with same tag (if any) uses: cb80/delrel@latest @@ -250,21 +251,166 @@ jobs: continue-on-error: true - name: Push the release - id: push_release + id: push uses: ncipollo/release-action@v1 with: allowUpdates: true artifacts: + # ${{ env.TARBALL_DIR }}/notecards.tgz, ${{ env.TARBALL_DIR }}/${{ env.MEDLEY_RELEASE_TAG }}-loadups.tgz, - ${{ env.TARBALL_DIR }}/${{ env.MEDLEY_RELEASE_TAG }}-runtime.tgz, - ${{ env.DEBS_DIR }}/*.deb, - ${{ env.TARS_DIR }}/*.tgz + ${{ env.TARBALL_DIR }}/${{ env.MEDLEY_RELEASE_TAG }}-runtime.tgz tag: ${{ env.MEDLEY_RELEASE_TAG }} draft: ${{ needs.inputs.outputs.draft }} prerelease: false generateReleaseNotes: true token: ${{ secrets.GITHUB_TOKEN }} + # Save the tarball directory for subsequent jobs + - name: Save tarballs + uses: actions/upload-artifact@v3 + with: + name: tarballs + path: ${{ env.TARBALL_DIR }} + if-no-files-found: error + + +# JOB: linux_installer ############################################################## + + # + # Create the linux installers (.deb and .tgz) and push to release on github + # + linux_installer: + + runs-on: ubuntu-latest + + needs: [inputs, sentry, loadup] + if: | + needs.sentry.outputs.release_not_built == 'true' + || needs.inputs.outputs.force == 'true' + + steps: + + # Checkout latest commit + - name: Checkout Medley + uses: actions/checkout@v3 + + # Environment variables + - name: Environment variables + run: | + echo "DEBS_DIR=installers/deb/debs" >>${GITHUB_ENV} + echo "TARS_DIR=installers/deb/tars" >>${GITHUB_ENV} + echo "TARBALL_DIR=installers/deb/tmp/tarballs" >>${GITHUB_ENV} + echo "MEDLEY_RELEASE_TAG=${{ needs.loadup.outputs.medley_release_tag }}" \ + >>${GITHUB_ENV} + echo "ARTIFACTS_FILENAME_TEMPLATE=${{ needs.loadup.outputs.artifacts_filename_template }}" >>${GITHUB_ENV} + + # Create taball dir + - run: mkdir -p ${TARBALL_DIR} + + # Get the tarballs + - name: Get tarballs + uses: actions/download-artifact@v3 + with: + name: tarballs + path: ${{ env.TARBALL_DIR }} + + # Build the deb files as well as the tgz files + - name: Build .deb files for 3 architectures + id: debs + run: | + cd installers/deb + ./build_deb.sh + + # Push the debs and tgz up to github releases + - name: Push the release + id: push_release + uses: ncipollo/release-action@v1 + with: + allowUpdates: true + artifacts: + ${{ env.DEBS_DIR }}/*.deb, + ${{ env.TARS_DIR }}/*.tgz + tag: ${{ env.MEDLEY_RELEASE_TAG }} + token: ${{ secrets.GITHUB_TOKEN }} + omitBodyDuringUpdate: true + omitDraftDuringUpdate: true + omitNameDuringUpdate: true + omitPrereleaseDuringUpdate: true + + + +# JOB: macos_installer ############################################################## + + # + # Create the macos installers (.dmg and .zip) and push to release on github + # + macos_installer: + + runs-on: macos-12 + + needs: [inputs, sentry, loadup] + if: | + needs.sentry.outputs.release_not_built == 'true' + || needs.inputs.outputs.force == 'true' +# if: false + + defaults: + run: + shell: bash + + steps: + + # Checkout latest commit + - name: Checkout Medley + uses: actions/checkout@v3 + + # Environment variables + - name: Environment variables + run: | + MACOS_DIR=installers/macos + echo "MACOS_DIR=${MACOS_DIR}" >>${GITHUB_ENV} + echo "ARTIFACTS_DIR=${MACOS_DIR}/artifacts" >>${GITHUB_ENV} + echo "TARBALL_DIR=${MACOS_DIR}/tmp/tarballs" >>${GITHUB_ENV} + echo "MEDLEY_RELEASE_TAG=${{ needs.loadup.outputs.medley_release_tag }}" \ + >>${GITHUB_ENV} + echo "ARTIFACTS_FILENAME_TEMPLATE=${{ needs.loadup.outputs.artifacts_filename_template }}" >>${GITHUB_ENV} + + # Create tarball dir + - run: mkdir -p ${TARBALL_DIR} + + # Get the tarballs + - name: Get tarballs + uses: actions/download-artifact@v3 + with: + name: tarballs + path: ${{ env.TARBALL_DIR }} + + # Build the .dmg and .zip files + - name: Build .dmg & .zip files + id: dmg-zip + run: | + cd ${MACOS_DIR} + ./build_artifacts.sh + + # Push the .dmg and .zip up to github releases + - name: Push the release + id: push_release + uses: ncipollo/release-action@v1 + with: + allowUpdates: true + artifacts: + # 2023-07-20 not yet building dmg -- ${{ env.ARTIFACTS_DIR }}/*.dmg, + ${{ env.ARTIFACTS_DIR }}/*.zip + tag: ${{ env.MEDLEY_RELEASE_TAG }} + token: ${{ secrets.GITHUB_TOKEN }} + omitBodyDuringUpdate: true + omitDraftDuringUpdate: true + omitNameDuringUpdate: true + omitPrereleaseDuringUpdate: true + + + +# JOB: windows_installer ############################################################# # # Create the Windows installer, push it up to the release on github and @@ -279,7 +425,11 @@ jobs: needs.sentry.outputs.release_not_built == 'true' || needs.inputs.outputs.force == 'true' + outputs: + windows_installer_filename: ${{ steps.jobout.outputs.INSTALLER_FILENAME }} + steps: + # Checkout latest commit - name: Checkout Medley uses: actions/checkout@v3 @@ -294,8 +444,8 @@ jobs: echo "MEDLEY_RELEASE_TAG=$mrt" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append $msrt="${{ needs.loadup.outputs.medley_short_release_tag }}" echo "MEDLEY_SHORT_RELEASE_TAG=$msrt" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append - $debs="${{ needs.loadup.outputs.debs_filename_base }}" - echo "DEBS_FILENAME_BASE=$debs" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append + $aft="${{ needs.loadup.outputs.artifacts_filename_template }}" + echo "ARTIFACTS_FILENAME_TEMPLATE=$aft" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append # Download vnc viewer - name: Download vncviewer @@ -310,8 +460,7 @@ jobs: shell: powershell run: | iscc installers\win\medley.iss - $filename="medley-install_${env:COMBINED_RELEASE_TAG}_x64.exe" - echo "INSTALLER_FILENAME=$filename" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append + # Upload windows installer to release - name: Upload windows installer to release @@ -319,7 +468,7 @@ jobs: uses: ncipollo/release-action@v1 with: allowUpdates: true - artifacts: installers/win/${{ env.INSTALLER_FILENAME }} + artifacts: installers/win/medley-*.exe tag: ${{ env.MEDLEY_RELEASE_TAG }} token: ${{ secrets.GITHUB_TOKEN }} omitBodyDuringUpdate: true @@ -327,18 +476,63 @@ jobs: omitNameDuringUpdate: true omitPrereleaseDuringUpdate: true - # Install the OpenSSH Client - - name: Install the OpenSSH Client - shell: powershell + +# JOB: downloads_page ################################################################ + + # + # Update the downloads page on OIO + # + + downloads_page: + + runs-on: ubuntu-latest + + needs: [inputs, sentry, loadup, linux_installer, macos_installer, windows_installer] + if: | + needs.sentry.outputs.release_not_built == 'true' + || needs.inputs.outputs.force == 'true' + + steps: + + # Environment variables + - name: Environment Varibales (from other jobs) run: | - Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0 + crt="${{ needs.loadup.outputs.combined_release_tag }}" + echo "COMBINED_RELEASE_TAG=${crt}" >>${GITHUB_ENV} + mrt="${{ needs.loadup.outputs.medley_release_tag }}" + echo "MEDLEY_RELEASE_TAG=${mrt}" >>${GITHUB_ENV} + msrt="${{ needs.loadup.outputs.medley_short_release_tag }}" + echo "MEDLEY_SHORT_RELEASE_TAG=${msrt}" >>${GITHUB_ENV} + + # Checkout latest commit + - name: Checkout Medley + uses: actions/checkout@v3 + + + # Upload a dummy file to release + # Needed since download url of the release changes on every update + # So this will be the final update before creating downloads page + # and we can use its url for the page + - run: echo "placeholder" >placeholder.txt + - name: Upload windows installer to release + id: pushph + uses: ncipollo/release-action@v1 + with: + allowUpdates: true + artifacts: placeholder.txt + tag: ${{ env.MEDLEY_RELEASE_TAG }} + token: ${{ secrets.GITHUB_TOKEN }} + omitBodyDuringUpdate: true + omitDraftDuringUpdate: true + omitNameDuringUpdate: true + omitPrereleaseDuringUpdate: true # Update the downloads page and the man page on OIO - name: Update the downloads page and the man page to the OIO static page host shell: bash run: | # Figure out filenames - download_url="${{ steps.push.outputs.html_url }}" + download_url="${{ steps.pushph.outputs.html_url }}" download_url="${download_url/\/tag\//\/download\/}" local_template="installers/downloads_page/medley_downloads.html" local_filename="medley_downloads.html" @@ -356,9 +550,8 @@ jobs: # Fill in downloads page template sed \ -e "s/@@@MEDLEY.SHORT.RELEASE.TAG@@@/${MEDLEY_SHORT_RELEASE_TAG}/g" \ + -e "s/@@@COMBINED.RELEASE.TAG@@@/${COMBINED_RELEASE_TAG}/g" \ -e "s~@@@DOWNLOAD_URL@@@~${download_url}~g" \ - -e "s/@@@DEBS.FILENAME.BASE@@@/${DEBS_FILENAME_BASE}/g" \ - -e "s/@@@WINDOWS.INSTALLER.FILENAME@@@/${INSTALLER_FILENAME}/g" \ < "${local_template}" > "${local_filename}" # Create sftp instruction file echo "-rm ${remote_filepath}.oldold" > batch @@ -375,7 +568,7 @@ jobs: -###################################################################################### +# JOB: complete ##################################################################### # Use set-sentry-action to determine set the sentry that says this release has # been successfully built @@ -387,9 +580,16 @@ jobs: outputs: build_successful: ${{ steps.output.outputs.build_successful }} - needs: [inputs, sentry, loadup, windows_installer] + needs: [inputs, sentry, loadup, downloads_page] steps: + # Delete the tarballs artifact + - name: Delete tarballs artifact + uses: geekyeggo/delete-artifact@v2 + with: + name: tarballs + failOnError: false + # Checkout the actions for this repo owner - name: Checkout Actions uses: actions/checkout@v3 @@ -411,21 +611,4 @@ jobs: echo "build_successful='true'" >> $GITHUB_OUTPUT ###################################################################################### - - - -# - name: Download the Windows installer created in windows job -# uses: actions/download-artifact@v3 -# with: -# name: windows_installer -# path: installers/win - -# - name: Rename the Windows installer w/ version tag -# run: | -# maiko_release_tag="${{ steps.maiko.outputs.latest_tag }}" -# combined_release_tag="${MEDLEY_RELEASE_TAG#medley-}_${maiko_release_tag#maiko-}" -# windows_installer_filename="medley_install_${combined_release_tag}_x64.exe" -# cd installers/win -# mv medley_install_vXXXVERSIONXXX_x64.exe "${windows_installer_filename}" -# echo "WINDOWS_INSTALLER_FILENAME=${windows_installer_filename}" >>${GITHUB_ENV} - +###################################################################################### diff --git a/.github/workflows/buildReleaseInclDocker.yml b/.github/workflows/buildReleaseInclDocker.yml index cfc9aa42..5049109c 100644 --- a/.github/workflows/buildReleaseInclDocker.yml +++ b/.github/workflows/buildReleaseInclDocker.yml @@ -84,6 +84,7 @@ jobs: echo "force=false" >> $GITHUB_OUTPUT; fi + ###################################################################################### diff --git a/installers/deb/build_deb.sh b/installers/deb/build_deb.sh index 5beb7314..78d45bc9 100755 --- a/installers/deb/build_deb.sh +++ b/installers/deb/build_deb.sh @@ -11,15 +11,6 @@ ############################################################################### # set -x -# mess with file desscriptors so we get only one line on stdout -# so we can communicate only what we want back to any githib runner -# stash fd 1 in fd 3 -exec 3>&1 -# make fd 1 (stdout) be the same as stdout -# so none of the std output from this file will be captured by -# $() but it will still be written out to the tty (via stderr) -exec 1>&2 - tarball_dir=tmp/tarballs # Make sure we are in the right directory @@ -32,6 +23,13 @@ then exit 1 fi +# template for artifacts file names should be passed down in the ENV variable: ARTIFACTS_FILENAME_TEMPLATE +if [ -z "${ARTIFACTS_FILENAME_TEMPLATE}" ]; +then + ARTIFACTS_FILENAME_TEMPLATE="medley-full-@@PLATFORM@@-@@ARCH@@-@@MEDLEY.RELEASE@@_@@MAIKO.RELEASE@@" +fi + + # If running as a github action or -t arg, then skip downloading the tarballs if ! [[ -n "${GITHUB_WORKSPACE}" || "$1" = "-t" ]]; @@ -69,7 +67,6 @@ fi pushd ${tarball_dir} >/dev/null 2>/dev/null medley_release=$(echo medley-*-loadups.tgz | sed "s/medley-\(.*\)-loadups.tgz/\1/") maiko_release=$(echo maiko-*-linux.x86_64.tgz | sed "s/maiko-\(.*\)-linux.x86_64.tgz/\1/") -debs_filename_base="medley-full-${medley_release}_${maiko_release}" popd >/dev/null 2>/dev/null @@ -136,7 +133,7 @@ do # # Create tar file for this arch # - filename="${debs_filename_base}-${wslp}-${arch}" + filename="$(echo ${ARTIFACTS_FILENAME_TEMPLATE} | sed -e "s#@@PLATFORM@@#${wslp}#" -e "s#@@ARCH@@#${arch}#" -e "s#@@MEDLEY.RELEASE@@#${medley_release}#" -e "s#@@MAIKO.RELEASE@@#${maiko_release}#" )" mkdir -p tars echo "Creating tar file tars/${filename}.tgz" tar -C ${il_dir} -czf tars/${filename}.tgz . @@ -151,8 +148,5 @@ do done done -# send just one line back to github $() construct -# do this by restoring fd 1 to what it was orginally -exec 1>&3 -echo "${debs_filename_base}" - +################################################################################################################ +################################################################################################################ diff --git a/installers/downloads_page/medley_downloads.html b/installers/downloads_page/medley_downloads.html index e41529a9..4e81d85d 100644 --- a/installers/downloads_page/medley_downloads.html +++ b/installers/downloads_page/medley_downloads.html @@ -10,36 +10,46 @@
  • Local Installations (for any Linux distro)

  • -
  • WINDOWS 10/11 (Medley runs in a Docker container)

    +
  • macOS 11 (Big Sur) and later - for both Intel and Apple Silicon

    -

    Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for Windows x64 machines

  • + +
  • WINDOWS 10/11 (Medley running within Cygwin)

    + +

    Not available

  • diff --git a/installers/downloads_page/medley_downloads.md b/installers/downloads_page/medley_downloads.md index 7d251244..cd87f574 100644 --- a/installers/downloads_page/medley_downloads.md +++ b/installers/downloads_page/medley_downloads.md @@ -6,38 +6,47 @@ * #### Standard Linux - [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for x86\_64 machines](@@@DOWNLOAD_URL@@@/@@@DEBS.FILENAME.BASE@@@-linux-x86\_64.deb) + [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for x86\_64 machines](@@@DOWNLOAD_URL@@@/medley-full-linux-x86\_64-@@@COMBINED.RELEASE.TAG@@@.deb) - [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARM64 machines](@@@DOWNLOAD_URL@@@/@@@DEBS.FILENAME.BASE@@@-linux-aarch64.deb) + [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARM64 machines](@@@DOWNLOAD_URL@@@/medley-full-linux-aarch64-@@@COMBINED.RELEASE.TAG@@@.deb) - [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARMv7 machines](@@@DOWNLOAD_URL@@@/@@@DEBS.FILENAME.BASE@@@-linux-armv7l.deb) + [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARMv7 machines](@@@DOWNLOAD_URL@@@/medley-full-linux-armv7l-@@@COMBINED.RELEASE.TAG@@@.deb) * #### Windows System for Linux - [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for x86\.64 machines](@@@DOWNLOAD_URL@@@/@@@DEBS.FILENAME.BASE@@@-wsl-x86\_64.deb) + [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for x86\.64 machines](@@@DOWNLOAD_URL@@@/medley-full-wsl-x86\_64-@@@COMBINED.RELEASE.TAG@@@.deb) - [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARM64 machines](@@@DOWNLOAD_URL@@@/@@@DEBS.FILENAME.BASE@@@-wsl-aarch64.deb) + [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARM64 machines](@@@DOWNLOAD_URL@@@/medley-full-wsl-aarch64-@@@COMBINED.RELEASE.TAG@@@.deb) * ### Local Installations (for any Linux distro) * #### Standard Linux - [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for x86\_64 machines](@@@DOWNLOAD_URL@@@/@@@DEBS.FILENAME.BASE@@@-linux-x86\_64.tgz) + [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for x86\_64 machines](@@@DOWNLOAD_URL@@@/medley-full-linux-x86\_64-@@@COMBINED.RELEASE.TAG@@@.tgz) - [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARM64 machines](@@@DOWNLOAD_URL@@@/@@@DEBS.FILENAME.BASE@@@-linux-aarch64.tgz) + [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARM64 machines](@@@DOWNLOAD_URL@@@/medley-full-linux-aarch64-@@@COMBINED.RELEASE.TAG@@@.tgz) - [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARMv7 machines](@@@DOWNLOAD_URL@@@/@@@DEBS.FILENAME.BASE@@@-linux-armv7l.tgz) + [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARMv7 machines](@@@DOWNLOAD_URL@@@/medley-full-linux-armv7l-@@@COMBINED.RELEASE.TAG@@@.tgz) * #### Windows System for Linux - [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for x86\_64 machines](@@@DOWNLOAD_URL@@@/@@@DEBS.FILENAME.BASE@@@-wsl-x86\_64.tgz) + [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for x86\_64 machines](@@@DOWNLOAD_URL@@@/medley-full-wsl-x86\_64-@@@COMBINED.RELEASE.TAG@@@.tgz) - [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARM64 machines](@@@DOWNLOAD_URL@@@/@@@DEBS.FILENAME.BASE@@@-wsl-aarch64.tgz) + [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for ARM64 machines](@@@DOWNLOAD_URL@@@/medley-full-wsl-aarch64-@@@COMBINED.RELEASE.TAG@@@.tgz) - * ## WINDOWS 10/11 (Medley runs in a Docker container) - - [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@ for Windows x64 machines](@@@DOWNLOAD_URL@@@/@@@WINDOWS.INSTALLER.FILENAME@@@) + * ## macOS 11 (Big Sur) and later - for both Intel and Apple Silicon + * ### DMG Installer + + Not available + + * ### ZIP Installer + + [Release @@@MEDLEY.SHORT.RELEASE.TAG@@@](@@@DOWNLOAD_URL@@@/medley-full-macos-universal-@@@COMBINED.RELEASE.TAG@@@.zip) + + * ## WINDOWS 10/11 (Medley running within Cygwin) + + Not available diff --git a/installers/macos/.gitignore b/installers/macos/.gitignore new file mode 100644 index 00000000..14816e60 --- /dev/null +++ b/installers/macos/.gitignore @@ -0,0 +1,7 @@ +tmp +devtmp +pkg/*.pkg +artifacts + + + diff --git a/installers/macos/app/Info.plist b/installers/macos/app/Info.plist new file mode 100644 index 00000000..72d0498d --- /dev/null +++ b/installers/macos/app/Info.plist @@ -0,0 +1,33 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + medley/medley + CFBundleGetInfoString + Medley Interlisp, Copyright 2023 Interlisp.org + CFBundleIconFile + Medley.icns + CFBundleIdentifier + org.interlisp.Medley + CFBundleDocumentTypes + + + CFBundleInfoDictionaryVersion + 3.51 + CFBundlePackageType + APPL + CFBundleShortVersionString + --VERSION_TAG-- + CFBundleSignature + Medley + CFBundleVersion + --VERSION_TAG-- + NSHumanReadableCopyright + Copyright 2023 Interlisp.org + LSMinimumSystemVersion + 11.0 + + diff --git a/installers/macos/app/PkgInfo b/installers/macos/app/PkgInfo new file mode 100644 index 00000000..5c0b3d6d --- /dev/null +++ b/installers/macos/app/PkgInfo @@ -0,0 +1 @@ +APPLMedley diff --git a/installers/macos/build_app.sh b/installers/macos/build_app.sh new file mode 100755 index 00000000..7c66cf96 --- /dev/null +++ b/installers/macos/build_app.sh @@ -0,0 +1,170 @@ +#!/bin/bash +############################################################################### +# +# build_app.sh: build app bundle for installing Medley Interlisp on MacOS +# +# 2023-02-23 Frank Halasz +# +# Copyright 2023 by Interlisp.org +# +############################################################################### + +APPNAME=Medley + +# 2023-07-19 Temorary selector to allow us to create .zip asset before app/dmg work is finished +INCLUDE_APP="no" # "yes" or "no" + +# Make sure we are in the right directory +if [ ! -f ./app/Info.plist ]; +then +echo "Can't find ./app/Info.plist file." +echo "Incorrect cwd?" +echo "Should be in medley/installers/macos" +echo "Exiting" +exit 1 +fi + +# template for artifacts file names should be passed down in the ENV variable: ARTIFACTS_FILENAME_TEMPLATE +if [ -z "${ARTIFACTS_FILENAME_TEMPLATE}" ]; +then + ARTIFACTS_FILENAME_TEMPLATE="medley-full-@@PLATFORM@@-@@ARCH@@-@@MEDLEY.RELEASE@@_@@MAIKO.RELEASE@@" +fi + +# +# Setup directories +# +CWD=$(pwd) +RESULTS_DIR=${CWD}/artifacts +APPBUNDLE=${RESULTS_DIR}/${APPNAME}.app +APPBUNDLECONTENTS=${APPBUNDLE}/Contents +APPBUNDLEEXE=${APPBUNDLECONTENTS}/MacOS +APPBUNDLERESOURCES=${APPBUNDLECONTENTS}/Resources +APPBUNDLEICON=${APPBUNDLECONTENTS}/Resources +tmp_dir=${CWD}/tmp +tarball_dir=${tmp_dir}/tarballs + +# If running as a github action or -t arg, then skip downloading the tarballs +if ! [[ -n "${GITHUB_WORKSPACE}" || "$1" = "-t" ]]; +then + # First, make sure gh is available and we are logged in to github + if [ -z "$(which gh)" ]; + then + echo "Can't find gh" + echo "Exiting." + exit 2 + fi + gh auth status 2>&1 | grep --quiet --no-messages "Logged in to github.com" + if [ $? -ne 0 ]; + then + echo "Not logged into github." + echo "Exiting." + exit 3 + fi + # then clear out the ./tmp directory + rm -rf ${tmp_dir} + mkdir -p ${tmp_dir} + # then download the maiko and medley tarballs + mkdir -p ${tarball_dir} + echo "Fetching maiko and medley release tarballs" + TAG=$(gh release list --repo interlisp/maiko | head -n 1 | awk "{print \$1 }") + gh release download ${TAG} \ + --repo interlisp/maiko \ + --dir ${tarball_dir} \ + --pattern "*darwin*.tgz" + TAG=$(gh release list --repo interlisp/medley | head -n 1 | awk "{print \$1 }") + gh release download ${TAG} \ + --repo interlisp/medley \ + --dir ${tarball_dir} \ + --pattern "*-loadups.tgz" \ + --pattern "*-runtime.tgz" + gh repo clone interlisp/notecards notecards -- --depth 1 + (cd notecards; git archive --format=tgz --output=../notecards.tgz --prefix=notecards/ main) + mv notecards.tgz ${tarball_dir} + rm -rf notecards +fi + +# Figure out release tags from tarball names +pushd ${tarball_dir} >/dev/null 2>/dev/null +medley_release=$(echo medley-*-loadups.tgz | sed "s/medley-\(.*\)-loadups.tgz/\1/") +maiko_release=$(echo maiko-*-darwin.x86_64.tgz | sed "s/maiko-\(.*\)-darwin.x86_64.tgz/\1/") +popd >/dev/null 2>/dev/null + +if [ "${INCLUDE_APP}" = "yes" ]; then + # + # Create bundle dirs + # + rm -rf ${RESULTS_DIR} + mkdir -p ${RESULTS_DIR} + rm -rf ${APPBUNDLE} + mkdir -p ${APPBUNDLE} + mkdir ${APPBUNDLE}/Contents + mkdir ${APPBUNDLE}/Contents/MacOS + mkdir ${APPBUNDLE}/Contents/Resources + # + # Create icons and put in bundle + # + iconset_dir=${tmp_dir}/${APPNAME}.iconset + rm -rf ${iconset_dir} + mkdir -p ${iconset_dir} + image_dir=${CWD}/images + sips -z 16 16 ${image_dir}/App_icon1024.png --out ${iconset_dir}/icon_16x16.png >/dev/null 2>&1 + sips -z 32 32 ${image_dir}/App_icon1024.png --out ${iconset_dir}/icon_16x16@2x.png >/dev/null 2>&1 + sips -z 32 32 ${image_dir}/App_icon1024.png --out ${iconset_dir}/icon_32x32.png >/dev/null 2>&1 + sips -z 64 64 ${image_dir}/App_icon1024.png --out ${iconset_dir}/icon_32x32@2x.png >/dev/null 2>&1 + sips -z 128 128 ${image_dir}/App_icon1024.png --out ${iconset_dir}/icon_128x128.png >/dev/null 2>&1 + sips -z 256 256 ${image_dir}/App_icon1024.png --out ${iconset_dir}/icon_128x128@2x.png >/dev/null 2>&1 + sips -z 256 256 ${image_dir}/App_icon1024.png --out ${iconset_dir}/icon_256x256.png >/dev/null 2>&1 + sips -z 512 512 ${image_dir}/App_icon1024.png --out ${iconset_dir}/icon_256x256@2x.png >/dev/null 2>&1 + sips -z 512 512 ${image_dir}/App_icon1024.png --out ${iconset_dir}/icon_512x512.png >/dev/null 2>&1 + cp ${image_dir}/App_icon1024.png ${iconset_dir}/icon_512x512@2x.png + iconutil -c icns -o ${tmp_dir}/${APPNAME}.icns ${iconset_dir} + cp ${tmp_dir}/${APPNAME}.icns ${APPBUNDLEICON}/ + rm -r ${iconset_dir} + rm ${tmp_dir}/${APPNAME}.icns + # + # Update and copy in "control" files + # + sed -e "s/--VERSION_TAG--/${medley_release}.${maiko_release}.0/g" \ + < app/Info.plist \ + > ${APPBUNDLECONTENTS}/Info.plist + cp app/PkgInfo ${APPBUNDLECONTENTS}/ +fi #INCLUDE_APP + +# +# Untar the maiko and medley releases into the bundle +# +il_dir=${APPBUNDLE}/Contents/MacOS +mkdir -p ${il_dir} +tar -x -z -C ${il_dir} \ + -f "${tarball_dir}/maiko-${maiko_release}-darwin.universal.tgz" +tar -x -z -C ${il_dir} \ + -f "${tarball_dir}/medley-${medley_release}-runtime.tgz" +tar -x -z -C ${il_dir} \ + -f "${tarball_dir}/medley-${medley_release}-loadups.tgz" +tar -x -z -C ${il_dir} \ + -f "${tarball_dir}/notecards.tgz" +# +# Handle run_medley needing separate directories for each arch +# +pushd ${il_dir}/maiko >/dev/null 2>&1 +ln -s darwin.universal darwin.aarch64 +ln -s darwin.universal darwin.x86_64 +popd >/dev/null 2>&1 +# +# Add file icon to medley.command +# +if [ -z "$(which fileicon)" ]; +then + brew install fileicon +fi +fileicon set ${il_dir}/medley/scripts/medley/medley.command ${image_dir}/Command_icon128.png +# +# Also create the zip file of il_dir for distribution +# +pushd ${il_dir} >/dev/null 2>&1 +filename="$(echo ${ARTIFACTS_FILENAME_TEMPLATE} | sed -e "s#@@PLATFORM@@#macos#" -e "s#@@ARCH@@#universal#" -e "s#@@MEDLEY.RELEASE@@#${medley_release}#" -e "s#@@MAIKO.RELEASE@@#${maiko_release}#" )" +zip -r -6 -y -q ${RESULTS_DIR}/${filename}.zip . +popd >/dev/null 2>&1 + +###################################################################################################### +###################################################################################################### diff --git a/installers/macos/build_artifacts.sh b/installers/macos/build_artifacts.sh new file mode 100755 index 00000000..700642e6 --- /dev/null +++ b/installers/macos/build_artifacts.sh @@ -0,0 +1,66 @@ +#!/bin/bash +############################################################################### +# +# build_artifacts.sh: build the artifacts for installing Medley Interlisp on +# MacOS. Basically just calls build_app.sh and build_dmg.sh. +# based on Medley.app built by build_app.sh +# +# 2023-03-03 Frank Halasz +# +# Copyright 2023 by Interlisp.org +# +############################################################################### + +# +# Figure out what directory this script is being executed from +# +get_abs_filename() { + # $1 : relative filename + echo "$(cd "$(dirname "$1")" && pwd)/$(basename "$1")" +} + +get_script_dir() { + + # call this with ${BASH_SOURCE[0]:-$0} as its (only) parameter + + # set -x + + local SCRIPT_PATH="$( get_abs_filename "$1" )"; + + pushd . > '/dev/null'; + + while [ -h "$SCRIPT_PATH" ]; + do + cd "$( dirname -- "$SCRIPT_PATH"; )"; + SCRIPT_PATH="$( readlink -f -- "$SCRIPT_PATH"; )"; + done + + cd "$( dirname -- "$SCRIPT_PATH"; )" > '/dev/null'; + SCRIPT_PATH="$( pwd; )"; + + popd > '/dev/null'; + + # set +x + + echo "${SCRIPT_PATH}" +} + +SCRIPTDIR=$(get_script_dir "${BASH_SOURCE[0]:-$0}") + +# +# cd to the dir we are executing from and call +# build_app.sh and the build_dmg.sh +# +cd ${SCRIPTDIR} +t="" +c="" +if [[ "$1" = "-t" || "$2" = "-t" ]]; then t="-t"; fi +if [[ "$1" = "-c" || "$2" = "-c" ]]; then c="-c"; fi +./build_app.sh "${t}" 2>&1 +# 2023-07-20 Not building dmg as yet, just using this to build zip file +# while we finish work around dmg +# ./build_dmg.sh "${c}" + + + +############################################################################### diff --git a/installers/macos/build_dmg.sh b/installers/macos/build_dmg.sh new file mode 100755 index 00000000..531aca0e --- /dev/null +++ b/installers/macos/build_dmg.sh @@ -0,0 +1,185 @@ +#!/bin/bash +############################################################################### +# +# build_dmg.sh: build dmg for installing Medley Interlisp on MacOS +# based on Medley.app built by build_app.sh +# +# 2023-03-03 Frank Halasz +# +# Copyright 2023 by Interlisp.org +# +# Based on code found at: +# http://stackoverflow.com/questions/96882/how-do-i-create-a-nice-looking-dmg-for-mac-os-x-using-command-line-tools +# +############################################################################### + +#set -o verbose #echo onset +o verbose #echo off + +# template for artifacts file names should be passed down in the ENV variable: ARTIFACTS_FILENAME_TEMPLATE +if [ -z "${ARTIFACTS_FILENAME_TEMPLATE}" ]; +then + ARTIFACTS_FILENAME_TEMPLATE="medley-full-@@PLATFORM@@-@@ARCH@@-@@MEDLEY.RELEASE@@_@@MAIKO.RELEASE@@" +fi + +# +# Set Parameters +# +APP_NAME="Medley.app" +VOL_NAME="Medley_Install" +BG_NAME=Install_Message.png +WIN_WIDTH=700 +WIN_HEIGHT=850 + +# +# Set pathnames +# +CWD=$(pwd) +TMP_DIR=${CWD}/tmp +RESULTS_DIR=${CWD}/artifacts +APP_PATH=${RESULTS_DIR}/${APP_NAME} +DMG_PATH=${RESULTS_DIR}/${VOL_NAME} +SRC_DIR=${TMP_DIR}/dmg_src +IMAGES_DIR=${CWD}/images +SCRIPTS_DIR=${CWD}/scripts + +# +# Make sure we are in the right directory +# +if [ ! -e ${APP_PATH} ]; +then + echo "Can't find the app: ${APP_NAME}." + echo "Incorrect cwd? Should be in medley/installers/macos." + echo "Or build_app.sh not yet run?" + echo "Exiting" + exit 1 +fi + +# +# Copy over files from build app etc to dmg proto-directory +# +if [ ! "$1" = "-c" ] +then + # + # Cleanup anything leftover from last run + # + rm -rf ${SRC_DIR} + mkdir -p ${SRC_DIR} + + # + # Assemble source directory for DMG + # + #ditto ${APP_PATH} ${SRC_DIR}/${APP_NAME} + mv ${APP_PATH} ${SRC_DIR}/${APP_NAME} + SetFile -a B ${SRC_DIR}/${APP_NAME} + ditto ${SCRIPTS_DIR}/medley_add2path ${SRC_DIR}/medley_add2path + ditto ${IMAGES_DIR}/${BG_NAME} ${SRC_DIR}/.background/${BG_NAME} +fi + +# +# Create initial dmg image +# +if [ -e "/Volumes/${VOL_NAME}" ]; +then + hdiutil detach /Volumes/${VOL_NAME} +fi +rm -f ${DMG_PATH}.temp.dmg +hdiutil create -srcfolder ${SRC_DIR} -volname ${VOL_NAME} -fs HFS+ \ + -fsargs "-c c=64,a=16,e=16" -format UDRW ${DMG_PATH}.temp.dmg +device=$(\ + hdiutil attach -readwrite -noverify -noautoopen "${DMG_PATH}".temp.dmg \ + | egrep '^/dev/' | sed 1q | awk '{print $1}' \ + ) + +# +# cd to the new dmg +# +pushd /Volumes/${VOL_NAME} >/dev/null 2>&1 + +# +# Add symbolic link for medley script and icon for addpath +# +ln -s Medley.app/Contents/MacOS/medley/scripts/medley/medley.command medley +if [ -z "$(which fileicon)" ]; +then + brew install fileicon +fi +fileicon set medley_add2path ${IMAGES_DIR}/A2P_icon128.png + +# +# Dress up the appearance using Applescript +# +ROW1=375 +ROW2=650 +COL1=139 +COL2=350 +COL3=561 +osascript </dev/null 2>&1 + +# +# Detach the tmp dmg and convert it to final (compressed, ro) dmg +# +hdiutil detach ${device} +sync +rm -f ${DMG_PATH}.dmg +hdiutil convert "${DMG_PATH}".temp.dmg -format UDZO -imagekey zlib-level=6 -o ${DMG_PATH}.dmg +rm -rf "${DMG_PATH}".temp.dmg + +# +# Extract version info from app Info.plist & rename dmg using version +# +sed_script='{/CFBundleVersion/!d;N;s/^.*\(.*\)<\/string>/\1/;s/.0$//;s/\./_/;p;}' +version=$(sed -ne "${sed_script}" ${SRC_DIR}/${APP_NAME}/Contents/Info.plist) +DMG_NAME="$(echo ${ARTIFACTS_FILENAME_TEMPLATE} | sed -e 's#@@PLATFORM@@#macos#' -e 's#@@ARCH@@#$universal#' -e 's#@@MEDLEY.RELEASE@@_@@MAIKO.RELEASE@@#${version}#' )" +mv ${DMG_PATH}.dmg ${RESULTS_DIR}/${DMG_NAME}.dmg + +# +# Done +# +echo "DMG build completed." + +############################################################################### +############################################################################### + diff --git a/installers/macos/images/A2P_icon.svg b/installers/macos/images/A2P_icon.svg new file mode 100644 index 00000000..002a759a --- /dev/null +++ b/installers/macos/images/A2P_icon.svg @@ -0,0 +1,209 @@ + + + + Medley + + + + + + + + + + + + add2path + + + + + + + + + + + + + + diff --git a/installers/macos/images/A2P_icon128.png b/installers/macos/images/A2P_icon128.png new file mode 100644 index 0000000000000000000000000000000000000000..a82b12ae957094d8ca4cea6a6d280791462693ee GIT binary patch literal 6147 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 literal 0 HcmV?d00001 diff --git a/installers/macos/images/A2P_icon256.png b/installers/macos/images/A2P_icon256.png new file mode 100644 index 0000000000000000000000000000000000000000..0ff942f9bc308a2cb8ba698b4cee3b24b259a99d GIT binary patch literal 11610 zcmc(lWl)x3)aP$HB&4JS1SAA00YO^2rMtT%rBfOy>2B#xk?w9O>5xXcb1&ZAot>SX zcjnzMyB{3n;hy`s;#}wa&+mVQ$jOSKqY|M)5QHuvF024SFyOy15Hce8p=DoS0)C*_ zimN+-57(dm!4xRAyapcDbu%M;w<%J3p0-M$9oDpmyh1$yNymA%#m96e<$76#Z-VTq%! zo!WFN^gdRGY74{vxLgXje-KbHF?IekKyk{q_18Zw?bqeOK+^(W(?b0#K4kLLA6W;m z&jlxgU?K9CqA)(sF>)XQ4asT z#%cl4t!-~38yXrq;^!#*`SZu+_M)^Q^y8#Itk1VG84*4tTuAB1M?XYnHZ~<^7P`2U zl+fT{WT>rp3^_4b$+I*!Jq>+#ex~rm0|fz!`}5O=%o@W4Qcj+yy+v)ef=bXULg zsWw*sxGCgHe;l{=@315LJ190bc1_zzI&O;?KZD}x0~Z%jR#ujMuA#m@jFgm=F<$8N zN(&=MTx!%mbe^C#UVp7C#9p`2<=DV#u0|pxH%fNBCtSW*rIfC}_{R@;OftTb=%!#7 z@Z#s!{s94njmST~O`;1?H%hlYk$^tyavLP1zeOjSZh zxQU1iqM)S2A|wO@_jqw}uo&9zhXnot)`OXarSLyq%?FuTSO_XADlT?^mz0-}Y6unJ z%R<>#_XV&sFyc9I%R8&-I><|lCCb1#= zlar{pI7KQ~JY3w&%uE6Eot^D%S_TG%p80uVO0ftfi8-64ruJ`m^h(iAGMUrVKI!SC zbG4TFBNXEQhEq7iWo1>ISuB2-3@7Vf9j($yaC361QSD6QTA)J+2nh9#d+}VM0?7H} z!mk85rAyf%Zf@>WK2MD_k?(U8xl(qk9SDy2e$R6iETOTfsesVXP_EEdwMBDG8Q+Wk zdwBk@qg2>7HMZF39LMD@kDW|2`WY80%Cej(TLr_}Wkg(sEMUPwRDvrA%#%6kxOAWv z_w+JQAZj?fCW0yqx>1J`S%k_whKGkY8X`PeXdxw`K*XB@L&G=c*LbS@$%%<=)6*(= z-4yK45qyX?N7A@wo85mlgvu9obO<`)fAxVC2w&gYLgMG=2P5{NriJKeuS;hJV)VIelU zEI0S;o<#T;Ei?&fXe67hsp)Q93yaVod)58?859!}GjRI4NCZYeG>=-8bFErF*L8ME zc^KoDKXMNAit_VkhI&Wq91v#NxNJDz|BrNJ?+7a@+`T&5x{>ku1NL)syyCdM) zhOC%Qj##AV?ZsKFn&4klh{aA~wsNbYBgxdrNN>LGGip91y{V}w$YegrAbgWMP9Ybb z^mhaDRCJ6fRQ|N&5XcC9TT-jgSgW@;o5iF!p|O17-@isL`AS?`5y;s?I$-op{`OB< zJEqc-lau2@v1Z$2S!0uvPpLy$L!;<`Ldmk`g->5Dh_*$MSCRrSKH|e8(?mF8nBbAW z)0w3I;%LKSU|vyD!W|zUzta}-KK3z@A=cZPrUKh6Pa%uwbA7sH_;7a(ekHdM!}$tQ zuk19`gm^BTqH^-t)L1Vw|L?@}Y`#=9$kWZSqdw|>N*hgZGU91Q|JV7sr@t2ZrqS%m z6p>c{`r^Kmk9fQ)>Eu#kf1UkV<*@|Ca^vx8LA`hTAV=|VnwM)@Ir@0?k;?dXK^{i{!Q+#*yjyaw@^@;mx=JhBMsL%3 zymM;Kt~~heJ|WRD@CpvdLvmRBR7(}kq uHCFBf*c9l6H<0})>e0obd;8u|uvz;k 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 + + + Medley + + + + + + + + + + + + app + + + + + + + + + + + + + + diff --git a/installers/macos/images/App_icon1024.png b/installers/macos/images/App_icon1024.png new file mode 100644 index 0000000000000000000000000000000000000000..fd3e4dd5ee62a7cf6c3a8bad885261e6333c4916 GIT binary patch literal 37270 zcmeFZcTm&YyDlDNi`#;1MFFW>X(CN}2NeMU0R`y-O6XOj*RXALP`dPvH0gvIP)ejr z4GbIj*pFc_`+ zgZsKL*dO56KVW~-fF}eS|7-Ac_QeBZcNpwU4D_J#eZk5D{&>wp#mGa?)yBj7`Ach< zx3{;Dy^Ete{P_!OA=j6-sax{QFxcNP_4{|9_@r&jc#n=QepDi#U)2h4i7XKPbt5#{P(~LRaZn50xOm@^!t1i%rV5bfieGG%eKgN7EgQq$R)aAS!8y$^b#OS6= zI^Xg;1?%Z<0y!7)EqFK<%gD>2Kp8lqWvhu&Z^n>}%%{bo73o)x< zSN-uV-b3(;w+;>tId`dXXMPEvpG{`yPn7_Mg7tLh1i+p}u)b)c8fy04%|ZWwo76h! zH}4H=0$tuY4W(1lg~cQbA-_LhS$|xl0_EaAmNyF${@-5uO!elKgww?BXt}L=VDWwv zq>GvSb_YFJ6n5wA71*PS{dEj_p*s$!3t1nfm9C#?~CUBE;b?q1BIyNS&fkcvy2OE=>7;}GMZy1cb;&&PO9~mnP z$nf6}|NpV$|KDDs4QB^O>G`$8FP3W`$DmjM{>i43HROPAa<(6cHr zZ6WoGF|Cngk{{6MqeUmk2><2+|C?G6zv%})eM@jUM(xoUli#b>O}KzRb5>gL!^8L4Ln+!POEWzPmq z7}Nu+ECweW2WKMKbGcX?9O^#7?67stPu)7N*51AZyR-VAi;C}AD^##7lm3rlyh5!f zJHK;ivyU6({MSLUtVoy*B5u|%CYnOVc^2`%T-=^g|2ca0Jfl!#7(Fk8f@*s0voEi5 z)PVW#pMzy-GbsfHL~XL6e^IY8o?mg zBma12xZ-&`SRyMD$n{InHqA>n&235@dVjK*H<^JECN=8=uW`hD?xUx=v;SWc_Wzc- z@0<(t_l_{79H&A>JviL@|6*JZ-1Cl%!tTcTO1F`&9P}s862r2|91B7hi)+VdkzTJn zZLKqM#w#M-d$s{mbMQI6!t=o+gKPBb7}uMAk>UFh7AH4?wj(UADA0tFeuXGSI(}{_ z_}5$E=b;$c z8TNl}Gzg9*{5W1OkI9XeEnX3MR*gF9ckOZ?R4{~c*PR4i*!_-eGzW)mhOf;Kyv=6j zMLR7NwXi25z^IRS_g98EnI#;aK`nC z$XzUZSV2V_Pu!Wm3C=Pe@tA4xKzpMEJ zpy6C9D$EEsb!o_75sCe%80ZH+54)3|1zxdP`JOG}vGV=5I&Ve(=h7vV-QF93BABDK z?hI1O_-4)g#or3Lszn9!>`Sny7a)^Z03HJ+DC_J0a@>R1{J$Z2|6eS|?@oeG%YUnr zNzBXg`e2|oQfxk$L=aqPaIXMSa#)_~5}lHgV&aQB;AN%ftyQWs$T%PB^RqK)ewK*l z?OvPs885x_ONXm_O1Hd4k@wvNmXBQP-*s58*rxmX#R>!y0QC3lq1RDl!JPc+x|iWU zFnzS$n`vhH&3*aV4yWF{9IiEcJOeL>I|)Apa~RSaluz2&Z!+GssWpc+i_VW(?IPB4 zcCWzh7z4Y%|MvY7VSEZXBEu}dkpboKPY&l`!S@*io?eOL@Xc8fS<3_BGD*&%Adme0 z;+uCDIP~}a^c;Q@re_J@5mY@NjRB*arM;#oE9q20`*-bK)3Enqr(t*QffOIs z9U~9Wf@e>o=lcBCV>ncBAg}ar#{q-s10Lr6#P>^eRC!iM zO0YYCY6|XP5Hz_QS0HZyR{2^yRstVgIrDoJZO~rC|Kkj^k3_i!lo~aFgaL!C{Q)+< zcA<%Aj)h%j5?}b&(Zqm|*3Ve(tR@OuT!MFL3jqHQmQ@Dg^VCtr+jM**!uL}oexJt{ zpn;waXIQ@5F%ZB62q0?Qe7Nc3vy-b5^B5FPfBT2Y(!Z1M+7)Q8Nty~zpcpm~b;7@w zRRPPYx=>HZCQ_(jd4-@s$nA{4MThVx=1Hst#T? zdB)O~cM;%y?=QOO%rp9?hc0hVFkIR@-b(RAZ zwg<8Lj0q+%k1ZdQe|wkO3bx5KHjP^|v8yA5Lp@d>BQLkvnM@vzj1@iJm*E`}2U5qK zg8ks!+XylccbUGao(L4}^u1yjMRG+F*xmYuLU>bX0B8e&74XKOtS&0rHczJ6bz+9l z3A{DVYV2yNq;vQeWjr6>e6ylLj`^sjIKX5xfRUIuMe_63iLLfn6~)44m$!=sI~>ag z!TaQUDO51U*i*1)=hH?u`|PIj)MEv(Ff#J4vIg;hLLb7)6v7&CC&wNfRtOxH!EPwW z*JCSwDgNjuVcM0Y4S}t9gI{11Y0Qfx2l{jU7Esf@!Sl;Sxs3`48$xwYVYg4L(qnZP zboPG)4sNmoJz2aQ7|!pV`w~*X#eb!EvOSI?!gm*Ui*J6~-1c9`ETKQ$R%1UB&QA61 z4)QZwu5Wcg<;$_P*lOUtWw6lDyULn!B+4N?CNdDanPA5Z3vTRZ07Y-K)P7{e&maUc z#}rM)b7if_`ofy4S4phoGq8$I;I16XIQNkmn%mFk7PySZ9H!rdz<=g+nvxEk>n3>y zHtj(uwy{q$HZ5kUXcsd% z?(QC6mbR(d^*N9^GTFsU+7-pD62Z`)tFmh| z1Q3B8#sy&bn3>$ix$jO>gg~R&8l>DTNsRK@?SCucy>((#VdqwAffPza6~;S`IADRz zRcf3j@V&r!jh+?! z9;M0z%3=%Kyzm`PosPXEn~qY94SKzNFigS`1VR^ zV%~iE{39C{DVIq5L9LjuIQFO_9Yy-V*29-jMFHn*M-MoF;AQn`3v&B)mxz9>#>za? z=oLvin3N-Zw{jfH;TBn}ED|~Tz&n?pWZPAWnGMC*wq62&9=p~@LpvL|Imr)o33iCD zB5pfj=uROyeDaHzpV&cGEBlV0-cmmooUfVGd3c6bC27DmUhzo+lP7+{sKH_1KnVq? zyP?euF?#Ke-<6?d-g2%zrX!Cp2CXSP7^#&i$sGt)U7x^%H0Y6h+wJAab~z<7G!&fk z5~#vLvS~rOdn@BIz!n*MzV0<3BI*g`Z4sxA6(+)u1;7~?$4+~$kE3gr&4ChHn5b!@ zLR~F(=cQNLNIAqwTh$ns^!a*t^n)Gw1$bwVzR22a<@OI{Jxi!2FB;nLAfjnm9Oh~< z%TS64+osbF$5D>PLqjK!Gv;oVM0oDVHC{Dj^&oEWvH9G#P;D+b_3Zn5e+|C?5cefJQ6~A571=yp(TJNg7aHWYuF3Eils?t}##(Le z&uPBi5u3jMEML6gp{cqA-gtpqhQ)<$(|Mmr+&48Z* z^dS49f7s2I+I!%~WfUioYM^d7j5%F1YO!%<^*Jn3w`ipt6D>N9NdDZtB@E>QDQqDe z7(R8X7rI0^yziSF{X>2Bv27%g^W+e%6fI=d2pS(J19UVS{N!+3CFbr8S{BJr^JR}P zQiY$S=EEp7K?5JE7cyUh3oo zxgCWd-g`>Xyz42A;{xl?%P!1~uRNnfSre$C5v zY9WsO%LHk4tT(4T-F9*K$oA+>CX1$HV)sF{VYRv*d(1&0AyiYSRn(^W*kouv;FF=v zKzIg8D5AIg(9etGW@s|0Yr1}eLc&s-58_{j+FdgEY{Di*TE)9fRI)(_G8`VOUGxC? zstdJwppj^(r$Bekn*01u`+RcTKs2%I;Y~kQhc94>-!^9T z*Tpd1KHU0LRJ4W3sCC5rRuJnLN>e3qe}8Q(B0~6K)43l5RPAv~`i)pTbBe(F+%A!; z7ZUu=+2aH4-G4klt+m`Z42iYUFTUQcmb7=>BV-d9F`_La^7FnYrh3FYGTMxYmTKM2 zHLA3<9-8N>efBe_eq+~A1(U&;xY+SaLxTK8eTcm0K6lXcj;A#{Te6vSFudabWqA(h z6RB_bmo8gI5E%1(&$kFzCQ8M7U^Th@cFRt?buSvKX6`Dn0O!@)lcw~lEEClIUQ$4V z!ziqc;5IhrHm&w@uCla6nt4Z$XxnFUm81bw!Yy4y66xN${JF!GL6=!Hz)C#^4=|&+ z-TURS`=$-_)W?+L{=yw^?GNSR^F@Hm ztHkKVf_m~>b$c7$MP;m>55W*1fYO+WE=nJW0>c)AJ!xxCT=H4BlcE{;p#tHmLJtLE zzvm-Ih8Y&9X>jS{<+@R<3J?_GRX13>QScNJbHXOoIY+15MZIc^U7}#^;DJlgk*iRs zx}JvIw<<(yMp!{nD%7_y1|4f|&u5Yf){>@OilBK}ekRf6sqYwJZ2{S%nIsf3OA?O3 zk$)x@pNv!59|jzLSQ*`n+g>s~AI|>v4^SMKmxFf1ws$Qk*Ck!1jrOE#Ejz;#+=lWk zqDxu>%{raRH3FG_q*I4riZJPP?&x6g5Q@tEr-$9M-Bms6psUG2g}G20p#oGQGjH>$ z8{}UT_pnlTy+D|TBc;g`ob=jHkPrx$-i~BXhW^q;tei}jf%unV-H&M%8F<=RJraevR*3{&Yu5>PRma~ z8$XTIK9OlY>FHZ}IdFQrr_UIi!(hZB<&v5I(<|p01%>>s)O`hcDAygiJ0B&p3w?5) zBkc-X;~xLXV7B^v*HEi#Ox{QDi>25Qs*6kk-c@68M*S~85qN-s<3E8(<4~b@iZhH5 z8I(2POr5+x#Uip_WUJY8Xf-D#;n@k+o}cSQJ@qssCiHGdEvXh(6VU*%T~X*U@IOlU zI8;X97NPXZqpl&WmrA86vBINArjOQA{!!iv>m}nbYtw@zWfDNsLk+|u5%BzWz-{}q zz0#YD?2@+tNtYyE9XlOln=(R4m9)Pc=$D?(RU!%6-peaVFId{@w>=$M+S;yrC)LFK z0t`k}`$Yw55aaDlu5IgcvjpAd+Go$xX4dD58+h<7OZ^D`fz{nrC&iQ2^$+Nb$npSE zN)Gzj`5B29J^@SN<%WH;1dZ*kG~b~H?9p3>_h|OO`vG(BspA#}%^C%^IEc@xnl(g8 z`Pa7hss{lL^1+9w(jWnb4L=a;py`k%mRRaDhu$B5^>&Cft<%}UNj9Dc z`W2z*>jGsauHGj1wqGklW$r-q?LoN^uHMG_@I;E*O<2|(Yv983?a5vtKrz(a%QT;v zTW%#Qcgt|%*;oMPjeyEkaH>kfN}^_l<>{f^5!39_-*=zgIke4PrKT?z{5E$k%jJN(Z=d zvl@q5=b9-mtlfC2dZ~GfB$Rdd4L(O=YzM;_fy5x&$`r^STS19?VfSImj?d1+;ReSa zzYeFyaOL}PKcW6hjh!4O{j;7zoEoWkoJ;ZDGzJhFfIc1|@iL<2;GyqAn2A{m1*D}M z{847a8T5r{NoNzx)GliMmCivlrGBf+ieG%I1rY!tHT}SL(qoXWn7p}VaapW}w-ZxO z!T$b$YH8x-gU$Nd`pVxXXRplG>b)uomjH+@mK`yADWr=`tkV?N+V|f&T6H^GE-$X7 zqX6K{0`*DYqn+KnY!oHe8l^Q6=&wy%ReG!*KY}RhnJpr==8=dOx)(sGbZI3&Il!So z1a_UyJhqHvJ&p+%8g)4t!^8U~#Cabh;(;{*RvUog>{j4PfX?MGz&yzs1GKoLWa<)H6R3EFei zf%sd`bpxm;?)-9QlhR6_T(4g4fN&F_iQwS#)|9}$w0*y)9+L?o0Y3zXDxPl!O;5Rn zY|fX8>BKxHL~F((Z8oQvWann<_hQNFJGZ_7tN}Hau~uf^TfL#KLfydGjRtn-MhJ)3 ziz;q}@;giv7N(&A4$ z(oRvE1le_7k1?IG{mks;K`k~$-0^Wzjx%;ANLg}msOV}-YXBg-=Fv(-t;tMV;wH9> z?(>mq^WKK?HU>wz;pe5~7@>61Y605MT++50n$YU6FHc!`Q%}OTM(AnF3T<~h2{*Lu zkB$&(sxr9fAb^ge51=oBmHu3 zqFBl7Xw^1T*uI+}iFKk6q$l|rG(n&V@_}YWe{JK;0Gjs^|7iw377Q%BGoS}Q#)0|mlu%utDAgq?#0 zcQ|#m8>uV~V%{%(gnO%r7|rwo%TYE_1UD!%XJZUFjsQGQRh8o4kQzHfZU{w;omo!& zI3241#vDd<%Tt9j8QblSs7r%7Y>XD99ot;6y0!mjC0u~%$ff4}&0dsIjrfD9Vd|CdQP&0W?nB^qn1RaV+!+7+yJ?ZAC~h zi+}peT^Ue;KS9%SXUX%V~F7S*kjVRvu)#?qA&$5SEq_}ih zMXSRVE*X`H8hgD9eA|1Jpk>(;;Tv<6ycy9r(l*|@S80ENey%b^wQE_Z_0#vjNGMZW zXxJ6rF3BWi36xNQYRYK%^r$SnLFQ+XZAJvt*;iR%N(_ZjUW?0?8!J?mI7R=YMH$71 z?eA#ku!a`bazk(o{u?OAGDRtS1@YA(sG&|0Y@NSW*a4@DiqsTd<-j`WO{>K!c;O_r z*iVqZ2Tr{X!TKeJ=p@wfrioJhe(ZT7Pk$5VP`0m1)8;_7`pXn?mo%p_TW3I@aV4&u z`TEJf#G9opH%93y07^|`F|OaUg3_?N8*k|K3n6D_MD5_MkG`9fo3|WpAyJn(LuQ$w z!|j}uJ%;{<$ZWXTg_EifC{be1JbrkxMTgMLXp%sY%Q)f}agNYo2Bl`0Fc!oz6QzKS z7HtQF(?fQp8`{!apT62WTQ4(dkwqPjxh5@EG(#+4kWasq)Zx(|2o$^*HSH+_!e64+8kk)$$I|Sv*WMeABQy8yQBY6w6hj zMi|id7kdSYK&2ue?*k4kLPm778xfTzq=hcZt=_7A)hOn!e#D_lz;dcZ(YKKZI#S17 z5i;s-x4}p=##8CYv(IP0cAXr14M%p{b)AEf%Xe3jQXj;4&2Os7Vd8 zFv+*sg4q)B8Z~p9$Uei{ZwC6d0Q^)YPyfly%ndB(>hsUkXK-dB*iUs`o7BTsm>~b~ zkk1WRR*eTWIP1dkfkySYEM_DX;DsuE0MaT83W)29%2h)SoaHUnRyy1kj?27=`}DZI zetsO6wBJ?|4<(6rv-_BZLV*}CwRsr0HktR))B$h|+g~GudHbh9F9aNmBoFcbc@0J4 zP7{B-9PO4ry=ugbLd*!q;tgGg>)kFiZ|dmpdS^Lf$3gw;A9BGf#4cTAb904=7q%I6HME;LbD8ENt#Eio)#NW02!(3M&9$#$3Z)db78!hVNf+qF>Vba9jH@MOZ=(7LJ_GL(+Xi8C;iE-+Q-_Z zta-E#j-W)GW*YUUcM2^G#zH#ib{B=8GN`e+*;O^4rRPmrOnggM^C`2lC)@OUe>6E(^raGs02_nBeyAsXsrt&4+;bZ47@xcDHkR>u1R z6FW3zOY{bL0DZI!%BLaL<#5P52RJdfiGzTe&TeGK$;y;#mlw8HJ;gZw9W6_TFv1V0 z6H;s$lJ;RD;qd{^HPZ^Oc7t3yERnY({3<{4cpK}CDR9s(6i$K~vei{Aq|vA3)!n#7{a5qRGB;L(=CE7L z%%F|ZOeACvy4$9>X3ct%YH`JD`fUDNm8JndcQe7&1~L{${&>*762{A_$D63piYemd z$lUvD3>uIal#ezYzCv|ZjRSt?^}GB@JqwrDAyFD$sk%K%?KkxCIv0a)eJ{jJs?X+? z8#Ub8Lj3sh2YtfekL>((GQwrB8eAKr0gQ|y=%pT#uWzeif~t$lZynz@wAg=ZWgNlS z%9e}Q@t^-nR3Mz}`GEGLdq-RTXL4~<|IgP?NwxfIeNr7`PNZX6b)5$>p@&02dU{O? z4xeh6FQ;h@5c=FdZgkwh@}z-H_Wl$}twitT;2MN&&tmj__pRoU=%MY%HN;F5H2fYL zklSS9%}idJo!6M9sj%$q0i%nv+}3FrUi=~jj#gp?gW@Cs{6ucdrwRX`nw}d&Y8~pE zF<{Mg=hv~;f$srBoGFf{m<2r^Zq9+)zkq|`^AYTv{)FgjnH#}1p@=}ejF%0*+%jMk z6q})}3kXDl1DH$ft$odm_K0XKjuFKa&uB)j=fNxi}yBKc#N^iy=q;ky7ifA$5^TQgl5`j&%z2R1O=qOKHgSn z45ZLG@*63IjjG+~p)yUhm2bkzwE0YqZ?$-@v6R!Nux24{Ga11( zZV)9kGhQoYhK7%e^Ktt)iWrl6L&h^{Zd3~~F#TnVGpG9a-- zTL@DM#IqY?0(U_Y zxOnp+njVf$s*9-!3OaOvlj4^5i{tz$xDqgsR42d_9fh~*&(iVsuaB&6 z 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 literal 0 HcmV?d00001 diff --git a/installers/macos/images/App_icon512.png b/installers/macos/images/App_icon512.png new file mode 100644 index 0000000000000000000000000000000000000000..e8beafa13917cd88fb0930f4650d9cbf5b6c3ab0 GIT binary patch literal 18314 zcmeIacUY6#`ZgFrVXG7yA|Rk!5v7QNfJn6<(vd14O{F*KHGr}OK@kM$O{6Cjr3C^3 z6afJtw1Ct|CxIliP!f{N%0B1J{LY+f<~K9neE)s>x{U6SyzhF~ddmIW&;1Z%pr^rk zg#QQx0^!traL*6|VFCYSf&9S+{@My0rhvZ=KYw8E1A(x1GXETSm_4-s-sJODf8=ZA z>EIh+=WP!O2ne|9?BVM3)b6?cRZnlnOrjD$1ac0ddGEGyU>0G@-uBcIeS2N}@QX9& z4+cniwC6o~Kg;F*{z%PmY3jCd>41@#@kgygUaQHW-_RAf6P`Kx zS2rd-YtA)W(jjK=J^V(jMNrzaRTKV%Ky1b7ro3P^q4D4)g7Y|d{d}JJ1akMlOKa30 z;PuzB1K?Evd>UeV_aJz6dktRx*N6WHc4Of)5^_#Cd|%cCKI&0}C-mNkRdu{U ztLQ-@%GV~i{`dPtL8=nOz07Ju+xg)=Yw0D+Nu?Ep350&NLvPhb{!*((|L*sZ;nI*Q z_UYcLgt^Xq44h;O@A*8uyFMoywjZdSBPbvMR|?vAwBcqWZd{Vkohs$&$7k(D7?&-# zMD&4O>H(%&;7!?b&Q^hr|GjI#!~SKv-;b%CULuhyy%)O8t?t*&KELU^_WL&27f9uw zkY`?8(RZmkBm|PkY z>cgA{KAEN-c=S#I+~%Ji@#K$lZ#FkKjRFJfG4{{IuUxr;^u;A&>>&|m$01eq{rv{* z9UT^60p9Dg>gxCIJ+fkh1oGVdKQ8b;!=((k;71`5KYtgFPA9jt!^2Y;$o!pXPH6~hm#y#ezE6*Cylx&Vx{dzz+>QImUU%^FllCAo~ZX` zD~^H_g2;c-h17@c#lAZmSB2z=_qloYR_N|$jQvfX6DOYd9fm|q{JI2eRR$HZlhP7C zBEU1%7*JW~Hul7i@5f6Jh|b}5u;FI5wjVL}^{bm`RZ&Q*q`4H41rotg?Z>Sa7#LWT ztCos+jP%t6X9sQpi8x@%9-*Cjb-<4e@>wJbtoPr7o0~HG$6zu(c)gvs{GX1XLS2<% z+R2&Eevr$iWobg8Yrt-Pm@fWI2ip`O5%C{R_}>Q0A0vtfSSl{tG&k+<@0VR|o12}T zExURk;?N(E2+gIw>}upe$l96zSX>$_B<+T02k8hW=lVD;fHYS5RUhTuQ~Tq`gWg<5a?Xd7cjN0t!kKZ%TZVKL0cORaGd`ZxUaKA zethrCRjnMab+u%gCyn9<*M>+RVu2*YSha*%S=PCI0oynBUrpo59}sI^LBaADtn3z6 zQO=_kR(~)277L{5s+^puDr3JII6*K^ck+Nu3)Iz*Pe^7P5tE@z%C)TUBTkw}vT;_G z{JG>k|C?}Z`u-Oi4gM?r+=Z+m z_xCQy2HJ*$v-teD!Q0%51ri9J%i8Q*xC%gOk=_fj zQo?(xsaLJ^{3Neme<-S-Q}dA@+mkGw`salU~*tQu1Z|^GR>ZPyu zutv1aB(%+Z23rqtd-Wfd*0TihT^Z56aR2RR$_^i$p(|=&>*I@ z9yu-HRh*w|@3N1(Yb1U4?8v|J{FFd1r9KqlMmPR|&gM?iMQh(b!D$%5v!4 zn^+j-4Bs&^sZ8;sXYG#WwRPT@Z79swa9~aK?*c-d`7=@AOZxn3*sEC5;hH{qWalPx4(7|oQCaszC1#{F`UCRAut+B}$vOJKX-V_E zqr6X;N3U}pfRmV5l~S?*0wjivWjcF8@-axlf==&WZIHt;F&VO>23ydW#<+emTK9b?UHsYeLnNeWwat2#Fj_z&K^L9DUUg4mdY&R+5&8n za&vRzVbXQKNrlMy#jBnW+e7he5el2U&LA5#Y-O0hO`S0?lN^b*lni;#97&c|t2hBC z+y+Lkb1z;ayPpzgY0}~$DQvo!HL$1}78aK753&h!Thp~-X4Nqtt=-%F)1A+pBf2y# zNeU*wxoA>qSlC26V;K_@ zGcb^^0pf}45gv(;9h@spd)R}P8BpApAj>!s)rfF zJ_h@_mfmTQHcibE$x`yWzasB3kat(ZZ+F=%TQT4^uauSPojWgCSXqV*?X;NW)+s|dxpfBr%X{v{%H8;f0&Q9#n=Z^^Cr{bwnHX~!zj^IpIkp4&wbjwCv zg;isYN2Wjw#+wcJ!lSAar)s3PlL5m zE*Hs_XW*u-t%mFErgR!+XMi^sp|dKnj4T)reB>4_8#yJ&(_Lz|^NwGsB=^WXdZ}Hk z`gC+#o{6iR%j}1Ai<)PzxCB)eHE@YxGC!y0xg%%kr7UvyNPl3jc1+$+3J*jmQp!88|TA#s?flg&k~AK zHjxe7fzY@;1osU6n3nb^9?Mv5*yO*q#)sM;4~b$ov*(SDKRc?NO~rRP+H6v=#cebF z;LaxHQSP#K8#?imKCLum-CC;8w;S`n^qRK59N#_dVHJ~n8M!Jxrh-V${u~s0*;RFLZ6xEXsI33bR6MYS zPEw0U+v%wZhF5W;bnqJ=7V}yDn9raC9XJ31h-|-I@!h!{eAnm1=F={)nq5XTY8x^VTbknJ{;_1I!?=?8xaKmHT^tCd)W}eDdTf zK5+OjVG?Dgol-us8pNm{uKpZ|(^B3Z7Ux%7)JCLa)Om&=HkRUVWIe9;CI^H2ZFSL4 zw`8X6o8>*`tIQ5!VxxX09)Mf}u!y!3Il4e1q25d8mxn9*IT5zyPw9KzJj=iJ>*#nL z6oDI^|H)Sp%{~cF%?ZDw{^pccweExGpYO!7!|$zsav5uiv4-ND2@~N4xo`LN=0tU5 z$dWhDUw^p68F;6Mk&b`Q*9*9Y;3q%e$md`8pS27Y#;%l)=9tBM2=bgsqex!+^UwI$ z(^m>8ey+HI7c}4P$)Gqo(F`g}5iLd;jJ0=TR>(h(de(1cz)ZyOwFv*C7zg+Bx^Uw(dG{&tq^NbvT3Xl5_vRbNgn>${YY}hwFr5> zUOH)Niqae2OkZ^D&7dN1+wK;!Ln*aK$zz?Q0_sd|j-uFyp`Cn{k;Fqu#(AOUMwJTC z#WJDrMU!}6$@o3{rWxnA@&X`F%2ni4hJ*y@ZnmjPf@2<4pFDl^s3h!+@*UTdKI7u;a;qcQ+YR2h7h$N{AOZ_#kV^t?luLNMb^;#8wk127 ztP(csiy)F>+qKPb^QAI+6T4I@oP?S}nX(>$nBM`%HIDT`*fn0U&RVStTHzAB>3eZ1 zR|D*xNl%e=NHZThm*7B1n?{Dq%F1P~?r{asvPw{juspzWSM`i^ioa zs_r}u&;5|+Xbqs9XS3or$O`$9JPND6)Y}Df^9) zj}{2KJY`U!b44;;RTD}gBW%^l2;~SMzCK3~rhHEb12-}4#@`lf1Jt zDsRIz8sdp6i-626JaqW$Rg}{=Pi(q1%idz6u%lCC&H$DH10+kP3w5EGgnJ)NMbgRy zSXh0QqX#bB_~=>5ffcVdZwN+p(Cn^$z@Vy&QfSKR$>Jt!zcv+XJ1qf<|q~0MA`(Tjj*)p5V{pG9z%ho1$F5EghBg!3}8$Ym23in%4Fst~U z9!5wgX2azjfKCSMSpZ&Ui@YRUV!wGwsL|13jToJq?qUY^R+r}b_Rl{z0-K_Wbnz?E zo+{Td+troL0j@T0faPDW)g^!Ll1a{5&5p|{>dkUIGwid(Wt7@CJ*EE_v#h#ocGb@f z+x-t&L-$7A0b(D&a9wIFy-OIeljz~9PKy3%C~ zo`zEf#iO?;`vKB3YLftHqF=w|ZNMJ={rls1+b1{InOUWIP;m*iPcL3yWe8bKgh20H z2lgD>p!-5emBaSNUL^pZ)>cs4XXt6xqUo}4-|on6Bn6=_=UD= z9IdCktH2?or9*#h|61#M$w`YZF4=a9p5?R_KClcec#1A(qmX{K%G_3gikXP0s4MJi z^aqRvgHEB|Ga}>!J^2`WYP)xRGG1j8Z7kLLD5)0ve0lA<`>&eb&sLGawSECd=iCcq zX7dj0z}(Ukt)WqfY~=uJpGC&gUsnMhbJ8<9t68n7v$z%z(AJ09X zk5#2h=g>&K|MUi&y^CyXXgnwD8F$)5&ulHj57KO(toH1n z1s#Mj{<_26$=cbsg2Q@dYPK2?jir$e((t{bsc9~tGzcM`_Rg%b*MbGh&Po2{&B)pf zZalD)nQ6x;X5TsZi&=INRF`Yw5TkVLhD5H?p|y{Tx&l`KtEo4Ubqji5+{|(RUVTA< zYlg??$DQ~w#!-g31I)@%7_JxDH@YRil|4zVVAN2Isc;#Ir=T8Y4kZvPH z_VRnqPJ|C#;$*T?0F(X!Oi0hxmdlUe8*itm4@eD*s&BaT4Ghe5W7)zfAT7IevTy#9 za?YvKr(ue&Ch~3wySCFtI}iS)w{qT_|+Yp?X*O1hnAZH4t1vqVQm3+xTn33iAMXc`vAj{NnwdM0?n z-zWUt1Q|a)Fl^YUs=GSw`0T5ywjVw8?U0dL94hGxb2I5u>C4N za(CMx>xU0#$coaG$+Z1_31Nn+ALVUdj-uzU3eb~C35`smXAii22WgtxryND#x-}NN z=YRqAHY~e%xWc6OsiGKVa9gm0(JNwJH<%ar<+w9@)T@WcfmSNV~iWPOm4=D6nh^+YjN3)C;AgN4#{(P8%qQ%j+D1~?s5 z{z4VHnfsts{3W_S_k#L~V`9EnAg?J1g?OlI!7OG!)$hc|lW*i7c9#Dj>8=Y|+u1S0 z8H#XB2r2|m5*(FmpPV@-BGSG!ebPAwVE?99Z#XCRo)8$lH@VK3n*!uRo=U@J)ujWx zeIG=da!<#kI3zoq zZ@48XN(`S|sFw(*ho&fvT5(0U4Q~vT{oYs*_sBka4tR1u`g@)tfDc|FRWpGneg2?K zuVnty$JQ#8ZT0@E`epZYX#9@^= zCryyXUQ_l@aLWbG)mB`(bBqj!dLMh>o)YQ$OiIzTQcpKo47V@b2LfV^ckQ~Sqx^S( z&pwIZNIIzii6b9Uenew{+QK3MCcXcQh@;l|nIO=c5R znGJn)=aJKEeGvKHf>coHC_fhj8FI`JX1g{{Z3&3~IRGv*c;U6O8T>}&l8*Ocx*PGn2Fx&6yhdPkAP))3g; zR@V>D?7DP7>)An=X=^Cw<-x_*$<==5IX@l z5H~Fh-*RRWwACI)NY(h)Kk`Q;Gm%#L@~0#%ei=8;J?s!zes;*A?p0ijE@SJyCo=Gg zD;e@v)Io7jXxV|Ei-sELE_yLgQ=Cg07ez%Cr)=gyeOoLZQxGnCEpsg5Mo03M@mh48iDiY+)|v%?M*|ejaDj>+}#FCD!M<&an(!%FRQb2IAhyU z_6jF-TnS@aYU^;5vg2RKxvf@jhn}WcSA3W6PL_24bxA?NoSp0JcGz{q7=n?2&P{)4 zud`Kh^DNg;G@CuI1J{B%!cH5Bx{$;fb)r|LZG!m#VkQ!mpkln`?t|arE4OMrUh z>K6ymqV60zdPeVD&7F3|?o530BY<^h<{QdB8mjxS^Ygi*@Xi2>{z#KMRehBT*sH0`T8n;ml;iQHy5pxS`RgsDtnj-WBu-KtEevm*KefbY$On6tFg# z9_WaRRYc7RfRG^DHf zG2)pn2&XPBDYL|e`R-(+os3^Z#d1%|kYlg>DxEZl6YB9VYXabNEH)i*LuiWx{KVRg zNHQ{gW*NJ6qr_~&xDh8~#4c>J>+{W5d2iK~vYb>Y8}{u6Afl{0^Y!XORU$7YU$!=0 z=stsHeYCb?m@DL4?K|d@tK5@>$CTRRk7c#+O3I^nszt5h;zyaR6`&+W5ZTu9Ew)-zocXnTWz$EaN{b@=ckMj0&FricMXO%Sg$m@(KUKiAB&Cav!TRs&zF@ z+Vb3KsUBk#YMnNtA#0Va;l(x17#(cfUhn6r-NQp$i>_$E>to5!z>%UD*!RvJ(fnu9 z?zYFCHjSD6yN#zz9X{7~{;a0UblH0@Ar*X0@2jIEm;#}aC$FuQ@e8PeL^+ay9hAieDdb#&8|WO{QKKr#muKkV816BmQZx*TC?z*B+_ zF(4Sq3j`H+3MMXzh^T`k+@B!Iu9f)Y$&+l4ihlc4P#4}{w3(lQvM5^cBT-fA>0mxd=$V&k|D8G594=I(8;p-=h zm`JpUIQGR#+=$RDe>_&nZXhxF*84+dkjZ{P#(_8Y?8?wf??b6`^}gY!K?wu4)Oj)M zRc!2bpR}3GN%HA^)K)knWW5R#rEIyggG+I)TkAV(0udU{x729kUd2_P-Y10%_%U|6 z{;FnpZj-jZFRGlvGM10Ft!wHt@qcG-oE)YuY|29HammNhI>2Yh)P}kfU$&2WNyi(kY zk)yi4^T}Rsf|;Ik)kPVFpc-*2_AQ--88t=?$x*k3hl$Emzl~wOVwo&);Gixh;z7uJ z@gYuX!bSwpDk-Q8-FhMGwV^Xqy>4ZGg4uY6p#ZhpFRyY9Y7-z~UZ=&7@Nb^cb}%b< z5y8NXhKwiVqoJ!w*{72dD{y3liZrIqxNFvW#Sjg8L4=8ELX9qH*rZ5UifBf)90hUw zx@>g283+(5KXuu%Jb%%!q9^s~jplD0;!FTNX5@~gIu*>MdERG|F#>HWau~S);x(g? zo0F?w=}?_s`(4NNBW-O~lYX)))>0gTi^(C>@eABLvKS)Z<&<~26{jWdGqz!?s!kqK z(a~&M>n^Ft^sb0a-m3$E4CRRaQ@U-Ok$D`FAPJ(w^!ID6p>4h4(i77R+&Z8y!mWck zj3>T-zepy^|8kuh0lWye>h{Y|`dQMLu(gl$qCUG8bDUv2**4q-_hn0}%gm<*y@|gLvcmxi{0De&D+R#X-2s~EdXs>7i?i}CwDN@qFg<>TI`>EkZJIVcK&gabt-sd()V)sv<^zn_towwYF8jLJcBP$SKAKlaW*sf*Ja+3k+wE{;^%cJZD07@MG zyN?fvZ?%6 z2c#3TvdVa)xi<0gw(u?DfMx*V+BB;TMSdA|ef6m_ZGS~bF~ANmz%EnkDxgdE)tLH3 z{b(kgiY{TNY)iW(O}nHDus!?K6)q1N$nK!$)kpYpJ3Kr*wX;wrl8x-Lf)f>zo1$-} zSL1&{Bdo&+%AiZyMOgBfY|@n+-}c2>dS#ExZhimFJ{4AU5p`|;`jEhRV2s9{MDAr; ze6s;C=N|N}z}*reZgLbiSX1^Bjn>a^+3hd%ELDxCX~$Xm4pi~;bpQ|liPdc%tA`DShcKw2$$MQjr=(2p^=8U#*sA9Mj;+oF@FTL$ z#^~}RNup`hW~`L&s9cAxX@h1_%2k`cTR3m(P>;u5 zZUTy370O7TIU#=G#S4Y4&7Is#l?fG)#@jSP3vb1d2GCC#gP6d%Dd6-y(7gJS}@>`$t!RB;SxJ5 zlQILQ{_Y{b*A=3o;+HO&7NfI#$KszH_#b;!J!otFGW4lvINB@?LA?%qK?OO0( z6qVfq+?TmFjdv@!C7aRyQLNdfL!5E3KWDO}kyg+*A928z^IrY#vXeuzsPiuOU!8nf ze?U)7EdoDWLEOCix+zb)vyOke<4y49)bXn*kG<|%06xmU-MKsbk)90$iK{#1O5xht zxGnBm+EXsZ2OHaA-m5eEjfiQ}J?5XT2nO44q!^o@n2K~5D4VWzR zq9c$cbgmhLP6M(s?eRv^M>ZAulPKaB#}(;Ur_k01K3XpM2d`u7uA&A2U1WghBQ!lq z-dX5LHLEUqYqXTZz1%H>(_OjRXx3(ybHTiyXsDcAk~iRGk}263X718fB1i=In{X4R-}Nq3c(2 zRfc${LkS9;;Uv}cq7|f98!|(7!EC5adHP!G_h+pW_H|6#IvZXc!P{^vy)xi*CXJ*s zbLUX)v#%Es)AdSMKuGCL+k!KNv2b)li@tnshP2+RBd6E!J|0ffHSfdryq*;)iH)C( zQc^IGxkPiT=bD~i+aeU28+BMvW~4MFGv!U!pQ!5~xVer<``v3W0aFf3s*>mmY zy1!?2s}2*D?1QP%gyt$$Iww&qYM&v&k@x>& z8BAWdG%~HKDy28mskbT}KU7_f=5A+dCFa5?TG%l1duF?P$g#K`935ciJ&@3)ckZWz zawgvJ*y|K!uqNd2%Vv>QxJKP47Wc9Tq~T3L7kmTWG~NiGInh=JdT9orU9t0~N)4zy zhAZ5)q1){Nlckk3QWJWct45H4a-BS}>4v^3ti`;rWhC2sG0BvYMCA;fn9-A-{Q zF&C8YfJQZrSKWvpdJKFYeEI>1LD`{X&7H_-q3-_$d|)A%|r@X9G#}p zaILWc?xif5MJtwb8;5y@oq><}Fa{QS%#{2YpsVGohP4i!&ujMZJhtGz(EY&>a4of< z0ar|j<&i8q-7Ad+dEY(;5>ZweIyT5Ot~P)5BO#6i=x86oxZv}8rvF?Nksx3@Kkx#I zq35JT5n$Bi`LCb*k14M&vj)!&u>0=*@M5-~M#`p2`~>70eebJ*FwvcIwKR$oUovLJ zIo#~74dCred$(1pxLF^AW-bqw+H$F{zgu>t7NGYw%y|VLHhe_~=WyQC6n-ebdZ;Up zRTydGZYduS+!D*v-9UC^HZM!VRWWc={}p-#;5K#R_7;tp9kzklWQ!)>!V%9&0P+K_ zT)}1Fs7z%fQ>gIOd~6X^if_-B&)xmmKH+P`&TF_i^nF(#cAD}o z4`-wmC^Z`htjL&rYT~;Fbwg_LU2umvv7fNL7 zd=Om6o`gI;nVawth{Y7#PXZl)l_GX7KUO*l3Y3}G>?m*dqKX}+v5l@N3P$ZK$`I`o ziH9IV>D0!_dr5ArU zK!G+3F8sGZpCgpMumgl7dJ{@F&aH$}Q<*x@n|@o5K7da9VvX)}({UuaC)z5A9|&9{ ze1SU0skQZdl;T+xxsn!;e?pCu9Rq#2)G|$brGc2pZB-p5A6mdJ&H`yw{_=%ac5R)v z)~kAR(+QBKTf6zJ;PXp?Hz30m=DMIP^r4a;4u~EGx2$aN#Z}GlVm^F0MMF6?L^bUe z0b!0@(^5p3vI!8)>L)MDm_NC24gyh{d6m~z6NnQ7*x$$mZfp!%OWnCrhCuZ+0Je51YXpa2x%T$<%nb$@yvL3u5Lne5WWyH&r!e(7KyR#8 z_n%7ZB#6vMhu(~CAeCm$LI7RxLqkL6EQDH}2INNsnA)%aB2tKl-GAt!6(D>D4c_(( zKhuYpI%OdGmjR;T&gP7M`I zu0kFxEGT%yT$@l52p=D=7y)rUsImV;f1Rfz%YF_Jek#EXKX}iBAy?0^G{Pm8OBXLX zb-oicP4#*Mh%Dn#X33q9aPBBiSlz}+5Ibccy#y)^=3EJA z?tMDSdzCp?GWik`VF?znyuY^zz6@ED{*Q?Q=Fa~*mIU#7113|ll|x3D+uf5Y1vkjM z!~6>39OPW`@87m??H{HUHZ2}tBqQO-|DAnu-C0p)R9hKV=1TfY#wo@9!|_3}T6a zDd3E)%Wo$F#GVi6Fmd38KvV^)tFqAdL4J+|JnUh4EDP(NQ`eDQOO^;`@5{7>cHMl) zQL=xrTyg&SO%9urfad~|)#15#E`#V0qCYNjcNBZc<@-{;XT$bbIQAisF^On0!<(Z` zSfy|n{qFVaUvSe*QiUm0%sIRN5lm8KhBaSwpGMwgWmEC#sb!~-N5rL+u4roM>5WLu zU2>WqRb_&7+_b3Y^dDs0facwt;CqGIJOQO_yUgfB*9T?8w1A4CYCKh2Q*-ojFaZ!& zwP4+nK=2_8GaLDFoCLd#8V6#L^;r=?74Q8NSAfyA5=SbqWd~SunHw6lqu_l*i^M5h z%7jM8g`4tJP{_0j)$`}Cn{dj1yAM8s-|089Xz_y2Kmn=7?162qc%CHhCwvViEEF@z z9wgT;7m)d@4b~AFG4=LlQ29mqRMq_!tsBHL5BFB{D0-lWTuWc#iW@Iu|vP^m; zs+s=6(9lrYxGg5B*e{@Qx=3Z;GbJIdWadJ%;pjB0--6cTD3^$UelRew&2{$HCp~51 z{=LoXxVo-vMV(hi=FLEGjRmy{z#X6iuQIg_Heu`6(B0ag-cTl<^46ttpB+r##Twsv zGAlWH_hlre{-G5QsG4J9G{?h#e+Dc}$|5^$6ib&-RmJ7+*aYnDCHn4ZWd%<&UV}h2 z?L7s+HPGLdN*8L2oja%2`A)-?JkF`5qod^)4;tPupwGME_wCG~h3*AY!8I=6O_ti= z_}b!Cau=h+L0z!5Iuu{hrd&RF7Omp7QA4+`(ZTLtGo7d->5(_9m-<$cq?(7=NgRF+ z72I@cAy73jb{Ig;I0!hU`ygYax`Z-*3|!`<{x)LrpcrT~WzliUyfKQhwYuuf31mIK z+MK|mgFlCRqP90=#H`DHNV-1-2SrA-EDuRFV`^Oy9^ojUXhp4Whm*TBJR2UfHbsNs zhq~?20>1GY`w-X)Qx{bvdvt65H~UcbPt%$Q=au^_5vKbxx|OJXoecL&`q>0i`Tbtu zCT1b95nhCEUlP*y@wQ=-T7V~T-QsOqAmvirX&}*OZF{7Zo(F0M+WN}nIQ~657YU%uNzeYa0 zgUoot{hNMi3QG})Sb%|f-pCdR8Z!~@gsA`nO9Vm7k4DZzi%CcfFHn{De%*DpZh>-4 z@#Kc?7Ku$i?DM5|vXRYt7Ih7+7#=@8WAz_AherVluGA-5u4qEO#LQBPBS->62CX00 zp1N!g3MQ+RQ;GM>cvhIUwJKIG3pev9B z0V$Q4kyT6JI#X2&PIGTl!{wKyRO3D})h6)H@#8_@=B~58siZ?BfTBK^YX}qJ*_kO$ zBOh$Y7)R0yvqsu_B|0_Tb@ke{=#BdYIqTtsjF6rq!a?^(pm@h+!(Z1nL04Z%#g*L2JZzOzus)< zAt2DP!uz*arRupG`5`JF)%Gn=Cr67jsj|Lqa8l=fSWhjWNkANZmT~g%jO7+coa|>6 z_zS(lbp~JEsKcYeXuB7U6d@_l)1g^Gl>5dpkC{%QqL`@ z0{ipT(F~*p=($PP#Cd`dB@FAp^lyX(FcYB}s*%MIQ8)94Vy3?Ua40LF}dGcI1b zX)n|YC-$4b2<|F5@icc;r-GkN4?Z$qDKXp=UMytr^!9~$42 z#hGvgd|hpDm~V5dLs1w9TpD35eC*iA`<%q#qFzN`SrwHwa^P&6{N>A+O&||+v`{uJ z2-o^-aoN@okX79zL36_swG*R4omEV=28ik7#)1~ywAaNYBtWLted;mr4KbVAFB&YZ z1S+mk41C z3%~4hA z-u`X&U<8Mm{f73<_o@oXKU%}^fI^2^8=V9595f1<(Lat~%W=7RjYE!w#a5eHF93SH2x(n?p9h4XJj=|r zEagl}n;w$<$f~-|1N|#c!CBDT7%1=-dNYIJvs-6x241|o$u|i53W(W&5g2h>c}4+% zz`7b}XU>flnkt~RyWh8=dOg8($@@j}Gx?O0#K~H8p%v9b9?I+=X2`qF4=RHQ4pOid z!Zq!E#~ABBiyaT_$s7Q4Y_)NM1D3T~>Ijm8A7%1JW#bTQ0$^rUMRk1O?{qEeTt|t} z(ux2O!4^Vj+nvu4F7=>c-ZiusSily@4x*Q2VS$VcdTJp6M6kgRTP$FlZ$!C;zRe4` zW?!5vQ?pAWFu-${IoVB3eTwOk{b}|2M>&eBN_qC-Dz=WL6(lrJ%gk(`ehccb{ETRZ zQi~e8)J>1`c6vPiTzTi!k*`Z0-Vg{IgZX;_3WA_umI-E7T%^4Nc%c$@;UKvwPl{P3 zQvO{S*m%?$zL9^kS9D`@Q-++uL=ZqES24x3lIGXU^Ug1BA7gfH zn|CSE#-oh^&c#5$(~P>N6bVqc>qr4zgYBHF(<74Jp@RntDE)Nrtuy4t%4i&`4;bb( zB!xxRGJenaPJFN5m83fWQn+Gm(vGs);@N}61{D+ZTj-^EmEj5a;L^l)@^Tw(vceAR zC4SoR8Dt&PeXbqRe1uZcaA2&1uu;%x}emkfdf|vRB5GwfR_=k>l2ONG>Q&Y)hH?=Ps`3 zX@*mQWhW!*Ap1&#qYwrF>Qc~$0%SuaU^6^$f)BKiMWDM|0+2-!X@#^@`S60OLC)GW zD2*V63v1KY2IMfgZ8_c#Fr|+v)ddUhqbXuQ2E%OH%|1^1dFJe?f}QCg^>|h32yTW> zEW~yYD5lM=UUm}3LL$KIdhp(!=rA}s6l354tvc{kDfh(7LmO}sbc#Iul)DtvA&f>L zAP(%y9%oA55j70&;WMc$5nCk0Zv1q(70}xZ_(-)BDzi9BtFrDWs1$14lTtYlrEBRo zJMRnv#D})`pTLlFvZ_si*wjP4atk>VkTC~o4%GJ7cEKyP!!px?T+uT+^qL#)hBgAG zeVAC2m73=R-hv9=I^aCJW}aULr3j|P)EubOi~u;AoNn)b02HdS&{_0&ZAh*|FU=B| zuc7hQ;r8}+anETb*rU8G{3yJ9duNg`Xuw_uqF_Yk2XP}Uz_kvxaZj#nD}zc%TuBMR z4yOc2TZ3NxFwn)tPmh|Ih+*>p$?>^{Es(7Ta^T+w>;F+{f-30WM}NWp|6A2Q&l^CG z*t<}aP`)}AqUOhsXk4&xaw@5K-0 + + + Medley + + + + + + + + + + + + command + + + + + + + + + + + + + + diff --git a/installers/macos/images/Command_icon128.png b/installers/macos/images/Command_icon128.png new file mode 100644 index 0000000000000000000000000000000000000000..e04486ca920db61341021f5502b34362fb518638 GIT binary patch literal 5917 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

    RDS|() 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 EU&5}wEdT%j literal 0 HcmV?d00001 diff --git a/installers/macos/images/Install_Message.svg b/installers/macos/images/Install_Message.svg new file mode 100644 index 00000000..8c228660 --- /dev/null +++ b/installers/macos/images/Install_Message.svg @@ -0,0 +1,1556 @@ + + + + + + +Install Install Medley Interlisp1. Drag (copy) the three items below into Applications or any folder of your choosing.3. If you want to excute medley without specifying a path,run medley_add2path from a Terminal - one-time.medley command from a Terminal.2. Double-click on the Medley.app to run OR run the + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +andandoror diff --git a/installers/macos/images/Install_icon.svg b/installers/macos/images/Install_icon.svg new file mode 100644 index 00000000..a6f48158 --- /dev/null +++ b/installers/macos/images/Install_icon.svg @@ -0,0 +1,209 @@ + + + + Medley + + + + + + + + + + + + install + + + + + + + + + + + + + + diff --git a/installers/macos/images/Install_icon128.png b/installers/macos/images/Install_icon128.png new file mode 100644 index 0000000000000000000000000000000000000000..059d15622028a6386d82e236f74453f1838c6b5a GIT binary patch literal 5960 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 literal 0 HcmV?d00001 diff --git a/installers/macos/images/Install_icon256.png b/installers/macos/images/Install_icon256.png new file mode 100644 index 0000000000000000000000000000000000000000..059d15622028a6386d82e236f74453f1838c6b5a GIT binary patch literal 5960 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 literal 0 HcmV?d00001 diff --git a/installers/macos/images/MedleyIcon.png b/installers/macos/images/MedleyIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..44611728ce5d58192efa4b07fc8fffd0f4fc78a7 GIT binary patch literal 29321 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�Yt-?CFuDRyV(f%M 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
    eqb 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 GJzoLQj9Iz> literal 0 HcmV?d00001 diff --git a/installers/macos/images/MedleyIcon.svg b/installers/macos/images/MedleyIcon.svg new file mode 100644 index 00000000..01fabd13 --- /dev/null +++ b/installers/macos/images/MedleyIcon.svg @@ -0,0 +1,199 @@ + + + + Medley + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/installers/macos/images/MedleyIcon128.png b/installers/macos/images/MedleyIcon128.png new file mode 100644 index 0000000000000000000000000000000000000000..b69cf172a940106dbad3c11866860c406f29eff3 GIT binary patch literal 4212 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⁣>A82_ZFw-ZTua+Y50ZEsumG)A}Cl>6;EGzvaZ2eZp_FR$T>t7K$cz&{-F zUXXBbNlGU9`umr+-%NVk3H-vuc0~gYC$rUi^2D`Ljw5V2NaCNmI>v9`zFm%;JX#qs zK%}CDalkvf?kFvHCh)=sY-hfQ`(ITU9vYek{sQ^8Gwk&s!Sp|~*pmvOzE1i_@4J1_ zEl_^&00w4+h=>S685tR?fgCk-Oib9dB>?=9F|I@M1EP6& zdhV|l7Z%#mh{wmr7a2JQ1l--(*+J|sY5)Mq$jWkn!4>Rm?d?f0P(p!c`y+?*30hRl z%&uDxs-)BKWV}}Cc;LxUu5Q%U79uAnXL{JkQnIt4;IhSHA26Sr>g+Y(>36PyQRr|c zl1*l?D`+N=5dG@az|mbkK4M^V%*J6sKfAkIEkn-Q3bnFyjg8T7-_q37)Fexy47H%3 zNL~J<$Au|a_)#Ws5}?}nS{ZUJpp>vZs%h>rwWYPnR0|;vy&12Yn-zTh{H%|57Qpn>zJo!7Zi-X@!`A5^XIqCVH1S61wc$709>1&pJ%vy!OYy8tvB>p z_+(&s*xtiLh$f0aw_s>JnIK$kE&^_~giW_Q-dk}P1LQ?$MlIS7YSQH*Y_EyDybL}b z^Qsm>zeYxs3iNkYJ!NdJ;U$YZYBoJ%i}?Q#bwBc^AqUE5D(E^jHFd-B1PC?4PimSA zduNC@2uc4-GHvk2Ut3*`OH8!$@Jq?R;qOa}0xAxa>tJKtv7Edt+kP;d)crDWDkv(x zFp)}6Pj?XdM|p#_g< literal 0 HcmV?d00001 diff --git a/installers/macos/images/MedleyIcon256.png b/installers/macos/images/MedleyIcon256.png new file mode 100644 index 0000000000000000000000000000000000000000..fbf07bbd34963eaafec12e64b95262872fac48c4 GIT binary patch literal 7444 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 SPJ$avNL5)=sr;c;*na>NUl1+; literal 0 HcmV?d00001 diff --git a/installers/macos/pkg/Distribution.xml b/installers/macos/pkg/Distribution.xml new file mode 100644 index 00000000..17d9a284 --- /dev/null +++ b/installers/macos/pkg/Distribution.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + Medley-base.pkg + + diff --git a/installers/macos/scripts/medley_add2path b/installers/macos/scripts/medley_add2path new file mode 100755 index 00000000..3005330f --- /dev/null +++ b/installers/macos/scripts/medley_add2path @@ -0,0 +1,43 @@ +#!/bin/bash + +# functions to discover what directory this script is being executed from +get_abs_filename() { + # $1 : relative filename + echo "$(cd "$(dirname "$1")" && pwd)/$(basename "$1")" +} + +get_script_dir() { + + # call this with ${BASH_SOURCE[0]:-$0} as its (only) parameter + + # set -x + + local SCRIPT_PATH="$( get_abs_filename "$1" )"; + + pushd . > '/dev/null'; + + while [ -h "$SCRIPT_PATH" ]; + do + cd "$( dirname -- "$SCRIPT_PATH"; )"; + SCRIPT_PATH="$( readlink -f -- "$SCRIPT_PATH"; )"; + done + + cd "$( dirname -- "$SCRIPT_PATH"; )" > '/dev/null'; + SCRIPT_PATH="$( pwd; )"; + + popd > '/dev/null'; + + # set +x + + echo "${SCRIPT_PATH}" +} + +SCRIPTDIR=$(get_script_dir "${BASH_SOURCE[0]:-$0}") + +touch ~/.profile +cat >> ~/.profile < '/dev/null'; + + while [ -h "$SCRIPT_PATH" ]; + do + cd "$( dirname -- "$SCRIPT_PATH"; )"; + SCRIPT_PATH="$( readlink -f -- "$SCRIPT_PATH"; )"; + done + + cd "$( dirname -- "$SCRIPT_PATH"; )" > '/dev/null'; + SCRIPT_PATH="$( pwd; )"; + + popd > '/dev/null'; + + # set +x + + echo "${SCRIPT_PATH}" +} + +SCRIPTDIR=$(get_script_dir "${BASH_SOURCE[0]:-$0}") +# Define some generally useful functions +source ${SCRIPTDIR}/medley_utils.sh + +export MEDLEYDIR=$(cd ${SCRIPTDIR}; cd ../..; pwd) +IL_DIR=$(cd ${MEDLEYDIR}; cd ..; pwd) +export LOGINDIR=${HOME}/il + +# Are we running under Docker or if not under WSL +# or under Darwin? +# +docker=false +wsl=false +darwin=false + +if [ "$(uname)" = "Darwin" ]; +then + darwin=true +elif [ -n "${MEDLEY_DOCKER_BUILD_DATE}" ]; +then + docker='true' +else + wsl_ver=0 + # WSL2 + grep --ignore-case --quiet wsl /proc/sys/kernel/osrelease + if [ $? -eq 0 ]; + then + wsl='true' + wsl_ver=2 + else + # WSL1 + grep --ignore-case --quiet microsoft /proc/sys/kernel/osrelease + if [ $? -eq 0 ]; + then + if [ $(uname -m) = x86_64 ]; + then + wsl='true' + wsl_ver=1 + else + echo "ERROR: Running Medley on WSL1 requires an x86_64-based PC." + echo "This is not an x86_64-based PC." + echo "Exiting" + exit 23 + fi + else + wsl='false' + fi + fi +fi + +# process args +source ${SCRIPTDIR}/medley_args.sh + +# Make sure that there is not another instance currently running with this same id +ps ax | grep ldex | grep --quiet "\-id ${run_id}" +if [ $? -eq 0 ]; +then + echo "Another instance of Medley Interlisp is already running with the id \"${run_id}\"." + echo "Only a single instance with a given id can be run at the same time." + echo "Please retry using the \"--id \" argument to give this new instance a different id." + echo "Exiting" + exit 3 +fi + +# Set LDEDESTSYSOUT env variable based on id +if [ -z ${LDEDESTSYSOUT} ]; +then + if [ "${run_id}" = "default" ]; + then + export LDEDESTSYSOUT=${LOGINDIR}/vmem/lisp.virtualmem + else + export LDEDESTSYSOUT=${LOGINDIR}/vmem/lisp_${run_id}.virtualmem + fi +fi + +# Create LOGINDIR if necessary +if [ ! -e ${LOGINDIR} ]; +then + mkdir -p ${LOGINDIR} +elif [ ! -d ${LOGINDIR} ]; +then + echo "ERROR: Medley requires a directory named ${LOGINDIR}." + echo "But ${LOGINDIR} exists appears not be a directory." + echo "Exiting" + exit 2 +fi +mkdir -p ${LOGINDIR}/vmem + +# Call run-medley with or without vnc +if [[ ( ${darwin} = true ) || (( ${wsl} = false || ${use_vnc} = false ) && ${docker} = false) ]]; +then + # If not using vnc, just call run-medley + ${MEDLEYDIR}/run-medley -id "${run_id}" ${geometry} ${screensize} ${run_args[@]} +else + # do the vnc thing on wsl or docker + source ${SCRIPTDIR}/medley_vnc.sh +fi + + + diff --git a/scripts/medley/medley.sh b/scripts/medley/medley.sh deleted file mode 100755 index e8f54761..00000000 --- a/scripts/medley/medley.sh +++ /dev/null @@ -1,142 +0,0 @@ -#!/bin/bash -############################################################################### -# -# medley.sh - script for running Medley Interlisp on Linux/WSL. -# On Linux and WSL when using X Windows it just sets -# up directories and environment variables and then calls -# run-medley. On WSL, there is an option to run without -# or around X Windows by using the XVnc and a VNC viewer -# on the Windows side. This script will start this VNC viewer -# on the Windows side. -# -# 2023-01-12 Frank Halasz -# -# Copyright 2023 Interlisp.org -# -############################################################################### - -#set -x - -# functions to discover what directory this script is being executed from -get_abs_filename() { - # $1 : relative filename - echo "$(cd "$(dirname "$1")" && pwd)/$(basename "$1")" -} -get_script_dir() { - - # call this with ${BASH_SOURCE[0]:-$0} as its (only) parameter - - # set -x - - local SCRIPT_PATH="$( get_abs_filename "$1" )"; - - pushd . > '/dev/null'; - - while [ -h "$SCRIPT_PATH" ]; - do - cd "$( dirname -- "$SCRIPT_PATH"; )"; - SCRIPT_PATH="$( readlink -f -- "$SCRIPT_PATH"; )"; - done - - cd "$( dirname -- "$SCRIPT_PATH"; )" > '/dev/null'; - SCRIPT_PATH="$( pwd; )"; - - popd > '/dev/null'; - - # set +x - - echo "${SCRIPT_PATH}" -} - -SCRIPTDIR=$(get_script_dir "${BASH_SOURCE[0]:-$0}") -# Define some generally useful functions -source ${SCRIPTDIR}/medley_utils.sh - -export MEDLEYDIR=$(cd ${SCRIPTDIR}; cd ../..; pwd) -IL_DIR=$(cd ${MEDLEYDIR}; cd ..; pwd) -export LOGINDIR=${HOME}/il - -# Are we running under Docker or if not under WSL? -if [ -n "${MEDLEY_DOCKER_BUILD_DATE}" ]; -then - docker='true' - wsl='false' -else - docker='false' - wsl_ver=0 - # WSL2 - grep --ignore-case --quiet wsl /proc/sys/kernel/osrelease - if [ $? -eq 0 ]; - then - wsl='true' - wsl_ver=2 - else - # WSL1 - grep --ignore-case --quiet microsoft /proc/sys/kernel/osrelease - if [ $? -eq 0 ]; - then - if [ $(uname -m) = x86_64 ]; - then - wsl='true' - wsl_ver=1 - else - echo "ERROR: Running Medley on WSL1 requires an x86_64-based PC." - echo "This is not an x86_64-based PC." - echo "Exiting" - exit 23 - fi - else - wsl='false' - fi - fi -fi - -# process args -source ${SCRIPTDIR}/medley_args.sh - -# Make sure that there is not another instance currently running with this same id -ps ax | grep ldex | grep --quiet "\-id ${run_id}" -if [ $? -eq 0 ]; -then - echo "Another instance of Medley Interlisp is already running with the id \"${run_id}\"." - echo "Only a single instance with a given id can be run at the same time." - echo "Please retry using the \"--id \" argument to give this new instance a different id." - echo "Exiting" - exit 3 -fi - -# Set LDEDESTSYSOUT env variable based on id -if [ -z ${LDEDESTSYSOUT} ]; -then - if [ "${run_id}" = "default" ]; - then - export LDEDESTSYSOUT=${LOGINDIR}/vmem/lisp.virtualmem - else - export LDEDESTSYSOUT=${LOGINDIR}/vmem/lisp_${run_id}.virtualmem - fi -fi - -# Create LOGINDIR if necessary -if [ ! -e ${LOGINDIR} ]; -then - mkdir -p ${LOGINDIR} -elif [ ! -d ${LOGINDIR} ]; -then - echo "ERROR: Medley requires a directory named ${LOGINDIR}." - echo "But ${LOGINDIR} exists appears not be a directory." - echo "Exiting" - exit 2 -fi -mkdir -p ${LOGINDIR}/vmem - -# Call run-medley with or without vnc -if [[ ( ${wsl} = false || ${use_vnc} = false ) && ${docker} = false ]]; -then - # If not using vnc, just call run-medley - ${MEDLEYDIR}/run-medley -id "${run_id}" ${geometry} ${screensize} ${run_args[@]} -else - # do the vnc thing on wsl or docker - source ${SCRIPTDIR}/medley_vnc.sh -fi - - diff --git a/scripts/medley/medley.sh b/scripts/medley/medley.sh new file mode 120000 index 00000000..a64e11ba --- /dev/null +++ b/scripts/medley/medley.sh @@ -0,0 +1 @@ +medley.command \ No newline at end of file diff --git a/scripts/medley/medley_args.sh b/scripts/medley/medley_args.sh index 11a7d868..6687ad7a 100755 --- a/scripts/medley/medley_args.sh +++ b/scripts/medley/medley_args.sh @@ -140,7 +140,12 @@ do shift ;; -z | --man) - /usr/bin/man -l "${MEDLEYDIR}/docs/man-page/medley.1.gz" + if [ ${darwin} = true ]; + then + /usr/bin/man "${MEDLEYDIR}/docs/man-page/medley.1.gz" + else + /usr/bin/man -l "${MEDLEYDIR}/docs/man-page/medley.1.gz" + fi exit 0 ;; --windows) @@ -155,16 +160,20 @@ do usage "${err_msg[@]}" ;; *) - if [[ $# -eq 1 || "$2" = "--" ]]; + # if matched the empty string, just ignore + if [ -n "$1" ]; then - sysout_flag=true - sysout_arg="$1" - else - err_msg=( - "ERROR: sysout argument must be last argument" - "or last argument before the \"--\" flag" - ) - usage "${err_msg[@]}" + if [[ $# -eq 1 || "$2" = "--" ]]; + then + sysout_flag=true + sysout_arg="$1" + else + err_msg=( + "ERROR: sysout argument must be last argument" + "or last argument before the \"--\" flag" + ) + usage "${err_msg[@]}" + fi fi ;; esac