From ddd3afee24aa647c87a7f59d45b138c1855de9b6 Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Wed, 22 Dec 2021 11:28:36 -0800 Subject: [PATCH] EXAMINEDEFS: side-by-side attached SEDIT windows for comparing alternative definitions --- lispusers/EXAMINEDEFS | 120 ++++++++++++++++++++++++++++++++++++ lispusers/EXAMINEDEFS.LCOM | Bin 0 -> 2236 bytes lispusers/EXAMINEDEFS.TEDIT | Bin 0 -> 4371 bytes 3 files changed, 120 insertions(+) create mode 100644 lispusers/EXAMINEDEFS create mode 100644 lispusers/EXAMINEDEFS.LCOM create mode 100644 lispusers/EXAMINEDEFS.TEDIT diff --git a/lispusers/EXAMINEDEFS b/lispusers/EXAMINEDEFS new file mode 100644 index 00000000..cfea6c5c --- /dev/null +++ b/lispusers/EXAMINEDEFS @@ -0,0 +1,120 @@ +(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) + +(FILECREATED "20-Dec-2021 11:06:33"  +{DSK}kaplan>Local>medley3.5>my-medley>lispusers>EXAMINEDEFS.;7 6367 + + :CHANGES-TO (FNS EXAMINEDEFS) + + :PREVIOUS-DATE "19-Dec-2021 22:45:48" +{DSK}kaplan>Local>medley3.5>my-medley>lispusers>EXAMINEDEFS.;5) + + +(PRETTYCOMPRINT EXAMINEDEFSCOMS) + +(RPAQQ EXAMINEDEFSCOMS ((FNS EXAMINEDEFS EXAMINEDEFS-REGION) + (INITVARS (EXAMINEDEFS-PROCESS-LIST)))) +(DEFINEQ + +(EXAMINEDEFS + [LAMBDA (NAME TYPE SOURCE1 SOURCE2 TITLE1 TITLE2 REGION) (* ; "Edited 20-Dec-2021 11:06 by rmk") + + (* ;; "This provides for side-by-side examination of separate but presumably related expressions. The (LISTP) expressions can be provided directly as SOURCE1 and SOURCE2 or, if NAME is given the copies of the definitions of NAME as TYPE on the two sources are examined.") + + (* ;; "") + + (* ;; "Examination is in side-by-side attached SEDIT windows if SEDIT is the EDITMODE. You can use SEDIT operations to zoom in on the location of any changes, deleting common stuff for example. But you are always working on a copy, so that changes are safe and ephemeral. This is an examination, not an edit.") + + (CL:UNLESS NAME + (CL:UNLESS (LISTP SOURCE1) + (ERROR SOURCE1 " cannot be examined")) + (CL:UNLESS (LISTP SOURCE2) + (ERROR SOURCE2 " cannot be examined"))) + + (* ;; "TITLE1 and TITLE2 are optional strings that will be used to construct the titles of the SEDIT windows. We would like to know where GETDEF got the definition so we can use that, but there isn't an interface that provides that information (extended WHEREIS?)") + + (LET (DEF1 DEF2) + (SETQ DEF1 (IF (LISTP SOURCE1) + THEN + (* ;; "Copy to simulate READONLY") + + (SETQ DEF1 (COPY SOURCE1)) + ELSEIF (GETDEF NAME TYPE SOURCE1) + ELSE (ERROR NAME " not found on " SOURCE1))) + (SETQ DEF2 (IF (LISTP SOURCE2) + THEN (COPY SOURCE2) + ELSEIF (GETDEF NAME TYPE SOURCE2) + ELSE (ERROR NAME " not found on " SOURCE2))) + (CL:UNLESS TITLE1 + (SETQ TITLE1 (OR SOURCE1 "File 1"))) + (CL:UNLESS TITLE2 + (SETQ TITLE2 (OR SOURCE2 "File 2"))) + (SELECTQ (EDITMODE) + (SEDIT:SEDIT + (* ;; + "A kludge to eliminate dangling SEDIT processes from previous examinations") + + [SETQ EXAMINEDEFS-PROCESS-LIST + (FOR PAIR IN EXAMINEDEFS-PROCESS-LIST + COLLECT (IF (OPENWP (CAR PAIR)) + THEN PAIR + ELSE (DEL.PROCESS (CDR PAIR)) + (GO $$ITERATE] + + (* ;; "Set it up for new side-by-side regions that are forgotten when the window is closed. Their shape is usually not that useful for regular edits.") + + (* ;; + "Crude suggestions for height, width, position. Suggest shorter window for smaller structures") + + (CL:UNLESS (REGIONP REGION) + (SETQ REGION (GETREGION))) + (LET (W1 W2 HALFWIDTH) + (SETQ HALFWIDTH (IQUOTIENT (FETCH (REGION WIDTH) OF REGION) + 2)) + [SETQ W1 + (SEDIT:GET-WINDOW (SEDIT:SEDIT DEF1 + `(:NAME ,(CONCAT NAME " from " TITLE1) + :REGION + ,(CREATE REGION + USING REGION WIDTH _ HALFWIDTH) + :DONT-KEEP-WINDOW-REGION T] + [SETQ W2 + (SEDIT:GET-WINDOW + (SEDIT:SEDIT DEF2 + `(:NAME ,(CONCAT NAME " from " TITLE2) + :REGION + ,(CREATE REGION USING REGION LEFT _ + (IPLUS (FETCH (REGION LEFT) + OF REGION) + HALFWIDTH) + WIDTH _ HALFWIDTH) + :DONT-KEEP-WINDOW-REGION T] + + (* ;; + "So we can kill the processes on the next call, if they still exist after the windows are closed.") + + [PUSH EXAMINEDEFS-PROCESS-LIST (CONS W1 (WINDOWPROP W1 'PROCESS)) + (CONS W2 (WINDOWPROP W2 'PROCESS] + (ATTACHWINDOW W2 W1 'RIGHT 'JUSTIFY) + (MODERNWINDOW W2))) + (PROGN (EDITE DEF1) + (EDITE DEF2]) + +(EXAMINEDEFS-REGION + [LAMBDA (WIDTH HEIGHT) (* ; "Edited 10-Dec-2021 10:15 by rmk") + + (* ;; "Prompts for a WIDTH-HEIGHT region with the top-left corner positioned at the initial cursor but the cursor then moved to the bottom-right for size adjustments. Thus the default behavior is that the upper left corner is fixed.") + + (GETMOUSESTATE) + (LET* ((LEFT LASTMOUSEX) + (RIGHT (IPLUS LEFT WIDTH)) + (TOP LASTMOUSEY) + (BOTTOM (IDIFFERENCE TOP HEIGHT))) + (\CURSORPOSITION RIGHT BOTTOM) + (GETREGION NIL NIL (CREATEREGION LEFT BOTTOM WIDTH HEIGHT) + NIL NIL (LIST LEFT TOP RIGHT BOTTOM]) +) + +(RPAQ? EXAMINEDEFS-PROCESS-LIST ) +(DECLARE%: DONTCOPY + (FILEMAP (NIL (513 6305 (EXAMINEDEFS 523 . 5601) (EXAMINEDEFS-REGION 5603 . 6303))))) +STOP diff --git a/lispusers/EXAMINEDEFS.LCOM b/lispusers/EXAMINEDEFS.LCOM new file mode 100644 index 0000000000000000000000000000000000000000..80023d0e56f75b3d7c8044528298d512e5aa87f7 GIT binary patch literal 2236 zcmb_e-EZ4e6i-sL4>PK^>I3S-bg%#=LXPa~I3EU;IQDhp#<4xyS=v!C(j;RQX;ZbE zv>h(;lmxd+ijbOlS|YqU&?d`T3l4&pjV0TGVzt zD%p-pCC9UUxEUB`$Jn4CI$lge*NFlVZidvbVx#3=Vz-Qlf+Cj$p~y6t2#cu&B9SF) zJd}t`6i^ghuIj2PLQxz}_Ye0b;}J{`Km_4yE9!jnN$+@kbiDr6;BYcHSa+wx!DM}Z zJerIjt7UC{|FM*8)+c+%hYvZFZW0eNadAJ!tS{)WWO($%OZ>h575b1>8*>U*E;K)IU7{fY7KO=ZFn0rl42il^W5sO)_1A|Zok zbSc=Fg4v6eg3vc<6iJx8aS8H23HjXB=8w=?c-org@DbQ@W-dH6Guvgzw-!zpzCFo@ zO{4WTgPbllIUw0>nThzLreV&BlijxUq;-0g<9Dx}(I@6?Bb;4h%D!aFKi{3?-|w$3 z8&@{DvfSUDmEo#=oyorEu-zMH%kp)*P{>aTf81SZ^Uo4DEN+!E?7Usb`zr`5AcfBw zKHN4V`1!cbyNgan0nIA#SDwG7jwOF_#I^laUh|hO$o}fu+HloJDL28F8|)zd5=STN z$@!mrcXIw~{_{L1e|XpX#XVi@-e24K>}<1e=j8lF_rslMFT4U5Kl`iA-wt1wa>a_; z0BSjy+Z9!vQAEQ$a?9yegW9NoA5gC!fLd3<^n-0sYg$TF8_@MF8hU-lv;01&RRTsF z8)kdPP%E(Gcu_B;GY(NNa}-QS=7+vPV`&DH>nW3qfK-`H&op8n745%xQjzEJvOL2p zSn8-bEefTor1gQdL+bq4>_xF- zV{9}6p|jCOH)}HJsZpY-p!1p{vUb5$>h+YXVEmI1@D+6eX*8gyTfP@d9ZG{VE>fxx z%a3Rc?DhAKru+CJ=-28O(yIk?9d34vw9%>1^5fX=VizM2`vGrjNfcRMbEzHk z_SB|4vaCVzu2_Pc@m4NZ;068#E0N`VuHAgT{N4iJ-7$Xu+3E1Ay+3Mqng%Z;BsZPT zeOA!#Twxz!DPZ3InmvP z$`k!b{DShY`1VLgQF@zp;IW#qE_?R!?YFzsCQ<76Zl~ansU81)1 zO|r$QHR#s}*Uz0*=yCX8v-I5{&|u~7?!pgUUaZ$AtCYehV+G09>o4PfKn@a0(s<>i zs~C`zd2|($ALc~3u>=82A1f~#gA6yNQ{kX$6irgs2O)|8W=WI4$tMvwSd%w*!wa~A zd+9?bF6a&dn!A@0a4B$;6lh7#X3|T+mr0341>96uCy_~l1W~1QPA*|B^}SW##-++o zb>XfjsFe>lG53Z7mWR!A$syLrb3=miDnauA97hWR8Ca?TxTzAlSfM?pG+C<_C=ith zZ&a*VQF1hnt|J=MrNB>8)dySEy_3oS`$#H*@~3Xw~(ykNSr4kEx=#?d8bvqyf)-zx9ilj>|Ypk#G{QgI_G61bwd zA60c#;qu_&N1Lm%Rlu|zpt~>9> zXf{;i>Y(h&O;gvKtE57B0cUWvrUg9j0XiTp@xoBNAW9G@x{%O_iN_@I;s~^2?B!D8 z7N)_vQE`B!rN*D9V6kB1ymeZG-q5r~R^t(N6HFj{A)SQEuujh$wJ(%5hDr&8)>nP#Md76k zeHnU^X8AUf;XqR?mS}V?0Mdw6*^A~u+PX8cxXeWso37@}=W4l>aXpZ;6kNq29B@EY z1&U(-0^3qR%P3JBr>1ccAr$?RjWS2h1bL`nT^L~Wa$nf%5C;zDI#8ox@U>O#S|f+5 z)uDMRsBd)%Z$n{^te*sRWtsv~XVA3$a>fn zH0X4&-*rXH83KZ%zK8a}fk3pgRYrQSPaT|v-E-;<+QRPB;IXi~I2$t+$F?4c!8kJ? z_n}d&iKj!eKf)=&qdxAMHjTOioJsoYiE0(<;fNde7?`ki z?wMexL>MSJI6kCrkEnTaf=4aWtey$84H`3|@(*>c+2ej63oL@|$srvd9@4#L+13$H z9c8Gh29^6qba?NGj`sI6_cd6)Q(2+^zKrk7NY(e#NP0B?$7!t9)Rue8xNRKr+s1R_ z1Ac66;I{D`_cvZQZMNUarokQ&=TkhkH@DvC-!K}+GvnFD3Gls(Hap$k1fDluKkzD$ zsB7yc`W@b-^4-taDQ$h3_ABn&!1$$6ajc#g*@K?hH@?ZVHVxwo;||Uj{9|NxjXQ_EBMdEz9+=@+uh{Y$~RhErW}voZM3K4P)ob9(P3pf9QAmTEXB& zHhY!Q#%sc;w)oG6TpooltJ9{z&rQHC<19nCW+Y2a8N3bl*BWy7DXw%fEGRf**C+|9 zic4#-;O>h8MM&1lnaK`o6t)~f*|S9TKYyvTS)yKUNIr&CS@19_KgyhMg`}`z1qSdv zeo9vbS83ss1N_M=Y^;PVIo1;8mnHvb3HxAyO6S!P3k;uYqr&k-OSGH6Sit^@rYUs4 z)4BzSg_daRBFQ4;Ct5{u#EuKH3er!tj&@VT)`G8CgN+M!dgU{{V(|+jE6}MIz7-i1 Q#A<7PBG_$Vod5CnzZm?!3jhEB literal 0 HcmV?d00001