From 3c7fb0893269319fb3bec04ac711359bbbfc8283 Mon Sep 17 00:00:00 2001 From: rmkaplan <69548581+rmkaplan@users.noreply.github.com> Date: Mon, 13 Jun 2022 15:20:41 -0700 Subject: [PATCH] Rmk47: TEDIT, GITFNS, COREIO (#791) * COMPARETEXT: Inverted nodes stay inverted when scrolled * COMPARESOURCES: Remove unused stub for browsing in TEDIT window * COMPAREDIRECTORIES: Upgrade to new LISPFILETYPE, add CD-COMPARE-FILES CD-COMPARE-FILES interface to compare 2 given files, not whole directory * TEDIT: Show only file name, not stream address * COREIO: preserve STREAMPROPS on stream reopen * GITFNS: Various project and git-interface cleanups --- library/TEDIT | 46 ++-- library/TEDIT.LCOM | Bin 39187 -> 39206 bytes lispusers/COMPAREDIRECTORIES | 278 +++++++++++++------------ lispusers/COMPAREDIRECTORIES.LCOM | Bin 40192 -> 40460 bytes lispusers/COMPARESOURCES | 190 ++++++++--------- lispusers/COMPARESOURCES.LCOM | Bin 17455 -> 16943 bytes lispusers/COMPARETEXT.LCOM | Bin 10951 -> 11092 bytes lispusers/GITFNS | 334 ++++++++++++++++++------------ lispusers/GITFNS.LCOM | Bin 40947 -> 42694 bytes lispusers/GITFNS.TEDIT | 31 +-- lispusers/comparetext | 46 ++-- sources/COREIO | 95 +++++---- sources/COREIO.LCOM | Bin 16931 -> 17003 bytes 13 files changed, 550 insertions(+), 470 deletions(-) diff --git a/library/TEDIT b/library/TEDIT index 50666dd2..e93243dc 100644 --- a/library/TEDIT +++ b/library/TEDIT @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED " 4-Jun-2022 15:43:05"  -{DSK}kaplan>local>medley3.5>working-medley>library>TEDIT.;39 143317 +(FILECREATED " 6-Jun-2022 00:36:53"  +{DSK}kaplan>local>medley3.5>working-medley>library>TEDIT.;40 143378 :CHANGES-TO (FNS TEDIT) - :PREVIOUS-DATE "23-May-2022 15:52:33" -{DSK}kaplan>local>medley3.5>working-medley>library>TEDIT.;38) + :PREVIOUS-DATE " 4-Jun-2022 15:43:05" +{DSK}kaplan>local>medley3.5>working-medley>library>TEDIT.;39) (* ; " @@ -253,6 +253,8 @@ Copyright (c) 1983-1993, 1995, 1999, 2018, 2021 by Venue & Xerox Corporation. (TEDIT [LAMBDA (TEXT WINDOW DONTSPAWN PROPS) + (* ;; "Edited 6-Jun-2022 00:35 by rmk") + (* ;; "Edited 4-Jun-2022 15:42 by rmk") (* ;; "Edited 31-Jan-2022 17:19 by rmk: String TEXT is a file name") @@ -298,7 +300,7 @@ Copyright (c) 1983-1993, 1995, 1999, 2018, 2021 by Venue & Xerox Corporation. (TEDIT.CREATEW (COND (TEXT (CONCAT "Please specify an editing window for " - TEXT)) + (FULLNAME TEXT))) (T "Please specify a region for the editing window." )) @@ -2267,7 +2269,7 @@ Copyright (c) 1983-1993, 1995, 1999, 2018, 2021 by Venue & Xerox Corporation. (* ; "TEDIT Support information") -(RPAQQ TEDITSYSTEMDATE " 4-Jun-2022 15:43:05") +(RPAQQ TEDITSYSTEMDATE " 6-Jun-2022 00:36:53") (RPAQ TEDITSUPPORT "TEditSupport.PA") (DEFINEQ @@ -2293,20 +2295,20 @@ Copyright (c) 1983-1993, 1995, 1999, 2018, 2021 by Venue & Xerox Corporation. (PUTPROPS TEDIT COPYRIGHT ("Venue & Xerox Corporation" 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1995 1999 2018 2021)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (4349 118487 (\TEDIT2 4359 . 7110) (COERCETEXTOBJ 7112 . 15888) (TEDIT 15890 . 21011) ( -TEDITSTRING 21013 . 21572) (TEDIT-SEE 21574 . 24163) (TEDIT.CHARWIDTH 24165 . 26189) (TEDIT.COPY 26191 - . 34627) (TEDIT.DELETE 34629 . 35319) (TEDIT.DO.BLUEPENDINGDELETE 35321 . 38388) (TEDIT.INSERT 38390 - . 43920) (TEDIT.KILL 43922 . 45479) (TEDIT.MAPLINES 45481 . 46880) (TEDIT.MAPPIECES 46882 . 47838) ( -TEDIT.MOVE 47840 . 57624) (TEDIT.QUIT 57626 . 59626) (TEDIT.STRINGWIDTH 59628 . 60299) (TEDIT.\INSERT -60301 . 62326) (TEXTOBJ 62328 . 63453) (TEXTSTREAM 63455 . 65070) (\TEDIT.INCLUDE 65072 . 68972) ( -\TEDIT.INSERT.PIECES 68974 . 78889) (\TEDIT.MOVE.PIECEMAPFN 78891 . 80970) (\TEDIT.OBJECT.SHOWSEL -80972 . 84601) (\TEDIT.RESTARTFN 84603 . 86598) (\TEDIT.CHARDELETE 86600 . 90562) ( -\TEDIT.COPY.PIECEMAPFN 90564 . 93789) (\TEDIT.DELETE 93791 . 101309) (\TEDIT.DIFFUSE.PARALOOKS 101311 - . 104075) (\TEDIT.FOREIGN.COPY? 104077 . 107804) (\TEDIT.QUIT 107806 . 110952) (\TEDIT.WORDDELETE -110954 . 115787) (\TEDIT1 115789 . 118485)) (118601 118717 (\CREATE.TEDIT.RESTART.MENU 118611 . 118715 -)) (118816 122505 (PLCHAIN 118826 . 119100) (PRINTLINE 119102 . 121866) (SEEFILE 121868 . 122503)) ( -122546 142189 (TEDIT.INSERT.OBJECT 122556 . 131633) (TEDIT.EDIT.OBJECT 131635 . 133891) ( -TEDIT.FIND.OBJECT 133893 . 134786) (TEDIT.FIND.OBJECT.SUBTREE 134788 . 135594) (TEDIT.PUT.OBJECT -135596 . 137255) (TEDIT.GET.OBJECT 137257 . 140456) (TEDIT.OBJECT.CHANGED 140458 . 142187)) (142467 -142830 (MAKETEDITFORM 142477 . 142828))))) + (FILEMAP (NIL (4349 118548 (\TEDIT2 4359 . 7110) (COERCETEXTOBJ 7112 . 15888) (TEDIT 15890 . 21072) ( +TEDITSTRING 21074 . 21633) (TEDIT-SEE 21635 . 24224) (TEDIT.CHARWIDTH 24226 . 26250) (TEDIT.COPY 26252 + . 34688) (TEDIT.DELETE 34690 . 35380) (TEDIT.DO.BLUEPENDINGDELETE 35382 . 38449) (TEDIT.INSERT 38451 + . 43981) (TEDIT.KILL 43983 . 45540) (TEDIT.MAPLINES 45542 . 46941) (TEDIT.MAPPIECES 46943 . 47899) ( +TEDIT.MOVE 47901 . 57685) (TEDIT.QUIT 57687 . 59687) (TEDIT.STRINGWIDTH 59689 . 60360) (TEDIT.\INSERT +60362 . 62387) (TEXTOBJ 62389 . 63514) (TEXTSTREAM 63516 . 65131) (\TEDIT.INCLUDE 65133 . 69033) ( +\TEDIT.INSERT.PIECES 69035 . 78950) (\TEDIT.MOVE.PIECEMAPFN 78952 . 81031) (\TEDIT.OBJECT.SHOWSEL +81033 . 84662) (\TEDIT.RESTARTFN 84664 . 86659) (\TEDIT.CHARDELETE 86661 . 90623) ( +\TEDIT.COPY.PIECEMAPFN 90625 . 93850) (\TEDIT.DELETE 93852 . 101370) (\TEDIT.DIFFUSE.PARALOOKS 101372 + . 104136) (\TEDIT.FOREIGN.COPY? 104138 . 107865) (\TEDIT.QUIT 107867 . 111013) (\TEDIT.WORDDELETE +111015 . 115848) (\TEDIT1 115850 . 118546)) (118662 118778 (\CREATE.TEDIT.RESTART.MENU 118672 . 118776 +)) (118877 122566 (PLCHAIN 118887 . 119161) (PRINTLINE 119163 . 121927) (SEEFILE 121929 . 122564)) ( +122607 142250 (TEDIT.INSERT.OBJECT 122617 . 131694) (TEDIT.EDIT.OBJECT 131696 . 133952) ( +TEDIT.FIND.OBJECT 133954 . 134847) (TEDIT.FIND.OBJECT.SUBTREE 134849 . 135655) (TEDIT.PUT.OBJECT +135657 . 137316) (TEDIT.GET.OBJECT 137318 . 140517) (TEDIT.OBJECT.CHANGED 140519 . 142248)) (142528 +142891 (MAKETEDITFORM 142538 . 142889))))) STOP diff --git a/library/TEDIT.LCOM b/library/TEDIT.LCOM index dbbc0e2d8a117b77a0868f49ee109a73c1c713ac..c60251664037f9eb4583d394a63f316b8437add0 100644 GIT binary patch delta 438 zcmbQdiD}s;rU?W8I86)`3{8xU%`GO+ zVbq#jKV5Wk0Hf<>1*V0Z=Isn@42&Te=?p-?4I+X!muDt(1%UUL=WQra0PR7gf?>{h%Qr*Za-(o5Cs!U1-DQi zA3sN5*U4vjj8%+GfZ8KM{GGfMEG?lXxwyJHhWdo)fgBU8U}ip9h1ZP9%wTd1uL+~^ R=83%TJF!K|=E>6=7y%F%ZE64j delta 411 zcmZ3siD~jCrU?U)#i|gs>DJi5RmZYX&Q*UUjq{*e>=IP_=9OUX4;_5Q_2xAPpf}x4Av7!0o zIgDDu$Yuc@U}|J#JlT)YmC4v*vjWpXPQyk9HU`F!jC2Md;06)Fn+r3Oxq`p~>MH}L z2XKN!H|Yk>&Id69C;#9MuQxJL2nY=c_w;k|4-W|P4^S{PuuzBr+V2^n2XRTbo?DQ= zuU?R=yQjY&P}*1_#xWqk)z8I9!O}v(**_ps!NNo##?vo2G{_ZVkb=3H0*Vm|=7tDe zW@ZpwCP3Y+{(jDmA(J2Q81ouh0QE$K_&a$iSQ<}O;1y#u1d^hYeRvg_Oid=|^O`Uk UZC=9rzH{<%Mv=|Sr`IzA07F=4s{jB1 diff --git a/lispusers/COMPAREDIRECTORIES b/lispusers/COMPAREDIRECTORIES index a00a8f22..98930a1e 100644 --- a/lispusers/COMPAREDIRECTORIES +++ b/lispusers/COMPAREDIRECTORIES @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED " 9-May-2022 20:28:46"  -{DSK}kaplan>local>medley3.5>my-medley>lispusers>COMPAREDIRECTORIES.;218 123686 +(FILECREATED "25-May-2022 08:44:46"  +{DSK}kaplan>Local>medley3.5>working-medley>lispusers>COMPAREDIRECTORIES.;234 125334 - :CHANGES-TO (FNS SOURCE-FOR-COMPILED-P) + :CHANGES-TO (VARS COMPAREDIRECTORIESCOMS) - :PREVIOUS-DATE "25-Apr-2022 09:25:02" -{DSK}kaplan>local>medley3.5>my-medley>lispusers>COMPAREDIRECTORIES.;217) + :PREVIOUS-DATE "24-May-2022 15:49:54" +{DSK}kaplan>Local>medley3.5>working-medley>lispusers>COMPAREDIRECTORIES.;233) (* ; " @@ -52,8 +52,8 @@ Copyright (c) 1985-1988, 1990, 1994, 1998, 2018, 2020-2021 by Venue & Xerox Corp TABLEBROWSER)) (FNS CD.TABLEITEM CD.TABLEITEM.PRINTFN CD.TABLEITEM.COPYFN CDTABLEBROWSER.HEADING.REPAINTFN) - (FNS CDTABLEBROWSER.WHENSELECTEDFN CD.COMMANDSELECTEDFN CD-MENUFN CDBROWSER-COPY - CDBROWSER-DELETE-FILE CD-SWAPDIRS) + (FNS CDTABLEBROWSER.WHENSELECTEDFN CD.COMMANDSELECTEDFN CD-MENUFN CD-COMPARE-FILES + CDBROWSER-COPY CDBROWSER-DELETE-FILE CD-SWAPDIRS) (VARS CDTABLEBROWSER.MENUITEMS) (FILES (SYSLOAD) COMPARESOURCES COMPARETEXT)))) @@ -150,6 +150,8 @@ Copyright (c) 1985-1988, 1990, 1994, 1998, 2018, 2020-2021 by Venue & Xerox Corp (COMPAREDIRECTORIES.INFOS [LAMBDA (DIR INCLUDEDFILES EXCLUDEDFILES ALLVERSIONS DEPTH USEDIRECTORYDATE) + (* ;; "Edited 22-May-2022 14:17 by rmk") + (* ;; "Edited 29-Mar-2022 11:53 by rmk: Produces a list of CDINFOS with the match-name consed on to the front.") (* ;; "Each entry is a list of the form (matchname . CDINFOS). CDINFOS is guaranteed to be a singleton, unless ALLVERSIONS. ") @@ -159,12 +161,13 @@ Copyright (c) 1985-1988, 1990, 1994, 1998, 2018, 2020-2021 by Venue & Xerox Corp COLLECT (* ;; "GDATE/IDATE in case Y2K") - (* ; - "Is it a Lisp file? Get it's internal filecreated date. ") + (SETQ STREAM (OPENSTREAM FULLNAME 'INPUT)) (* ;  "So all the GETFILEINFO's, FILEDATES, etc. don't have to do the directory searching.") - (SETQ LDATE (OR (FILEDATE STREAM T) - (FILEDATE STREAM))) + (* ; + "Is it a Lisp file? Get it's internal filecreated date. ") + (CL:MULTIPLE-VALUE-SETQ (TYPE LDATE) + (COMPAREDIRECTORIES.INFOS.TYPE STREAM)) (PROG1 (LIST (MATCHNAME FULLNAME STARTPOS) (CREATE CDINFO FULLNAME _ (FULLNAME STREAM) @@ -174,7 +177,7 @@ Copyright (c) 1985-1988, 1990, 1994, 1998, 2018, 2020-2021 by Venue & Xerox Corp LDATE))) LENGTH _ (GETFILEINFO STREAM 'LENGTH) AUTHOR _ (GETFILEINFO STREAM 'AUTHOR) - TYPE _ (COMPAREDIRECTORIES.INFOS.TYPE STREAM LDATE) + TYPE _ TYPE EOL _ (EOLTYPE STREAM))) (CLOSEF? STREAM)) FINALLY @@ -319,18 +322,20 @@ Copyright (c) 1985-1988, 1990, 1994, 1998, 2018, 2020-2021 by Venue & Xerox Corp CDE]) (COMPAREDIRECTORIES.INFOS.TYPE - [LAMBDA (FULLNAME LDATE) (* ; "Edited 25-Apr-2022 09:02 by rmk") + [LAMBDA (FILE) (* ; "Edited 22-May-2022 14:27 by rmk") + (* ; "Edited 25-Apr-2022 09:02 by rmk") (* ; "Edited 4-Jan-2022 13:10 by rmk") (* ; "Edited 12-Dec-2021 22:50 by rmk") - (LET [(EXT (FILENAMEFIELD FULLNAME 'EXTENSION] - (IF LDATE - THEN (CL:IF (MEMB EXT *COMPILED-EXTENSIONS*) - 'COMPILED - 'SOURCE) - ELSEIF (PRINTFILETYPE FULLNAME) - ELSE (CL:IF (MEMB EXT '(TXT TEXT SH MD C)) - 'TEXT - 'OTHER)]) + (LET (TYPE DATE) + (CL:MULTIPLE-VALUE-SETQ (TYPE DATE) + (LISPFILETYPE FILE)) + (CL:UNLESS TYPE + (SETQ TYPE (IF (PRINTFILETYPE FILE) + ELSEIF (MEMB (FILENAMEFIELD FILE 'EXTENSION) + '(TXT TEXT SH MD C)) + THEN 'TEXT + ELSE 'OTHER))) + (CL:VALUES TYPE DATE]) (MATCHNAME [LAMBDA (NAME STARTPOS) (* ; "Edited 24-Feb-2022 09:10 by rmk") @@ -1866,105 +1871,123 @@ Copyright (c) 1985-1988, 1990, 1994, 1998, 2018, 2020-2021 by Venue & Xerox Corp (CD-MENUFN [LAMBDA (TBITEM MENUITEM CDBROWSER KEY) - (* ;; "Edited 27-Feb-2022 12:47 by rmk: FILELABELFN, if provided, can be used to calculate abbreviated labels for the file, for example, to strip off any long common prefixes.") + (* ;; "Edited 21-May-2022 21:59 by rmk") - (* ;; "The FILELABELFN, if provided, can be used to calculate abbreviated labels for the file, for example, to strip off any long common prefixes.") + (* ;; "Edited 27-Feb-2022 12:47 by rmk: FILELABELFN, if provided, can be used to calculate abbreviated labels for the file, for example, to strip off any long common prefixes.") (* ;; "MENUITEM is of the form (display-atom . extrainfo). The selector for the selectq is either the CAR of the extrainfo or the display atom.") - (DECLARE (USEDFREE CDENTRY LABEL1 LABLE2 FILE1 FILE2 WINDOW)) + (DECLARE (USEDFREE LABEL1 LABEL2 FILE1 FILE2 WINDOW TYPE)) (SETQ MENUITEM (OR (CADDR MENUITEM) (CAR MENUITEM))) (CL:WHEN (MEMB MENUITEM '(Compare See See% right See% both See% left)) (* ; "Close the previous ones") (CLOSEWITH.DOIT WINDOW)) - (LET - (CHILDREN) - (SETQ CHILDREN - (SELECTQ MENUITEM - (Compare (IF (AND FILE1 FILE2) - THEN [SELECTQ TYPE - (SOURCE (CSBROWSER FILE1 FILE2 NIL LABEL1 LABEL2 - (RELCREATEREGION - [FIXR (TIMES 0.75 (FETCH (REGION WIDTH) - OF (WINDOWPROP WINDOW - 'REGION] - 200 - 'LEFT - 'TOP - `(,WINDOW 0.125) - (IPLUS (FETCH (REGION BOTTOM) - OF (WINDOWPROP WINDOW 'REGION)) - 20) - NIL))) - (COMPILED (FLASHWINDOW T) - (PRIN3 "Cannot compare compiled files" T)) - ((TEXT TEDIT OTHER) - (* ;; - "Works for TEDIT, but doesn't detect image object differences") - - (LET ((COMPARETEXT.ALLCHUNKS)) - (DECLARE (SPECVARS COMPARETEXT.ALLCHUNKS)) - (COMPARETEXT FILE1 FILE2 'LINE - (RELCREATEPOSITION `(,WINDOW 0.5) - (IPLUS (FETCH (REGION BOTTOM) - OF (WINDOWPROP WINDOW 'REGION)) - 20)) - (LIST LABEL1 LABEL2)))) - (PROGN (FLASHWINDOW T) - (PRIN3 "Unable to compare, showing both" T) - (EXAMINEFILES FILE1 FILE2 LABEL1 LABEL2 - (RELCREATEREGION 1400 700 'LEFT 'TOP - `(,WINDOW 0.5 -701) - (IPLUS (FETCH (REGION BOTTOM) - OF (WINDOWPROP WINDOW 'REGION)) - -1) - NIL] - ELSE (FLASHWINDOW T) - (PRIN3 "Only one file" T))) - (See% left (IF FILE1 - THEN (TEDIT-SEE FILE1 (RELCREATEREGION 700 700 'RIGHT 'TOP - `(,WINDOW 0.5) - (IPLUS (FETCH (REGION BOTTOM) - OF (WINDOWPROP WINDOW 'REGION)) - -1) - T) - NIL - (CONCAT "SEE window for " LABEL1)) - ELSE (FLASHWINDOW T) - (PRIN3 "No file to print" T))) - (See% right (IF FILE2 - THEN (TEDIT-SEE FILE2 (RELCREATEREGION 700 700 'LEFT 'TOP - `(,WINDOW 0.5) - (IPLUS (FETCH (REGION BOTTOM) - OF (WINDOWPROP WINDOW 'REGION)) - -1) - NIL) - NIL - (CONCAT "SEE window for " LABEL2)) - ELSE (FLASHWINDOW T) - (PRIN3 "No file to print" T))) - ((See See% both) - (EXAMINEFILES FILE1 FILE2 LABEL1 LABEL2 (RELCREATEREGION - 1400 700 'LEFT 'TOP `(,WINDOW 0.5 -701) + (LET (CHILDREN) + (SETQ CHILDREN (SELECTQ MENUITEM + (Compare (IF (AND FILE1 FILE2) + THEN (CD-COMPARE-FILES FILE1 FILE2 LABEL1 LABEL2 TYPE + (WINDOWPROP WINDOW 'REGION)) + ELSE (FLASHWINDOW T) + (PRIN3 "Only one file" T))) + (See% left (IF FILE1 + THEN (TEDIT-SEE FILE1 + (RELCREATEREGION + 700 700 'RIGHT 'TOP `(,WINDOW 0.5) (IPLUS (FETCH (REGION BOTTOM) OF (WINDOWPROP WINDOW 'REGION)) -1) - NIL))) - (Copy% -> (CDBROWSER-COPY CDBROWSER TBITEM 'LEFT)) - (Copy% <- (CDBROWSER-COPY CDBROWSER TBITEM 'RIGHT)) - (Delete% <- (CDBROWSER-DELETE-FILE CDBROWSER TBITEM 'LEFT T)) - (|Delete ALL <-| - (CDBROWSER-DELETE-FILE CDBROWSER TBITEM 'LEFT NIL)) - (Delete% -> (CDBROWSER-DELETE-FILE CDBROWSER TBITEM 'RIGHT T)) - (|Delete ALL ->| - (CDBROWSER-DELETE-FILE CDBROWSER TBITEM 'RIGHT NIL)) - (SHOULDNT))) - (CLOSEWITH CHILDREN WINDOW) - (MOVEWITH CHILDREN WINDOW]) + T) + NIL + (CONCAT "SEE window for " LABEL1)) + ELSE (FLASHWINDOW T) + (PRIN3 "No file to print" T))) + (See% right (IF FILE2 + THEN (TEDIT-SEE FILE2 + (RELCREATEREGION + 700 700 'LEFT 'TOP `(,WINDOW 0.5) + (IPLUS (FETCH (REGION BOTTOM) + OF (WINDOWPROP WINDOW 'REGION)) + -1) + NIL) + NIL + (CONCAT "SEE window for " LABEL2)) + ELSE (FLASHWINDOW T) + (PRIN3 "No file to print" T))) + ((See See% both) + (EXAMINEFILES FILE1 FILE2 LABEL1 LABEL2 + (RELCREATEREGION 1400 700 'LEFT 'TOP `(,WINDOW 0.5 -701) + (IPLUS (FETCH (REGION BOTTOM) + OF (WINDOWPROP WINDOW 'REGION)) + -1) + NIL))) + (Copy% -> (CDBROWSER-COPY CDBROWSER TBITEM 'LEFT)) + (Copy% <- (CDBROWSER-COPY CDBROWSER TBITEM 'RIGHT)) + (Delete% <- (CDBROWSER-DELETE-FILE CDBROWSER TBITEM 'LEFT T)) + (|Delete ALL <-| + (CDBROWSER-DELETE-FILE CDBROWSER TBITEM 'LEFT NIL)) + (Delete% -> (CDBROWSER-DELETE-FILE CDBROWSER TBITEM 'RIGHT T)) + (|Delete ALL ->| + (CDBROWSER-DELETE-FILE CDBROWSER TBITEM 'RIGHT NIL)) + (SHOULDNT))) + (CLOSEWITH CHILDREN WINDOW) + (MOVEWITH CHILDREN WINDOW]) + +(CD-COMPARE-FILES + [LAMBDA (FILE1 FILE2 LABEL1 LABEL2 TYPE PARENTREGION) (* ; "Edited 22-May-2022 14:41 by rmk") + (PROG NIL + (SETQ FILE1 (OR (STREAMP FILE1) + (INFILEP FILE1))) + (SETQ FILE2 (OR (STREAMP FILE2) + (INFILEP FILE2))) + (CL:UNLESS TYPE + (SETQ TYPE (COMPAREDIRECTORIES.INFOS.TYPE FILE1)) + (CL:UNLESS (EQ TYPE (COMPAREDIRECTORIES.INFOS.TYPE FILE2)) + (FLASHWINDOW T) + (PRIN3 "Can't compare files of different types" T) + (RETURN))) + (RETURN (SELECTQ TYPE + (SOURCE (CSBROWSER FILE1 FILE2 NIL LABEL1 LABEL2 + (AND PARENTREGION (RELCREATEREGION + (FIXR (TIMES 0.75 (FETCH (REGION WIDTH) + OF PARENTREGION))) + 200 + 'LEFT + 'TOP + `(,PARENTREGION 0.125) + (IPLUS (FETCH (REGION BOTTOM) OF PARENTREGION + ) + 20) + NIL)))) + (COMPILED (FLASHWINDOW T) + (PRIN3 "Cannot compare compiled files" T)) + ((TEXT TEDIT OTHER) + (* ;; + "Works for TEDIT, but doesn't detect image object differences") + + (LET ((COMPARETEXT.ALLCHUNKS)) + (DECLARE (SPECVARS COMPARETEXT.ALLCHUNKS)) + (COMPARETEXT FILE1 FILE2 'LINE + (AND PARENTREGION (RELCREATEPOSITION + `(,PARENTREGION 0.5) + (IPLUS (FETCH (REGION BOTTOM) OF + PARENTREGION + ) + 20))) + (LIST LABEL1 LABEL2)))) + (PROGN (FLASHWINDOW T) + (PRIN3 "Unable to compare, showing both" T) + (EXAMINEFILES FILE1 FILE2 LABEL1 LABEL2 + (AND PARENTREGION (RELCREATEREGION 1400 700 'LEFT 'TOP + `(,PARENTREGION 0.5 -701) + (IPLUS (FETCH (REGION BOTTOM) + OF PARENTREGION) + -1) + NIL]) (CDBROWSER-COPY - [LAMBDA (CDBROWSER TBITEM SOURCE) (* ; "Edited 25-Apr-2022 09:24 by rmk") + [LAMBDA (CDBROWSER TBITEM SOURCE) (* ; "Edited 24-May-2022 15:49 by rmk") + (* ; "Edited 25-Apr-2022 09:24 by rmk") (* ; "Edited 5-Feb-2022 17:27 by rmk") (* ; "Edited 2-Feb-2022 22:18 by rmk") @@ -2095,24 +2118,25 @@ Copyright (c) 1985-1988, 1990, 1994, 1998, 2018, 2020-2021 by Venue & Xerox Corp (PUTPROPS COMPAREDIRECTORIES COPYRIGHT ("Venue & Xerox Corporation" 1985 1986 1987 1988 1990 1994 1998 2018 2020 2021)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (2611 21960 (COMPAREDIRECTORIES 2621 . 7454) (COMPAREDIRECTORIES.INFOS 7456 . 10307) ( -COMPAREDIRECTORIES.CANDIDATES 10309 . 13694) (CDENTRIES.SELECT 13696 . 18471) ( -COMPAREDIRECTORIES.INFOS.TYPE 18473 . 19194) (MATCHNAME 19196 . 19876) (CD.INSURECDVALUE 19878 . 21492 -) (CD.UPDATEWIDTHS 21494 . 21958)) (21961 31630 (CDFILES 21971 . 27724) (CDFILES.MATCH 27726 . 29351) -(CDFILES.PATS 29353 . 31628)) (31631 46716 (CDPRINT 31641 . 33986) (CDPRINT.HEADER 33988 . 34885) ( -CDPRINT.LINE 34887 . 37443) (CDPRINT.MAXWIDTHS 37445 . 41560) (CDPRINT.COLHEADERS 41562 . 42200) ( -CDPRINT.COLUMNS 42202 . 46081) (CDTEDIT 46083 . 46714)) (46717 55086 (CDMAP 46727 . 48159) (CDENTRY -48161 . 48470) (CDSUBSET 48472 . 49911) (CDMERGE 49913 . 53767) (CDMERGE.COMMON 53769 . 55084)) (55087 - 62625 (BINCOMP 55097 . 59386) (EOLTYPE 59388 . 61950) (EOLTYPE.SHOW 61952 . 62623)) (63153 75680 ( -FIND-UNCOMPILED-FILES 63163 . 66806) (FIND-UNSOURCED-FILES 66808 . 69192) (FIND-SOURCE-FILES 69194 . -70932) (FIND-COMPILED-FILES 70934 . 72811) (FIND-UNLOADED-FILES 72813 . 73666) (FIND-LOADED-FILES -73668 . 74096) (FIND-MULTICOMPILED-FILES 74098 . 75678)) (75681 84112 (CREATED-AS 75691 . 80488) ( -SOURCE-FOR-COMPILED-P 80490 . 83417) (COMPILE-SOURCE-DATE-DIFF 83419 . 84110)) (84113 94419 ( -FIX-DIRECTORY-DATES 84123 . 87116) (FIX-EQUIV-DATES 87118 . 88643) (COPY-COMPARED-FILES 88645 . 90466) - (COPY-MISSING-FILES 90468 . 92625) (COMPILED-ON-SAME-SOURCE 92627 . 94417)) (94613 101959 (CDBROWSER -94623 . 98550) (CDBROWSER.STRINGS 98552 . 101957)) (102121 103857 (CD.TABLEITEM 102131 . 102351) ( -CD.TABLEITEM.PRINTFN 102353 . 102552) (CD.TABLEITEM.COPYFN 102554 . 103612) ( -CDTABLEBROWSER.HEADING.REPAINTFN 103614 . 103855)) (103858 123102 (CDTABLEBROWSER.WHENSELECTEDFN -103868 . 104336) (CD.COMMANDSELECTEDFN 104338 . 109439) (CD-MENUFN 109441 . 115804) (CDBROWSER-COPY -115806 . 119366) (CDBROWSER-DELETE-FILE 119368 . 122581) (CD-SWAPDIRS 122583 . 123100))))) + (FILEMAP (NIL (2640 22197 (COMPAREDIRECTORIES 2650 . 7483) (COMPAREDIRECTORIES.INFOS 7485 . 10359) ( +COMPAREDIRECTORIES.CANDIDATES 10361 . 13746) (CDENTRIES.SELECT 13748 . 18523) ( +COMPAREDIRECTORIES.INFOS.TYPE 18525 . 19431) (MATCHNAME 19433 . 20113) (CD.INSURECDVALUE 20115 . 21729 +) (CD.UPDATEWIDTHS 21731 . 22195)) (22198 31867 (CDFILES 22208 . 27961) (CDFILES.MATCH 27963 . 29588) +(CDFILES.PATS 29590 . 31865)) (31868 46953 (CDPRINT 31878 . 34223) (CDPRINT.HEADER 34225 . 35122) ( +CDPRINT.LINE 35124 . 37680) (CDPRINT.MAXWIDTHS 37682 . 41797) (CDPRINT.COLHEADERS 41799 . 42437) ( +CDPRINT.COLUMNS 42439 . 46318) (CDTEDIT 46320 . 46951)) (46954 55323 (CDMAP 46964 . 48396) (CDENTRY +48398 . 48707) (CDSUBSET 48709 . 50148) (CDMERGE 50150 . 54004) (CDMERGE.COMMON 54006 . 55321)) (55324 + 62862 (BINCOMP 55334 . 59623) (EOLTYPE 59625 . 62187) (EOLTYPE.SHOW 62189 . 62860)) (63390 75917 ( +FIND-UNCOMPILED-FILES 63400 . 67043) (FIND-UNSOURCED-FILES 67045 . 69429) (FIND-SOURCE-FILES 69431 . +71169) (FIND-COMPILED-FILES 71171 . 73048) (FIND-UNLOADED-FILES 73050 . 73903) (FIND-LOADED-FILES +73905 . 74333) (FIND-MULTICOMPILED-FILES 74335 . 75915)) (75918 84349 (CREATED-AS 75928 . 80725) ( +SOURCE-FOR-COMPILED-P 80727 . 83654) (COMPILE-SOURCE-DATE-DIFF 83656 . 84347)) (84350 94656 ( +FIX-DIRECTORY-DATES 84360 . 87353) (FIX-EQUIV-DATES 87355 . 88880) (COPY-COMPARED-FILES 88882 . 90703) + (COPY-MISSING-FILES 90705 . 92862) (COMPILED-ON-SAME-SOURCE 92864 . 94654)) (94850 102196 (CDBROWSER +94860 . 98787) (CDBROWSER.STRINGS 98789 . 102194)) (102358 104094 (CD.TABLEITEM 102368 . 102588) ( +CD.TABLEITEM.PRINTFN 102590 . 102789) (CD.TABLEITEM.COPYFN 102791 . 103849) ( +CDTABLEBROWSER.HEADING.REPAINTFN 103851 . 104092)) (104095 124750 (CDTABLEBROWSER.WHENSELECTEDFN +104105 . 104573) (CD.COMMANDSELECTEDFN 104575 . 109676) (CD-MENUFN 109678 . 113989) (CD-COMPARE-FILES +113991 . 117343) (CDBROWSER-COPY 117345 . 121014) (CDBROWSER-DELETE-FILE 121016 . 124229) (CD-SWAPDIRS + 124231 . 124748))))) STOP diff --git a/lispusers/COMPAREDIRECTORIES.LCOM b/lispusers/COMPAREDIRECTORIES.LCOM index a7116590460d3f5b713736a6bf1e6b1eb03bcd8c..e13ca9fc83e0658fe205e7424fe80b1a6c677658 100644 GIT binary patch delta 2997 zcmb7G&u<&Y73QvFRbu0qN*qO|4dj)zYzhsDo!!~xl5rKS$d$MWxl8XZMWt{cP}a&K zERzC7z!8#`g`=Xa(L>X13K+;AP@orEih%wIs#}5Fa?Ghc^j`SX-kQFdr6fx3q2+?x=_i}luGe>h?#|r(=Jr;zJy+@6 zZEnpy2-dfPT_vl|J?wPvx7znYUA);>=q$ujvT}++s0*z&q!#Oy3Jj}ev)L4^H+#7MzhM$3H5*SaS{1YCnuc$dAZ5I8`U2Hb z5dW~`z5Byk|Em{Q6$(UF6&wo1vSBZoUdDIgkX|<2@H@Z0+$cI#Zx#wQ*Ic%ox|b=T zbx6r{$ZNGg^97au-?l|XIcSQP#;#DP+E4?cz_L+cA2L{MAmPu)Kf9B-6pM|`8wyPr6ppJ?N6xe}C5VDE zEheu#{X5Q*$<^c$%AS3bjHO9lhhoL?%*D5X=mbos;=fljf#eieGJSS!mc8fz(a703 z&BGE8D4{h9R`jW8;0-Iu(pe=*0hT_tQ8gj2LDle!Wj@L2aHqOlu{bEc{?z%tEX@ z5{n6wk{I0r59SYq-@hXYe<&Zm87&@ucm6c$os;-~$`|+e|B7{85EHSqDnr$*E&!D| zK67KyGQCO(@N6~LvU%{LU@9lx>3~kw*nyY?3qzye_+`@tRR`Z(@j=M}4yNs)YbXbr zJGejj)9vu3M{l8X4a+V$4OoQ8D#0&|DZ=3#C{&CEv%(hD=##B#JP@;hNih~1HAGQ3 z95sYBasAZ4-`wWWIGRkvjCJni^L={c?qBuxr(MslFGupxFUKy9gN#FR_?C6AC9VD@R^v?+xw!aPNvx4?o>|;~GP5U-+Oce!)%hzZ1x> z_I~%)Z4OzE1{QK6LDg9{8y2R3ipj(?m(OTk1+VPXD<#_ps^`P6e)9SV)wF1&G#UwC z?<@Hn6iW-P)9_3;Q*>(YVbl@r+>(mruwqm#8!xtEdZ17hT(c6jRUBIc!m5al!yqYldrPq9~~OaOP*< z>r-6;*IFuLv~v_bDg|3XF8~93LuT$Hpv>1uicyS&GbjP7Umn8yEA=Y>)HTJQIQVVGBcqNtR$y~;{Z+0Q}BXd2G+2RfvjVu z1Oc`%g>RGbAlxX)lW1GFb#JqWl#cg^Fhn^vj*P`&wt|gbAJCB^_Q_^9U{$Kf6w*>w zg-lK&vv}7Uq}csGY_-=r4`HLzg%q01^GztnOitMy*uXXmy$)=5TkT#7Sr?aIP$N`{ z)Z*AzXru>c6)`L+r@gfcop!)MQ{i78)A!F^U7@7M(~KDhH_G@Xi&s`G*X?&bY+Nd^ zi?;nia$3kJ0}{nhGHPMnO&+jJcr-T^2vlG#j?>5Ccr>oXjKMq_*Tm9cdLSB)mYyF> zwIa&l6cY8p%|vOyJ@fO%=0ef@oN%cb{_W9geKR5(Qxvu?f4zC}Ta0Kfj6o)# zJBm<;Kob$E^T;`wdJVOu48Qd8d%&+^Kra@hqP) z63d|ofM8Xe0yKb70!42?dzjZRvKe6w+FEfzi&~fhYHk2A5wRQ9d3T;*-Pr^x@mW8b zVc)~I0#aoS^BX+OBBRQmM#rmIc+nzOjGW6y<%jIS%TJcDyCc^E$t#1FNU&5n;h|I5 z#aMSF`0ijaKr1Dz29#rorU{l42SM)joVr_Not0Pma80UG*nIrvD86NA_^ZdMw`GEl zMJbDK$XP&}QZ}c8ra-FLY~Snwdjw-~^J?0G&IYWvHa3E8(C$HRcRScg9sKk0jh8Q- YE3q*7#2brqrVQ_VcH`j5lY1lo0dNo3Q~&?~ delta 2761 zcma)8L2nyH6!tnwX$^^zlBP*O>XSvNEpXVG-P!e8ZRpls$A-;ry1PzV36uu1B@wP2 zxj_(7WJn7L3IeqBg1Ep1Brc>;E>I~FC-?)X9N@wapce#)LwPgnq)8eOK8$DPz4yI0 z-@Nx`-@BQ7{hQ>6GyP!XCg)aiRHhWDT%h@n79KwK(xtFX_%i|M&14J^mI0rDOYW)=vii9l~8GK$OTnPL+aI%|MY7o{wwsZ zPV5hnJP@jAc?}B1is?*PelBn!Q+E6m#yRL@p)loH(^a?T=St`l(v;=QrB+OnY!oOf z$n<~t?6^!4Jvwu6V0|U|clWRYlMYN_2rzBhd_thg|K#ZXgP)!|(wj&eIAxwLmU_Aq z_&arok1yWpZyl_3Z5(@QF~!&YW{-P#cA#scYjrKL;SLFZ$T24^Fpx?!C|1NGuK@QXP;?dN-C_~_ zmO7bXVAg_)>tP5A*p@R9RFHoSL{e2YI)XAm zC&d$T0l^6HaQvXw2O5EZN31aL-I`alfErMAC#N_a!1!q_$H!x0 zDFKt$PximPG(?1k=~>)#%(U%drRF^CL-gGnCr?qBsX8Th2Feh#N^r(GwJnM>2DW+H zviYVKPx-D6Jmf5NC6dvTtHW(iq}^tJU&5RhMBM&-O`@AVjzKt{i(fj${8YqIa%* zWq9I5mH4kOk{aFsfq~J4G`9Mp$g#=Fh~Iy-fDlt2z-Crhv)}DBGrA z=^(3$wgXvJczpjZ-Q@4Y30 z@9AB%UfwpaF_)`nJ;>9j|EK!yq!R%-*t&FyT?_(>C^@$p9a~Dik zAaJLEZJ{yM06z>z;koAW0x%V`J`6$4=Y^Vzfd~*4pDv-+T6|$)859H45@D45mUD%X zSfL(XXfFfJ8$yBR)fj-v2H2SVKn&Jt;{=UGZsQ}0?s!Khc$n=*PB7`X6M~fzpM-Ap zdwxgw#WmLoMT^%B$jD<1a=J{iz}l2Rn%B$Ai;el_%W$FD!p|txP=!_&R4n_n(}WB7 z#RkhwSZXacmQjJ?_C02bk&n$%nCQlSb_(*Ib{q8-Xf{F)dL&Hai^O)uL^T?nzxH@{ z3W%meA6`oz#;+iZnNXGmT?2VcXVFh@tLwjCOZP^ZPtNqmT_WS3^KI8GWg)fx?kB5V F{{WBwqo)7> diff --git a/lispusers/COMPARESOURCES b/lispusers/COMPARESOURCES index c6fd3d9c..fc25dd2f 100644 --- a/lispusers/COMPARESOURCES +++ b/lispusers/COMPARESOURCES @@ -1,12 +1,13 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "12-May-2022 10:17:13"  -{DSK}kaplan>Local>medley3.5>my-medley>lispusers>COMPARESOURCES.;123 41825 +(FILECREATED "22-May-2022 18:46:01"  +{DSK}kaplan>local>medley3.5>working-medley>lispusers>COMPARESOURCES.;128 39655 - :CHANGES-TO (FNS CSBROWSER) + :CHANGES-TO (FNS COMPARESOURCES CSBROWSER \CS.EXAMINE) + (VARS COMPARESOURCESCOMS) - :PREVIOUS-DATE "11-May-2022 19:12:38" -{DSK}kaplan>Local>medley3.5>my-medley>lispusers>COMPARESOURCES.;122) + :PREVIOUS-DATE "12-May-2022 10:17:13" +{DSK}kaplan>local>medley3.5>working-medley>lispusers>COMPARESOURCES.;123) (* ; " @@ -29,7 +30,6 @@ Copyright (c) 1985-1988, 2018, 2020-2021 by Xerox Corporation. 'CSOBJ.COPYBUTTONEVENTINFN] (VARS COMPARESOURCETYPES DEFAULT.DECLARE.TAGS) (COMS (FNS CSBROWSER) - (INITVARS (COMPARESOURCES-BROWSER-TYPE 'OBJECTWINDOW)) (FILES (SYSLOAD) OBJECTWINDOW EXAMINEDEFS REGIONMANAGER)) (DECLARE%: EVAL@COMPILE DONTCOPY (RECORDS CSTYPE) @@ -37,19 +37,15 @@ Copyright (c) 1985-1988, 2018, 2020-2021 by Xerox Corporation. (DEFINEQ (COMPARESOURCES - [LAMBDA (FILEX FILEY EXAMINE DW? LISTSTREAM IGNORECOMMENTS)(* ; "Edited 11-May-2022 19:12 by rmk") - (* ; "Edited 28-Jan-2022 17:10 by rmk") - (* ; "Edited 26-Dec-2021 21:32 by rmk") - (* ; "Edited 19-Apr-2018 10:49 by rmk:") + [LAMBDA (FILEX FILEY EXAMINE DW? LISTSTREAM IGNORECOMMENTS LABELX LABELY) + (* ; "Edited 22-May-2022 18:45 by rmk") -(* ;;; "Compare two lisp source files, reporting differences. LISTSTREAM if given is an open stream") +(* ;;; "Compare two lisp source files, reporting differences. LISTSTREAM if given is an open stream, or an object window") (DECLARE (SPECVARS FILEX FILEY EXAMINE DIFFERENCES)) - (PROG (DIFFERENCES BODYX BODYY ENVX ENVY DECLAREX DECLAREY DATECOL - [INSERTOBJECTS (AND EXAMINE (IF (TEXTSTREAMP LISTSTREAM) - THEN 'TEDIT - ELSEIF (OBJWINDOWP LISTSTREAM) - THEN 'OBJECTWINDOW] + (PROG (DIFFERENCES BODYX BODYY ENVX ENVY DECLAREX DECLAREY DATECOL (INSERTOBJECTS + (AND EXAMINE (OBJWINDOWP + LISTSTREAM))) (COMPARESTREAM LISTSTREAM) (CONTEXTSTREAM LISTSTREAM) OBJECTS) @@ -59,10 +55,12 @@ Copyright (c) 1985-1988, 2018, 2020-2021 by Xerox Corporation. (SETQ CONTEXTSTREAM (CL:MAKE-STRING-OUTPUT-STREAM)) (LINELENGTH 65535 COMPARESTREAM) (* ; "Let the receiver do the wrapping") (LINELENGTH 65535 CONTEXTSTREAM)) - (OR (INFILEP FILEX) + (OR (STREAMP FILEX) + (INFILEP FILEX) (SETQ FILEX (FINDFILE FILEX T)) (RETURN (printout CONTEXTSTREAM FILEX " not found" T))) - (OR (INFILEP FILEY) + (OR (STREAMP FILEY) + (INFILEP FILEY) (SETQ FILEY (FINDFILE FILEY T)) (RETURN (printout CONTEXTSTREAM FILEY " not found" T))) @@ -79,15 +77,18 @@ Copyright (c) 1985-1988, 2018, 2020-2021 by Xerox Corporation. (DECLARE (SPECVARS *REMOVE-INTERLISP-COMMENTS*)) (SETQ BODYX (REMOVE-COMMENTS BODYX)) (SETQ BODYY (REMOVE-COMMENTS BODYY)))) + (CL:UNLESS LABELX (SETQ LABELX FILEX)) + (CL:UNLESS LABELY (SETQ LABELY FILEY)) [SETQ DATECOL (PLUS 2 (CONSTANT (NCHARS "Comparing")) - (IMAX (NCHARS FILEX) - (NCHARS FILEY] - (printout CONTEXTSTREAM "Comparing " FILEX .TAB0 DATECOL "dated " (GETFILEINFO FILEX - 'CREATIONDATE) + (IMAX (NCHARS LABELX) + (NCHARS LABELY] + (printout CONTEXTSTREAM "Comparing " LABELX .TAB0 DATECOL "dated " (GETFILEINFO + FILEX + 'CREATIONDATE) .TAB [SUB1 (CONSTANT (IDIFFERENCE (NCHARS "Comparing ") (NCHARS "and "] - " and " FILEY .TAB0 DATECOL "dated " (GETFILEINFO FILEY 'CREATIONDATE) + " and " LABELY .TAB0 DATECOL "dated " (GETFILEINFO FILEY 'CREATIONDATE) T T) [SETQ DECLAREX (for EXPR in BODYX collect EXPR when (EQ (CAR EXPR) 'DECLARE%:] @@ -131,15 +132,11 @@ Copyright (c) 1985-1988, 2018, 2020-2021 by Xerox Corporation. (REVERSE Y) DW?] (TERPRI CONTEXTSTREAM)) - (SELECTQ INSERTOBJECTS - (OBJECTWINDOW (CL:UNLESS (EQ 0 (GETFILEPTR CONTEXTSTREAM)) - (PUSH OBJECTS (CSOBJ.CREATE (CL:GET-OUTPUT-STREAM-STRING - CONTEXTSTREAM)))) - (SETQ OBJECTS (DREVERSE OBJECTS)) - (OBJ.ADDMANYTOW LISTSTREAM OBJECTS)) - (TEDIT (HELP "Don't know about TEDIT")) - (NIL) - (HELP)) + (CL:WHEN INSERTOBJECTS + (CL:UNLESS (EQ 0 (GETFILEPTR CONTEXTSTREAM)) + (PUSH OBJECTS (CSOBJ.CREATE (CL:GET-OUTPUT-STREAM-STRING CONTEXTSTREAM)))) + (SETQ OBJECTS (DREVERSE OBJECTS)) + (OBJ.ADDMANYTOW LISTSTREAM OBJECTS)) (RETURN (OR (REVERSE DIFFERENCES) 'SAME]) @@ -304,13 +301,8 @@ Copyright (c) 1985-1988, 2018, 2020-2021 by Xerox Corporation. RESULT)]) (\CS.EXAMINE - [LAMBDA (X Y ONLYONE NAME TYPE) (* ; "Edited 24-Dec-2021 22:48 by rmk") - (* ; "Edited 19-Dec-2021 22:46 by rmk") - (* ; "Edited 9-Dec-2021 23:23 by rmk") - (* ; "Edited 4-Dec-2021 16:43 by rmk") - (* ; "Edited 2-Dec-2021 15:23 by rmk:") - (* ; "Edited 29-Nov-2021 20:37 by rmk:") - (* ; "Edited 27-Nov-2021 11:21 by rmk:") + [LAMBDA (X Y ONLYONE NAME TYPE) (* ; "Edited 22-May-2022 16:28 by rmk") + (* ; "Edited 27-Nov-2021 11:21 by rmk:") (DECLARE (USEDFREE EXAMINE INSERTOBJECTS COMPARESTREAM CONTEXTSTREAM OBJECTS)) (* ;; "ONLYONE as a flag, because we don't want to test X or Y for NIL, that could be the contrasting value.") @@ -324,34 +316,30 @@ Copyright (c) 1985-1988, 2018, 2020-2021 by Xerox Corporation. (* ;; "Context gets printed to the CONTEXTSTREAM, diffs go to the COMPARESTREAM. If we aren't doing objects, those are the same streams, and the output gets printed in the right order. Nothing to do here.") (IF INSERTOBJECTS - THEN (SELECTQ INSERTOBJECTS - (OBJECTWINDOW [LET (STRING) + THEN [LET (STRING) - (* ;; "Take out last EOL, let SEPDIST space things out.") + (* ;; "Take out last EOL, let SEPDIST space things out.") - (CL:UNLESS (EQ 0 (GETFILEPTR CONTEXTSTREAM)) - (SETQ STRING (CL:GET-OUTPUT-STREAM-STRING CONTEXTSTREAM)) - (CL:WHEN (EQ (CHARCODE EOL) - (NTHCHARCODE STRING -1)) - (SETQ STRING (OR (SUBSTRING STRING 1 -2) - ""))) - (PUSH OBJECTS (CSOBJ.CREATE STRING))) - (CL:UNLESS (EQ 0 (GETFILEPTR COMPARESTREAM)) - (SETQ STRING (CL:GET-OUTPUT-STREAM-STRING COMPARESTREAM)) + (CL:UNLESS (EQ 0 (GETFILEPTR CONTEXTSTREAM)) + (SETQ STRING (CL:GET-OUTPUT-STREAM-STRING CONTEXTSTREAM)) + (CL:WHEN (EQ (CHARCODE EOL) + (NTHCHARCODE STRING -1)) + (SETQ STRING (OR (SUBSTRING STRING 1 -2) + ""))) + (PUSH OBJECTS (CSOBJ.CREATE STRING))) + (CL:UNLESS (EQ 0 (GETFILEPTR COMPARESTREAM)) + (SETQ STRING (CL:GET-OUTPUT-STREAM-STRING COMPARESTREAM)) - (* ;; "Don't know why, but SEPTDIST doesn't work if there if there isn't at least one EOL. Magically, this gets the right appearance and behavior.") + (* ;; "Don't know why, but SEPTDIST doesn't work if there if there isn't at least one EOL. Magically, this gets the right appearance and behavior.") - (CL:WHEN (AND (EQ (CHARCODE EOL) - (NTHCHARCODE STRING -1)) - (EQ (CHARCODE EOL) - (NTHCHARCODE STRING -2))) - (SETQ STRING (OR (SUBSTRING STRING 1 -2) - ""))) - (PUSH OBJECTS (CSOBJ.CREATE STRING - (LIST NAME TYPE X Y LABEL1 LABEL2) - ONLYONE)))]) - (TEDIT (HELP "TEDIT NOT IMPLEMENTED")) - NIL) + (CL:WHEN (AND (EQ (CHARCODE EOL) + (NTHCHARCODE STRING -1)) + (EQ (CHARCODE EOL) + (NTHCHARCODE STRING -2))) + (SETQ STRING (OR (SUBSTRING STRING 1 -2) + ""))) + (PUSH OBJECTS (CSOBJ.CREATE STRING (LIST NAME TYPE X Y LABEL1 LABEL2) + ONLYONE)))] ELSEIF (OR (LISTP X) (LISTP Y)) THEN (* ; @@ -634,8 +622,11 @@ Copyright (c) 1985-1988, 2018, 2020-2021 by Xerox Corporation. (DEFINEQ (CSBROWSER - [LAMBDA (FILEX FILEY DW? LABEL1 LABEL2 REGION IGNORECOMMENTS) - (* ; "Edited 12-May-2022 10:16 by rmk") + [LAMBDA (FILEX FILEY DW? LABEL1 LABEL2 REGION IGNORECOMMENTS TITLE) + + (* ;; "Edited 22-May-2022 18:42 by rmk") + + (* ;; "Edited 12-May-2022 10:16 by rmk") (* ;; "Edited 24-Jan-2022 23:11 by rmk: EXAMINE is non-NIL, we run the compare twice. Once to get the TEDIT up as a kind of table of contents, and the second time to run through all of the SEDIT windows.") @@ -646,44 +637,33 @@ Copyright (c) 1985-1988, 2018, 2020-2021 by Xerox Corporation. (* ;; "Don't use the INFILEP value, because that might screw with capitalization that the caller prefers. If the file can be found that way, then lower functions will find it.") (DECLARE (SPECVARS LABEL1 LABEL2)) - (SETQ FILEX (OR (INFILEP FILEX) + (SETQ FILEX (OR (STREAMP FILEX) + (INFILEP FILEX) (FINDFILE FILEX NIL DIRECTORIES) (ERROR "FILE NOT FOUND" FILEX))) - (SETQ FILEY (OR (INFILEP FILEY) + (SETQ FILEY (OR (STREAMP FILEY) + (INFILEP FILEY) (FINDFILE FILEY NIL DIRECTORIES) (ERROR "FILE NOT FOUND" FILEY))) (CL:UNLESS (LISPSOURCEFILEP FILEX) (ERROR FILEX " is not a Medley source file")) (CL:UNLESS (LISPSOURCEFILEP FILEY) (ERROR FILEX " is not a Medley source file")) - (LET [(TITLE (CONCAT "COMPARESOURCES of " (OR LABEL1 (PACKFILENAME 'HOST NIL 'DIRECTORY NIL - 'BODY FILEX)) - " and " - (OR LABEL2 (PACKFILENAME 'HOST NIL 'DIRECTORY NIL 'BODY FILEY] - (SELECTQ COMPARESOURCES-BROWSER-TYPE - (OBJECTWINDOW (LET [(WINDOW (OBJ.CREATEW 'VERTICAL REGION TITLE NIL T - (FONTPROP DEFAULTFONT 'HEIGHT] - (WINDOWPROP WINDOW 'UNDERSCONTRUCTION T) - (GETPROMPTWINDOW WINDOW T) - (WINDOWPROP WINDOW 'UNDERSCONTRUCTION NIL) - (COMPARESOURCES FILEX FILEY '(T 2WINDOWS) - DW? WINDOW IGNORECOMMENTS) - (OPENW WINDOW) - WINDOW)) - (TEDIT (LET ((TSTREAM (OPENTEXTSTREAM))) - (DSPFONT DEFAULTFONT TSTREAM) - (COMPARESOURCES FILEX FILEY EXAMINE DW? TSTREAM IGNORECOMMENTS) - [TEDIT TSTREAM REGION NIL `(READONLY T WINDOWTYPE COMPARESOURCES-TEDIT TITLE - ,TITLE] - (CL:WHEN NIL - EXAMINE - (COMPARESOURCES FILEX FILEY EXAMINE DW? (OPENSTREAM '{NULL} 'OUTPUT))) - (WFROMDS TSTREAM))) - (HELP]) + (CL:UNLESS TITLE + [SETQ TITLE (CONCAT "COMPARESOURCES of " (OR LABEL1 (PACKFILENAME 'HOST NIL 'DIRECTORY NIL + 'BODY FILEX)) + " and " + (OR LABEL2 (PACKFILENAME 'HOST NIL 'DIRECTORY NIL 'BODY FILEY]) + (LET [(WINDOW (OBJ.CREATEW 'VERTICAL REGION TITLE NIL T (FONTPROP DEFAULTFONT 'HEIGHT] + (WINDOWPROP WINDOW 'UNDERSCONTRUCTION T) + (GETPROMPTWINDOW WINDOW T) + (WINDOWPROP WINDOW 'UNDERSCONTRUCTION NIL) + (COMPARESOURCES FILEX FILEY '(T 2WINDOWS) + DW? WINDOW IGNORECOMMENTS LABEL1 LABEL2) + (OPENW WINDOW) + WINDOW]) ) -(RPAQ? COMPARESOURCES-BROWSER-TYPE 'OBJECTWINDOW) - (FILESLOAD (SYSLOAD) OBJECTWINDOW EXAMINEDEFS REGIONMANAGER) (DECLARE%: EVAL@COMPILE DONTCOPY @@ -699,16 +679,16 @@ Copyright (c) 1985-1988, 2018, 2020-2021 by Xerox Corporation. ) (PUTPROPS COMPARESOURCES COPYRIGHT ("Xerox Corporation" 1985 1986 1987 1988 2018 2020 2021)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (1852 26954 (COMPARESOURCES 1862 . 8290) (\CS.COMPARE.MASTERS 8292 . 15704) ( -\CS.COMPARE.TYPES 15706 . 18972) (\CS.EXAMINE 18974 . 23201) (\CS.FIXFNS 23203 . 24705) ( -\CS.SORT.DECLARES 24707 . 25050) (\CS.SORT.DECLARE1 25052 . 26472) (\CS.FILTER.GARBAGE 26474 . 26952)) - (26955 31491 (\CS.ISFNFORM 26965 . 27233) (\CS.COMPARE.FNS 27235 . 27477) (\CS.FNSID 27479 . 27623) ( -\CS.ISVARFORM 27625 . 27730) (\CS.COMPARE.VARS 27732 . 28394) (\CS.ISMACROFORM 28396 . 28534) ( -\CS.ISRECFORM 28536 . 28864) (\CS.REC.NAME 28866 . 29185) (\CS.ISCOURIERFORM 29187 . 29287) ( -\CS.ISTEMPLATEFORM 29289 . 29387) (\CS.COMPARE.TEMPLATES 29389 . 29754) (\CS.ISPROPFORM 29756 . 29911) - (\CS.PROP.NAME 29913 . 30058) (\CS.COMPARE.PROPS 30060 . 30217) (\CS.ISADDVARFORM 30219 . 30312) ( -\CS.COMPARE.ADDVARS 30314 . 30479) (\CS.ISFPKGCOMFORM 30481 . 30688) (\CS.COMPARE.FPKGCOMS 30690 . -30897) (\CS.COMPARE.DEFINE-FILE-INFO 30899 . 31489)) (31492 37556 (CSOBJ.CREATE 31502 . 31915) ( -CSOBJ.DISPLAYFN 31917 . 32670) (CSOBJ.IMAGEBOXFN 32672 . 34833) (CSOBJ.BUTTONEVENTINFN 34835 . 37306) -(CSOBJ.COPYBUTTONEVENTINFN 37308 . 37554)) (38437 41343 (CSBROWSER 38447 . 41341))))) + (FILEMAP (NIL (1864 25616 (COMPARESOURCES 1874 . 8001) (\CS.COMPARE.MASTERS 8003 . 15415) ( +\CS.COMPARE.TYPES 15417 . 18683) (\CS.EXAMINE 18685 . 21863) (\CS.FIXFNS 21865 . 23367) ( +\CS.SORT.DECLARES 23369 . 23712) (\CS.SORT.DECLARE1 23714 . 25134) (\CS.FILTER.GARBAGE 25136 . 25614)) + (25617 30153 (\CS.ISFNFORM 25627 . 25895) (\CS.COMPARE.FNS 25897 . 26139) (\CS.FNSID 26141 . 26285) ( +\CS.ISVARFORM 26287 . 26392) (\CS.COMPARE.VARS 26394 . 27056) (\CS.ISMACROFORM 27058 . 27196) ( +\CS.ISRECFORM 27198 . 27526) (\CS.REC.NAME 27528 . 27847) (\CS.ISCOURIERFORM 27849 . 27949) ( +\CS.ISTEMPLATEFORM 27951 . 28049) (\CS.COMPARE.TEMPLATES 28051 . 28416) (\CS.ISPROPFORM 28418 . 28573) + (\CS.PROP.NAME 28575 . 28720) (\CS.COMPARE.PROPS 28722 . 28879) (\CS.ISADDVARFORM 28881 . 28974) ( +\CS.COMPARE.ADDVARS 28976 . 29141) (\CS.ISFPKGCOMFORM 29143 . 29350) (\CS.COMPARE.FPKGCOMS 29352 . +29559) (\CS.COMPARE.DEFINE-FILE-INFO 29561 . 30151)) (30154 36218 (CSOBJ.CREATE 30164 . 30577) ( +CSOBJ.DISPLAYFN 30579 . 31332) (CSOBJ.IMAGEBOXFN 31334 . 33495) (CSOBJ.BUTTONEVENTINFN 33497 . 35968) +(CSOBJ.COPYBUTTONEVENTINFN 35970 . 36216)) (37099 39228 (CSBROWSER 37109 . 39226))))) STOP diff --git a/lispusers/COMPARESOURCES.LCOM b/lispusers/COMPARESOURCES.LCOM index c04448fe8eef990005d5e3cb96c0768373304d51..47ffb5b0ac4aae32f7ae0f523a5ec6961136fae8 100644 GIT binary patch delta 3045 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 diff --git a/lispusers/COMPARETEXT.LCOM b/lispusers/COMPARETEXT.LCOM index d0d55d13128a75378dadbed9e847e4d1c1fa7304..935a141e6aeed201745cb3c379c333cf09224e8a 100644 GIT binary patch delta 650 zcmZ`$&r1S97~QQyun`p9qQloxp$Bbe)csWlR~>a@-Cg#FdI_>L6HCQ{>g2U!;ko_> zK{|JguF<(m|3@^d1`E}|43F>o-kUdXUi|m+U3FE6m1;LJEMN>sR1+yRCEmBig{yAA z-Rd-lx9rA1jslOA(43-Tq$11%chqkjch7sRvql{n*S-G5mI`_)Yn5!xA@Ph=HLV4iDMwu-RQ1l44R4K+P64 zvq0RKXF()yy1@PN6$RCHNLjahH7+Wa#38V})gkb@qXsRMLw<>A5(^KGGd7X-}J(r`0J>%bc#Q zO(vI{%zzSRw9#jnF?wSniUbaEiMJD2+A*{YG2Eg?6PFYJG$aJJ?@is>j%7nq{$~;^ vlg7bsaU?*2%rtzLIDroREQKavmWktmB>f-}g|bW1(53@8F+=08rPuXuRJEa@ delta 433 zcmcZ-c06=K#N-c*q7!pXm~ty8Ph?aSHPcj3GPKZjOHI->GB7eyFf_9=v7C5MD%{!M zH^4E-HN-U{L@(Ua&&5AnAu~@w$t~2!M*&%bo}QkPLP}yuY6=#EtPCxcG`Td~Jbhf9 zgIpa$TwNx=Wwe3X9b~3pVrFD&q+sRj;ppe?8mt@Qub|=P7p%aAX}P9?RX~tyn5Tbe zu&xWxAfRQINUk=rGBC6}IXD~W&F#y4S4<^Q$Kn&$MZk2c1D(sLBl5%v)kdopCu>_#98(zQ|cNjFx z%@y2yJOe-$DVSLxu?-ahLPH?-1qAsAC>SG28ks;8GWt)p<&)wuHB|6%3=RRA5xlvZ H@1zU>tD0_E diff --git a/lispusers/GITFNS b/lispusers/GITFNS index 16bb1c94..5f933000 100644 --- a/lispusers/GITFNS +++ b/lispusers/GITFNS @@ -1,15 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "19-May-2022 19:19:14"  -{DSK}kaplan>local>medley3.5>working-medley>lispusers>GITFNS.;296 97537 +(FILECREATED " 4-Jun-2022 20:44:07"  +{DSK}kaplan>Local>medley3.5>working-medley>lispusers>GITFNS.;313 100657 - :CHANGES-TO (FNS GIT-MY-CURRENT-BRANCH GIT-MAKE-BRANCH GIT-NEXT-WORKING-BRANCH GIT-BRANCH-NUM - GIT-MY-BRANCHP GIT-MY-BRANCHES) - (VARS GITFNSCOMS) - (COMMANDS cob) + :CHANGES-TO (FNS GIT-BRANCH-DIFF) - :PREVIOUS-DATE "19-May-2022 14:08:39" -{DSK}kaplan>local>medley3.5>working-medley>lispusers>GITFNS.;295) + :PREVIOUS-DATE "29-May-2022 21:59:23" +{DSK}kaplan>Local>medley3.5>working-medley>lispusers>GITFNS.;312) (PRETTYCOMPRINT GITFNSCOMS) @@ -73,7 +70,8 @@ (* ;; "Branches") (FNS GIT-BRANCH-NUM GIT-CHECKOUT GIT-WHICH-BRANCH GIT-MAKE-BRANCH GIT-BRANCHES - GIT-BRANCH-EXISTS? GIT-PICK-BRANCH GIT-PRC-MENU GIT-PULL-REQUESTS) + GIT-BRANCH-EXISTS? GIT-PICK-BRANCH GIT-PRC-MENU GIT-PULL-REQUESTS GIT-SHORT-BRANCH-NAME + GIT-LONG-NAME) (* ;; "My branches") @@ -91,8 +89,9 @@ (* ;; "Comparisons") - (FNS GIT-GET-DIFFERENT-FILES GIT-COMPARE-BRANCHES GIT-COMPARE-WITH-WORKINGMEDLEY - GIT-COMPARE-WORKTREE GITCDOBJBUTTONFN GIT-CD-LABELFN GIT-CD-MENUFN) + (FNS GIT-GET-DIFFERENT-FILES GIT-BRANCHES-COMPARE-DIRECTORIES GIT-WORKING-COMPARE-DIRECTORIES + GIT-COMPARE-WORKTREE GITCDOBJBUTTONFN GIT-CD-LABELFN GIT-CD-MENUFN + GIT-WORKING-COMPARE-FILES GIT-BRANCHES-COMPARE-FILES) (INITVARS (FROMGITN 0)) (* ;; "") @@ -389,14 +388,28 @@ THEN (SETQ PROJECT (CAR STAIL)) (GO $$OUT)) (CAR STAIL))) - (GIT-COMPARE-WITH-WORKINGMEDLEY SUBDIRS NIL NIL NIL T PROJECT))) + (GIT-WORKING-COMPARE-DIRECTORIES SUBDIRS NIL NIL NIL T PROJECT))) (DEFCOMMAND bbc (BRANCH1 BRANCH2 LOCAL PROJECT) (* ;; "Compares 2 git branches. Defaults to local/ if LOCAL, otherwise defaults to origin/. BRANCH2 defaults to the main branch (origin/ or local/ depending on LOCAL)") (SETQ PROJECT (GIT-GET-PROJECT PROJECT)) - (GIT-COMPARE-BRANCHES BRANCH1 (OR BRANCH2 (GIT-MAINBRANCH PROJECT LOCAL)) + (SETQ BRANCH1 (SELECTQ (U-CASE BRANCH1) + ((NIL T) + (GIT-MY-CURRENT-BRANCH PROJECT)) + ((LOCAL REMOTE ORIGIN) + (GIT-PICK-BRANCH (GIT-BRANCHES BRANCH1 PROJECT T))) + (OR (GIT-LONG-NAME BRANCH1 NIL PROJECT) + BRANCH1))) + (SETQ BRANCH2 (SELECTQ (U-CASE BRANCH2) + ((NIL T) + (GIT-MAINBRANCH PROJECT LOCAL)) + ((LOCAL REMOTE ORIGIN) + (GIT-PICK-BRANCH (GIT-BRANCHES BRANCH2 PROJECT T))) + (OR (GIT-LONG-NAME BRANCH2 NIL PROJECT) + BRANCH2))) + (GIT-BRANCHES-COMPARE-DIRECTORIES BRANCH1 (OR BRANCH2 (GIT-MAINBRANCH PROJECT LOCAL)) LOCAL PROJECT)) (DEFCOMMAND prc (REMOTEBRANCH DRAFTS PROJECT) @@ -412,22 +425,22 @@ (SETQ RB NIL) ELSEIF (GIT-GET-PROJECT DRAFTS T) THEN (SETQ PROJECT DRAFTS) - (SETQ DRAFTS NIL)) + (SETQ DRFTS NIL)) (CL:WHEN (MEMB (U-CASE RB) '(DRAFT DRAFTS)) (SETQ RB NIL) (SETQ DR T)) - (CL:WHEN (OR RB (GIT-PICK-BRANCH (GIT-PRC-MENU DR PROJECT) - "Pull requests")) - (GIT-COMPARE-BRANCHES RB (GIT-MAINBRANCH PROJECT) + (CL:WHEN (OR RB (SETQ RB (GIT-PICK-BRANCH (GIT-PRC-MENU DR PROJECT) + "Pull requests"))) + (GIT-BRANCHES-COMPARE-DIRECTORIES RB (GIT-MAINBRANCH PROJECT) NIL PROJECT)))) -(DEFCOMMAND cob (BRANCH TITLESTRING PROJECT) +(DEFCOMMAND cob (BRANCH NEXTTITLESTRING PROJECT) - (* ;; "Switches to BRANCH. T means my current branch, NEW/NEXT means my next branch (under wherever we are now), and STRING if given will be attached to the branch-name. Default is to bring up a menu of locally available branches.") + (* ;; "Switches to BRANCH. T means my current branch, NEW/NEXT means my next branch (under wherever we are now), and NEXTTITLESTRING if given will be attached to the branch-name. Default is to bring up a menu of locally available branches.") - (CL:UNLESS (STRINGP TITLESTRING) - (SETQ PROJECT TITLESTRING)) + (CL:UNLESS (STRINGP NEXTTITLESTRING) + (SETQ PROJECT NEXTTITLESTRING)) (CL:UNLESS PROJECT (CL:WHEN (GIT-GET-PROJECT BRANCH T) (SETQ PROJECT BRANCH) @@ -437,12 +450,14 @@ (T (GIT-CHECKOUT (GIT-MY-CURRENT-BRANCH PROJECT) PROJECT)) ((NEW NEXT) - (GIT-MAKE-BRANCH NIL TITLESTRING PROJECT)) - (GIT-CHECKOUT (OR BRANCH (GIT-PICK-BRANCH (GIT-BRANCHES 'LOCAL PROJECT T) - (CONCAT (L-CASE (FETCH PROJECTNAME OF PROJECT) - T) - " branches"))) - PROJECT))) + (GIT-MAKE-BRANCH NIL NEXTTITLESTRING PROJECT)) + (CL:WHEN [SETQ BRANCH (IF BRANCH + THEN (GIT-LONG-NAME BRANCH NIL PROJECT) + ELSE (GIT-PICK-BRANCH (GIT-BRANCHES 'LOCAL PROJECT T) + (CONCAT (L-CASE (FETCH PROJECTNAME OF PROJECT) + T) + " branches"] + (GIT-CHECKOUT BRANCH PROJECT)))) (DEFCOMMAND b? (PROJECT) (SETQ PROJECT (GIT-GET-PROJECT PROJECT)) (CONCAT (L-CASE (FETCH PROJECTNAME OF PROJECT) @@ -767,6 +782,8 @@ (GIT-GET-FILE [LAMBDA (BRANCH GITFILE LOCALFILE NOERROR PROJECT) + (* ;; "Edited 22-May-2022 17:34 by rmk") + (* ;; "Edited 8-May-2022 16:54 by rmk: the stream, not the name because of the NODIRCORE case.") (* ;; "Edited 6-Mar-2022 17:45 by rmk: the stream, not the name because of the NODIRCORE case.") @@ -870,6 +887,8 @@ (GIT-BRANCH-DIFF [LAMBDA (BRANCH1 BRANCH2 PROJECT) + (* ;; "Edited 4-Jun-2022 20:43 by rmk") + (* ;; "Edited 9-May-2022 16:21 by rmk: returns an ALIST that classifies how the files in BRANCH1 and BRANCH2 differ (changed, renamed, added, deleted, copied).") (* ;; "Edited 6-May-2022 14:04 by rmk: returns an ALIST that classifies how the files in BRANCH1 and BRANCH2 differ (changed, renamed, added, deleted, copied).") @@ -893,7 +912,7 @@ POS NIL T) THEN BRANCH1 ELSE BRANCH2))) - (SORT [FOR L IN LINES + (SORT (FOR L IN LINES COLLECT (SELCHARQ (CHCON1 L) (A (CL:IF (EQ (CHARCODE TAB) (NTHCHARCODE L 2)) @@ -927,7 +946,7 @@ " Ignore remaining files? " ))) (ERROR!))) - (HELP "Unrecognized git-diff code" (NTHCHAR L 1] + (HELP "Unrecognized git-diff code %"" L "%""))) T]) (GIT-COMMIT-DIFFS @@ -940,65 +959,61 @@ NIL NIL PROJECT]) (GIT-BRANCH-RELATIONS - [LAMBDA (BRANCHES BRANCH2 STRIPWHERE PROJECT) (* ; "Edited 9-May-2022 16:12 by rmk") + [LAMBDA (BRANCHES BRANCH2 STRIPWHERE PROJECT) (* ; "Edited 29-May-2022 21:59 by rmk") + (* ; "Edited 9-May-2022 16:12 by rmk") + (SETQ PROJECT (GIT-GET-PROJECT PROJECT)) (* ;; "Returns a pair (SUPERSETS EQUALS), where each item in SUPERSETS is a list of the form (B0 B1 B2...) where each Bi is a superset of Bj for i < j and EQUALS is a list of branch equivalence classes. ") - (CL:WHEN BRANCH2 - (SETQ BRANCHES (LIST BRANCHES BRANCH2))) - (FOR DTAIL D1 MORE1 MORE2 SUPERSETS EQUALS ON (FOR B IN BRANCHES - COLLECT (CONS B (GIT-COMMIT-DIFFS B ( - GIT-MAINBRANCH - PROJECT) - PROJECT))) - DO - (* ;; "For each branch we now have the list of commit identifiers (hexstrings) that they do not share with the main branch.") + (LET + ((MAIN (GIT-MAINBRANCH PROJECT))) + (FOR DTAIL D1 MORE1 MORE2 SUPERSETS EQUALS + ON (FOR B IN BRANCHES COLLECT (CONS B (GIT-COMMIT-DIFFS B MAIN PROJECT))) + DO + (* ;; "For each branch we now have the list of commit identifiers (hexstrings) that they do not share with the main branch.") - (SETQ D1 (CAR DTAIL)) - [FOR D2 IN (CDR DTAIL) - DO (CL:WHEN (EQUAL (CDR D1) - (CDR D2)) (* ; "Unlikely") - (PUSH [CDR (OR (ASSOC (CAR D1) - EQUALS) - (CAR (PUSH EQUALS (CONS (CAR D1] - (CAR D2)) - (GO $$ITERATE)) - (SETQ MORE2 (MEMBER (CADR D1) - (CDR D2))) (* ; + (SETQ D1 (CAR DTAIL)) + [FOR D2 IN (CDR DTAIL) + DO (CL:WHEN (EQUAL (CDR D1) + (CDR D2)) (* ; "Unlikely") + (PUSH [CDR (OR (ASSOC (CAR D1) + EQUALS) + (CAR (PUSH EQUALS (CONS (CAR D1] + (CAR D2)) + (GO $$ITERATE)) + (SETQ MORE2 (MEMBER (CADR D1) + (CDR D2))) (* ;  "The most recent commit of D1 is in D2") - (SETQ MORE1 (MEMBER (CADR D2) - (CDR D1))) - (IF MORE2 - THEN (CL:UNLESS MORE1 - (PUSH [CDR (OR (ASSOC (CAR D2) - SUPERSETS) - (CAR (PUSH SUPERSETS (CONS (CAR D2] - (CAR D1))) - ELSEIF MORE1 - THEN (PUSH [CDR (OR (ASSOC (CAR D1) - SUPERSETS) - (CAR (PUSH SUPERSETS (CONS (CAR D1] - (CAR D2] - FINALLY + (SETQ MORE1 (MEMBER (CADR D2) + (CDR D1))) + (IF MORE2 + THEN (CL:UNLESS MORE1 + (PUSH [CDR (OR (ASSOC (CAR D2) + SUPERSETS) + (CAR (PUSH SUPERSETS (CONS (CAR D2] + (CAR D1))) + ELSEIF MORE1 + THEN (PUSH [CDR (OR (ASSOC (CAR D1) + SUPERSETS) + (CAR (PUSH SUPERSETS (CONS (CAR D1] + (CAR D2] + FINALLY - (* ;; "Sort the supersets so that the larger ones come before the smaller ones") + (* ;; "Sort the supersets so that the larger ones come before the smaller ones") - (CL:WHEN STRIPWHERE - [SETQ SUPERSETS (FOR S IN SUPERSETS COLLECT (FOR SS IN S COLLECT (STRIPWHERE SS] - [SETQ EQUALS (FOR S IN EQUALS COLLECT (FOR SS IN S COLLECT (STRIPWHERE SS]) - [FOR S IN SUPERSETS - DO (CHANGE (CDR S) - (SORT DATUM (FUNCTION (LAMBDA (B1 B2) - (OR (MEMB B2 (CDR (ASSOC B1 SUPERSETS))) - (NOT (MEMB B1 (CDR (ASSOC B2 SUPERSETS] - [FOR E IN EQUALS DO (CHANGE (CDR E) - (IF (MEMB (GIT-MAINBRANCH PROJECT) - (CDR E)) - THEN (CONS (GIT-MAINBRANCH PROJECT) - (DREMOVE (GIT-MAINBRANCH PROJECT) - (SORT DATUM))) - ELSE (SORT DATUM] - (RETURN (LIST SUPERSETS EQUALS]) + (CL:WHEN STRIPWHERE + [SETQ SUPERSETS (FOR S IN SUPERSETS COLLECT (FOR SS IN S COLLECT (STRIPWHERE SS] + [SETQ EQUALS (FOR S IN EQUALS COLLECT (FOR SS IN S COLLECT (STRIPWHERE SS]) + [FOR S IN SUPERSETS + DO (CHANGE (CDR S) + (SORT DATUM (FUNCTION (LAMBDA (B1 B2) + (OR (MEMB B2 (CDR (ASSOC B1 SUPERSETS))) + (NOT (MEMB B1 (CDR (ASSOC B2 SUPERSETS] + [FOR E IN EQUALS DO (CHANGE (CDR E) + (IF (MEMB MAIN (CDR E)) + THEN (CONS MAIN (DREMOVE MAIN (SORT DATUM))) + ELSE (SORT DATUM] + (RETURN (LIST SUPERSETS EQUALS]) ) @@ -1075,7 +1090,8 @@ ELSE (HELP "Unexpected git result" RESULT]) (GIT-BRANCHES - [LAMBDA (WHERE PROJECT EXCLUDEMERGED) (* ; "Edited 19-May-2022 10:06 by rmk") + [LAMBDA (WHERE PROJECT EXCLUDEMERGED) (* ; "Edited 23-May-2022 14:25 by rmk") + (* ; "Edited 19-May-2022 10:06 by rmk") (* ; "Edited 9-May-2022 14:10 by rmk") (* ; "Edited 7-May-2022 23:29 by rmk") (SETQ PROJECT (GIT-GET-PROJECT PROJECT)) @@ -1093,8 +1109,8 @@ BRANCHES) (SETQ BRANCHES (APPEND LOCAL REMOTE)) (CL:WHEN EXCLUDEMERGED - (SETQ BRANCHES (FOR B (MAINBRANCH _ (GIT-MAINBRANCH PROJECT LOCAL)) IN BRANCHES - UNLESS (GIT-COMMIT-DIFFS B MAINBRANCH PROJECT) COLLECT B))) + (SETQ BRANCHES (FOR B (MAINBRANCH _ (GIT-MAINBRANCH PROJECT 'LOCAL)) IN BRANCHES + UNLESS (GIT-COMMIT-DIFFS MAINBRANCH B PROJECT) COLLECT B))) (SORT BRANCHES]) (GIT-BRANCH-EXISTS? @@ -1162,6 +1178,21 @@ ,(SUBATOM LINE (ADD1 TAB3] ELSE (SUBATOM LINE (ADD1 TAB2) (SUB1 TAB3]) + +(GIT-SHORT-BRANCH-NAME + [LAMBDA (BRANCH) (* ; "Edited 22-May-2022 22:36 by rmk") + + (* ;; "Reduces rmk29--xxxxx to rmk29 for display") + + (SUBSTRING BRANCH 1 (SUB1 (OR (STRPOS "--" BRANCH 1) + 0]) + +(GIT-LONG-NAME + [LAMBDA (BRANCH WHERE PROJECT EXCLUDEMERGED) (* ; "Edited 24-May-2022 17:49 by rmk") + + (* ;; "Allows short-hand reference to branch: rmk40 will return rmk40--xyz") + + (FIND B IN (GIT-BRANCHES WHERE PROJECT EXCLUDEMERGED) SUCHTHAT (STRPOS BRANCH B]) ) @@ -1320,10 +1351,13 @@ [LAMBDA (BRANCH1 BRANCH2 DIR1 DIR2 PROJECT) (DECLARE (USEDFREE FROMGITN)) + (* ;; "Edited 21-May-2022 23:38 by rmk") + (* ;; "Edited 9-May-2022 14:17 by rmk: Ask git for the files that differ between the branches, copy those files down to local DIR1 and DIR2, return the directories and a list of (dir1-file1 file2) mappings for renamed and copied files.") (* ;; "Edited 6-May-2022 08:26 by rmk: Ask git for the files that differ between the branches, copy those files down to local DIR1 and DIR2, return the directories and a list of (dir1-file1 file2) mappings for renamed and copied files.") + (SETQ PROJECT (GIT-GET-PROJECT PROJECT)) (SETQ BRANCH1 (GIT-BRANCH-EXISTS? BRANCH1 NIL PROJECT)) (SETQ BRANCH2 (GIT-BRANCH-EXISTS? BRANCH2 NIL PROJECT)) (LET @@ -1409,19 +1443,19 @@ (HELP "UNKNOWN GIT-DIFF TAG" D))) (LIST DIR1 DIR2 MAPPINGS))]) -(GIT-COMPARE-BRANCHES - [LAMBDA (BRANCH1 BRANCH2 LOCAL PROJECT) (* ; "Edited 9-May-2022 15:14 by rmk") +(GIT-BRANCHES-COMPARE-DIRECTORIES + [LAMBDA (BRANCH1 BRANCH2 LOCAL PROJECT) (* ; "Edited 22-May-2022 22:47 by rmk") + (* ; "Edited 9-May-2022 15:14 by rmk") (* ; "Edited 3-May-2022 23:04 by rmk") (SETQ PROJECT (GIT-GET-PROJECT PROJECT)) (SETQ BRANCH1 (IF BRANCH1 THEN (GITORIGIN BRANCH1 LOCAL) ELSE (GIT-WHICH-BRANCH PROJECT))) - (SETQ BRANCH2 (GITORIGIN (OR BRANCH2 (GIT-MAINBRANCH PROJECT)) - LOCAL)) - (PRINTOUT T "Comparing all " (L-CASE (FETCH PROJECTNAME OF PROJECT) - T) - " subdirectories of " BRANCH1 " and " BRANCH2 T) - (LET (CDVALUE DIRS NENTRIES MAPPINGS) + (LET (CDVALUE DIRS NENTRIES MAPPINGS (SHORT1 (GIT-SHORT-BRANCH-NAME BRANCH1)) + (SHORT2 (GIT-SHORT-BRANCH-NAME BRANCH2))) + (PRINTOUT T "Comparing all " (L-CASE (FETCH PROJECTNAME OF PROJECT) + T) + " subdirectories of " SHORT1 " and " SHORT2 T) (PRINTOUT T "Fetching differences" T) (SETQ DIRS (GIT-GET-DIFFERENT-FILES BRANCH1 BRANCH2 NIL NIL PROJECT)) (SETQ MAPPINGS (CADDR DIRS)) @@ -1479,10 +1513,10 @@ (CDBROWSER CDVALUE (CONCAT "Comparing " (L-CASE (FETCH PROJECTNAME OF PROJECT) T) - " " BRANCH1 " and " BRANCH2 " " + " " SHORT1 " and " SHORT2 " " (LENGTH (FETCH (CDVALUE CDENTRIES) OF CDVALUE)) " files") - (LIST BRANCH1 BRANCH2) + (LIST SHORT1 SHORT2) `(LABELFN GIT-CD-LABELFN BRANCH1 ,BRANCH1 BRANCH2 ,BRANCH2 PROJECT ,PROJECT) NIL @@ -1494,7 +1528,7 @@ ELSE '(0 differences)) ELSE '(0 differences]) -(GIT-COMPARE-WITH-WORKINGMEDLEY +(GIT-WORKING-COMPARE-DIRECTORIES [LAMBDA (SUBDIRS SELECT EXCLUDEDFILES FIXDIRECTORYDATES UPDATE PROJECT) (* ;; "Edited 17-May-2022 17:39 by rmk") @@ -1731,7 +1765,8 @@ (OR LABEL2 FILE2]) (GIT-CD-MENUFN - [LAMBDA (TBITEM MENUITEM CDBROWSER KEY) (* ; "Edited 8-May-2022 09:26 by rmk") + [LAMBDA (TBITEM MENUITEM CDBROWSER KEY) (* ; "Edited 22-May-2022 19:13 by rmk") + (* ; "Edited 8-May-2022 09:26 by rmk") (* ; "Edited 10-Dec-2021 08:52 by rmk") (* ;; "MENUITEM is of the form (display-atom . extrainfo). The selector for the selectq is either the CAR of the extrainfo or the display atom") @@ -1740,24 +1775,20 @@ (SELECTQ (OR (CADDR MENUITEM) (CAR MENUITEM)) (Delete% -> (FLASHWINDOW PWINDOW) - (IF FILE1 - THEN (PRIN3 "Use 'Delete BOTH' instead") - ELSE (GIVE.TTY.PROCESS PWINDOW) - (CL:WHEN [OR (EQ KEY 'MIDDLE) - (EQ 'Y (ASKUSER NIL 'N (CONCAT "Delete " LABEL2 " ? "] - (GIT-DELETE-FILE FILE2 (LISTGET USERDATA 'PROJECT)) - (TB.DELETE.ITEM CDBROWSER TBITEM)))) + (GIVE.TTY.PROCESS PWINDOW) + (CL:WHEN [OR (EQ KEY 'MIDDLE) + (EQ 'Y (ASKUSER NIL 'N (CONCAT "Delete " LABEL2 " ? "] + (GIT-DELETE-FILE FILE2 (LISTGET USERDATA 'PROJECT)) + (TB.DELETE.ITEM CDBROWSER TBITEM))) (|Delete ALL <-| (FLASHWINDOW PWINDOW) - (IF FILE2 - THEN (PRIN3 "Use 'Delete BOTH' instead") - ELSE (GIVE.TTY.PROCESS PWINDOW) - (CL:WHEN [OR (EQ KEY 'MIDDLE) - (EQ 'Y (ASKUSER NIL 'N (CONCAT "Delete ALL versions of " - (NAMEFIELD LABEL1 T) - " ? "] - (MYMEDLEY-DELETE-FILES FILE1 (LISTGET USERDATA 'PROJECT)) - (TB.DELETE.ITEM CDBROWSER TBITEM)))) + (GIVE.TTY.PROCESS PWINDOW) + (CL:WHEN [OR (EQ KEY 'MIDDLE) + (EQ 'Y (ASKUSER NIL 'N (CONCAT "Delete ALL versions of " (NAMEFIELD LABEL1 + T) + " ? "] + (MYMEDLEY-DELETE-FILES FILE1 (LISTGET USERDATA 'PROJECT)) + (TB.DELETE.ITEM CDBROWSER TBITEM))) (Delete% BOTH (FLASHWINDOW PWINDOW) (GIVE.TTY.PROCESS PWINDOW) (CL:WHEN (EQ 'Y (ASKUSER NIL 'N (CONCAT @@ -1768,6 +1799,38 @@ (MYMEDLEY-DELETE-FILES FILE1 (LISTGET USERDATA 'PROJECT)) (TB.DELETE.ITEM CDBROWSER TBITEM))) (SHOULDNT]) + +(GIT-WORKING-COMPARE-FILES + [LAMBDA (FILE PROJECT) (* ; "Edited 22-May-2022 14:45 by rmk") + (LET ((FILE1 (UNSLASHIT (PACKFILENAME 'HOST (GIT-GET-PROJECT PROJECT NIL 'WHOST) + 'BODY FILE) + T)) + (FILE2 (SLASHIT (PACKFILENAME 'HOST (GIT-GET-PROJECT PROJECT NIL 'GITHOST) + 'BODY FILE) + T))) + (CD-COMPARE-FILES FILE1 FILE2 FILE1 FILE2]) + +(GIT-BRANCHES-COMPARE-FILES + [LAMBDA (FILE BRANCH1 BRANCH2 PROJECT LOCAL) (* ; "Edited 22-May-2022 22:50 by rmk") + (SETQ PROJECT (GIT-GET-PROJECT PROJECT)) + (SETQ BRANCH1 (SELECTQ (U-CASE BRANCH1) + ((NIL T) + (GIT-MY-CURRENT-BRANCH PROJECT)) + ((LOCAL REMOTE ORIGIN) + (GIT-PICK-BRANCH (GIT-BRANCHES BRANCH1 PROJECT T))) + BRANCH1)) + (SETQ BRANCH2 (SELECTQ (U-CASE BRANCH2) + ((NIL T) + (GIT-MAINBRANCH PROJECT LOCAL)) + ((LOCAL REMOTE ORIGIN) + (GIT-PICK-BRANCH (GIT-BRANCHES BRANCH2 PROJECT T))) + BRANCH2)) + (LET ((FILE1 (GIT-GET-FILE BRANCH1 FILE NIL NIL PROJECT)) + (FILE2 (GIT-GET-FILE BRANCH2 FILE NIL NIL PROJECT))) + (CD-COMPARE-FILES FILE1 FILE2 (CONCAT (GIT-SHORT-BRANCH-NAME BRANCH1) + " " FILE) + (CONCAT (GIT-SHORT-BRANCH-NAME BRANCH2) + " " FILE]) ) (RPAQ? FROMGITN 0) @@ -1848,27 +1911,28 @@ (PUTPROPS GITFNS FILETYPE :TCOMPL) (DECLARE%: DONTCOPY - (FILEMAP (NIL (3441 17288 (GIT-CLONEP 3451 . 4714) (GIT-MAKE-PROJECT 4716 . 12828) (GIT-GET-PROJECT -12830 . 14167) (GIT-PROJECT-PATH 14169 . 15213) (FIND-ANCESTOR-DIRECTORY 15215 . 15564) ( -GIT-FIND-CLONE 15566 . 16647) (GIT-MAINBRANCH 16649 . 16933) (GIT-MAINBRANCH? 16935 . 17286)) (22251 -25039 (ALLSUBDIRS 22261 . 23547) (MEDLEYSUBDIRS 23549 . 24242) (GITSUBDIRS 24244 . 25037)) (25040 -29830 (TOGIT 25050 . 26456) (FROMGIT 26458 . 27439) (GIT-DELETE-FILE 27441 . 28287) ( -MYMEDLEY-DELETE-FILES 28289 . 29828)) (29831 32363 (MYMEDLEYSUBDIR 29841 . 30297) (GITSUBDIR 30299 . -30742) (STRIPDIR 30744 . 31115) (STRIPHOST 31117 . 31357) (STRIPNAME 31359 . 32112) (STRIPWHERE 32114 - . 32361)) (32364 34266 (GFILE4MFILE 32374 . 32737) (MFILE4GFILE 32739 . 33308) (GIT-REPO-FILENAME -33310 . 34264)) (34315 42066 (GIT-COMMIT 34325 . 35151) (GIT-PUSH 35153 . 35797) (GIT-PULL 35799 . -36411) (GIT-APPROVAL 36413 . 36762) (GIT-GET-FILE 36764 . 39233) (GIT-FILE-EXISTS? 39235 . 40179) ( -GIT-REMOTE-UPDATE 40181 . 40905) (GIT-REMOTE-ADD 40907 . 41214) (GIT-FILE-DATE 41216 . 42064)) (42096 -51024 (GIT-BRANCH-DIFF 42106 . 46809) (GIT-COMMIT-DIFFS 46811 . 47255) (GIT-BRANCH-RELATIONS 47257 . -51022)) (51069 59282 (GIT-BRANCH-NUM 51079 . 51652) (GIT-CHECKOUT 51654 . 52166) (GIT-WHICH-BRANCH -52168 . 52466) (GIT-MAKE-BRANCH 52468 . 54212) (GIT-BRANCHES 54214 . 55595) (GIT-BRANCH-EXISTS? 55597 - . 56301) (GIT-PICK-BRANCH 56303 . 56631) (GIT-PRC-MENU 56633 . 58261) (GIT-PULL-REQUESTS 58263 . -59280)) (59312 62647 (GIT-MY-CURRENT-BRANCH 59322 . 59692) (GIT-MY-BRANCHP 59694 . 60199) ( -GIT-MY-NEXT-BRANCH 60201 . 60695) (GIT-MY-BRANCHES 60697 . 62645)) (62693 66645 (GIT-ADD-WORKTREE -62703 . 64187) (GIT-REMOVE-WORKTREE 64189 . 65119) (GIT-LIST-WORKTREES 65121 . 65925) (WORKTREEDIR -65927 . 66643)) (66693 94417 (GIT-GET-DIFFERENT-FILES 66703 . 72429) (GIT-COMPARE-BRANCHES 72431 . -78145) (GIT-COMPARE-WITH-WORKINGMEDLEY 78147 . 82612) (GIT-COMPARE-WORKTREE 82614 . 86487) ( -GITCDOBJBUTTONFN 86489 . 90979) (GIT-CD-LABELFN 90981 . 92063) (GIT-CD-MENUFN 92065 . 94415)) (94487 -97470 (CDGITDIR 94497 . 94875) (GIT-COMMAND 94877 . 96463) (GITORIGIN 96465 . 97162) (GIT-INITIALS -97164 . 97468))))) + (FILEMAP (NIL (3384 17231 (GIT-CLONEP 3394 . 4657) (GIT-MAKE-PROJECT 4659 . 12771) (GIT-GET-PROJECT +12773 . 14110) (GIT-PROJECT-PATH 14112 . 15156) (FIND-ANCESTOR-DIRECTORY 15158 . 15507) ( +GIT-FIND-CLONE 15509 . 16590) (GIT-MAINBRANCH 16592 . 16876) (GIT-MAINBRANCH? 16878 . 17229)) (23164 +25952 (ALLSUBDIRS 23174 . 24460) (MEDLEYSUBDIRS 24462 . 25155) (GITSUBDIRS 25157 . 25950)) (25953 +30743 (TOGIT 25963 . 27369) (FROMGIT 27371 . 28352) (GIT-DELETE-FILE 28354 . 29200) ( +MYMEDLEY-DELETE-FILES 29202 . 30741)) (30744 33276 (MYMEDLEYSUBDIR 30754 . 31210) (GITSUBDIR 31212 . +31655) (STRIPDIR 31657 . 32028) (STRIPHOST 32030 . 32270) (STRIPNAME 32272 . 33025) (STRIPWHERE 33027 + . 33274)) (33277 35179 (GFILE4MFILE 33287 . 33650) (MFILE4GFILE 33652 . 34221) (GIT-REPO-FILENAME +34223 . 35177)) (35228 43029 (GIT-COMMIT 35238 . 36064) (GIT-PUSH 36066 . 36710) (GIT-PULL 36712 . +37324) (GIT-APPROVAL 37326 . 37675) (GIT-GET-FILE 37677 . 40196) (GIT-FILE-EXISTS? 40198 . 41142) ( +GIT-REMOTE-UPDATE 41144 . 41868) (GIT-REMOTE-ADD 41870 . 42177) (GIT-FILE-DATE 42179 . 43027)) (43059 +51650 (GIT-BRANCH-DIFF 43069 . 47821) (GIT-COMMIT-DIFFS 47823 . 48267) (GIT-BRANCH-RELATIONS 48269 . +51648)) (51695 60630 (GIT-BRANCH-NUM 51705 . 52278) (GIT-CHECKOUT 52280 . 52792) (GIT-WHICH-BRANCH +52794 . 53092) (GIT-MAKE-BRANCH 53094 . 54838) (GIT-BRANCHES 54840 . 56331) (GIT-BRANCH-EXISTS? 56333 + . 57037) (GIT-PICK-BRANCH 57039 . 57367) (GIT-PRC-MENU 57369 . 58997) (GIT-PULL-REQUESTS 58999 . +60016) (GIT-SHORT-BRANCH-NAME 60018 . 60309) (GIT-LONG-NAME 60311 . 60628)) (60660 63995 ( +GIT-MY-CURRENT-BRANCH 60670 . 61040) (GIT-MY-BRANCHP 61042 . 61547) (GIT-MY-NEXT-BRANCH 61549 . 62043) + (GIT-MY-BRANCHES 62045 . 63993)) (64041 67993 (GIT-ADD-WORKTREE 64051 . 65535) (GIT-REMOVE-WORKTREE +65537 . 66467) (GIT-LIST-WORKTREES 66469 . 67273) (WORKTREEDIR 67275 . 67991)) (68041 97537 ( +GIT-GET-DIFFERENT-FILES 68051 . 73876) (GIT-BRANCHES-COMPARE-DIRECTORIES 73878 . 79720) ( +GIT-WORKING-COMPARE-DIRECTORIES 79722 . 84188) (GIT-COMPARE-WORKTREE 84190 . 88063) (GITCDOBJBUTTONFN +88065 . 92555) (GIT-CD-LABELFN 92557 . 93639) (GIT-CD-MENUFN 93641 . 95848) (GIT-WORKING-COMPARE-FILES + 95850 . 96369) (GIT-BRANCHES-COMPARE-FILES 96371 . 97535)) (97607 100590 (CDGITDIR 97617 . 97995) ( +GIT-COMMAND 97997 . 99583) (GITORIGIN 99585 . 100282) (GIT-INITIALS 100284 . 100588))))) STOP diff --git a/lispusers/GITFNS.LCOM b/lispusers/GITFNS.LCOM index 0efac76da4523328f0d18947cc0fe59cf2d395c2..bec4aaa4512155b2b00fb1faa8df1ff2a7eaef35 100644 GIT binary patch delta 6317 zcmbVQeQaA-70+|hF7?_jNz*QM)9%dcGCP~Y`|?+kb$Pa5;@8-Ip6xWWK-08NNoba$ zelTDk-uln9Ay~_Wv2HLSgoFf0B(?Gfu*&-j@gcq^KEx&j2+$-XDuF-(1pMxO@7Ye; z4GI6@d+)jDo_p@S=lsq&?=KDCx4!SYJljut!RLLl$vk|UXm_~~w^N3~7lp`5z0!5OoW2nk#G&!njZ?gwKe5a-!_!KHhPe`UUagyY9VB zDzTSiU%un&*$(^)e*V8EeT-G&Lw8g+(2lTY>m$dTxD3elhUgZyxp?Tl@FH z{LrhbfA0uI<0@s%T#=$tmCRDfF5OL0T_&SEJySMI6xE`XwhL*aLQz$5S>+^^E2W}c zCOs)TG~JVCEzv$wT2f?%3YBa+Yn0M<#w0DF390p` zk_o9>kJ3@n)i`@?boBOEoPzfTgA|P^>|djUw~-iVY;f!@Nnzt-1H1hcl~oEpI)83u zY32Q++{zLLJh*7Xak1kzUJbUp1&C|-oM@}xB!?dEXSH=!Ve)j6vUiP!G!ahF* zjZ6j>TCgirGSl`{!8&GUf|O9|4~>6SswK#zBB?kWZ(>vyt?CRFXQ(){N{lipxD=ht zhi8l&=Y;i^XNqR2Y*xfjrMz7-1(zba3TKij!`mcfDu$IqFHR}^%ardltO7f6C|>*H z{*I2W^fvyyC%0Bb+pBc;PTV%JI#`wFc2=`#@%DjN^Xs?e76Zqh&JA7nb*}%u(APV^ z)9#t;>s-Gh^@TO*aId`84y<*&CC&9W>^@&_Z;ySTbG>^P`m4W^=BQ!!`)u<4_1d7_ zFWG~8)_0(-Ee7ntz}%p8)F#PVJq{iTOv2LV1{&x}AUVT54SV1k*?a2a;I#u>07+OM z2+RefV-R+D^?<$S+5s+J%=R~D-viERUtn*;KH!@>u=bxbRjF6%?Unm$c5w9|AMCb= z#o_zr4mRwe^=EI7Nf=aPKS5X3dfbQ`OstN=y^{@N-2^cwJ4WDXS7m+xa{ij;dw$ z^zbe=w7MV#!e;EgzT>O9#0{Xw9$=TJNcs_5 zo7#1ktCK3nZ`y#Ac#{2Y>QlFel(mAF|*F z4lzs}0bH^)aYkU>#2I1n>zyAs^GnggwW-|SJQU*2C%`N0FIYK$hyV+b2x1dIbj~hJ zMOwQQsY`*=u|H>nC!8DHu(*VlGPScqXprlv#=J zPzr>VJ$%-II4+8k&LKKyl(QCWMb>C0k~Yc!)?~ut)_~kRf{VjyxbzKTwOFjl2$-vF zoCI>aF+syV8|MJ!?wlHrZk$sA-rihv(}t?v+)!2JP3x4J>Mc}~n>JLE%?%X@b>%DY zgqebO0}3G8n*biSO+edX*__GPS-V`JWRoosC6PYFqEs}}({~ON;vhe0TdqNBlwGOp zmiT{vt##I7$v$kRD@b-UXpy#y79xqJ#SlsOWoJlDfSff7Q@pPN-_4xK^C52fPTYyf z^aR2fJvLdg^Vk-$gqH_r3eyF9wjfjyiCD#$3c`7lvlKjp4kB!D94$h%7$b=AG2WUF z6HbFr9egZ}i1Wm_YxbToa;GmEB@H#K_I?;0Yk(p3Q@v>~t0O)SQxz5zMxE&n|zMq|3!2*SnK$%GdGP8B#9*g@wRiOW7QV=Ib4T*Sn&+^nwZMlQ0YaWjZ=gm22pd_PI*=3fBC5w~{gcZiw-Ou&!RFKG3+(}(# zug(W*uvL$ODgw(23Mq=xB+9x=gd;h#uym&r_b7-!4keoK^Z=$gBscQh4Ed@+z1@*p z%*gCd;d^UvHJPeQr%x}OTUa@@aGo^aZEFmdGm)H; zGINs!5ih;Ig0r*`z$~}>it0FvSvF)DkfOlDh7S#o40FHLqEQNMP%ezHoMd;O+67n( zrO!U{!TECwR9;vJlZvYd(&?q;h4Vp_R)|a_etZDmrTG<g+`SzENOeI| zfUu!MG)_-GNReS0j)d_(kTSV&;nX5$XicPl?XL}XAMt2~T0$zbXKD}UOAiZgxKH>-xqXnD5VW3d?vgy(BO<_1W^$QA z1&<9IPmMSbJ7QJLJl;IPR-d}FrUKmggF16gI8}kzUg@K1%`nGNnq&8*W#)j{F!?F# zh&fWJ936pGrA_4jsvM^OV+CbR{wN|q&O92)ux~!KgU5AmJMM2@ zkV4ti+D;MiaMN}Q>WTL4l5p0I$He}dPlp40yCK40vl_4KaJHLIgQsjA24<|nq?-;D zO}6@a64jZ?Qx6;&wa&uw!i9x!lycsVu?2yLF#V#{~=Yb9idP61#n z3fmRwsOU|I@Zm%wL3l@wUZ0e;vX)o_`;K#@ZaSi)7B1IIc2F7clx4C81x0d)Jc1hn zPZ_-z)Q}N2vm@kpVu8mGz}Uo(JH}0=>9PwkZXt*xrUg6SIi26F6cF^a+2zs zvWNe9m2L?@79hpb*+Tl@NK!$^p5m*If<6*i=#Dzz`?&EfUO8NI@_{O=F5P&s;ZRra zcTwkSZu=#-eWhWfm&E%BEPA?Oob;tcSFFFb=8{$0ytG8;DDC|h>s$l4pRN~ORsH@kSOnN zK0Vi=S@eY|G)!Y-#6I_YlAZ8%vp1g~VqKSq@o8w}@;Ezlc@Vwp^8=}N&6}Rs%$Wfb zoZ%fpCi&Uxms3u!a9JFMCD=Db*-YW;|Pha^>=f2G{+El4O{^_u^ z9bcLr_B@6?`0~I`1yVw&f2o3ws6AQjaT>u zSY(%+h0PmoGV-lm&klRUaQF_aX;W3@s@9M>II2RZBd%p+o(%W#Ip_bczDj-%Y}(W> zwp)m+s!F%eUlm9GpQhnw-+19*{nsxriJgCOvWtI%VAo%yE`DzIix($?Ve)Ud+~(^y zUzJ6!PIVQ`cURbjs~_9OI~A*vGueNxKIf31eQBTQ)W7&rk5p?ixZh#Dd&h01bEEjK zQP^AKK?VFv0BIF5H^Con!aT7$+$P-#JiYh`_Gf zrta0Qnn*&UKdX;LT7zcfF96H%%*rD>$5>MO1Kt5G5)YE`L<8bwOf{;AS_v%AO3 zRuI~m`JVI5e6P7*{~_?%THxkrvltI&CcYV#1W5uh-pl@#TNm3Jt}GPi7y2(wJT@~i z+do6=142lON4kLD!Vu||gkB+b>;3zit$YTC%v?C54IANvty#$w(Ca^Hq2a|nB^NQ~ zgAJz+re}d4%%{_+b3=bmPY(};iOa>pz0`;b-&NN+Xr_&%ZD=_|-$vwbo`<@}b!Yfm z-zE#HeG_WY1c*mfnZCxg(kDnTvVF&FZ5d~B;Zb4_o7Pap5(f8-3ZtR)_+sk?Z)rGP z(0N+39cKKX$Zv_vqSB~Fn-~P6%rMOx? z8F-+xT9D)AVs|&kCUi)Q&=-1Y>7R}rbJt%SJBwqi{Lt~*KtPb`tz#$mK(8LF>&$`( zn!s@7o+CTCQ}nOutHE1yRrqJsvF|eXy~2!6&qW^C^Y9k1Mc;{Z?mMytw!biw{B&iE z)Ks@1}b{prdCy%0U!;EPxyGgm)d>8I~TW2Kg@v(vMW!iDLX;=)P9 zsDcW7-m;A(8M4lz=c2Db+O!NFl(+=^)ron=&pW(hqv~2ZRXyckiJP z$aoff60S~Po|?OI875%%%B9KTJYPq9PFVEXi4a#;e(uC;Tqz0$WI>96!v+-`cND#) z;4MWDE2^MNNF@qjjO4X6qr{`jXARpia%>fY46zMH6Ln`I&LW_*0eN$pnZ}t62{7@S zwaF=izWZRf^l^JtRgL!CfHoBhO;)Wn4O9;-L4kXykle+bE%_Dp4ZUHm?o3UE&R$P- z{4`L#`q8Oi)2-d9^}SbQD*DXA=0pN2xo}(q{O}su`2pz&2DjP%=BeO#aE)2qyreTJ z`#Li*N zmC!eABSTIbxImY4p%{NGhh{X>@{5C_MD7B~=y66Sfk7$Ug%hHlC|Pzx)Xa{i4BJ2- z$N0ri_Lrh6_Pa7LJBTv6EsDdbEV}YoTE<=I=HQ^iqGRipu)HXORDNpU8~1Ua)9S&W zv=0`vv}<@%qMkHVuhx=a@T*HAdI@Qye;x$+FQlad4|?e{%RMAK2uZQ==B}tC&=G--S^%OuIj$>)v@=vlIkZvMe(?Yj9i%2JUkMqlIj#; zBQYuhs!MB53NwlvS0NuxYL0phh{3Kk>7Coc2uQ{kRhXGvsg7*age|=EDSt@ zEzlqnd!Q_!+v%sZbl#xt=R{7S*17%Ri#1$Tjh9mBjTzUARU!UmWQuL*Xw$j@! zjAcKU*#B0c1Gt_+Y;(x8&<6xa8`e-Rg*gZvSWnnwl(jC><`{`pXe3F2v=_oGf8-21 zYn#|4V_4{T_8{V|dbdMklMM|KX`Mt-f&TGKYe~fPSYbn7Ms`bdeWL;tB0ex4^Cz(i zBwB%>Q+kY;zy0l~f)Cnio)@GWX`OyCc?=6cVfw;_;(T%Td~pF}bkL18NEp~|uaLwX z8B@WFAPFNR?$1S>E3UUE^>A8C80kR^Tbejj=3*@Fq3`9wAeJzyyZgI)x>*FtXhP@a z4J>qFH>KPS!}`*hoV)bc1om)FvDoES7T#;(cwlLr2lo#b*aq@2F^lgM3})=iSmP#P zKgGKO4$iag4E`5;;5NRRbC~SP}0U&`K`j!A-r5HL%>P|rg=c`VduqwsyCIofE%dV zfejf3&T5Uud9i`L`dZfYZ~J-If8BW_y;)M_51kR$w~x93m>6(}#tPqgpU>IC_i-u4 z+4S&tM>1QO?R!b8Wig7SQpUvUq)0xkTUflX*5ndBUS8}mb4CVaL7|!J`%BDYSjO^j zUOAMa8?OKga=*SfcQ4j|((>&i94CjSuW~HZ0j=fVI^E zB}Q-F2-RaS^1z-%5&~YoajYJ#^8i=~>A!9q$g%vz=NF1_)ECS4auk0sSh!rAC}5mL zDjb;nc%OzxU-=TQa?6vytlx#t@@_bB0_te>Vw|q%K}r@6aCP)+i{12@#XfrCRvmqB zaWDO3v0bc0otK=j#BC{=cgG^o)H8`1)KEv?ekMV8JbM@)WZlnxRQ+Y~+wpuCx9?u1 z7-;j0OhD{K%5fU~-H!)r>MS!&_uU5i@|}Iux!n;$Rrh4I6LjQ-R{F;6Zu*bgKcL@w z>8S%bGnY2J=PvFL-*zMG7gRp_awC`6L{PzWA*CxnWh945J_nt|_S3V6$ePLF%C946 b^~#+v{r)TM^uKow;*s_}-&QtXxmNvuxIC04 diff --git a/lispusers/GITFNS.TEDIT b/lispusers/GITFNS.TEDIT index 99591f8c..6f5856c2 100644 --- a/lispusers/GITFNS.TEDIT +++ b/lispusers/GITFNS.TEDIT @@ -30,10 +30,10 @@ If MEDLEYDIR is defined, If NOTECARDS is defined (GIT-MAKE-PROJECT 'NOTECARDS) will make the NOTECARDS project If NOTECARDS is not defined but the clone >git-notecards> is a sister of MEDLEYDIR, then the NOTECARDS project will still be created. -If a clone is discovered and a project is created, the value of GIT-MAKE-PROJECT is PROJECTNAME. Otherwise, NIL will be returned if PROJECTPATH is T, and PROJECTPATH=NIL will result in an error. +If a clone is discovered and a project is created, the value of GIT-MAKE-PROJECT is PROJECTNAME. Otherwise, NIL will be returned if PROJECTPATH is T (= no-error), and PROJECTPATH=NIL will result in an error. When GITFNS is loaded, GIT-MAKE-PROJECT is called for MEDLEY, NOTECARDS, and LOOPS, with PROJECTPATH=T. Thus, those projects will be created automatically, if MEDLEYDIR is defined and the relevant directories exist in their expected relative positions. -When they are created, GIT-PROJECTS are registered by name on the a-list GIT-PROJECTS, and they are otherwise referenced by their names. +When they are created, GIT-PROJECTS are registered by name on the a-list GIT-PROJECTS, and they can otherwise be referenced by their names. The variable GIT-DEFAULT-PROJECT, initially MEDLEY, contains the project name used by the commands below when the optional projectname argument is not provided. GIT-MAKE-PROJECT also creates a pseudohost {Gprojectname} whose path prefix is the prefix for the project's clone. If WORKINGPATH is provided, then a second pseudohost {Wprojectname} points to the working files for the project. GITFNS also defines two directory-connecting commands for conveniently connecting to the git and working pseudohosts of a project: @@ -57,11 +57,12 @@ bbc branch1 branch2 (project) [command] This compares the files in branch1 and branch2, for example bbc rmk15 lmm12 (local) This will compare the files in origin/rmk15 and origin/lmm12 in the GIT-DEFAULT project. branch1 defaults to the origin files of the currently checked out branch, the second defaults to origin/master. If local is non-NIL, then a branch that has neither local/ or origin/ prepended will default to local (e.g. local/rmk15) instead of origin/. Local refers to the files that are currently in the clone directory, which may not be the same as the origin files, depending on the push/pull status. +Either of the branches can be specified with an atom LOCAL, REMOTE, or ORIGIN, in which case bbc will offer menus listing the currently existing branches of that type. The command cob ("check out branch") checks out a specified branch: -cob branch (titlestring) (project) [command] +cob branch (nexttitlestring) (project) [command] This checks out branch of project and then executes git pull. The branch parameter may also be a local branch, T (= the current working branch), or NEW/NEXT (= the next working branch). The current working branch is the branch named nnn, e.g. rmk15. The initials are the value of INITIALS as used for SEDIT time stamps, and nnn is the largest of the integers of all of the branches beginning with those initials. -If branch is NEW or NEXT, then a new initialed branch is created and becomes the user's current branch. Its number is one greater than the largest number of previous initialed branches. If titlestring is provided, then that string will be appended to the name of the branch, after the initials and next number, and two hyphens. Spaces in titlestring will also be replaced by hyphens, according to git conventions. +If branch is NEW or NEXT, then a new initialed branch is created and becomes the user's current branch. Its number is one greater than the largest number of previous initialed branches. If nexttitlestring is provided, then that string will be appended to the name of the branch, after the initials and next number, and two hyphens. Spaces in nexttitlestring will also be replaced by hyphens, according to git conventions. If branch is not provided, a menu of locally available branches pops up. The currently checked out branch is obtained by the b? command: @@ -69,25 +70,25 @@ b? (project) [command] Correlating git source control with separate Medley development It is generally unsafe to do Medley development by operating with files in a local clone repository. Medley provides a residential development environment that integrates tightly with the local file system. It is important to have consistent access to the source files of the currently running system, especially for files whose contents have been only partially loaded. A git pull or a branch switch that introduces new versions of some files or removes old files altogether can lead to unpredictable disconnects that are hard to recover from. This is true also because development can go on in the same Medley memory image for days if not weeks, so it is important to have explicit control of any file version changes. -GITFNS mitigates the danger by conventions that separate the files in the git clone from the files in the working Medley development directory. The location of the Medley development source tree for a project is given by the WORKINGPATH argument to GIT-MAKE-PROJECT. If WORKINGPATH is T or NIL and there exists a directory >MY-projectname> as a sister to the clone, then that is taken to be the WORKINGPATH and thus the prefix for a pseudohost {Wprojectname}. +GITFNS mitigates the danger by conventions that separate the files in the git clone from the files in the working Medley development directory. The location of the Medley development source tree for a project is given by the WORKINGPATH argument to GIT-MAKE-PROJECT. If WORKINGPATH is T or NIL and there exists a directory >working-projectname> as a sister to the clone, then that is taken to be the WORKINGPATH and thus the prefix for a pseudohost {Wprojectname}. When Medley development is carried out in the WORKINGPATH, the variable MEDLEYDIR should point initially to the working directory, and the directory search paths (DIRECTORIES, LISPUSERSDIRECTORIES, FONTDIRECTORIES, etc.) all have MEDLEYDIR (or {WMEDLEY}) as a prefix. In that case, the clone for the project, if PROJECTPATH doesn't specify it explicitly, should be located at the >git-medley> sister directory of MEDLEYDIR. Any back and forth transfer of information between the git clone and Medley development must be done by explicit synchronization actions. Crucially, Medley-updated files do not appear in the clone directories and new clone files do not move to the Medley directories without user intervention. The files in Medley working tree and the git clone of a project can be compared with the gwc ("git-working-compare") command: gwc subdirectories (project) [command] This produces a browser for all the files in the corresponding WORKINGPATH subdirectories that differ from the files in the currently checked out branch of the git clone. If subdirectories is omitted, it defaults to the DEFAULTSUBDIRS of the project. If it is ALL, then files in all subdirectories that are not found in the project's EXCLUSIONS are compared. In addition to the commands for comparing and viewing files, the menu for this browser also has commands for copying files from the git clone {Gprojectname} to {Wprojectname} and deleting files from {Wprojectname}. -If master/main branch is the current branch then the menu has no commands to change the clone directory. The browser will show those files that have been updated from a recent merge, and they can individually be copied from the git branch to realign the two source trees with incremented Medley version numbers. If the comparison is with a different branch, say the user's current staging branch, copying files from the working Medley to the git clone or deleting git files will set git up for future commits. +If the master/main branch is the current branch then the menu has no commands to change the clone directory. The browser will show those files that have been updated from a recent merge, and they can individually be copied from the git branch to realign the two source trees with incremented Medley version numbers. If the comparison is with a different branch, say the user's current staging branch, copying files from the working Medley to the git clone or deleting git files will set git up for future commits. Note that the menu item for deleting Medley files will cause all version to be removed, not just the latest one, to avoid the possibility that an earlier one is revealed. Deletion for Medley files is also accomplished by renaming to a {Wprojectname} subdirectory so that they can be recovered if a deletion is in error. Files in the git-clone are removed from the file system immediately, since git provides its own recovery mechanism for those files. GITFNS does not (yet?) include functions for commits, pushes, or merges for updating the remote repository. Those have to be done outside of Medley through the usual github interfaces, as guided by the information provided by the comparisons. -(LIST ((PAGE NIL (PAPERSIZE Letter FOLIOINFO (ARABIC) STARTINGPAGE# 1) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD CENTERED) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY MODERN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO (ARABIC)) (174 36 288 36) NIL) (HEADING NIL (HEADINGTYPE RUNNINGHEAD) (84 744 528 36) NIL) (TEXT NIL NIL (84 96 456 600) NIL))) (PAGE NIL (PAPERSIZE Letter FOLIOINFO (ARABIC)) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD CENTERED) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY MODERN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO (ARABIC)) (174 36 288 36) NIL) (HEADING NIL (HEADINGTYPE RUNNINGHEAD) (84 744 528 36) NIL) (TEXT NIL NIL (84 96 456 600) NIL))) (PAGE NIL (PAPERSIZE Letter FOLIOINFO (ARABIC)) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD CENTERED) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY MODERN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO (ARABIC)) (174 36 288 36) NIL) (HEADING NIL (HEADINGTYPE RUNNINGHEAD) (84 744 528 36) NIL) (TEXT NIL NIL (84 96 456 600) NIL))))) .4 4 44444 4..8.8J PAGEHEADING RUNNINGHEADMODERN +(LIST ((PAGE NIL (PAPERSIZE Letter FOLIOINFO (ARABIC) STARTINGPAGE# 1) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD CENTERED) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY MODERN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO (ARABIC)) (174 36 288 36) NIL) (HEADING NIL (HEADINGTYPE RUNNINGHEAD) (84 744 528 36) NIL) (TEXT NIL NIL (84 96 456 600) NIL))) (PAGE NIL (PAPERSIZE Letter FOLIOINFO (ARABIC)) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD CENTERED) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY MODERN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO (ARABIC)) (174 36 288 36) NIL) (HEADING NIL (HEADINGTYPE RUNNINGHEAD) (84 744 528 36) NIL) (TEXT NIL NIL (84 96 456 600) NIL))) (PAGE NIL (PAPERSIZE Letter FOLIOINFO (ARABIC)) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD CENTERED) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY MODERN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO (ARABIC)) (174 36 288 36) NIL) (HEADING NIL (HEADINGTYPE RUNNINGHEAD) (84 744 528 36) NIL) (TEXT NIL NIL (84 96 456 600) NIL))))) .4 4 44444 4..8.8J PAGEHEADING RUNNINGHEADTERMINAL +MODERN TIMESROMAN$TERMINALMODERN MODERN MODERN MODERN -  HRULE.GETFN  HRULE.GETFNMODERN -  HRULE.GETFNMODERN -   HRULE.GETFNMODERN   HRULE.GETFNMODERN  - ,  R   ; B1 L-.$w a       / 27#h     k      ( 'G  !    =c    5  3>B  - ,  I     )1          <  & ,   %9"?! M + k  I  ""     D : -Z D - D -. (  2   D   J f -< D  z D  ,hZz \ No newline at end of file +  HRULE.GETFN  HRULE.GETFNMODERN +  HRULE.GETFNMODERN +   HRULE.GETFNMODERN   HRULE.GETFNMODERN  + ,  R   ; B1 L-.$w a       / 27#h     n      ( 'G  !    =c    5  3 $   + ,  I     )1          < 5f  & 0   %9"?  M  s  I  ""       w 6 D l  BZ D + D -. (  2   D   Uf +< D  z D  -5z \ No newline at end of file diff --git a/lispusers/comparetext b/lispusers/comparetext index adc776e1..c7530b69 100644 --- a/lispusers/comparetext +++ b/lispusers/comparetext @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "25-Feb-2022 14:36:43"  -{DSK}kaplan>Local>medley3.5>my-medley>lispusers>comparetext.;116 46252 +(FILECREATED "20-May-2022 16:35:56"  +{DSK}kaplan>Local>medley3.5>working-medley>lispusers>comparetext.;118 46470 - :CHANGES-TO (FNS COMPARETEXT.WINDOW) + :CHANGES-TO (FNS IMCOMPARE.BOXNODE) - :PREVIOUS-DATE "19-Feb-2022 12:01:45" -{DSK}kaplan>Local>medley3.5>my-medley>lispusers>comparetext.;115) + :PREVIOUS-DATE "25-Feb-2022 14:36:43" +{DSK}kaplan>Local>medley3.5>working-medley>lispusers>comparetext.;116) (* ; " @@ -193,20 +193,26 @@ Copyright (c) 1984-1985, 1993, 1998 by Xerox Corporation. X]) (IMCOMPARE.BOXNODE - [LAMBDA (WINDOW NODE1 NODE2) (* ; "Edited 25-Dec-2021 12:01 by rmk") + [LAMBDA (WINDOW NODE1 NODE2) + + (* ;; "Edited 20-May-2022 16:35 by rmk: Invert nodes rather than FLIPNODES, so they stay inverted when scrolled") + + (* ;; "Edited 25-Dec-2021 12:01 by rmk") (* rmk%: "14-Dec-84 13:40") (* ;; "Marks NODE1 and NODE2 as having been selected, removing marks on previous nodes.") (LET [(LASTNODES (WINDOWPROP WINDOW 'LASTNODES] (* ; "FLIPNODE ?") (CL:WHEN (CAR LASTNODES) - (FLIPNODE (CAR LASTNODES) - WINDOW)) + (RESET/NODE/LABELSHADE (CAR LASTNODES) + 'INVERT WINDOW)) (CL:WHEN (CADR LASTNODES) - (FLIPNODE (CADR LASTNODES) - WINDOW)) - (CL:WHEN NODE1 (FLIPNODE NODE1 WINDOW)) - (CL:WHEN NODE2 (FLIPNODE NODE2 WINDOW)) + (RESET/NODE/LABELSHADE (CADR LASTNODES) + 'INVERT WINDOW)) + (CL:WHEN NODE1 + (RESET/NODE/LABELSHADE NODE1 'INVERT WINDOW)) + (CL:WHEN NODE2 + (RESET/NODE/LABELSHADE NODE2 'INVERT WINDOW)) (WINDOWPROP WINDOW 'LASTNODES (LIST NODE1 NODE2]) (IMCOMPARE.CHUNKS @@ -737,12 +743,12 @@ Copyright (c) 1984-1985, 1993, 1998 by Xerox Corporation. ) (PUTPROPS COMPARETEXT COPYRIGHT ("Xerox Corporation" 1984 1985 1993 1998)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (1344 38872 (COMPARETEXT 1354 . 2854) (COMPARETEXT.WINDOW 2856 . 6357) ( -COMPARETEXT.TEXTOBJ 6359 . 9067) (COMPARETEXT.SETSEL 9069 . 9859) (CHUNKNODELABEL 9861 . 10982) ( -IMCOMPARE.BOXNODE 10984 . 11751) (IMCOMPARE.CHUNKS 11753 . 16129) (IMCOMPARE.COLLECT.HASH.CHUNKS 16131 - . 19048) (IMCOMPARE.DISPLAYGRAPH 19050 . 26893) (IMCOMPARE.HASH 26895 . 31082) ( -IMCOMPARE.MERGE.CONNECTED.CHUNKS 31084 . 34580) (IMCOMPARE.MERGE.UNCONNECTED.CHUNKS 34582 . 36537) ( -IMCOMPARE.SHOW.DIST 36539 . 36985) (IMCOMPARE.UPDATE.SYMBOL.TABLE 36987 . 38870)) (38873 45030 ( -IMCOMPARE.LEFTBUTTONFN 38883 . 41460) (IMCOMPARE.MIDDLEBUTTONFN 41462 . 44578) (IMCOMPARE.COPYBUTTONFN - 44580 . 45028)) (45083 45774 (TAIL1 45093 . 45447) (TAIL2 45449 . 45772))))) + (FILEMAP (NIL (1353 39090 (COMPARETEXT 1363 . 2863) (COMPARETEXT.WINDOW 2865 . 6366) ( +COMPARETEXT.TEXTOBJ 6368 . 9076) (COMPARETEXT.SETSEL 9078 . 9868) (CHUNKNODELABEL 9870 . 10991) ( +IMCOMPARE.BOXNODE 10993 . 11969) (IMCOMPARE.CHUNKS 11971 . 16347) (IMCOMPARE.COLLECT.HASH.CHUNKS 16349 + . 19266) (IMCOMPARE.DISPLAYGRAPH 19268 . 27111) (IMCOMPARE.HASH 27113 . 31300) ( +IMCOMPARE.MERGE.CONNECTED.CHUNKS 31302 . 34798) (IMCOMPARE.MERGE.UNCONNECTED.CHUNKS 34800 . 36755) ( +IMCOMPARE.SHOW.DIST 36757 . 37203) (IMCOMPARE.UPDATE.SYMBOL.TABLE 37205 . 39088)) (39091 45248 ( +IMCOMPARE.LEFTBUTTONFN 39101 . 41678) (IMCOMPARE.MIDDLEBUTTONFN 41680 . 44796) (IMCOMPARE.COPYBUTTONFN + 44798 . 45246)) (45301 45992 (TAIL1 45311 . 45665) (TAIL2 45667 . 45990))))) STOP diff --git a/sources/COREIO b/sources/COREIO index 0fe52821..48002778 100644 --- a/sources/COREIO +++ b/sources/COREIO @@ -1,11 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "26-Jan-2022 10:18:51" {DSK}kaplan>Local>medley3.5>my-medley>sources>COREIO.;15 56955 +(FILECREATED " 5-Jun-2022 00:14:07"  +{DSK}kaplan>local>medley3.5>working-medley>sources>COREIO.;17 57355 - :CHANGES-TO (VARS COREIOCOMS) + :CHANGES-TO (FNS \CORE.OPENFILE) - :PREVIOUS-DATE "18-Jan-2022 11:22:04" -{DSK}kaplan>Local>medley3.5>my-medley>sources>COREIO.;14) + :PREVIOUS-DATE " 4-Jun-2022 16:30:20" +{DSK}kaplan>local>medley3.5>working-medley>sources>COREIO.;16) (* ; " @@ -411,7 +412,8 @@ Copyright (c) 1981-1988, 1990, 1993, 1999, 2018 by Venue & Xerox Corporation. (LIST NAME]) (\CORE.OPENFILE - [LAMBDA (NAME ACCESS RECOG PARAMETERS FDEV OLDSTREAM) (* ; "Edited 13-Jan-88 19:23 by bvm") + [LAMBDA (NAME ACCESS RECOG PARAMETERS FDEV OLDSTREAM) (* ; "Edited 5-Jun-2022 00:14 by rmk") + (* ; "Edited 13-Jan-88 19:23 by bvm") (PROG (STREAM INFOBLK EOL) (AND OLDSTREAM (RETURN OLDSTREAM)) @@ -420,26 +422,26 @@ Copyright (c) 1981-1988, 1990, 1993, 1999, 2018 by Venue & Xerox Corporation. (COND [(type? STREAM NAME) (COND - ((NULL (fetch ACCESS of NAME)) + [(NULL (fetch ACCESS of NAME)) (* ;; "A closed file to be re-opened by its stream") (SETQ INFOBLK (fetch INFOBLK of NAME)) [if (EQ ACCESS 'OUTPUT) - then (* ; - "Open for OUTPUT implies no content, so smash any existing pages") - (replace IOEOFFSET of INFOBLK with 0) - (replace IOEPAGE of INFOBLK with 0) - (replace IOFILEPAGES of INFOBLK - with (LIST (create CORE.PAGEENTRY - PAGENUMBER _ 0] - (SETQ STREAM (create CORESTREAM - smashing NAME DEVICE _ FDEV INFOBLK _ INFOBLK FULLFILENAME _ - (fetch IOFILEFULLNAME of INFOBLK) - EOFFSET _ (fetch IOEOFFSET of INFOBLK) - EPAGE _ (fetch IOEPAGE of INFOBLK) - EOLCONVENTION _ (fetch COREEOLC of INFOBLK) - CBUFMAXSIZE _ BYTESPERPAGE))) + then (* ; + "Open for OUTPUT implies no content, so smash any existing pages") + (replace IOEOFFSET of INFOBLK with 0) + (replace IOEPAGE of INFOBLK with 0) + (replace IOFILEPAGES of INFOBLK with (LIST (create CORE.PAGEENTRY + PAGENUMBER _ 0] + (SETQ STREAM (create CORESTREAM smashing NAME DEVICE _ FDEV INFOBLK _ INFOBLK + FULLFILENAME _ (fetch IOFILEFULLNAME + of INFOBLK) + EOFFSET _ (fetch IOEOFFSET of INFOBLK) + EPAGE _ (fetch IOEPAGE of INFOBLK) + EOLCONVENTION _ (fetch COREEOLC of INFOBLK) + CBUFMAXSIZE _ BYTESPERPAGE OTHERPROPS _ + (fetch OTHERPROPS of NAME] ((\IOMODEP NAME ACCESS T) (* ;; "hdj - need we ever worry about being passed an already-open stream?") @@ -451,14 +453,14 @@ Copyright (c) 1981-1988, 1990, 1993, 1999, 2018 by Venue & Xerox Corporation. ((NEQ ACCESS 'INPUT) (\COREFILE.SETPARAMETERS STREAM PARAMETERS)) ((SETQ EOL (ASSOC 'EOL PARAMETERS)) (* ; - "Set EOL for the input stream, in contradiction of whatever the file might have said.") + "Set EOL for the input stream, in contradiction of whatever the file might have said.") (replace EOLCONVENTION of STREAM with (SELECTQ (CADR EOL) - ((CR NIL) + ((CR NIL) (* ; "default") - CR.EOLC) - (LF LF.EOLC) - (CRLF CRLF.EOLC) - (\ILLEGAL.ARG EOL] + CR.EOLC) + (LF LF.EOLC) + (CRLF CRLF.EOLC) + (\ILLEGAL.ARG EOL] (T (* ;; "Head for not-found error in \OPENFILE") @@ -870,7 +872,8 @@ Copyright (c) 1981-1988, 1990, 1993, 1999, 2018 by Venue & Xerox Corporation. (RETURN FDEV]) (\NODIRCORE.OPENFILE - [LAMBDA (NAME ACCESS RECOG PARAMETERS FDEV) (* lmm "24-May-85 11:59") + [LAMBDA (NAME ACCESS RECOG PARAMETERS FDEV) (* ; "Edited 4-Jun-2022 16:27 by rmk") + (* lmm "24-May-85 11:59") (* ; "Open function for NODIRCORE") (COND [(type? STREAM NAME) @@ -882,13 +885,13 @@ Copyright (c) 1981-1988, 1990, 1993, 1999, 2018 by Venue & Xerox Corporation. (* ;; "We'll return the stream that was given us, but we make sure that all its fields are back to their initial settings") - (create CORESTREAM smashing NAME DEVICE _ FDEV INFOBLK _ INFOBLK - FULLFILENAME _ (fetch IOFILEFULLNAME - of INFOBLK) - EOFFSET _ (fetch IOEOFFSET of INFOBLK) - EPAGE _ (fetch IOEPAGE of INFOBLK) - EOLCONVENTION _ (fetch COREEOLC of INFOBLK) - CBUFMAXSIZE _ BYTESPERPAGE] + (create CORESTREAM smashing NAME DEVICE _ FDEV INFOBLK _ INFOBLK FULLFILENAME _ + (fetch IOFILEFULLNAME of INFOBLK) + EOFFSET _ (fetch IOEOFFSET of INFOBLK) + EPAGE _ (fetch IOEPAGE of INFOBLK) + EOLCONVENTION _ (fetch COREEOLC of INFOBLK) + CBUFMAXSIZE _ BYTESPERPAGE OTHERPROPS _ + (fetch OTHERPROPS of NAME] (T (SELECTQ RECOG ((NEW OLD/NEW) (SETQ NAME (create CORESTREAM @@ -997,16 +1000,16 @@ Copyright (c) 1981-1988, 1990, 1993, 1999, 2018 by Venue & Xerox Corporation. (PUTPROPS COREIO COPYRIGHT ("Venue & Xerox Corporation" 1981 1982 1983 1984 1985 1986 1987 1988 1990 1993 1999 2018)) (DECLARE%: DONTCOPY - (FILEMAP (NIL (1703 46161 (\CORE.CLOSEFILE 1713 . 2486) (\CORE.DELETEFILE 2488 . 4474) ( -\CORE.DIRECTORYNAMEP 4476 . 6157) (\CORE.FINDPAGE 6159 . 9388) (\CORE.GENERATEFILES 9390 . 11977) ( -\CORE.NEXTFILEFN 11979 . 12478) (\CORE.FILEINFOFN 12480 . 12709) (\CORE.GETFILEHANDLE 12711 . 14865) ( -\CORE.GETFILEINFO 14867 . 15830) (\CORE.GETFILEINFO.FROM.INFOBLOCK 15832 . 17369) (\CORE.GETFILENAME -17371 . 19660) (\CORE.GETINFOBLOCK 19662 . 22285) (\CORE.NAMESCAN 22287 . 23834) (\CORE.NAMESEGMENT -23836 . 24273) (\CORE.OPENFILE 24275 . 27394) (\COREFILE.SETPARAMETERS 27396 . 29577) ( -\CORE.PACKFILENAME 29579 . 29974) (\CORE.RELEASEPAGES 29976 . 30577) (\CORE.SETFILEPTR 30579 . 31678) -(\CORE.UPDATEOF 31680 . 33309) (\CORE.BACKFILEPTR 33311 . 35519) (\CORE.SETEOFPTR 35521 . 37390) ( -\CORE.SETACCESSTIME 37392 . 38017) (\CORE.SETFILEINFO 38019 . 40321) (\CORE.GETNEXTBUFFER 40323 . -44279) (\CORE.UNPACKFILENAME 44281 . 46159)) (46162 49795 (COREDEVICE 46172 . 46343) ( -\CREATECOREDEVICE 46345 . 49793)) (49796 52097 (\NODIRCOREFDEV 49806 . 50403) (\NODIRCORE.OPENFILE -50405 . 52095))))) + (FILEMAP (NIL (1717 46448 (\CORE.CLOSEFILE 1727 . 2500) (\CORE.DELETEFILE 2502 . 4488) ( +\CORE.DIRECTORYNAMEP 4490 . 6171) (\CORE.FINDPAGE 6173 . 9402) (\CORE.GENERATEFILES 9404 . 11991) ( +\CORE.NEXTFILEFN 11993 . 12492) (\CORE.FILEINFOFN 12494 . 12723) (\CORE.GETFILEHANDLE 12725 . 14879) ( +\CORE.GETFILEINFO 14881 . 15844) (\CORE.GETFILEINFO.FROM.INFOBLOCK 15846 . 17383) (\CORE.GETFILENAME +17385 . 19674) (\CORE.GETINFOBLOCK 19676 . 22299) (\CORE.NAMESCAN 22301 . 23848) (\CORE.NAMESEGMENT +23850 . 24287) (\CORE.OPENFILE 24289 . 27681) (\COREFILE.SETPARAMETERS 27683 . 29864) ( +\CORE.PACKFILENAME 29866 . 30261) (\CORE.RELEASEPAGES 30263 . 30864) (\CORE.SETFILEPTR 30866 . 31965) +(\CORE.UPDATEOF 31967 . 33596) (\CORE.BACKFILEPTR 33598 . 35806) (\CORE.SETEOFPTR 35808 . 37677) ( +\CORE.SETACCESSTIME 37679 . 38304) (\CORE.SETFILEINFO 38306 . 40608) (\CORE.GETNEXTBUFFER 40610 . +44566) (\CORE.UNPACKFILENAME 44568 . 46446)) (46449 50082 (COREDEVICE 46459 . 46630) ( +\CREATECOREDEVICE 46632 . 50080)) (50083 52497 (\NODIRCOREFDEV 50093 . 50690) (\NODIRCORE.OPENFILE +50692 . 52495))))) STOP diff --git a/sources/COREIO.LCOM b/sources/COREIO.LCOM index 3a6576917e29493d11a3cba1d8577b7a5e57aabe..72f4a5e4ae19864ba02a4e9ce45ed54187232edb 100644 GIT binary patch delta 1263 zcmb7?&ubG=5XYNTtBqCC5=$Fe9D+)VP27F^Gpm$rlb3XLvm3HoD;Oxz4H}xJrM0LO z5w+){-J=IZZ-QVg-jpDo1O+c1_3FV({{nG#lhD@opnKT&-aKZ$^S+;Xu^RZb8hA7v z0U>^2xgIABA;2&S%PWlZcy{pQ@=|4SX?(W4P%GERYxCF2weh)%Q>)zJ62kbc`Ni34 z{rY-v@SZdZF~Y_3@1N;Bx2x{Z(`a$rCBaE8XEDk(?zOgZJL4DeviNgRx;MbyXXJ;B_K$g zAb^sdRE-?9;c+t3K9$HqMijoWWif_3C|#KGFUbO&ZDFR)YL&>SFL~s%14T*Ru1{uX4qYme+MPmT}$={B_GF# zDDJgg&rcIU6vz8R5UZ((1^H$2(uje?uDi24`wP;vwnJH6cAMP-8XL8;jZ~l@)hHo` zVEhA=y&KfKNhKb&2Tz80@b1C8iP4)U<7``F1vNT{efwtKym{Zx_v3y4)BFAhGZ7@l z&KAls#3BS7t8%i6xrg(8>r<8DN+mvDSY9ZU&+ZEN8;-bkee+AvH8C3VOt1X>^Z50e7^Q0TL;LC;JvEAnOe;K7m>JW^F=mz+AV{2hX<#6S z6-Zh7IAB2mFYuV=fRPAxj#@Ygn8QF!9Rx)I&B#vWK%m^4hdg4zYpiPq(TS1CO#l*+ zd*jg20Oq{_yaIV*+QhO<3lPGPH%x6ZnIUG@2E?-N2X%0JZ18>m#G?+MuPyNd+T$j( z=lzskvUJeXy;%+1t|jUytAY7CiZ_uXH})qQSkjSDZQ^p+y&~1w9)Iaf{uS)`;48>4VnuR4_4Jppf_}ik zRP8P}n3EviV8<9{(+bb8J)0ixpWvvIzkm}&g@QXS@DiAM`m{l2KtKxABlWB44w8l4 f10W>U-QlFVJ1pPw2q)7gTioG9sqW6!=uZ20t=UNz