1
0
mirror of synced 2026-02-17 05:17:12 +00:00

Rmk12: Lispusers packages of general utility, but especially for git compare (#634)

* TEXTOFD:  Property OBJECTBYTE returned instead of image objects

This allows COMPARETEXT to work on TEDIT files

* ATBL: Default reader environment uses *DEFAULT-EXTERNALFORMAT* instead of :XCCS constant

* CMLEXEC:  Fix FILETYPE property

It had CL:COMPILE-FILE, but the directory had LCOMs.  Changed to :FAKE-COMPILE-FILE.

* FILEIO:  single place for EOL specification

Now only in SETFILEINFO, not separately in \DO.PARAMS.AT.OPEN

* WINDOWOBJ:  COPYINSERT now uniformly allows lists of objects

It was incomplete.

* COMPARETEXT: Now works for TEDIT files

* EXAMINEDEFS: side-by-side attached SEDIT windows for comparing alternative definitions

* OBJECTWINDOW:  container for arbitrary image objects
This commit is contained in:
rmkaplan
2021-12-22 20:56:57 -08:00
committed by GitHub
parent dcd83c3753
commit 2dcfac5350
18 changed files with 2668 additions and 983 deletions

Binary file not shown.

120
lispusers/EXAMINEDEFS Normal file
View File

@@ -0,0 +1,120 @@
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
(FILECREATED "20-Dec-2021 11:06:33" 
{DSK}<Users>kaplan>Local>medley3.5>my-medley>lispusers>EXAMINEDEFS.;7 6367
:CHANGES-TO (FNS EXAMINEDEFS)
:PREVIOUS-DATE "19-Dec-2021 22:45:48"
{DSK}<Users>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

BIN
lispusers/EXAMINEDEFS.LCOM Normal file

Binary file not shown.

BIN
lispusers/EXAMINEDEFS.TEDIT Normal file

Binary file not shown.

1496
lispusers/OBJECTWINDOW Normal file

File diff suppressed because it is too large Load Diff

BIN
lispusers/OBJECTWINDOW.LCOM Normal file

Binary file not shown.

Binary file not shown.

View File

@@ -1,14 +1,13 @@
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
(FILECREATED "16-Dec-2021 10:57:35" 
{DSK}<Users>kaplan>Local>medley3.5>my-medley>lispusers>comparetext.;13 37426
(FILECREATED "22-Dec-2021 10:37:46" 
{DSK}<Users>kaplan>Local>medley3.5>my-medley>lispusers>comparetext.;20 39405
:CHANGES-TO (VARS COMPARETEXTCOMS)
(FNS IMCOMPARE.MIDDLEBUTTONFN IMCOMPARE.DISPLAY.FILE.DIFFERENCE.GRAPH
IMCOMPARE.FIND.TEDIT.TEXT.OBJECT)
:CHANGES-TO (FNS IMCOMPARE.COLLECT.HASH.CHUNKS COMPARETEXT)
(RECORDS IMCOMPARE.CHUNK)
:PREVIOUS-DATE "15-Dec-2021 17:00:06"
{DSK}<Users>kaplan>Local>medley3.5>my-medley>lispusers>comparetext.;9)
:PREVIOUS-DATE "19-Dec-2021 12:45:35"
{DSK}<Users>kaplan>Local>medley3.5>my-medley>lispusers>comparetext.;19)
(* ; "
@@ -18,9 +17,7 @@ Copyright (c) 1984-1985, 1993, 1998 by Xerox Corporation.
(PRETTYCOMPRINT COMPARETEXTCOMS)
(RPAQQ COMPARETEXTCOMS
((DECLARE%: EVAL@COMPILE (FILES (LOADCOMP)
GRAPHER))
(FNS COMPARETEXT IMCOMPARE.BOXNODE IMCOMPARE.CHUNKS IMCOMPARE.COLLECT.HASH.CHUNKS
((FNS COMPARETEXT IMCOMPARE.BOXNODE IMCOMPARE.CHUNKS IMCOMPARE.COLLECT.HASH.CHUNKS
IMCOMPARE.DISPLAY.FILE.DIFFERENCE.GRAPH IMCOMPARE.FIND.TEDIT.TEXT.OBJECT IMCOMPARE.HASH
IMCOMPARE.LEFTBUTTONFN IMCOMPARE.LENGTHEN.ATOM IMCOMPARE.MERGE.CONNECTED.CHUNKS
IMCOMPARE.MERGE.UNCONNECTED.CHUNKS IMCOMPARE.MIDDLEBUTTONFN IMCOMPARE.SHOW.DIST
@@ -29,16 +26,15 @@ Copyright (c) 1984-1985, 1993, 1998 by Xerox Corporation.
(INITVARS (IMCOMPARE.LAST.NODE NIL)
(IMCOMPARE.LAST.GRAPH.WINDOW NIL))
(RECORDS IMCOMPARE.CHUNK IMCOMPARE.SYMB)
(FILES GRAPHER)))
(DECLARE%: EVAL@COMPILE
(FILESLOAD (LOADCOMP)
GRAPHER)
)
(FILES (SYSLOAD)
GRAPHER)
(DECLARE%: EVAL@COMPILE DONTCOPY (FILES (LOADCOMP)
GRAPHER))))
(DEFINEQ
(COMPARETEXT
[LAMBDA (NEWFILENAME OLDFILENAME HASH.TYPE GRAPH.REGION FILELABELS)
(* ; "Edited 22-Dec-2021 10:35 by rmk")
(* ; "Edited 15-Dec-2021 16:23 by rmk")
(* ; "Edited 13-Dec-2021 12:21 by rmk")
(* ; "Edited 8-Nov-2021 08:44 by rmk:")
@@ -56,12 +52,10 @@ Copyright (c) 1984-1985, 1993, 1998 by Xerox Corporation.
(ERROR "Can't find both files" (LIST NEWFILENAME OLDFILENAME)))
(IMCOMPARE.CHUNKS (create IMCOMPARE.CHUNK
FILENAME _ NEWFILE
FILEPTR _ 0
CHUNKLENGTH _ (GETFILEINFO NEWFILE 'LENGTH))
FILEPTR _ 0)
(create IMCOMPARE.CHUNK
FILENAME _ OLDFILE
FILEPTR _ 0
CHUNKLENGTH _ (GETFILEINFO OLDFILE 'LENGTH))
FILEPTR _ 0)
HASH.TYPE
(if (EQ GRAPH.REGION T)
then (create REGION
@@ -89,6 +83,7 @@ Copyright (c) 1984-1985, 1993, 1998 by Xerox Corporation.
(IMCOMPARE.CHUNKS
[LAMBDA (NEWFILE.SPEC.CHUNK OLDFILE.SPEC.CHUNK HASH.TYPE GRAPH.REGION FILELABELS)
(* ; "Edited 18-Dec-2021 13:21 by rmk")
(* ; "Edited 15-Dec-2021 16:28 by rmk")
(* ; "Edited 13-Dec-2021 12:32 by rmk")
(* rmk%: " 8-Sep-84 00:06")
@@ -143,32 +138,45 @@ Copyright (c) 1984-1985, 1993, 1998 by Xerox Corporation.
(* ;; "The file comparison is complete. Format and display the file difference graph")
(IMCOMPARE.DISPLAY.FILE.DIFFERENCE.GRAPH NEWFILE.SPEC.CHUNK OLDFILE.CHUNK.LIST HASH.TYPE
(IMCOMPARE.DISPLAY.FILE.DIFFERENCE.GRAPH NEWFILE.SPEC.CHUNK OLDFILE.SPEC.CHUNK HASH.TYPE
GRAPH.REGION NEWFILE.CHUNK.LIST OLDFILE.CHUNK.LIST FILELABELS])
(IMCOMPARE.COLLECT.HASH.CHUNKS
[LAMBDA (CHUNK HASH.TYPE) (* ; "Edited 15-Dec-2021 15:40 by rmk")
[LAMBDA (CHUNK HASH.TYPE) (* ; "Edited 22-Dec-2021 10:37 by rmk")
(* ; "Edited 13-Dec-2021 16:32 by rmk")
(* ; "Edited 23-Dec-98 16:54 by rmk:")
(* mjs " 8-Jan-84 20:57")
(* ;;; "returns a list of the chunks inside CHUNK as hashed of type HASH.TYPE. Presumably CHUNK is is higher on the ranking PARA > LINE >. WORD. The initial CHUNK covers the whole file, middle-mouse refinement-chunks cover only subsections.")
(* ;;; "Returns a list of the chunks inside CHUNK as hashed of type HASH.TYPE. Presumably CHUNK is is higher on the ranking PARA > LINE >. WORD. The initial CHUNK covers the whole file, middle-mouse refinement-chunks cover only subsections.")
(BIND [STREAM _ (OPENSTREAM (fetch (IMCOMPARE.CHUNK FILENAME) of CHUNK)
'INPUT
'OLD
'((TYPE TEXT)
(EOLCONVENTION ANY]
(ENDPOS _ (IPLUS (fetch (IMCOMPARE.CHUNK FILEPTR) of CHUNK)
(fetch (IMCOMPARE.CHUNK CHUNKLENGTH) of CHUNK)))
(FILENAME _ (fetch (IMCOMPARE.CHUNK FILENAME) of CHUNK))
FIRST (SETFILEPTR STREAM (fetch (IMCOMPARE.CHUNK FILEPTR) of CHUNK))
WHILE (SETQ CHUNK (IMCOMPARE.HASH STREAM HASH.TYPE ENDPOS FILENAME)) COLLECT CHUNK
FINALLY (CLOSEF STREAM])
(* ;; "It is overkill to open raw text streams as TEDIT stream. So we open, test for TEDIT and if so, close and reoopen. TEDIT may not yet honor external formats other than XCCS for rawtext files.")
(BIND (FILENAME _ (fetch (IMCOMPARE.CHUNK FILENAME) of CHUNK))
STREAM ENDPOS FIRST (SETQ STREAM (OPENSTREAM FILENAME 'INPUT 'OLD))
(CL:WHEN (\TEDIT.FORMATTEDP1 STREAM)
(CLOSEF STREAM) (* ;
 "The OBJECTCHAR is produced in place of image objects")
[SETQ STREAM (OPENTEXTSTREAM FILENAME NIL NIL NIL
`(OBJECTBYTE ,(CHARCODE NULL])
(SETFILEINFO STREAM 'EOL 'ANY)
(CL:UNLESS (fetch (IMCOMPARE.CHUNK CHUNKLENGTH) of CHUNK)
(* ;;
 "For TEDIT files, the character length isn't known until after text-opening")
(REPLACE (IMCOMPARE.CHUNK CHUNKLENGTH) of CHUNK
WITH (GETFILEINFO STREAM 'LENGTH)))
(SETFILEPTR STREAM (fetch (IMCOMPARE.CHUNK FILEPTR) of CHUNK))
(SETQ ENDPOS (IPLUS (fetch (IMCOMPARE.CHUNK FILEPTR) of CHUNK)
(fetch (IMCOMPARE.CHUNK CHUNKLENGTH) of CHUNK)))
WHILE (SETQ CHUNK (IMCOMPARE.HASH STREAM HASH.TYPE ENDPOS))
COLLECT (REPLACE FILENAME OF CHUNK WITH FILENAME)
CHUNK FINALLY (CLOSEF STREAM])
(IMCOMPARE.DISPLAY.FILE.DIFFERENCE.GRAPH
[LAMBDA (NEWFILE.SPEC.CHUNK OLDFILE.SPEC.CHUNK HASH.TYPE GRAPH.REGION NEWFILE.CHUNK.LIST
OLDFILE.CHUNK.LIST FILELABELS) (* ; "Edited 16-Dec-2021 10:48 by rmk")
OLDFILE.CHUNK.LIST FILELABELS) (* ; "Edited 18-Dec-2021 13:16 by rmk")
(* ; "Edited 16-Dec-2021 10:48 by rmk")
(* ; "Edited 13-Dec-2021 12:19 by rmk")
(* mjs "11-Jul-85 09:10")
@@ -297,7 +305,8 @@ Copyright (c) 1984-1985, 1993, 1998 by Xerox Corporation.
unless (TEDIT.STREAMCHANGEDP POSS.TOBJ) do (RETURN POSS.TOBJ])
(IMCOMPARE.HASH
[LAMBDA (STREAM HASH.TYPE ENDPOS FULLNAME) (* ; "Edited 15-Dec-2021 15:58 by rmk")
[LAMBDA (STREAM HASH.TYPE ENDPOS) (* ; "Edited 19-Dec-2021 09:07 by rmk")
(* ; "Edited 15-Dec-2021 15:58 by rmk")
(* ; "Edited 13-Dec-2021 16:35 by rmk")
(* ; "Edited 23-Dec-98 16:58 by rmk:")
@@ -359,35 +368,44 @@ Copyright (c) 1984-1985, 1993, 1998 by Xerox Corporation.
HASHVALUE _ HASHNUM
FILEPTR _ STARTPOS
CHUNKLENGTH _ (IDIFFERENCE (GETFILEPTR STREAM)
STARTPOS)
FILENAME _ FULLNAME))])
STARTPOS)))])
(IMCOMPARE.LEFTBUTTONFN
[LAMBDA (GNODE WINDOW) (* mjs " 2-Apr-85 14:21")
[LAMBDA (GNODE WINDOW) (* ; "Edited 18-Dec-2021 13:02 by rmk")
(* mjs " 2-Apr-85 14:21")
(if GNODE
then (IMCOMPARE.BOXNODE GNODE WINDOW)
(PROG ((NODEID (fetch (GRAPHNODE NODEID) of GNODE))
(FILEPTR 1)
(CHUNKLENGTH 0)
(TEDIT.TEXT.OBJECT NIL)
FILE)
(SETQ FILE (fetch (IMCOMPARE.CHUNK FILENAME) of NODEID))
(SETQ FILEPTR (fetch (IMCOMPARE.CHUNK FILEPTR) of NODEID))
(SETQ CHUNKLENGTH (fetch (IMCOMPARE.CHUNK CHUNKLENGTH) of NODEID))
(SETQ TEDIT.TEXT.OBJECT (IMCOMPARE.FIND.TEDIT.TEXT.OBJECT FILE))
(if TEDIT.TEXT.OBJECT
then (TEDIT.SETSEL TEDIT.TEXT.OBJECT (IMAX 1 (IDIFFERENCE FILEPTR 25))
0
'LEFT)
(TEDIT.NORMALIZECARET TEDIT.TEXT.OBJECT)
(TEDIT.SETSEL TEDIT.TEXT.OBJECT FILEPTR CHUNKLENGTH 'LEFT)
(TEDIT.NORMALIZECARET TEDIT.TEXT.OBJECT)
(TTY.PROCESS (WINDOWPROP (CAR (fetch (TEXTOBJ \WINDOW) of
TEDIT.TEXT.OBJECT
))
'PROCESS))
else (TEDIT FILE NIL NIL (LIST 'SEL (LIST FILEPTR CHUNKLENGTH])
then (LET ((NODEID (fetch (GRAPHNODE NODEID) of GNODE)))
(IF (FIXP (CAR NODEID))
THEN (IMCOMPARE.BOXNODE GNODE WINDOW)
[LET ((FILEPTR 1)
(CHUNKLENGTH 0)
(TEDIT.TEXT.OBJECT NIL)
FILE)
(SETQ FILE (fetch (IMCOMPARE.CHUNK FILENAME) of NODEID))
(SETQ FILEPTR (fetch (IMCOMPARE.CHUNK FILEPTR) of NODEID))
(SETQ CHUNKLENGTH (fetch (IMCOMPARE.CHUNK CHUNKLENGTH) of NODEID))
(SETQ TEDIT.TEXT.OBJECT (IMCOMPARE.FIND.TEDIT.TEXT.OBJECT FILE))
(if TEDIT.TEXT.OBJECT
then (TEDIT.SETSEL TEDIT.TEXT.OBJECT (IMAX 1 (IDIFFERENCE FILEPTR
25))
0
'LEFT)
(TEDIT.NORMALIZECARET TEDIT.TEXT.OBJECT)
(TEDIT.SETSEL TEDIT.TEXT.OBJECT FILEPTR CHUNKLENGTH
'LEFT)
(TEDIT.NORMALIZECARET TEDIT.TEXT.OBJECT)
(TTY.PROCESS (WINDOWPROP (CAR (fetch (TEXTOBJ \WINDOW)
of TEDIT.TEXT.OBJECT))
'PROCESS))
else (TEDIT FILE NIL NIL (LIST 'SEL (LIST FILEPTR CHUNKLENGTH]
ELSEIF (AND (LITATOM NODEID)
(INFILEP NODEID))
THEN
(* ;;
 "A file name as a column header, do TEDIT on the whole file, no selection")
(TEDIT-SEE NODEID)
ELSE (SHOULDNT])
(IMCOMPARE.LENGTHEN.ATOM
[LAMBDA (X MIN.LENGTH EXTENDER) (* ; "Edited 13-Dec-2021 21:18 by rmk")
@@ -561,19 +579,25 @@ Copyright (c) 1984-1985, 1993, 1998 by Xerox Corporation.
(DECLARE%: EVAL@COMPILE
(RECORD IMCOMPARE.CHUNK (HASHVALUE FILEPTR CHUNKLENGTH FILENAME . OTHERCHUNK)
FILEPTR _ 1 CHUNKLENGTH _ 0)
FILEPTR _ 1)
(RECORD IMCOMPARE.SYMB (NEWCOUNT OLDCOUNT . OLDPTR))
)
(FILESLOAD GRAPHER)
(FILESLOAD (SYSLOAD)
GRAPHER)
(DECLARE%: EVAL@COMPILE DONTCOPY
(FILESLOAD (LOADCOMP)
GRAPHER)
)
(PUTPROPS COMPARETEXT COPYRIGHT ("Xerox Corporation" 1984 1985 1993 1998))
(DECLARE%: DONTCOPY
(FILEMAP (NIL (1433 36973 (COMPARETEXT 1443 . 3693) (IMCOMPARE.BOXNODE 3695 . 4211) (IMCOMPARE.CHUNKS
4213 . 8626) (IMCOMPARE.COLLECT.HASH.CHUNKS 8628 . 10026) (IMCOMPARE.DISPLAY.FILE.DIFFERENCE.GRAPH
10028 . 19004) (IMCOMPARE.FIND.TEDIT.TEXT.OBJECT 19006 . 19780) (IMCOMPARE.HASH 19782 . 23904) (
IMCOMPARE.LEFTBUTTONFN 23906 . 25642) (IMCOMPARE.LENGTHEN.ATOM 25644 . 26346) (
IMCOMPARE.MERGE.CONNECTED.CHUNKS 26348 . 29844) (IMCOMPARE.MERGE.UNCONNECTED.CHUNKS 29846 . 31801) (
IMCOMPARE.MIDDLEBUTTONFN 31803 . 34638) (IMCOMPARE.SHOW.DIST 34640 . 35086) (
IMCOMPARE.UPDATE.SYMBOL.TABLE 35088 . 36971)))))
(FILEMAP (NIL (1334 38876 (COMPARETEXT 1344 . 3554) (IMCOMPARE.BOXNODE 3556 . 4072) (IMCOMPARE.CHUNKS
4074 . 8592) (IMCOMPARE.COLLECT.HASH.CHUNKS 8594 . 11053) (IMCOMPARE.DISPLAY.FILE.DIFFERENCE.GRAPH
11055 . 20136) (IMCOMPARE.FIND.TEDIT.TEXT.OBJECT 20138 . 20912) (IMCOMPARE.HASH 20914 . 25101) (
IMCOMPARE.LEFTBUTTONFN 25103 . 27545) (IMCOMPARE.LENGTHEN.ATOM 27547 . 28249) (
IMCOMPARE.MERGE.CONNECTED.CHUNKS 28251 . 31747) (IMCOMPARE.MERGE.UNCONNECTED.CHUNKS 31749 . 33704) (
IMCOMPARE.MIDDLEBUTTONFN 33706 . 36541) (IMCOMPARE.SHOW.DIST 36543 . 36989) (
IMCOMPARE.UPDATE.SYMBOL.TABLE 36991 . 38874)))))
STOP