1
0
mirror of synced 2026-03-22 09:17:30 +00:00

Compare commits

..

8 Commits

Author SHA1 Message Date
Larry Masinter
5fadc6c083 move obsolete lispusers (#635) 2021-12-22 20:57:56 -08:00
rmkaplan
2dcfac5350 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
2021-12-22 20:56:57 -08:00
rmkaplan
dcd83c3753 Merge pull request #630 from Interlisp/rmk10
Rmk10: Background fixups to support git-compare
2021-12-17 22:25:56 -08:00
rmkaplan
cde5c9018d FILEIO: allow EOLCONVENTION ANY for input files
Any occurrence of CR, LF, CRLF maps to EOL, to facilitate processing of text files of unknown provenance
2021-12-16 20:11:56 -08:00
rmkaplan
1108a00b90 COMPARETEXT: upgraded to externalformat character interface
Also cleaned up some crufty code, added FILELABELS argument to give caller more precise control over the column labels.
2021-12-16 20:09:38 -08:00
rmkaplan
d9e445ad8c TEDIT: added TITLE argument to TEDIT-SEE
So caller can provide more informative information (useful in COMPAREDIRECTORIES)
2021-12-16 20:06:41 -08:00
rmkaplan
5b690d39d1 Delete STREAMDECLS
Old bogus file
2021-12-16 16:16:30 -08:00
Bill Stumbo
2573e4351f Add EOL to last line of each file. (#629) 2021-12-15 21:10:42 -08:00
30 changed files with 3394 additions and 2020 deletions

View File

@@ -109,4 +109,4 @@ jobs:
build-args: |
medley_release=${{steps.prep.outputs.medley_release}}
maiko_release=${{steps.prep.outputs.maiko_release}}
build_date=${{steps.prep.outputs.build_time}}
build_date=${{steps.prep.outputs.build_time}}

View File

@@ -103,4 +103,4 @@ jobs:
tag: ${{ env.tag }}
draft: true
bodyfile: tmp/release-notes.md
token: ${{ secrets.GITHUB_TOKEN }}
token: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -22,4 +22,4 @@ WORKDIR /home/medley
RUN adduser --disabled-password --gecos "" medley
USER medley
ENTRYPOINT USER=medley Xvnc -geometry 1280x720 :0 & DISPLAY=:0 PATH="/app/maiko:$PATH" ./run-medley -full -g 1280x720 -sc 1280x720
ENTRYPOINT USER=medley Xvnc -geometry 1280x720 :0 & DISPLAY=:0 PATH="/app/maiko:$PATH" ./run-medley -full -g 1280x720 -sc 1280x720

View File

@@ -1,12 +1,11 @@
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
(FILECREATED "13-Oct-2021 10:00:40" 
{DSK}<Users>kaplan>Local>medley3.5>git-medley>library>TEDIT.;19 142287
(FILECREATED "16-Dec-2021 12:34:26" {DSK}<Users>kaplan>Local>medley3.5>my-medley>library>TEDIT.;21 142324
changes to%: (FNS TEDIT-SEE)
:CHANGES-TO (FNS TEDIT-SEE)
previous date%: "11-Oct-2021 14:03:12"
{DSK}<Users>kaplan>Local>medley3.5>git-medley>library>TEDIT.;18)
:PREVIOUS-DATE "13-Oct-2021 10:00:40"
{DSK}<Users>kaplan>Local>medley3.5>my-medley>library>TEDIT.;20)
(* ; "
@@ -27,9 +26,9 @@ Copyright (c) 1983-1993, 1995, 1999, 2018, 2021 by Venue & Xerox Corporation.
(TEDIT.STARTUP.MONITORLOCK (CREATE.MONITORLOCK 'TEDIT.STARTUP))
(TEDIT.RESTART.MENU (\CREATE.TEDIT.RESTART.MENU))
(* ;
 "Original was (CREATE MENU ITEMS _ '(NewEditProcess)).")
 "Original was (CREATE MENU ITEMS _ '(NewEditProcess)).")
(* ;
 "Changed by yabu.fx, for SUNLOADUP without DWIM.")
 "Changed by yabu.fx, for SUNLOADUP without DWIM.")
)
(GLOBALVARS TEDIT.TENTATIVE TEDIT.DEFAULT.PROPS)
(FNS \TEDIT2 COERCETEXTOBJ TEDIT TEDIT-SEE TEDIT.CHARWIDTH TEDIT.COPY TEDIT.DELETE
@@ -40,10 +39,10 @@ Copyright (c) 1983-1993, 1995, 1999, 2018, 2021 by Venue & Xerox Corporation.
\TEDIT.FOREIGN.COPY? \TEDIT.QUIT \TEDIT.WORDDELETE \TEDIT1)
(P (MOVD? 'NILL 'OBJECTOUTOFTEDIT))
(* ;
 "HOOK for looked-string copy, etc. Used in \TEDIT.FOREIGN.COPY?.")
 "HOOK for looked-string copy, etc. Used in \TEDIT.FOREIGN.COPY?.")
(COMS (FNS \CREATE.TEDIT.RESTART.MENU))
(* ;
 "Added by yabu.fx, for SUNLOADUP without DWIM.")
 "Added by yabu.fx, for SUNLOADUP without DWIM.")
(COMS (* ; "Debugging functions")
(FNS PLCHAIN PRINTLINE SEEFILE))
(COMS (* ; "Object-oriented editing")
@@ -56,10 +55,10 @@ Copyright (c) 1983-1993, 1995, 1999, 2018, 2021 by Venue & Xerox Corporation.
(VARS TEDITSYSTEMDATE (TEDITSUPPORT "TEditSupport.PA"))
(FNS MAKETEDITFORM)
(P (ADDTOVAR LAFITESPECIALFORMS ("TEdit Report" 'MAKETEDITFORM
"Report a problem with TEdit"))
"Report a problem with TEdit"))
(SETQ LAFITEFORMSMENU NIL)))
(COMS (* ;
 "LISTFILES Interface, so the system can decide if a file is a TEdit file.")
 "LISTFILES Interface, so the system can decide if a file is a TEdit file.")
(ADDVARS (PRINTFILETYPES (TEDIT (TEST \TEDIT.FORMATTEDP1)
(EXTENSION (TEDIT])
@@ -330,8 +329,9 @@ Copyright (c) 1983-1993, 1995, 1999, 2018, 2021 by Venue & Xerox Corporation.
(RETURN PROC])
(TEDIT-SEE
[LAMBDA (FILE WINDOW FORMAT) (* ; "Edited 13-Oct-2021 10:00 by rmk:")
(* ; "Edited 27-Feb-2021 20:07 by rmk:")
[LAMBDA (FILE WINDOW FORMAT TITLE) (* ; "Edited 16-Dec-2021 12:33 by rmk")
(* ; "Edited 13-Oct-2021 10:00 by rmk:")
(* ; "Edited 27-Feb-2021 20:07 by rmk:")
(* ; "Edited 1-Feb-88 19:00 by bvm:")
(* ;; "See FILE in a scrollable READONLY TEDIT window. If FILE is a LISP source file, copy first to a temporary NODIRCORE image file that interpretes the fontchange characters rather than showing black boxes.")
@@ -347,28 +347,25 @@ Copyright (c) 1983-1993, 1995, 1999, 2018, 2021 by Venue & Xerox Corporation.
(IF (\TEDIT.FORMATTEDP1 STREAM)
ELSEIF (LISPSOURCEFILEP STREAM)
THEN
(* ;; "Lisp source file")
(* ;; "Lisp source file")
(SETQ SEESTREAM (OPENTEXTSTREAM))
(DSPFONT DEFAULTFONT SEESTREAM)
(COPY.TEXT.TO.IMAGE STREAM SEESTREAM)
(SETQ SEESTREAM (OPENTEXTSTREAM))
(DSPFONT DEFAULTFONT SEESTREAM)
(COPY.TEXT.TO.IMAGE STREAM SEESTREAM)
ELSE
(* ;; "Not a Lisp source file and not a Tedit file. If it is not random access, we copy it so we can scroll around.")
(* ;; "Not a Lisp source file and not a Tedit file. If it is not random access, we copy it so we can scroll around.")
(* ;; "Maybe there is a conventional way of finding out the external format of a plain-text stream (an EMACS header?), here we nudge towards :UTF-8 (if it exists).")
(* ;; "Maybe there is a conventional way of finding out the external format of a plain-text stream (an EMACS header?), here we nudge towards :UTF-8 (if it exists).")
(SETFILEINFO STREAM 'FORMAT (OR FORMAT (FIND-FORMAT :UTF-8)
:DEFAULT))
(CL:UNLESS (RANDACCESSP STREAM)
(SETQ SEESTREAM (OPENSTREAM '{NODIRCORE} 'BOTH 'NEW))
(COPYCHARS STREAM SEESTREAM)))
[SETQ TSTREAM (TEXTSTREAM (TEDIT SEESTREAM WINDOW NIL
`(READONLY T FONT ,DEFAULTFONT]
(WINDOWPROP (WFROMDS TSTREAM)
(SETFILEINFO STREAM 'FORMAT (OR FORMAT (FIND-FORMAT :UTF-8)
:DEFAULT))
(CL:UNLESS (RANDACCESSP STREAM)
(SETQ SEESTREAM (OPENSTREAM '{NODIRCORE} 'BOTH 'NEW))
(COPYCHARS STREAM SEESTREAM)))
[SETQ TSTREAM (TEXTSTREAM (TEDIT SEESTREAM WINDOW NIL `(READONLY T FONT ,DEFAULTFONT]
[WINDOWPROP (WFROMDS TSTREAM)
'TITLE
(CONCAT "SEE window for " (FULLNAME STREAM)))
(OR TITLE (CONCAT "SEE window for " (FULLNAME STREAM]
(FULLNAME STREAM])
(TEDIT.CHARWIDTH
@@ -2236,7 +2233,7 @@ Copyright (c) 1983-1993, 1995, 1999, 2018, 2021 by Venue & Xerox Corporation.
(* ; "TEDIT Support information")
(RPAQQ TEDITSYSTEMDATE "13-Oct-2021 10:00:40")
(RPAQQ TEDITSYSTEMDATE "16-Dec-2021 12:34:26")
(RPAQ TEDITSUPPORT "TEditSupport.PA")
(DEFINEQ
@@ -2258,23 +2255,23 @@ Copyright (c) 1983-1993, 1995, 1999, 2018, 2021 by Venue & Xerox Corporation.
(ADDTOVAR PRINTFILETYPES (TEDIT (TEST \TEDIT.FORMATTEDP1)
(EXTENSION (TEDIT))))
(EXTENSION (TEDIT))))
(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 (4330 117453 (\TEDIT2 4340 . 7091) (COERCETEXTOBJ 7093 . 15869) (TEDIT 15871 . 20840) (
TEDIT-SEE 20842 . 23129) (TEDIT.CHARWIDTH 23131 . 25155) (TEDIT.COPY 25157 . 33593) (TEDIT.DELETE
33595 . 34285) (TEDIT.DO.BLUEPENDINGDELETE 34287 . 37354) (TEDIT.INSERT 37356 . 42886) (TEDIT.KILL
42888 . 44445) (TEDIT.MAPLINES 44447 . 45846) (TEDIT.MAPPIECES 45848 . 46804) (TEDIT.MOVE 46806 .
56590) (TEDIT.QUIT 56592 . 58592) (TEDIT.STRINGWIDTH 58594 . 59265) (TEDIT.\INSERT 59267 . 61292) (
TEXTOBJ 61294 . 62419) (TEXTSTREAM 62421 . 64036) (\TEDIT.INCLUDE 64038 . 67938) (\TEDIT.INSERT.PIECES
67940 . 77855) (\TEDIT.MOVE.PIECEMAPFN 77857 . 79936) (\TEDIT.OBJECT.SHOWSEL 79938 . 83567) (
\TEDIT.RESTARTFN 83569 . 85564) (\TEDIT.CHARDELETE 85566 . 89528) (\TEDIT.COPY.PIECEMAPFN 89530 .
92755) (\TEDIT.DELETE 92757 . 100275) (\TEDIT.DIFFUSE.PARALOOKS 100277 . 103041) (\TEDIT.FOREIGN.COPY?
103043 . 106770) (\TEDIT.QUIT 106772 . 109918) (\TEDIT.WORDDELETE 109920 . 114753) (\TEDIT1 114755 .
117451)) (117567 117683 (\CREATE.TEDIT.RESTART.MENU 117577 . 117681)) (117782 121471 (PLCHAIN 117792
. 118066) (PRINTLINE 118068 . 120832) (SEEFILE 120834 . 121469)) (121512 141155 (TEDIT.INSERT.OBJECT
121522 . 130599) (TEDIT.EDIT.OBJECT 130601 . 132857) (TEDIT.FIND.OBJECT 132859 . 133752) (
TEDIT.FIND.OBJECT.SUBTREE 133754 . 134560) (TEDIT.PUT.OBJECT 134562 . 136221) (TEDIT.GET.OBJECT 136223
. 139422) (TEDIT.OBJECT.CHANGED 139424 . 141153)) (141433 141796 (MAKETEDITFORM 141443 . 141794)))))
(FILEMAP (NIL (4330 117494 (\TEDIT2 4340 . 7091) (COERCETEXTOBJ 7093 . 15869) (TEDIT 15871 . 20840) (
TEDIT-SEE 20842 . 23170) (TEDIT.CHARWIDTH 23172 . 25196) (TEDIT.COPY 25198 . 33634) (TEDIT.DELETE
33636 . 34326) (TEDIT.DO.BLUEPENDINGDELETE 34328 . 37395) (TEDIT.INSERT 37397 . 42927) (TEDIT.KILL
42929 . 44486) (TEDIT.MAPLINES 44488 . 45887) (TEDIT.MAPPIECES 45889 . 46845) (TEDIT.MOVE 46847 .
56631) (TEDIT.QUIT 56633 . 58633) (TEDIT.STRINGWIDTH 58635 . 59306) (TEDIT.\INSERT 59308 . 61333) (
TEXTOBJ 61335 . 62460) (TEXTSTREAM 62462 . 64077) (\TEDIT.INCLUDE 64079 . 67979) (\TEDIT.INSERT.PIECES
67981 . 77896) (\TEDIT.MOVE.PIECEMAPFN 77898 . 79977) (\TEDIT.OBJECT.SHOWSEL 79979 . 83608) (
\TEDIT.RESTARTFN 83610 . 85605) (\TEDIT.CHARDELETE 85607 . 89569) (\TEDIT.COPY.PIECEMAPFN 89571 .
92796) (\TEDIT.DELETE 92798 . 100316) (\TEDIT.DIFFUSE.PARALOOKS 100318 . 103082) (\TEDIT.FOREIGN.COPY?
103084 . 106811) (\TEDIT.QUIT 106813 . 109959) (\TEDIT.WORDDELETE 109961 . 114794) (\TEDIT1 114796 .
117492)) (117608 117724 (\CREATE.TEDIT.RESTART.MENU 117618 . 117722)) (117823 121512 (PLCHAIN 117833
. 118107) (PRINTLINE 118109 . 120873) (SEEFILE 120875 . 121510)) (121553 141196 (TEDIT.INSERT.OBJECT
121563 . 130640) (TEDIT.EDIT.OBJECT 130642 . 132898) (TEDIT.FIND.OBJECT 132900 . 133793) (
TEDIT.FIND.OBJECT.SUBTREE 133795 . 134601) (TEDIT.PUT.OBJECT 134603 . 136262) (TEDIT.GET.OBJECT 136264
. 139463) (TEDIT.OBJECT.CHANGED 139465 . 141194)) (141474 141837 (MAKETEDITFORM 141484 . 141835)))))
STOP

Binary file not shown.

View File

@@ -1,12 +1,11 @@
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
(FILECREATED "12-Oct-2021 15:38:41" 
{DSK}<Users>kaplan>Local>medley3.5>git-medley>library>TEXTOFD.;4 176302
(FILECREATED "22-Dec-2021 10:29:27" {DSK}<Users>kaplan>Local>medley3.5>my-medley>library>TEXTOFD.;12 182752
changes to%: (FNS \TEDITOUTCCODEFN)
:CHANGES-TO (FNS \TEXTBIN \TEXTPEEKBIN)
previous date%: " 7-Oct-2021 08:41:13"
{DSK}<Users>kaplan>Local>medley3.5>git-medley>library>TEXTOFD.;3)
:PREVIOUS-DATE "22-Dec-2021 10:01:53"
{DSK}<Users>kaplan>Local>medley3.5>my-medley>library>TEXTOFD.;11)
(* ; "
@@ -31,7 +30,7 @@ Copyright (c) 1983-1991, 1993-1995, 1999-2001, 2021 by John Sybalsky & Xerox Cor
(FNS \CHTOPC \CHTOPCNO \CLEARPCTB \CREATEPIECEORSTREAM \DELETEPIECE \FINDPIECE
\INSERTPIECE \MAKEPCTB \SPLITPIECE \INSERT.FIRST.PIECE))
(COMS (* ;
 "Generic-IO type operations support")
 "Generic-IO type operations support")
(FNS \TEXTCLOSEF \TEXTCLOSEF-SUBTREE \TEXTDSPFONT \TEXTEOFP \TEXTGETEOFPTR
\TEXTGETFILEPTR \TEXTOPENF \TEXTOPENF-SUBTREE \TEXTOUTCHARFN \TEXTBACKFILEPTR
\TEXTBOUT \TEDITOUTCCODEFN \TEXTSETEOF \TEXTSETFILEPTR \TEXTDSPXPOSITION
@@ -1913,214 +1912,248 @@ Copyright (c) 1983-1991, 1993-1995, 1999-2001, 2021 by John Sybalsky & Xerox Cor
(DEFINEQ
(\TEXTBIN
[LAMBDA (STREAM) (* ; "Edited 28-Mar-94 15:33 by jds")
[LAMBDA (STREAM)
(* ;; "Edited 22-Dec-2021 10:29 by rmk: Return value of OBJECTCHAR property for image objecdts")
(* ;; "Edited 28-Mar-94 15:33 by jds")
(* ;;; "Do BIN slow case for a text stream")
(* ;
 "NB that PEEKBIN and BACKFILEPTR need to track changes in this code")
 "NB that PEEKBIN and BACKFILEPTR need to track changes in this code")
(DECLARE (LOCALVARS . T))
(PROG (CH FILE STR PF PS PC PO NPC OPC SUBSTREAM)
(COND
[(ILESSP (fetch (STREAM COFFSET) of STREAM)
(fetch (STREAM CBUFSIZE) of STREAM))
(LET (BYTE) (* ;
 "RMK: Capture all return values for any special imageobject coercion")
[SETQ BYTE (PROG (CH FILE STR PF PS PC PO NPC OPC SUBSTREAM)
(COND
[(ILESSP (fetch (STREAM COFFSET) of STREAM)
(fetch (STREAM CBUFSIZE) of STREAM))
(* ;
 "Simple case -- just do the usual BIN")
(COND
[(SETQ PO (fetch (PIECE POBJ) of (fetch (TEXTSTREAM PIECE) of STREAM
)))
 "Simple case -- just do the usual BIN")
(COND
[(SETQ PO (fetch (PIECE POBJ) of (fetch (TEXTSTREAM PIECE)
of STREAM)))
(* ; "Handle objects specially")
(COND
((SETQ SUBSTREAM (IMAGEOBJPROP PO 'SUBSTREAM))
(COND
((SETQ SUBSTREAM (IMAGEOBJPROP PO 'SUBSTREAM))
(* ;
 "If this object has a substream in it, go to that substream")
(add (fetch (STREAM COFFSET) of STREAM)
1)
(RETURN (\BIN SUBSTREAM)))
(T
(* ;; "Otherwise, just return the object as BIN's result, and make sure we'll go to the next page next time.")
 "If this object has a substream in it, go to that substream")
(add (fetch (STREAM COFFSET) of STREAM)
1)
(RETURN (\BIN SUBSTREAM)))
(T
(* ;; "Otherwise, just return the object as BIN's result, and make sure we'll go to the next page next time.")
(replace (STREAM COFFSET) of STREAM with (fetch (STREAM
CBUFSIZE)
of STREAM))
(replace (TEXTSTREAM CHARSLEFT) of STREAM with 0)
(RETURN PO]
[(fetch (TEXTSTREAM FATSTREAMP) of STREAM)
(replace (STREAM COFFSET) of STREAM
with (fetch (STREAM CBUFSIZE) of STREAM))
(replace (TEXTSTREAM CHARSLEFT) of STREAM with 0)
(RETURN PO]
[(fetch (TEXTSTREAM FATSTREAMP) of STREAM)
(* ;
 "This is a 16 bit BIN. grab 2 bytes.")
 "This is a 16 bit BIN. grab 2 bytes.")
(* ;
 "WHAT HAPPENS IF THE SECOND BYTE IS ON ANOTHER PAGE??")
(RETURN (LOGOR (UNFOLD (\PAGEDBIN STREAM)
256)
(COND
((ILESSP (fetch (STREAM COFFSET) of STREAM)
(fetch (STREAM CBUFSIZE) of STREAM))
 "WHAT HAPPENS IF THE SECOND BYTE IS ON ANOTHER PAGE??")
(RETURN (LOGOR (UNFOLD (\PAGEDBIN STREAM)
256)
(COND
((ILESSP (fetch (STREAM COFFSET) of STREAM)
(fetch (STREAM CBUFSIZE) of STREAM))
(* ;
 "This pair of characters doesn't straddle a file page bound. Just grab the next char.")
(\PAGEDBIN STREAM))
(T (* ;
 "Need to move to the next page on the backing file. Doing so also grabs the next character.")
(\TEDIT.TEXTBIN.NEW.PAGE STREAM T]
(T (RETURN (\PAGEDBIN STREAM]
(T (* ;
 "We've either hit a page bound in a file, or a piece bound.")
(RETURN (COND
[(ZEROP (fetch (TEXTSTREAM CHARSLEFT) of STREAM))
 "This pair of characters doesn't straddle a file page bound. Just grab the next char.")
(\PAGEDBIN STREAM))
(T (* ;
 "Need to move to the next page on the backing file. Doing so also grabs the next character.")
(\TEDIT.TEXTBIN.NEW.PAGE STREAM T]
(T (RETURN (\PAGEDBIN STREAM]
(T (* ;
 "We've either hit a page bound in a file, or a piece bound.")
(RETURN (COND
[(ZEROP (fetch (TEXTSTREAM CHARSLEFT) of STREAM))
(* ; "Time for a new piece.")
[repeatwhile (AND PC (ZEROP (fetch (PIECE PLEN) of PC)))
do (* ;
 "Skip over any zero-length pieces at the end of the file.")
(SETQ OPC (fetch (TEXTSTREAM PIECE) of STREAM))
(SETQ PC (replace (TEXTSTREAM PIECE) of STREAM
with (AND OPC (fetch (PIECE NEXTPIECE)
of OPC]
(replace (STREAM BINABLE) of STREAM with T)
(replace (TEXTSTREAM FATSTREAMP) of STREAM with NIL)
[repeatwhile (AND PC (ZEROP (fetch (PIECE PLEN)
of PC)))
do (* ;
 "Skip over any zero-length pieces at the end of the file.")
(SETQ OPC (fetch (TEXTSTREAM PIECE) of STREAM))
(SETQ PC (replace (TEXTSTREAM PIECE) of STREAM
with (AND OPC (fetch (PIECE NEXTPIECE)
of OPC]
(replace (STREAM BINABLE) of STREAM with T)
(replace (TEXTSTREAM FATSTREAMP) of STREAM with NIL)
(* ;
 "Move to the next piece in the chain")
(COND
[PC (* ;
 "There IS a next piece to move to.")
(AND (fetch (TEXTSTREAM LOOKSUPDATEFN) of STREAM)
(SETQ NPC (APPLY* (fetch (TEXTSTREAM LOOKSUPDATEFN)
of STREAM)
STREAM PC))
(replace (TEXTSTREAM PIECE) of STREAM
with (SETQ PC NPC)))
 "Move to the next piece in the chain")
(COND
[PC (* ; "There IS a next piece to move to.")
(AND (fetch (TEXTSTREAM LOOKSUPDATEFN)
of STREAM)
(SETQ NPC (APPLY* (fetch (TEXTSTREAM
LOOKSUPDATEFN
)
of STREAM)
STREAM PC))
(replace (TEXTSTREAM PIECE) of STREAM
with (SETQ PC NPC)))
(* ;
 "Take care of any piece-change uproar. uproar -- which may include picking a new piece to go to.")
[COND
(NPC (* ;
 "If we got an NPC, this was taken care of by the LOOKSUPDATEFN")
)
([AND (SETQ PO (fetch (PIECE POBJ) of PC))
(SETQ SUBSTREAM (IMAGEOBJPROP PO 'SUBSTREAM]
(\SETUPGETCH 1 (fetch (TEXTSTREAM TEXTOBJ)
of SUBSTREAM))
(replace (TEXTSTREAM CURRENTPARALOOKS) of STREAM
with (fetch (TEXTSTREAM CURRENTPARALOOKS)
of SUBSTREAM))
(replace (TEXTSTREAM CURRENTLOOKS) of STREAM
with (fetch (TEXTSTREAM CURRENTLOOKS) of
SUBSTREAM
)))
[(NEQ (fetch (PIECE PPARALOOKS) of OPC)
(fetch (PIECE PPARALOOKS) of PC))
(replace (TEXTSTREAM CURRENTPARALOOKS) of STREAM
with (\TEDIT.APPLY.PARASTYLES (fetch (PIECE
PPARALOOKS
)
of PC)
PC
(fetch (TEXTSTREAM TEXTOBJ)
of STREAM)))
(replace (TEXTSTREAM CURRENTLOOKS) of STREAM
with (\TEDIT.APPLY.STYLES (fetch (PIECE PLOOKS)
of PC)
PC
(fetch (TEXTSTREAM TEXTOBJ)
of STREAM]
((NOT (EQCLOOKS (fetch (PIECE PLOOKS) of PC)
(fetch (PIECE PLOOKS) of OPC)))
(replace (TEXTSTREAM CURRENTLOOKS) of STREAM
with (\TEDIT.APPLY.STYLES (fetch (PIECE PLOOKS)
of PC)
PC
(fetch (TEXTSTREAM TEXTOBJ)
of STREAM]
(COND
((SETQ PS (fetch (PIECE PSTR) of PC))
 "Take care of any piece-change uproar. uproar -- which may include picking a new piece to go to.")
[COND
(NPC (* ;
 "If we got an NPC, this was taken care of by the LOOKSUPDATEFN")
)
([AND (SETQ PO (fetch (PIECE POBJ) of PC))
(SETQ SUBSTREAM (IMAGEOBJPROP
PO
'SUBSTREAM]
(\SETUPGETCH 1 (fetch (TEXTSTREAM TEXTOBJ)
of SUBSTREAM))
(replace (TEXTSTREAM CURRENTPARALOOKS)
of STREAM with (fetch (TEXTSTREAM
CURRENTPARALOOKS
) of SUBSTREAM
))
(replace (TEXTSTREAM CURRENTLOOKS)
of STREAM with (fetch (TEXTSTREAM
CURRENTLOOKS)
of SUBSTREAM)))
[(NEQ (fetch (PIECE PPARALOOKS) of OPC)
(fetch (PIECE PPARALOOKS) of PC))
(replace (TEXTSTREAM CURRENTPARALOOKS)
of STREAM with (\TEDIT.APPLY.PARASTYLES
(fetch (PIECE PPARALOOKS)
of PC)
PC
(fetch (TEXTSTREAM TEXTOBJ)
of STREAM)))
(replace (TEXTSTREAM CURRENTLOOKS)
of STREAM with (\TEDIT.APPLY.STYLES
(fetch (PIECE PLOOKS)
of PC)
PC
(fetch (TEXTSTREAM TEXTOBJ)
of STREAM]
((NOT (EQCLOOKS (fetch (PIECE PLOOKS)
of PC)
(fetch (PIECE PLOOKS) of OPC)))
(replace (TEXTSTREAM CURRENTLOOKS)
of STREAM with (\TEDIT.APPLY.STYLES
(fetch (PIECE PLOOKS)
of PC)
PC
(fetch (TEXTSTREAM TEXTOBJ)
of STREAM]
(COND
((SETQ PS (fetch (PIECE PSTR) of PC))
(* ; "This piece lives in a string.")
(\TEDIT.TEXTBIN.STRINGSETUP 0 (fetch (PIECE PLEN)
of PC)
STREAM PS)
(\TEDIT.TEXTBIN.STRINGSETUP
0
(fetch (PIECE PLEN) of PC)
STREAM PS)
(* ;; "Set the stream up so that it will use PS for BINs, starting at offset 0 (the front of the piece), and will run for as many chars as there are in the piece.")
(* ;
 "Then actually grab the next character to hand back to the caller.")
(\BIN STREAM))
((SETQ PF (fetch (PIECE PFILE) of PC))
 "Then actually grab the next character to hand back to the caller.")
(\BIN STREAM))
((SETQ PF (fetch (PIECE PFILE) of PC))
(* ; "This piece lives on a file.")
(\TEDIT.TEXTBIN.FILESETUP PC 0 (fetch (PIECE PLEN)
of PC)
STREAM PF (fetch (PIECE PFATP) of PC)
'PEEKBIN)
(\BIN STREAM))
[(SETQ PO (fetch (PIECE POBJ) of PC))
(replace (STREAM BINABLE) of STREAM with NIL)
(COND
(SUBSTREAM (* ;
 "There is a stream below this one, to feed chars upward.")
(\SETUPGETCH 1 (fetch (TEXTSTREAM TEXTOBJ)
of SUBSTREAM))
(freplace (STREAM COFFSET) of STREAM
with 0)
(freplace (TEXTSTREAM CHARSLEFT) of STREAM
with (fetch (PIECE PLEN) of PC))
(freplace (STREAM CBUFSIZE) of STREAM
with (fetch (PIECE PLEN) of PC))
(freplace (STREAM CPAGE) of STREAM
with 0)
(freplace (TEXTSTREAM PCSTARTCH) of STREAM
with 0)
(freplace (TEXTSTREAM PCSTARTPG) of STREAM
with 0)
(replace (TEXTSTREAM CURRENTPARALOOKS)
of STREAM with (fetch (TEXTSTREAM
CURRENTPARALOOKS
) of
SUBSTREAM))
(replace (TEXTSTREAM CURRENTLOOKS) of STREAM
with (fetch (TEXTSTREAM CURRENTLOOKS)
of SUBSTREAM))
(RETURN (\BIN SUBSTREAM)))
(T (replace (TEXTSTREAM CHARSLEFT) of STREAM
with 0)
(RETURN PO]
(T (ERROR "CAN'T GET TO NEXT PIECE"]
(T (* ;
 "There are no more pieces. Punt gracefully")
(COND
((fetch (STREAM ENDOFSTREAMOP) of STREAM)
(\TEDIT.TEXTBIN.FILESETUP PC 0
(fetch (PIECE PLEN) of PC)
STREAM PF (fetch (PIECE PFATP)
of PC)
'PEEKBIN)
(\BIN STREAM))
[(SETQ PO (fetch (PIECE POBJ) of PC))
(replace (STREAM BINABLE) of STREAM
with NIL)
(COND
(SUBSTREAM
(* ;
 "If there's an EOF handler, call it & return the result")
(RETURN (APPLY* (fetch (STREAM ENDOFSTREAMOP) of STREAM
)
STREAM)))
(T (* ; "Otherwise, return NIL")
(RETURN NIL]
[(SETQ PO (fetch (PIECE POBJ) of (fetch (TEXTSTREAM PIECE)
of STREAM)))
 "There is a stream below this one, to feed chars upward.")
(\SETUPGETCH 1 (fetch (TEXTSTREAM
TEXTOBJ)
of SUBSTREAM))
(freplace (STREAM COFFSET)
of STREAM with 0)
(freplace (TEXTSTREAM CHARSLEFT)
of STREAM
with (fetch (PIECE PLEN)
of PC))
(freplace (STREAM CBUFSIZE)
of STREAM
with (fetch (PIECE PLEN)
of PC))
(freplace (STREAM CPAGE)
of STREAM with 0)
(freplace (TEXTSTREAM PCSTARTCH)
of STREAM with 0)
(freplace (TEXTSTREAM PCSTARTPG)
of STREAM with 0)
(replace (TEXTSTREAM
CURRENTPARALOOKS)
of STREAM
with (fetch (TEXTSTREAM
CURRENTPARALOOKS
) of SUBSTREAM
))
(replace (TEXTSTREAM CURRENTLOOKS)
of STREAM
with (fetch (TEXTSTREAM
CURRENTLOOKS)
of SUBSTREAM))
(RETURN (\BIN SUBSTREAM)))
(T (replace (TEXTSTREAM CHARSLEFT)
of STREAM with 0)
(RETURN PO]
(T (ERROR "CAN'T GET TO NEXT PIECE"]
(T (* ;
 "There are no more pieces. Punt gracefully")
(COND
((fetch (STREAM ENDOFSTREAMOP) of STREAM)
(* ;
 "If there's an EOF handler, call it & return the result")
(RETURN (APPLY* (fetch (STREAM ENDOFSTREAMOP)
of STREAM)
STREAM)))
(T (* ; "Otherwise, return NIL")
(RETURN NIL]
[(SETQ PO (fetch (PIECE POBJ) of (fetch (TEXTSTREAM PIECE)
of STREAM)))
(* ; "This is an object")
(replace (STREAM BINABLE) of STREAM with NIL)
(COND
(SUBSTREAM (* ;
 "There is a stream below this one, to feed chars upward.")
(\SETUPGETCH 1 (fetch (TEXTSTREAM TEXTOBJ) of
SUBSTREAM))
(freplace (STREAM COFFSET) of STREAM with 1)
(freplace (TEXTSTREAM CHARSLEFT) of STREAM with
0)
(freplace (STREAM CBUFSIZE) of STREAM
with (fetch (PIECE PLEN) of PC))
(freplace (STREAM CPAGE) of STREAM with 0)
(freplace (TEXTSTREAM PCSTARTCH) of STREAM with
1)
(freplace (TEXTSTREAM PCSTARTPG) of STREAM with
0)
(replace (TEXTSTREAM CURRENTPARALOOKS) of STREAM
with (fetch (TEXTSTREAM CURRENTPARALOOKS)
of SUBSTREAM))
(replace (TEXTSTREAM CURRENTLOOKS) of STREAM
with (fetch (TEXTSTREAM CURRENTLOOKS) of
SUBSTREAM
))
(RETURN (\BIN SUBSTREAM)))
(T (replace (TEXTSTREAM CHARSLEFT) of STREAM with 0)
(RETURN PO]
(T (* ;
 "Need to move to the next page in a file.")
(RETURN (\TEDIT.TEXTBIN.NEW.PAGE STREAM])
(replace (STREAM BINABLE) of STREAM with NIL)
(COND
(SUBSTREAM (* ;
 "There is a stream below this one, to feed chars upward.")
(\SETUPGETCH 1 (fetch (TEXTSTREAM TEXTOBJ)
of SUBSTREAM))
(freplace (STREAM COFFSET) of STREAM
with 1)
(freplace (TEXTSTREAM CHARSLEFT) of STREAM
with 0)
(freplace (STREAM CBUFSIZE) of STREAM
with (fetch (PIECE PLEN) of PC))
(freplace (STREAM CPAGE) of STREAM with 0)
(freplace (TEXTSTREAM PCSTARTCH) of STREAM
with 1)
(freplace (TEXTSTREAM PCSTARTPG) of STREAM
with 0)
(replace (TEXTSTREAM CURRENTPARALOOKS)
of STREAM with (fetch (TEXTSTREAM
CURRENTPARALOOKS
) of SUBSTREAM)
)
(replace (TEXTSTREAM CURRENTLOOKS) of STREAM
with (fetch (TEXTSTREAM CURRENTLOOKS)
of SUBSTREAM))
(RETURN (\BIN SUBSTREAM)))
(T (replace (TEXTSTREAM CHARSLEFT) of STREAM
with 0)
(RETURN PO]
(T (* ;
 "Need to move to the next page in a file.")
(RETURN (\TEDIT.TEXTBIN.NEW.PAGE STREAM]
(IF (IMAGEOBJP BYTE)
THEN (OR (GETTEXTPROP (FETCH (TEXTSTREAM TEXTOBJ) OF STREAM)
'OBJECTBYTE)
BYTE)
ELSE BYTE])
(\TEDIT.TEXTBIN.STRINGSETUP
[LAMBDA (CHOFFSET CHARSLEFT STREAM PS) (* ; "Edited 31-May-91 14:21 by jds")
@@ -2353,123 +2386,144 @@ Copyright (c) 1983-1991, 1993-1995, 1999-2001, 2021 by John Sybalsky & Xerox Cor
(DEFINEQ
(\TEXTPEEKBIN
[LAMBDA (STREAM NOERRORFLG) (* ; "Edited 28-Mar-94 15:34 by jds")
[LAMBDA (STREAM NOERRORFLG)
(* ;; "Edited 22-Dec-2021 10:29 by rmk: Return OBJECTCHAR for image objects, if present")
(* ;; "Edited 28-Mar-94 15:34 by jds")
(* ; "DO PEEKBIN for a text stream")
(PROG (CH FILE STR PF PS PC PO SUBSTREAM)
(SETQ PC (fetch (TEXTSTREAM PIECE) of STREAM))
(COND
[(ILESSP (fetch (STREAM COFFSET) of STREAM)
(fetch (STREAM CBUFSIZE) of STREAM))
(LET (BYTE) (* ;
 "BYTE to capture all returns for imageobject coercion")
[SETQ BYTE (PROG (CH FILE STR PF PS PC PO SUBSTREAM)
(SETQ PC (fetch (TEXTSTREAM PIECE) of STREAM))
(COND
[(ILESSP (fetch (STREAM COFFSET) of STREAM)
(fetch (STREAM CBUFSIZE) of STREAM))
(* ;
 "Simple case -- just do the usual PEEKBIN")
(COND
((AND PC (fetch (PIECE POBJ) of PC))
(RETURN (fetch (PIECE POBJ) of PC)))
[(fetch (TEXTSTREAM FATSTREAMP) of STREAM)
(* ;
 "This is a 16 bit PEEKBIN. Grab two chars...")
(RETURN (COND
[(\EOFP STREAM)
 "Simple case -- just do the usual PEEKBIN")
(COND
(NOERRORFLG NIL)
(T (\PEEKBIN STREAM]
((ILESSP (fetch (STREAM COFFSET) of STREAM)
(SUB1 (fetch (STREAM CBUFSIZE) of STREAM)))
((AND PC (SETQ PO (fetch (PIECE POBJ) of PC)))
(RETURN PO))
[(fetch (TEXTSTREAM FATSTREAMP) of STREAM)
(* ;
 "We're sure of staying on the same page. Just grab the characters")
(PROG1 (LOGOR (UNFOLD (\PAGEDBIN STREAM)
256)
(\PAGEDPEEKBIN STREAM NOERRORFLG))
(\PAGEDBACKFILEPTR STREAM)))
(T (SETQ PS (fetch (STREAM F1) of STREAM))
(replace (STREAM COFFSET) of PS with (fetch
(STREAM COFFSET)
of STREAM))
(PROG1 (LOGOR (UNFOLD (\PAGEDBIN PS)
256)
(\PAGEDPEEKBIN PS NOERRORFLG))
(\PAGEDBACKFILEPTR PS]
(T (RETURN (\PAGEDPEEKBIN STREAM NOERRORFLG]
[PC (* ;
 "We've either hit a page bound in a file, or a piece bound.")
(RETURN (COND
[(ZEROP (fetch (TEXTSTREAM CHARSLEFT) of STREAM))
 "This is a 16 bit PEEKBIN. Grab two chars...")
(RETURN (COND
[(\EOFP STREAM)
(COND
(NOERRORFLG NIL)
(T (\PEEKBIN STREAM]
((ILESSP (fetch (STREAM COFFSET) of STREAM)
(SUB1 (fetch (STREAM CBUFSIZE) of STREAM)))
(* ;
 "We're sure of staying on the same page. Just grab the characters")
(PROG1 (LOGOR (UNFOLD (\PAGEDBIN STREAM)
256)
(\PAGEDPEEKBIN STREAM NOERRORFLG))
(\PAGEDBACKFILEPTR STREAM)))
(T (SETQ PS (fetch (STREAM F1) of STREAM))
(replace (STREAM COFFSET) of PS
with (fetch (STREAM COFFSET) of STREAM))
(PROG1 (LOGOR (UNFOLD (\PAGEDBIN PS)
256)
(\PAGEDPEEKBIN PS NOERRORFLG))
(\PAGEDBACKFILEPTR PS]
(T (RETURN (\PAGEDPEEKBIN STREAM NOERRORFLG]
[PC (* ;
 "We've either hit a page bound in a file, or a piece bound.")
(RETURN (COND
[(ZEROP (fetch (TEXTSTREAM CHARSLEFT) of STREAM))
(* ; "Time for a new piece.")
(SETQ PC (replace (TEXTSTREAM PIECE) of STREAM
with (fetch (PIECE NEXTPIECE) of PC)))
(SETQ PC (replace (TEXTSTREAM PIECE) of STREAM
with (fetch (PIECE NEXTPIECE) of PC)))
(* ;
 "Move to the next piece in the chain")
(COND
[PC (replace (TEXTSTREAM CURRENTLOOKS) of STREAM
with (\TEDIT.APPLY.STYLES (fetch (PIECE PLOOKS)
of PC)
PC
(fetch (TEXTSTREAM TEXTOBJ) of STREAM)
))
(COND
[(SETQ PO (fetch (PIECE POBJ) of PC))
(replace (STREAM BINABLE) of STREAM with NIL)
(freplace (STREAM CBUFSIZE) of STREAM
with (fetch (PIECE PLEN) of PC))
(freplace (STREAM COFFSET) of STREAM with 0)
(COND
(SUBSTREAM (* ;
 "There is a stream below this one, to feed chars upward.")
(\SETUPGETCH 1 (fetch (TEXTSTREAM TEXTOBJ)
of SUBSTREAM))
(freplace (TEXTSTREAM CHARSLEFT) of STREAM
with (fetch (PIECE PLEN) of PC))
(freplace (STREAM CPAGE) of STREAM
with 0)
(freplace (TEXTSTREAM PCSTARTCH) of STREAM
with 0)
(freplace (TEXTSTREAM PCSTARTPG) of STREAM
with 0)
(replace (TEXTSTREAM CURRENTPARALOOKS)
of STREAM with (fetch (TEXTSTREAM
 "Move to the next piece in the chain")
(COND
[PC (replace (TEXTSTREAM CURRENTLOOKS) of STREAM
with (\TEDIT.APPLY.STYLES (fetch (PIECE PLOOKS
)
of PC)
PC
(fetch (TEXTSTREAM TEXTOBJ)
of STREAM)))
(COND
[(SETQ PO (fetch (PIECE POBJ) of PC))
(replace (STREAM BINABLE) of STREAM
with NIL)
(freplace (STREAM CBUFSIZE) of STREAM
with (fetch (PIECE PLEN) of PC))
(freplace (STREAM COFFSET) of STREAM
with 0)
(COND
(SUBSTREAM
(* ;
 "There is a stream below this one, to feed chars upward.")
(\SETUPGETCH 1 (fetch (TEXTSTREAM
TEXTOBJ)
of SUBSTREAM))
(freplace (TEXTSTREAM CHARSLEFT)
of STREAM
with (fetch (PIECE PLEN)
of PC))
(freplace (STREAM CPAGE)
of STREAM with 0)
(freplace (TEXTSTREAM PCSTARTCH)
of STREAM with 0)
(freplace (TEXTSTREAM PCSTARTPG)
of STREAM with 0)
(replace (TEXTSTREAM
CURRENTPARALOOKS)
of STREAM
with (fetch (TEXTSTREAM
CURRENTPARALOOKS
)
of SUBSTREAM))
(replace (TEXTSTREAM CURRENTLOOKS) of
STREAM
with (fetch (TEXTSTREAM CURRENTLOOKS)
of SUBSTREAM))
(RETURN (\BIN SUBSTREAM)))
(T (replace (TEXTSTREAM CHARSLEFT) of STREAM
with 0)
(RETURN PO]
((SETQ PS (fetch (PIECE PSTR) of PC))
of SUBSTREAM))
(replace (TEXTSTREAM CURRENTLOOKS)
of STREAM
with (fetch (TEXTSTREAM
CURRENTLOOKS)
of SUBSTREAM))
(RETURN (\BIN SUBSTREAM)))
(T (replace (TEXTSTREAM CHARSLEFT)
of STREAM with 0)
(RETURN PO]
((SETQ PS (fetch (PIECE PSTR) of PC))
(* ; "This piece lives in a string.")
(\TEDIT.TEXTBIN.STRINGSETUP 0 (fetch (PIECE PLEN)
of PC)
STREAM PS)
(\TEDIT.TEXTBIN.STRINGSETUP
0
(fetch (PIECE PLEN) of PC)
STREAM PS)
(* ;; "Set the stream up so that it will use PS for BINs, starting at offset 0 (the front of the piece), and will run for as many chars as there are in the piece.")
(\PEEKBIN STREAM NOERRORFLG))
((SETQ PF (fetch (PIECE PFILE) of PC))
(\PEEKBIN STREAM NOERRORFLG))
((SETQ PF (fetch (PIECE PFILE) of PC))
(* ; "This piece lives on a file.")
(\TEDIT.TEXTBIN.FILESETUP PC 0 (fetch (PIECE PLEN)
of PC)
STREAM PF (fetch (PIECE PFATP) of PC)
'PEEKBIN NOERRORFLG))
(T (ERROR "CAN'T GET TO NEXT PIECE"]
(NOERRORFLG (* ;
 "There are no more pieces. Punt gracefully")
(RETURN NIL))
(T (* ; "He wants it the hard way.")
(APPLY* (fetch (STREAM ENDOFSTREAMOP) of STREAM)
STREAM]
(T (* ;
 "Need to move to the next page in a file.")
(RETURN (\TEDIT.PEEKBIN.NEW.PAGE STREAM NOERRORFLG]
(NOERRORFLG (* ;
 "There are no more pieces. Punt gracefully")
(RETURN NIL))
(T (* ; "He wants it the hard way.")
(APPLY* (fetch (STREAM ENDOFSTREAMOP) of STREAM)
STREAM])
(\TEDIT.TEXTBIN.FILESETUP PC 0
(fetch (PIECE PLEN) of PC)
STREAM PF (fetch (PIECE PFATP)
of PC)
'PEEKBIN NOERRORFLG))
(T (ERROR "CAN'T GET TO NEXT PIECE"]
(NOERRORFLG (* ;
 "There are no more pieces. Punt gracefully")
(RETURN NIL))
(T (* ; "He wants it the hard way.")
(APPLY* (fetch (STREAM ENDOFSTREAMOP) of STREAM)
STREAM]
(T (* ;
 "Need to move to the next page in a file.")
(RETURN (\TEDIT.PEEKBIN.NEW.PAGE STREAM NOERRORFLG]
(NOERRORFLG (* ;
 "There are no more pieces. Punt gracefully")
(RETURN NIL))
(T (* ; "He wants it the hard way.")
(APPLY* (fetch (STREAM ENDOFSTREAMOP) of STREAM)
STREAM]
(IF (IMAGEOBJP BYTE)
THEN (OR (GETTEXTPROP (FETCH (TEXTSTREAM TEXTOBJ) OF STREAM)
'OBJECTBYTE)
BYTE)
ELSE BYTE])
(\TEDIT.PEEKBIN.NEW.PAGE
[LAMBDA (STREAM NOERRORFLG) (* ; "Edited 11-Jun-99 15:11 by rmk:")
@@ -2667,25 +2721,25 @@ Copyright (c) 1983-1991, 1993-1995, 1999-2001, 2021 by John Sybalsky & Xerox Cor
(PUTPROPS TEXTOFD COPYRIGHT ("John Sybalsky & Xerox Corporation" 1983 1984 1985 1986 1987 1988 1989
1990 1991 1993 1994 1995 1999 2000 2001 2021))
(DECLARE%: DONTCOPY
(FILEMAP (NIL (2989 53114 (COPYTEXTSTREAM 2999 . 6121) (OPENTEXTSTREAM 6123 . 21000) (REOPENTEXTSTREAM
21002 . 21424) (TEDIT.STREAMCHANGEDP 21426 . 21724) (TEXTSTREAMP 21726 . 22040) (TXTFILE 22042 .
22487) (\DELETECH 22489 . 33745) (\SETUPGETCH 33747 . 41026) (\TEDIT.REOPEN.STREAM 41028 . 42878) (
\TEDIT.COPYTEXTSTREAM.PIECEMAPFN 42880 . 45318) (\TEXTINIT 45320 . 51007) (\TEXTMARK 51009 . 51757) (
\TEXTTTYBOUT 51759 . 53112)) (53115 78547 (\INSERTCH 53125 . 76851) (\INSERTCR 76853 . 78545)) (78613
98929 (\CHTOPC 78623 . 79812) (\CHTOPCNO 79814 . 81076) (\CLEARPCTB 81078 . 81874) (
\CREATEPIECEORSTREAM 81876 . 84850) (\DELETEPIECE 84852 . 85765) (\FINDPIECE 85767 . 86133) (
\INSERTPIECE 86135 . 89145) (\MAKEPCTB 89147 . 91062) (\SPLITPIECE 91064 . 98023) (\INSERT.FIRST.PIECE
98025 . 98927)) (98981 123219 (\TEXTCLOSEF 98991 . 100218) (\TEXTCLOSEF-SUBTREE 100220 . 100926) (
\TEXTDSPFONT 100928 . 101920) (\TEXTEOFP 101922 . 103281) (\TEXTGETEOFPTR 103283 . 103493) (
\TEXTGETFILEPTR 103495 . 105558) (\TEXTOPENF 105560 . 106390) (\TEXTOPENF-SUBTREE 106392 . 107193) (
\TEXTOUTCHARFN 107195 . 107543) (\TEXTBACKFILEPTR 107545 . 113446) (\TEXTBOUT 113448 . 116796) (
\TEDITOUTCCODEFN 116798 . 118064) (\TEXTSETEOF 118066 . 118575) (\TEXTSETFILEPTR 118577 . 119802) (
\TEXTDSPXPOSITION 119804 . 120661) (\TEXTDSPYPOSITION 120663 . 121208) (\TEXTLEFTMARGIN 121210 .
121693) (\TEXTRIGHTMARGIN 121695 . 122631) (\TEXTDSPCHARWIDTH 122633 . 122871) (\TEXTDSPSTRINGWIDTH
122873 . 123113) (\TEXTDSPLINEFEED 123115 . 123217)) (123220 156964 (\TEXTBIN 123230 . 140016) (
\TEDIT.TEXTBIN.STRINGSETUP 140018 . 145731) (\TEDIT.TEXTBIN.FILESETUP 145733 . 152119) (
\TEDIT.TEXTBIN.NEW.PAGE 152121 . 156962)) (156965 170373 (\TEXTPEEKBIN 156975 . 166114) (
\TEDIT.PEEKBIN.NEW.PAGE 166116 . 170371)) (170411 175629 (CGETTEXTPROP 170421 . 170897) (CTEXTPROP
170899 . 173243) (GETTEXTPROP 173245 . 173840) (PUTTEXTPROP 173842 . 175167) (TEXTPROP 175169 . 175627
(FILEMAP (NIL (2992 53117 (COPYTEXTSTREAM 3002 . 6124) (OPENTEXTSTREAM 6126 . 21003) (REOPENTEXTSTREAM
21005 . 21427) (TEDIT.STREAMCHANGEDP 21429 . 21727) (TEXTSTREAMP 21729 . 22043) (TXTFILE 22045 .
22490) (\DELETECH 22492 . 33748) (\SETUPGETCH 33750 . 41029) (\TEDIT.REOPEN.STREAM 41031 . 42881) (
\TEDIT.COPYTEXTSTREAM.PIECEMAPFN 42883 . 45321) (\TEXTINIT 45323 . 51010) (\TEXTMARK 51012 . 51760) (
\TEXTTTYBOUT 51762 . 53115)) (53118 78550 (\INSERTCH 53128 . 76854) (\INSERTCR 76856 . 78548)) (78616
98932 (\CHTOPC 78626 . 79815) (\CHTOPCNO 79817 . 81079) (\CLEARPCTB 81081 . 81877) (
\CREATEPIECEORSTREAM 81879 . 84853) (\DELETEPIECE 84855 . 85768) (\FINDPIECE 85770 . 86136) (
\INSERTPIECE 86138 . 89148) (\MAKEPCTB 89150 . 91065) (\SPLITPIECE 91067 . 98026) (\INSERT.FIRST.PIECE
98028 . 98930)) (98984 123222 (\TEXTCLOSEF 98994 . 100221) (\TEXTCLOSEF-SUBTREE 100223 . 100929) (
\TEXTDSPFONT 100931 . 101923) (\TEXTEOFP 101925 . 103284) (\TEXTGETEOFPTR 103286 . 103496) (
\TEXTGETFILEPTR 103498 . 105561) (\TEXTOPENF 105563 . 106393) (\TEXTOPENF-SUBTREE 106395 . 107196) (
\TEXTOUTCHARFN 107198 . 107546) (\TEXTBACKFILEPTR 107548 . 113449) (\TEXTBOUT 113451 . 116799) (
\TEDITOUTCCODEFN 116801 . 118067) (\TEXTSETEOF 118069 . 118578) (\TEXTSETFILEPTR 118580 . 119805) (
\TEXTDSPXPOSITION 119807 . 120664) (\TEXTDSPYPOSITION 120666 . 121211) (\TEXTLEFTMARGIN 121213 .
121696) (\TEXTRIGHTMARGIN 121698 . 122634) (\TEXTDSPCHARWIDTH 122636 . 122874) (\TEXTDSPSTRINGWIDTH
122876 . 123116) (\TEXTDSPLINEFEED 123118 . 123220)) (123223 161060 (\TEXTBIN 123233 . 144112) (
\TEDIT.TEXTBIN.STRINGSETUP 144114 . 149827) (\TEDIT.TEXTBIN.FILESETUP 149829 . 156215) (
\TEDIT.TEXTBIN.NEW.PAGE 156217 . 161058)) (161061 176823 (\TEXTPEEKBIN 161071 . 172564) (
\TEDIT.PEEKBIN.NEW.PAGE 172566 . 176821)) (176861 182079 (CGETTEXTPROP 176871 . 177347) (CTEXTPROP
177349 . 179693) (GETTEXTPROP 179695 . 180290) (PUTTEXTPROP 180292 . 181617) (TEXTPROP 181619 . 182077
)))))
STOP

Binary file not shown.

Binary file not shown.

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,220 +0,0 @@
(DEFINE-FILE-INFO READTABLE "XCL" PACKAGE "INTERLISP")
(FILECREATED "10-Sep-87 12:12:37" {DSK}<OST>STREAMDECLS.\;1 10202
|changes| |to:| (VARS STREAMDECLSCOMS)
(RECORDS STREAM))
(PRETTYCOMPRINT STREAMDECLSCOMS)
(RPAQQ STREAMDECLSCOMS ((RECORDS STREAM)))
(DECLARE\: EVAL@COMPILE
(DATATYPE STREAM
(
(* |;;| "First 8 words are fixed for BIN, BOUT opcodes. Used to require length of whole datatype be multiple of 4, but Dolphin dead now.")
(COFFSET WORD) (* \;
 "Offset in CPPTR of next bin or bout")
(CBUFSIZE WORD) (* \;
 "Offset past last byte in that buffer")
(BINABLE FLAG) (* \; "BIN punts unless this bit on")
(BOUTABLE FLAG) (* \; "BOUT punts unless this bit on")
(EXTENDABLE FLAG) (* \;
 "BOUT punts when COFFSET ge CBUFFSIZE unless this bit set and COFFSET lt 512")
(CBUFDIRTY FLAG) (* \;
 "true if BOUT has sullied the current buffer")
(PEEKEDCHARP FLAG) (* \;
 "if true, PEEKEDCHAR contains value of recent call to unread-char")
(ACCESSBITS BITS 3) (* \;
 "What kind of access file is open for (read, write, append)")
(CBUFPTR POINTER) (* \; "Pointer to current buffer")
(BYTESIZE BYTE) (* \;
 "Byte size of stream, always 8 for now")
(CHARSET BYTE) (* \; "the current character set for this stream. If 255, stream is not runcoded, so read-char consumes two bytes every time")
(PEEKEDCHAR WORD) (* \; "value of unread-char call")
(CHARPOSITION WORD) (* \; "Used by POSITION etc.")
(CBUFMAXSIZE WORD) (* \;
 "on output, the size of the physical buffer--can't extend beyond this")
(* |;;| "-------- Above fields (8 words) potentially known to microcode. --------")
(NONDEFAULTDATEFLG FLAG)
(REVALIDATEFLG FLAG)
(MULTIBUFFERHINT FLAG) (* \;
 "True if stream likes to read and write more than one buffer at a time")
(USERCLOSEABLE FLAG) (* \;
 "Can be closed by CLOSEF; NIL for terminal, dribble...")
(USERVISIBLE FLAG) (* \;
 "Listed by OPENP; NIL for terminal, dribble ...")
(EOLCONVENTION BITS 2) (* \; "End-of-line convention")
(NIL FLAG)
(FULLFILENAME POINTER) (* \;
 "Name by which file is known to user")
(DEVICE POINTER) (* \; "FDEV of this guy")
(VALIDATION POINTER) (* \;
 "A number somehow identifying file, used to determine if file has changed in our absence")
(CPAGE POINTER) (* \;
 "CPAGE,,COFFSET constitutes current file pointer for most randaccess streams")
(EPAGE POINTER)
(EOFFSET WORD) (* \; "Page, byte offset of eof")
(LINELENGTH WORD) (* \;
 "LINELENGTH of stream, or -1 for no line length")
(* |;;| "----Following are device-specific fields----")
(F1 POINTER)
(F2 POINTER)
(F3 POINTER)
(F4 POINTER)
(F5 POINTER)
(FW6 WORD)
(FW7 WORD)
(FW8 WORD)
(FW9 WORD)
(F10 POINTER)
(* |;;| "----Following only filled in for open streams----")
(STRMBINFN POINTER) (* \;
 "Either the BIN fn from the FDEV, or a trap")
(STRMBOUTFN POINTER) (* \;
 "Either the BIN fn from the FDEV, or a trap")
(OUTCHARFN POINTER)
(ENDOFSTREAMOP POINTER)
(OTHERPROPS POINTER)
(IMAGEOPS POINTER) (* \; "Image operations vector")
(IMAGEDATA POINTER) (* \;
 "Image instance variables--format depends on IMAGEOPS value")
(BUFFS POINTER) (* \; "Buffer chain for pmapped streams")
(MAXBUFFERS WORD)
(NIL WORD)
(EXTRASTREAMOP POINTER) (* \;
 "For use of applications programs, not devices")
)
(BLOCKRECORD STREAM ((NIL 2 WORD)
(UCODEFLAGS BITS 5)
(* |;;| "respecification of access bits:")
(RANDOMWRITEABLE FLAG) (* \;
 "File open for output (access = OUTPUT or BOTH)")
(APPENDABLE FLAG) (* \;
 "File open for append (OUTPUT or APPEND or BOTH)")
(READABLE FLAG) (* \;
 "File open for read (READ or BOTH)")
(NIL POINTER)))
(ACCESSFNS STREAM ((ACCESS \\GETACCESS \\SETACCESS)
(FULLNAME (OR (|fetch| (STREAM FULLFILENAME) |of| DATUM)
DATUM))
(NAMEDP (AND (|fetch| (STREAM FULLFILENAME) |of| DATUM)
T))))
(SYNONYM CBUFPTR (CPPTR))
USERCLOSEABLE _ T USERVISIBLE _ T ACCESSBITS _ |NoBits| CPAGE _ 0 EPAGE _ 0 BUFFS _ NIL
BYTESIZE _ 8 CBUFPTR _ NIL MAXBUFFERS _ (LET NIL (DECLARE (GLOBALVARS
\\STREAM.DEFAULT.MAXBUFFERS
))
\\STREAM.DEFAULT.MAXBUFFERS)
CHARPOSITION _ 0 LINELENGTH _ (LET NIL (DECLARE (GLOBALVARS FILELINELENGTH))
FILELINELENGTH)
OUTCHARFN _ (FUNCTION \\FILEOUTCHARFN)
ENDOFSTREAMOP _ (FUNCTION \\EOSERROR)
IMAGEOPS _ \\NOIMAGEOPS EOLCONVENTION _ (SELECTQ (SYSTEMTYPE)
(D CR.EOLC)
(VAX LF.EOLC)
(JERICHO CRLF.EOLC)
CR.EOLC)
STRMBINFN _ (FUNCTION \\STREAM.NOT.OPEN)
STRMBOUTFN _ (FUNCTION \\STREAM.NOT.OPEN))
)
(/DECLAREDATATYPE 'STREAM
'(WORD WORD FLAG FLAG FLAG FLAG FLAG (BITS 3)
POINTER BYTE BYTE WORD WORD WORD FLAG FLAG FLAG FLAG FLAG (BITS 2)
FLAG POINTER POINTER POINTER POINTER POINTER WORD WORD POINTER POINTER POINTER POINTER
POINTER WORD WORD WORD WORD POINTER POINTER POINTER POINTER POINTER POINTER POINTER
POINTER POINTER WORD WORD POINTER)
'((STREAM 0 (BITS . 15))
(STREAM 1 (BITS . 15))
(STREAM 2 (FLAGBITS . 0))
(STREAM 2 (FLAGBITS . 16))
(STREAM 2 (FLAGBITS . 32))
(STREAM 2 (FLAGBITS . 48))
(STREAM 2 (FLAGBITS . 64))
(STREAM 2 (BITS . 82))
(STREAM 2 POINTER)
(STREAM 4 (BITS . 7))
(STREAM 4 (BITS . 135))
(STREAM 5 (BITS . 15))
(STREAM 6 (BITS . 15))
(STREAM 7 (BITS . 15))
(STREAM 8 (FLAGBITS . 0))
(STREAM 8 (FLAGBITS . 16))
(STREAM 8 (FLAGBITS . 32))
(STREAM 8 (FLAGBITS . 48))
(STREAM 8 (FLAGBITS . 64))
(STREAM 8 (BITS . 81))
(STREAM 8 (FLAGBITS . 112))
(STREAM 8 POINTER)
(STREAM 10 POINTER)
(STREAM 12 POINTER)
(STREAM 14 POINTER)
(STREAM 16 POINTER)
(STREAM 18 (BITS . 15))
(STREAM 19 (BITS . 15))
(STREAM 20 POINTER)
(STREAM 22 POINTER)
(STREAM 24 POINTER)
(STREAM 26 POINTER)
(STREAM 28 POINTER)
(STREAM 30 (BITS . 15))
(STREAM 31 (BITS . 15))
(STREAM 32 (BITS . 15))
(STREAM 33 (BITS . 15))
(STREAM 34 POINTER)
(STREAM 36 POINTER)
(STREAM 38 POINTER)
(STREAM 40 POINTER)
(STREAM 42 POINTER)
(STREAM 44 POINTER)
(STREAM 46 POINTER)
(STREAM 48 POINTER)
(STREAM 50 POINTER)
(STREAM 52 (BITS . 15))
(STREAM 53 (BITS . 15))
(STREAM 54 POINTER))
'56)
(DECLARE\: DONTCOPY
(FILEMAP (NIL)))
STOP

View File

@@ -1,78 +1,74 @@
(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP")
(FILECREATED "23-Dec-98 17:05:12" {DSK}<project>medley3.5>lispusers>comparetext.;3 39844
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
changes to%: (FNS IMCOMPARE.HASH IMCOMPARE.COLLECT.HASH.CHUNKS)
(VARS COMPARETEXTCOMS)
(FILECREATED "22-Dec-2021 10:37:46" 
{DSK}<Users>kaplan>Local>medley3.5>my-medley>lispusers>comparetext.;20 39405
previous date%: "18-Nov-93 14:43:00" {DSK}<project>medley3.5>lispusers>comparetext.;1)
:CHANGES-TO (FNS IMCOMPARE.COLLECT.HASH.CHUNKS COMPARETEXT)
(RECORDS IMCOMPARE.CHUNK)
:PREVIOUS-DATE "19-Dec-2021 12:45:35"
{DSK}<Users>kaplan>Local>medley3.5>my-medley>lispusers>comparetext.;19)
(* ; "
Copyright (c) 1984, 1985, 1993, 1998 by Xerox Corporation. All rights reserved.
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
IMCOMPARE.UPDATE.SYMBOL.TABLE)
(P (MOVD 'COMPARETEXT 'IMCOMPARE))
(VARS (IMCOMPARE.LAST.NODE NIL)
(IMCOMPARE.LAST.GRAPH.WINDOW NIL)
(IMCOMPARE.HASH.TYPE.MENU NIL))
(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)
[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:")
(* mjs " 8-Jan-84 21:06")
(* Compares the two files, and produces a graph showing their corresponding
 chunks. The courseness of the "chunking" is determined by HASH.TYPE, which may
 be PARA, LINE, or WORD. HASH.TYPE = NIL defaults to PARA.
 The file difference graph is displayed at GRAPHREGION.
 If GRAPH.REGION = NIL, the user is asked to specify a region.
 If GRAPH.REGION = T, a standard region is used.)
(* ;; "Compares the two files, and produces a graph showing their corresponding chunks. The courseness of the 'chunking' is determined by HASH.TYPE, which may be PARA, LINE, or WORD. HASH.TYPE = NIL defaults to PARA. The file difference graph is displayed at GRAPHREGION. If GRAPH.REGION = NIL, the user is asked to specify a region. If GRAPH.REGION = T, a standard region is used.")
(PROG ((NEWFILE (FINDFILE NEWFILENAME T))
(OLDFILE (FINDFILE OLDFILENAME T)))
(if (AND OLDFILE NEWFILE)
then (* compare the two "chunks"
 consisting of the entire text of the
 two files)
(IMCOMPARE.CHUNKS (create IMCOMPARE.CHUNK
FILENAME _ NEWFILE
FILEPTR _ 0
CHUNKLENGTH _ (GETFILEINFO NEWFILE 'LENGTH))
(create IMCOMPARE.CHUNK
FILENAME _ OLDFILE
FILEPTR _ 0
CHUNKLENGTH _ (GETFILEINFO OLDFILE 'LENGTH))
HASH.TYPE
(if (EQ GRAPH.REGION T)
then (create REGION
LEFT _ 25
BOTTOM _ 25
WIDTH _ 500
HEIGHT _ 150)
elseif GRAPH.REGION
else (CLRPROMPT)
(printout PROMPTWINDOW
"Please specify a window for the file difference graph" T)
(GETREGION)))
else (printout T "Can't find both files: " NEWFILENAME " & " OLDFILENAME
" --- IMCOMPARE aborted" T])
(SELECTQ HASH.TYPE
((PARA LINE WORD))
(NIL (SETQ HASH.TYPE 'PARA))
(ERROR (CONCAT "Unrecognize HASHTYPE " HASH.TYPE)))
(LET ((NEWFILE (FINDFILE NEWFILENAME T))
(OLDFILE (FINDFILE OLDFILENAME T)))
(CL:UNLESS (AND OLDFILE NEWFILE)
(ERROR "Can't find both files" (LIST NEWFILENAME OLDFILENAME)))
(IMCOMPARE.CHUNKS (create IMCOMPARE.CHUNK
FILENAME _ NEWFILE
FILEPTR _ 0)
(create IMCOMPARE.CHUNK
FILENAME _ OLDFILE
FILEPTR _ 0)
HASH.TYPE
(if (EQ GRAPH.REGION T)
then (create REGION
LEFT _ 25
BOTTOM _ 25
WIDTH _ 500
HEIGHT _ 150)
elseif GRAPH.REGION
else (CLRPROMPT)
(printout PROMPTWINDOW "Please specify a window for the file difference graph"
T)
(GETREGION))
FILELABELS])
(IMCOMPARE.BOXNODE
[LAMBDA (NODE WINDOW) (* rmk%: "14-Dec-84 13:40")
@@ -86,401 +82,345 @@ Copyright (c) 1984, 1985, 1993, 1998 by Xerox Corporation. All rights reserved.
(SETQ IMCOMPARE.LAST.GRAPH.WINDOW WINDOW])
(IMCOMPARE.CHUNKS
[LAMBDA (NEWFILE.SPEC.CHUNK OLDFILE.SPEC.CHUNK HASH.TYPE GRAPH.REGION)
[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")
(* this is the main text-comparison function.
 It compares the text in the two chunks <which may be small pieces of files, or
 entire files> and produces a graph showing how the sub-chunks of the two main
 chunks are related. The two main chunks may be in the same file, and the file
 may actually be an open Tedit textstream.
 The main chunks are broken down according to HASH.TYPE, which may be PARA
 <chunk by paragraph>, LINE, or WORD. HASH.TYPE = NIL defaults to PARA.
 The file difference graph is displayed at GRAPH.REGION.)
(* ;; "This is the main text-comparison function. It compares the text in the two chunks <which may be small pieces of files, or entire files> and produces a graph showing how the sub-chunks of the two main chunks are related. The two main chunks may be in the same file, and the file may actually be an open Tedit textstream. The main chunks are broken down according to HASH.TYPE, which may be PARA <chunk by paragraph>, LINE, WORD, or PARA. The file difference graph is displayed at GRAPH.REGION.")
(* this text comparison algorithm is originally from the article
 "A Technique for Isolating Differences Between Files" by Paul Heckel, in CACM,
 V21, %#4, April 1978 --- major difference is that I use lists instead of arrays)
(* ;; "This text comparison algorithm is originally from the article 'A Technique for Isolating Differences Between Files' by Paul Heckel, in CACM, V21, #4, April 1978 --- major difference is that I use lists instead of arrays")
(PROG ((CHUNK.SYMBOL.TABLE (HASHARRAY 500))
NEWFILE.CHUNK.LIST OLDFILE.CHUNK.LIST)
(* ;; "")
(* * collect lists of chunks from each of the main chunks, dividing them
 according to HASH.TYPE)
(* ;; "Collect lists of chunks from each of the main chunks, dividing them according to HASH.TYPE. We start with whole-file chunks to provide the interface that the")
(SETQ NEWFILE.CHUNK.LIST (IMCOMPARE.COLLECT.HASH.CHUNKS NEWFILE.SPEC.CHUNK HASH.TYPE))
(SETQ OLDFILE.CHUNK.LIST (IMCOMPARE.COLLECT.HASH.CHUNKS OLDFILE.SPEC.CHUNK HASH.TYPE))
(LET ((CHUNK.SYMBOL.TABLE (HASHARRAY 500))
(NEWFILE.CHUNK.LIST (IMCOMPARE.COLLECT.HASH.CHUNKS NEWFILE.SPEC.CHUNK HASH.TYPE))
(OLDFILE.CHUNK.LIST (IMCOMPARE.COLLECT.HASH.CHUNKS OLDFILE.SPEC.CHUNK HASH.TYPE)))
(* * update the chunk symbol table. For each hash value, this table records the
 number of "new" chunks with that hash value, the number of "old" chunks with
 that value, and a pointer to the place in OLD.CHUNK.LIST <not to an OLD chunk
 itself>.)
(* ;; "Update the chunk symbol table. For each hash value, this table records the number of 'new' chunks with that hash value, the number of 'old' chunks with that value, and a pointer to the place in OLD.CHUNK.LIST <not to an OLD c hunk itself>.")
(IMCOMPARE.UPDATE.SYMBOL.TABLE NEWFILE.CHUNK.LIST CHUNK.SYMBOL.TABLE NIL)
(IMCOMPARE.UPDATE.SYMBOL.TABLE OLDFILE.CHUNK.LIST CHUNK.SYMBOL.TABLE T)
(IMCOMPARE.UPDATE.SYMBOL.TABLE NEWFILE.CHUNK.LIST CHUNK.SYMBOL.TABLE NIL)
(IMCOMPARE.UPDATE.SYMBOL.TABLE OLDFILE.CHUNK.LIST CHUNK.SYMBOL.TABLE T)
(* * For every new chunk whose hash value matches EXACTLY ONE old chunk's
 value, "connect" it to the old chunk by setting the new chunk's OTHERCHUNK
 field to point to the appropriate place in the old chunk list <not the old
 chunk directly>. Also, make sure that OTHERCHUNK of the matching old chunk is
 non-NIL, so that unconnected old chunks will be merged correctly.)
(* ;; "For every new chunk whose hash value matches EXACTLY ONE old chunk's value, 'connect' it to the old chunk by setting the new chunk's OTHERCHUNK field to point to the appropriate place in the old chunk list <not the old chunk directly>. Also, make sure that OTHERCHUNK of the matching old chunk is non-NIL, so that unconnected old chunks will be merged correctly.")
(for NEW.CHUNK in NEWFILE.CHUNK.LIST bind SYMB
do (SETQ SYMB (GETHASH (fetch (IMCOMPARE.CHUNK HASHVALUE) of NEW.CHUNK)
CHUNK.SYMBOL.TABLE))
(if (AND (EQ 1 (fetch (IMCOMPARE.SYMB NEWCOUNT) of SYMB))
(EQ 1 (fetch (IMCOMPARE.SYMB OLDCOUNT) of SYMB)))
then (replace (IMCOMPARE.CHUNK OTHERCHUNK) of NEW.CHUNK
with (fetch (IMCOMPARE.SYMB OLDPTR) of SYMB))
(replace (IMCOMPARE.CHUNK OTHERCHUNK)
of (CAR (fetch (IMCOMPARE.SYMB OLDPTR) of SYMB))
with T)))
(for NEW.CHUNK in NEWFILE.CHUNK.LIST bind SYMB
do (SETQ SYMB (GETHASH (fetch (IMCOMPARE.CHUNK HASHVALUE) of NEW.CHUNK)
CHUNK.SYMBOL.TABLE))
(if (AND (EQ 1 (fetch (IMCOMPARE.SYMB NEWCOUNT) of SYMB))
(EQ 1 (fetch (IMCOMPARE.SYMB OLDCOUNT) of SYMB)))
then (replace (IMCOMPARE.CHUNK OTHERCHUNK) of NEW.CHUNK with (fetch (
IMCOMPARE.SYMB
OLDPTR)
of SYMB))
(replace (IMCOMPARE.CHUNK OTHERCHUNK) of (CAR (fetch (IMCOMPARE.SYMB OLDPTR)
of SYMB)) with T)))
(* * merge connected chunks forward)
(* ;; "Merge connected chunks forward")
(IMCOMPARE.MERGE.CONNECTED.CHUNKS NEWFILE.CHUNK.LIST NIL)
(IMCOMPARE.MERGE.CONNECTED.CHUNKS NEWFILE.CHUNK.LIST NIL)
(* * merge connected chunks backwards)
(* ;; "Merge connected chunks backwards")
(SETQ NEWFILE.CHUNK.LIST (DREVERSE NEWFILE.CHUNK.LIST))
(SETQ OLDFILE.CHUNK.LIST (DREVERSE OLDFILE.CHUNK.LIST))
(IMCOMPARE.MERGE.CONNECTED.CHUNKS NEWFILE.CHUNK.LIST T)
(SETQ NEWFILE.CHUNK.LIST (DREVERSE NEWFILE.CHUNK.LIST))
(SETQ OLDFILE.CHUNK.LIST (DREVERSE OLDFILE.CHUNK.LIST))
(SETQ NEWFILE.CHUNK.LIST (DREVERSE NEWFILE.CHUNK.LIST))
(SETQ OLDFILE.CHUNK.LIST (DREVERSE OLDFILE.CHUNK.LIST))
(IMCOMPARE.MERGE.CONNECTED.CHUNKS NEWFILE.CHUNK.LIST T)
(SETQ NEWFILE.CHUNK.LIST (DREVERSE NEWFILE.CHUNK.LIST))
(SETQ OLDFILE.CHUNK.LIST (DREVERSE OLDFILE.CHUNK.LIST))
(* * merge unconnected chunks)
(* ;; "Merge unconnected chunks")
(IMCOMPARE.MERGE.UNCONNECTED.CHUNKS NEWFILE.CHUNK.LIST)
(IMCOMPARE.MERGE.UNCONNECTED.CHUNKS OLDFILE.CHUNK.LIST)
(IMCOMPARE.MERGE.UNCONNECTED.CHUNKS NEWFILE.CHUNK.LIST)
(IMCOMPARE.MERGE.UNCONNECTED.CHUNKS OLDFILE.CHUNK.LIST)
(* * now, the file comparison is complete.
 Format and display the file difference graph)
(* ;; "The file comparison is complete. Format and display the file difference graph")
(IMCOMPARE.DISPLAY.FILE.DIFFERENCE.GRAPH NEWFILE.SPEC.CHUNK OLDFILE.SPEC.CHUNK
HASH.TYPE GRAPH.REGION NEWFILE.CHUNK.LIST OLDFILE.CHUNK.LIST])
(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 23-Dec-98 16:54 by rmk:")
(* mjs " 8-Jan-84 20:57")
[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 in CHUNK as hashed of type HASH.TYPE)
(* ;;; "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.")
(LET (STREAM END.OF.CHUNK.PTR CHUNK.LIST)
[SETQ STREAM (OPENSTREAM (fetch (IMCOMPARE.CHUNK FILENAME) of CHUNK)
'INPUT
'OLD
'((TYPE TEXT]
(SETFILEPTR STREAM (fetch (IMCOMPARE.CHUNK FILEPTR) of CHUNK))
(SETQ END.OF.CHUNK.PTR (IPLUS (fetch (IMCOMPARE.CHUNK FILEPTR) of CHUNK)
(fetch (IMCOMPARE.CHUNK CHUNKLENGTH) of CHUNK)))
(SETQ CHUNK.LIST (until (IGEQ (GETFILEPTR STREAM)
END.OF.CHUNK.PTR) collect (IMCOMPARE.HASH STREAM
END.OF.CHUNK.PTR
HASH.TYPE)))
(CLOSEF STREAM)
CHUNK.LIST])
(* ;; "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) (* mjs "11-Jul-85 09:10")
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")
(* * format and display the graph)
(* ;;; "format and display the graph")
(PROG ((NEWFILENAME (fetch (IMCOMPARE.CHUNK FILENAME) of NEWFILE.SPEC.CHUNK))
(OLDFILENAME (fetch (IMCOMPARE.CHUNK FILENAME) of OLDFILE.SPEC.CHUNK))
(OLD.CHUNK.NODE.FROM.NODES NIL)
(BORDERSIZE 1)
GRAPH.WINDOW NEW.CHUNK.NODES OLD.CHUNK.NODES OLD.CHUNK.XCOORD NEW.CHUNK.XCOORD
YCOORD.INCREMENT DIFF.GRAPH)
(LET ((NEWFILENAME (fetch (IMCOMPARE.CHUNK FILENAME) of NEWFILE.SPEC.CHUNK))
(OLDFILENAME (fetch (IMCOMPARE.CHUNK FILENAME) of OLDFILE.SPEC.CHUNK))
NEWFILELABEL OLDFILELABEL (OLD.CHUNK.NODE.FROM.NODES NIL)
(BORDERSIZE 1)
GRAPH.WINDOW NEW.CHUNK.NODES OLD.CHUNK.NODES OLD.CHUNK.XCOORD NEW.CHUNK.XCOORD
YCOORD.INCREMENT DIFF.GRAPH)
(* * set up GRAPH.WINDOW. This is done first so you can get the width and
 height of strings to be printed in the window.)
(* ;;; "set up GRAPH.WINDOW. This is done first so you can get the width and height of strings to be printed in the window.")
[SETQ GRAPH.WINDOW (CREATEW GRAPH.REGION (CONCAT "Text File Differences, hashed by "
(SELECTQ HASH.TYPE
((PARA NIL)
"Paragraph")
(LINE "Line")
(WORD "Word")
(SHOULDNT]
(WINDOWPROP GRAPH.WINDOW 'IMPARE.HASH.TYPE HASH.TYPE)
[WINDOWADDPROP GRAPH.WINDOW 'CLOSEFN (FUNCTION (LAMBDA (WINDOW)
(if (EQ WINDOW
IMCOMPARE.LAST.GRAPH.WINDOW)
then (SETQ
IMCOMPARE.LAST.GRAPH.WINDOW
NIL)
(SETQ IMCOMPARE.LAST.NODE NIL]
(SETQ NEW.CHUNK.XCOORD (IQUOTIENT (STRINGWIDTH NEWFILENAME GRAPH.WINDOW)
2))
[SETQ OLD.CHUNK.XCOORD (IPLUS NEW.CHUNK.XCOORD (IMAX 100 (IPLUS NEW.CHUNK.XCOORD
(IQUOTIENT (STRINGWIDTH
OLDFILENAME
GRAPH.WINDOW)
2)
20]
[SETQ YCOORD.INCREMENT (IMINUS (IPLUS 2 (ITIMES 2 BORDERSIZE)
(fetch (REGION HEIGHT) of (STRINGREGION
NEWFILENAME
GRAPH.WINDOW]
(SETQ NEWFILELABEL (OR (CAR (LISTP FILELABELS))
NEWFILENAME))
(SETQ OLDFILELABEL (OR (CADR (LISTP FILELABELS))
OLDFILENAME))
[SETQ GRAPH.WINDOW (CREATEW GRAPH.REGION (CONCAT "Text File Differences, hashed by "
(SELECTQ HASH.TYPE
((PARA NIL)
"Paragraph")
(LINE "Line")
(WORD "Word")
(SHOULDNT]
(WINDOWPROP GRAPH.WINDOW 'IMPARE.HASH.TYPE HASH.TYPE)
[WINDOWADDPROP GRAPH.WINDOW 'CLOSEFN (FUNCTION (LAMBDA (WINDOW)
(if (EQ WINDOW IMCOMPARE.LAST.GRAPH.WINDOW)
then (SETQ IMCOMPARE.LAST.GRAPH.WINDOW
NIL)
(SETQ IMCOMPARE.LAST.NODE NIL]
(SETQ NEW.CHUNK.XCOORD (IQUOTIENT (STRINGWIDTH NEWFILELABEL GRAPH.WINDOW)
2))
[SETQ OLD.CHUNK.XCOORD (IPLUS NEW.CHUNK.XCOORD (IMAX 100 (IPLUS NEW.CHUNK.XCOORD
(IQUOTIENT (STRINGWIDTH
OLDFILELABEL
GRAPH.WINDOW)
2)
20]
[SETQ YCOORD.INCREMENT (IMINUS (IPLUS 2 (ITIMES 2 BORDERSIZE)
(fetch (REGION HEIGHT) of (STRINGREGION NEWFILELABEL
GRAPH.WINDOW]
(* * collect new-chunk graph nodes, while accumulating
 OLD.CHUNK.NODE.FROM.NODES, assoc list from old-chunks to new-chunks)
(* ;;; "collect new-chunk graph nodes, while accumulating OLD.CHUNK.NODE.FROM.NODES, assoc list from old-chunks to new-chunks")
(SETQ NEW.CHUNK.NODES (for NEW.CHUNK in NEWFILE.CHUNK.LIST as Y from
YCOORD.INCREMENT
by YCOORD.INCREMENT bind CORRESPONDING.OLD.CHUNK
collect (SETQ CORRESPONDING.OLD.CHUNK
(CAR (fetch (IMCOMPARE.CHUNK OTHERCHUNK)
of NEW.CHUNK)))
(if CORRESPONDING.OLD.CHUNK
then (SETQ OLD.CHUNK.NODE.FROM.NODES
(CONS (CONS CORRESPONDING.OLD.CHUNK NEW.CHUNK)
OLD.CHUNK.NODE.FROM.NODES)))
(* Start out with 2 point white
 border, so we can invert it)
(NODECREATE NEW.CHUNK (IMCOMPARE.LENGTHEN.ATOM
(PACK* (fetch (IMCOMPARE.CHUNK
FILEPTR)
of NEW.CHUNK)
":"
(fetch (IMCOMPARE.CHUNK
CHUNKLENGTH)
of NEW.CHUNK))
12)
(create POSITION
XCOORD _ NEW.CHUNK.XCOORD
YCOORD _ Y)
(if CORRESPONDING.OLD.CHUNK
then (LIST CORRESPONDING.OLD.CHUNK)
else NIL)
NIL DEFAULTFONT -2)))
(SETQ OLD.CHUNK.NODES (for OLD.CHUNK in OLDFILE.CHUNK.LIST as Y from
YCOORD.INCREMENT
by YCOORD.INCREMENT bind CORRESPONDING.NEW.CHUNK
collect (SETQ CORRESPONDING.NEW.CHUNK (CDR (ASSOC OLD.CHUNK
(SETQ NEW.CHUNK.NODES (for NEW.CHUNK in NEWFILE.CHUNK.LIST as Y from YCOORD.INCREMENT
by YCOORD.INCREMENT bind CORRESPONDING.OLD.CHUNK
collect (SETQ CORRESPONDING.OLD.CHUNK (CAR (fetch (IMCOMPARE.CHUNK
OTHERCHUNK)
of NEW.CHUNK)))
(if CORRESPONDING.OLD.CHUNK
then (SETQ OLD.CHUNK.NODE.FROM.NODES
(CONS (CONS CORRESPONDING.OLD.CHUNK NEW.CHUNK)
OLD.CHUNK.NODE.FROM.NODES)))
(* ;
 "Start out with 2 point white border, so we can invert it")
(NODECREATE NEW.CHUNK (IMCOMPARE.LENGTHEN.ATOM
(PACK* (fetch (IMCOMPARE.CHUNK FILEPTR
) of NEW.CHUNK)
":"
(fetch (IMCOMPARE.CHUNK
CHUNKLENGTH)
of NEW.CHUNK))
12)
(create POSITION
XCOORD _ NEW.CHUNK.XCOORD
YCOORD _ Y)
(if CORRESPONDING.OLD.CHUNK
then (LIST CORRESPONDING.OLD.CHUNK)
else NIL)
NIL DEFAULTFONT -2)))
(SETQ OLD.CHUNK.NODES (for OLD.CHUNK in OLDFILE.CHUNK.LIST as Y from YCOORD.INCREMENT
by YCOORD.INCREMENT bind CORRESPONDING.NEW.CHUNK
collect (SETQ CORRESPONDING.NEW.CHUNK (CDR (ASSOC OLD.CHUNK
OLD.CHUNK.NODE.FROM.NODES
)))
(NODECREATE OLD.CHUNK (IMCOMPARE.LENGTHEN.ATOM
(PACK* (fetch (IMCOMPARE.CHUNK
FILEPTR)
of OLD.CHUNK)
":"
(fetch (IMCOMPARE.CHUNK
CHUNKLENGTH)
of OLD.CHUNK))
12 "-")
(create POSITION
XCOORD _ OLD.CHUNK.XCOORD
YCOORD _ Y)
NIL
(if CORRESPONDING.NEW.CHUNK
then (LIST CORRESPONDING.NEW.CHUNK)
else NIL)
DEFAULTFONT -2)))
(SETQ DIFF.GRAPH (create GRAPH
DIRECTEDFLG _ T
SIDESFLG _ T
GRAPHNODES _
(NCONC (LIST (NODECREATE NEWFILE.SPEC.CHUNK NEWFILENAME
(create POSITION
XCOORD _ NEW.CHUNK.XCOORD
YCOORD _ 0)
NIL NIL DEFAULTFONT -2))
NEW.CHUNK.NODES
(LIST (NODECREATE OLDFILE.SPEC.CHUNK OLDFILENAME
(create POSITION
XCOORD _ OLD.CHUNK.XCOORD
YCOORD _ 0)
NIL NIL DEFAULTFONT -2))
OLD.CHUNK.NODES)))
(SHOWGRAPH DIFF.GRAPH GRAPH.WINDOW (FUNCTION IMCOMPARE.LEFTBUTTONFN)
(FUNCTION IMCOMPARE.MIDDLEBUTTONFN)
T NIL])
)))
(NODECREATE OLD.CHUNK (IMCOMPARE.LENGTHEN.ATOM
(PACK* (fetch (IMCOMPARE.CHUNK FILEPTR
) of OLD.CHUNK)
":"
(fetch (IMCOMPARE.CHUNK
CHUNKLENGTH)
of OLD.CHUNK))
12 "-")
(create POSITION
XCOORD _ OLD.CHUNK.XCOORD
YCOORD _ Y)
NIL
(if CORRESPONDING.NEW.CHUNK
then (LIST CORRESPONDING.NEW.CHUNK)
else NIL)
DEFAULTFONT -2)))
(SETQ DIFF.GRAPH (create GRAPH
DIRECTEDFLG _ T
SIDESFLG _ T
GRAPHNODES _
(NCONC (LIST (NODECREATE NEWFILENAME NEWFILELABEL
(create POSITION
XCOORD _ NEW.CHUNK.XCOORD
YCOORD _ 0)
NIL NIL DEFAULTFONT -2))
NEW.CHUNK.NODES
(LIST (NODECREATE OLDFILENAME OLDFILELABEL
(create POSITION
XCOORD _ OLD.CHUNK.XCOORD
YCOORD _ 0)
NIL NIL DEFAULTFONT -2))
OLD.CHUNK.NODES)))
(GRAPHERPROP DIFF.GRAPH 'FILELABELS (LIST NEWFILELABEL OLDFILELABEL))
(* ;
 "So Middle mouse graphs can get the right labels")
(GRAPHERPROP DIFF.GRAPH 'HASH.TYPE HASH.TYPE)
(SHOWGRAPH DIFF.GRAPH GRAPH.WINDOW (FUNCTION IMCOMPARE.LEFTBUTTONFN)
(FUNCTION IMCOMPARE.MIDDLEBUTTONFN)
T NIL])
(IMCOMPARE.FIND.TEDIT.TEXT.OBJECT
[LAMBDA (FILE) (* mjs " 2-Jan-84 16:19")
[LAMBDA (FILE) (* ; "Edited 16-Dec-2021 08:40 by rmk")
(* mjs " 2-Jan-84 16:19")
(* returns the Tedit text object of the first Tedit window which is currently
 looking at FILE, if there is one. Returns NIL if none is found.)
(* ;; "returns the Tedit text object of the first Tedit window which is currently looking at FILE, if there is one. Returns NIL if none is found.")
(PROG ((TEDIT.TEXT.OBJECT NIL))
(for X in (OPENWINDOWS) bind POSS.TOBJ POSS.FILENAME
when (SETQ POSS.TOBJ (WINDOWPROP X 'TEXTOBJ)) repeatuntil TEDIT.TEXT.OBJECT
do (SETQ POSS.FILENAME (FULLNAME (fetch (TEXTOBJ TXTFILE) of POSS.TOBJ)))
(if (EQ FILE POSS.FILENAME)
then (SETQ TEDIT.TEXT.OBJECT POSS.TOBJ)))
(RETURN TEDIT.TEXT.OBJECT])
(for W in (OPENWINDOWS) bind POSS.TOBJ when [AND (SETQ POSS.TOBJ (WINDOWPROP W 'TEXTOBJ))
(EQ FILE (FULLNAME (fetch (TEXTOBJ TXTFILE)
of POSS.TOBJ]
unless (TEDIT.STREAMCHANGEDP POSS.TOBJ) do (RETURN POSS.TOBJ])
(IMCOMPARE.HASH
[LAMBDA (STREAM EOF.PTR HASH.TYPE) (* ; "Edited 23-Dec-98 16: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:")
(* reads caracters from STREAM and creates a hash value for the "next" "chunk"
 A chunk is a paragraph ending in two consecutive CRs <HASH.TYPE = NIL or PARA>,
 a line ending in a CR <HASH.TYPE = LINE>, or a word ending in any white space
 character space <HASH.TYPE = WORD>. In computing the hash value, white space is
 ignored. IMCOMPARE.HASH automatically stops before reading char number EOF.PTR
 Returns an IMCOMPARE.CHUNK containing the hash value, the file pointer of the
 beginning of the chunk, the length of the chunk, and the fullname of the stream)
(* ;; "IMCOMPARE.HASH automatically stops before reading char number EOF.PTR.")
(* Note%: Most of the time in COMPARETEXT is spent reading in and hashing
 chunks, so this function was optimizes for speed, at the expense of length)
(* ;; "Returns an IMCOMPARE.CHUNK containing the hash value, the file pointer of the beginning of the chunk, the length of the chunk, and the fullname of the stream")
(PROG ((BEGIN.FILE.PTR (GETFILEPTR STREAM))
(EOLC (GETFILEINFO STREAM 'EOL))
(HASHNUM 0)
FILE.PTR C)
(SETQ FILE.PTR BEGIN.FILE.PTR)
(SELECTQ HASH.TYPE
((NIL PARA)
(* ;; "Note: Most of the time in COMPARETEXT is spent reading in and hashing chunks, so this function was optimizes for speed, at the expense of length")
(* Paragraph chunks end with two consecutive EOL's.
 In order to detect this without slowing down the gobbling of normal chars,
 LAST.EOL.POS is set to the filepos of the last EOL detected.
 This is only checked when another EOL comes along.)
(LET ((STARTPOS (GETFILEPTR STREAM))
(HASHNUM 0)
C NBYTES)
(DECLARE (SPECVARS NBYTES))
(SETQ NBYTES (IDIFFERENCE ENDPOS STARTPOS)) (* ;
 "\INCCODE counts down. We reach NBYTES only on the chunk")
(PROG ((LAST.EOL.POS -5))
loop
(if (IGEQ FILE.PTR EOF.PTR)
then (GO return))
(SETQ FILE.PTR (ADD1 FILE.PTR))
(SELCHARQ (SETQ C (BIN STREAM))
(CR
(* ;; "Don't hash on white space")
(* If this is the second consecutive CR, this is the end of the chunk.
 Otherwise, reset LAST.EOL.POS)
(SELECTQ EOLC
(CR (if (IEQP LAST.EOL.POS (SUB1 (GETFILEPTR STREAM)))
then (GO endchunk)
else (SETQ LAST.EOL.POS (GETFILEPTR STREAM))))
(CRLF (if (IGEQ FILE.PTR EOF.PTR)
then (GO return))
(SELCHARQ (\PEEKBIN STREAM T)
(LF (SETQ FILE.PTR (ADD1 FILE.PTR))
(BIN STREAM)
(if (IEQP LAST.EOL.POS (IDIFFERENCE
(GETFILEPTR STREAM)
2))
then (GO endchunk)
else (SETQ LAST.EOL.POS (GETFILEPTR STREAM
))))
NIL))
NIL))
(LF [COND
((EQ EOLC 'LF)
(if (IEQP LAST.EOL.POS (SUB1 (GETFILEPTR STREAM)))
then (GO endchunk)
else (SETQ LAST.EOL.POS (GETFILEPTR STREAM])
((SPACE TAB))
(SETQ HASHNUM (ROT (ROT (ROT (LOGXOR HASHNUM C)
1 16)
1 16)
1 16)))
(GO loop)))
(LINE (* Line chunks end on a single CR.)
(PROG NIL
loop
(if (IGEQ FILE.PTR EOF.PTR)
then (GO return))
(SETQ FILE.PTR (ADD1 FILE.PTR))
(SELCHARQ (SETQ C (BIN STREAM))
(CR (SELECTQ EOLC
(CR (GO endchunk))
(LF)
(CRLF (if (IGEQ FILE.PTR EOF.PTR)
then (GO return))
(SELCHARQ (\PEEKBIN STREAM T)
(LF (SETQ FILE.PTR (ADD1 FILE.PTR))
(BIN STREAM)
(GO endchunk))
NIL))
(SHOULDNT)))
(LF (AND (EQ EOLC 'LF)
(GO endchunk)))
((SPACE TAB))
(SETQ HASHNUM (ROT (ROT (ROT (LOGXOR HASHNUM C)
1 16)
1 16)
1 16)))
(GO loop)))
(WORD (* word chunks end on any white
 space)
(PROG NIL
loop
(if (IGEQ FILE.PTR EOF.PTR)
then (GO return))
(SETQ FILE.PTR (ADD1 FILE.PTR))
(SELCHARQ (SETQ C (BIN STREAM))
((CR SPACE TAB LF)
(GO endchunk))
(SETQ HASHNUM (ROT (ROT (ROT (LOGXOR HASHNUM C)
1 16)
1 16)
1 16)))
(GO loop)))
(HELP (CONCAT "Unrecognize HASHTYPE " HASH.TYPE)
"
Should be PARA, LINE, or WORD"))
endchunk
(* flush all white space before next
 chunk)
(if (IGEQ FILE.PTR EOF.PTR)
then (GO return))
(SETQ FILE.PTR (ADD1 FILE.PTR))
(SELCHARQ (BIN STREAM)
((CR SPACE TAB LF)
(GO endchunk))
(PROGN (SETQ FILE.PTR (SUB1 FILE.PTR))
(SETFILEPTR STREAM FILE.PTR)))
return
(RETURN (create IMCOMPARE.CHUNK
HASHVALUE _ HASHNUM
FILEPTR _ BEGIN.FILE.PTR
CHUNKLENGTH _ (IDIFFERENCE FILE.PTR BEGIN.FILE.PTR)
FILENAME _ (FULLNAME STREAM])
(CL:WHEN (IGREATERP NBYTES 0)
(SELECTQ HASH.TYPE
(PARA (* ;
 "Paragraph chunks end with two consecutive EOL's.")
(BIND EOLSEEN WHILE (IGREATERP NBYTES 0)
DO (SELCHARQ (SETQ C (\INCCODE.EOLC STREAM NIL 'NBYTES NBYTES))
(EOL (CL:WHEN EOLSEEN (RETURN))
(SETQ EOLSEEN T) (* ; "Skip the NIL SETQ below")
(GO $$ITERATE))
((SPACE TAB))
(SETQ HASHNUM (ROT (ROT (ROT (LOGXOR HASHNUM C)
1 16)
1 16)
1 16)))
(SETQ EOLSEEN NIL)))
(LINE (* ; "Line chunks end on EOL.")
[WHILE (IGREATERP NBYTES 0)
DO (SELCHARQ (SETQ C (\INCCODE.EOLC STREAM NIL 'NBYTES NBYTES))
(EOL (RETURN))
((SPACE TAB))
(SETQ HASHNUM (ROT (ROT (ROT (LOGXOR HASHNUM C)
1 16)
1 16)
1 16])
(WORD (* ;
 "word chunks end on any white space")
[WHILE (IGREATERP NBYTES 0)
DO (SELECTQ (SETQ C (\INCCODE.EOLC STREAM NIL 'NBYTES NBYTES))
((SPACE EOL TAB)
(RETURN))
(SETQ HASHNUM (ROT (ROT (ROT (LOGXOR HASHNUM C)
1 16)
1 16)
1 16])
(SHOULDNT)) (* ;
 "flush all white space before next chunk")
(WHILE (IGREATERP NBYTES 0) DO (SELCHARQ (\INCCODE.EOLC STREAM NIL 'NBYTES NBYTES)
((EOL SPACE TAB))
(RETURN)))
(CREATE IMCOMPARE.CHUNK
HASHVALUE _ HASHNUM
FILEPTR _ STARTPOS
CHUNKLENGTH _ (IDIFFERENCE (GETFILEPTR STREAM)
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) (* mjs "30-Dec-83 15:11")
[LAMBDA (X MIN.LENGTH EXTENDER) (* ; "Edited 13-Dec-2021 21:18 by rmk")
(* mjs "30-Dec-83 15:11")
(* makes sure that the atom X is at least MIN.LENGTH characters long, by
 concatinating the first character of EXTENDER
 (or space, if not given) to the front)
(* ;; "makes sure that the atom X is at least MIN.LENGTH characters long, by concatenating the first character of EXTENDER (or space, if not given) to the front")
(PROG ((C (CHCON X)))
(SETQ EXTENDER (if EXTENDER
then (CHCON1 EXTENDER)
else (CHARCODE SPACE)))
(while (ILESSP (LENGTH C)
MIN.LENGTH) do (SETQ C (CONS EXTENDER C)))
(RETURN (PACKC C])
(IF (ILESSP (NCHARS X)
MIN.LENGTH)
THEN (PACK* (ALLOCSTRING (IDIFFERENCE MIN.LENGTH (NCHARS X))
(CL:IF EXTENDER
(NTHCHAR EXTENDER 1)
" "))
X)
ELSE X])
(IMCOMPARE.MERGE.CONNECTED.CHUNKS
[LAMBDA (NEW.CHUNK.LIST BACKWARDS.FLG) (* mjs " 6-Jan-84 10:35")
@@ -551,45 +491,44 @@ Copyright (c) 1984, 1985, 1993, 1998 by Xerox Corporation. All rights reserved.
(RPLACD CHUNK.LST (CDDR CHUNK.LST])
(IMCOMPARE.MIDDLEBUTTONFN
[LAMBDA (GNODE WINDOW) (* mjs " 6-Jan-84 11:37")
[LAMBDA (GNODE WINDOW)
(* This function is called if the MIDDLE mouse button is pressed over a graph
 node. The selected node is IMCOMPARE-ed with the last node selected <which is
 boxed>. The type of hashing used <PARA, LINE, or WORD> is selected from a
 pop-up menu. If none of the hashing types is selected, the current node is
 boxed. The pop-up menu is always located a little above the current cursor
 position, so a quick double-MIDDLE-click is an easy way to change the current
 boxed node.)
(* ;; "Edited 16-Dec-2021 10:55 by rmk: Remove previous HASH.TYPE from the middle mouse menu")
(* ; "Edited 16-Dec-2021 10:51 by rmk")
(* mjs " 6-Jan-84 11:37")
(* ;; "This function is called if the MIDDLE mouse button is pressed over a graph node. The selected node is IMCOMPARE-ed with the last node selected <which is boxed>. The type of hashing used <PARA, LINE, or WORD> is selected from a pop-up menu. If none of the hashing types is selected, the current node is boxed. The pop-up menu is always located a little above the current cursor position, so a quick double-MIDDLE-click is an easy way to change the current boxed node.")
(if GNODE
then (PROG (INNER.HASH.TYPE)
(CLRPROMPT)
(printout PROMPTWINDOW "Please select the type of hashing you wish." T)
[SETQ INNER.HASH.TYPE
(MENU (if (type? MENU IMCOMPARE.HASH.TYPE.MENU)
then IMCOMPARE.HASH.TYPE.MENU
else (SETQ IMCOMPARE.HASH.TYPE.MENU
(create MENU
ITEMS _ '(PARA LINE WORD)
MENUOFFSET _
(create POSITION
XCOORD _ 20
YCOORD _ -20]
(if (NULL INNER.HASH.TYPE)
then (* if no hash type is selected, just
 box the current node and return)
(IMCOMPARE.BOXNODE GNODE WINDOW)
(RETURN))
(if (NULL IMCOMPARE.LAST.NODE)
then (CLRPROMPT)
(PRIN1 "You must select another graph node first." PROMPTWINDOW)
(RETURN))
(printout PROMPTWINDOW "Comparing chunks by " INNER.HASH.TYPE T)
(IMCOMPARE.CHUNKS (fetch (GRAPHNODE NODEID) of IMCOMPARE.LAST.NODE
)
(fetch (GRAPHNODE NODEID) of GNODE)
INNER.HASH.TYPE
(WINDOWPROP WINDOW 'REGION])
(CLRPROMPT)
(printout PROMPTWINDOW "Please select the type of hashing you wish." T)
[SETQ INNER.HASH.TYPE (MENU (create MENU
ITEMS _ (REMOVE (GRAPHERPROP
(WINDOWPROP WINDOW
'GRAPH)
'HASH.TYPE)
'(PARA LINE WORD))
MENUOFFSET _
(create POSITION
XCOORD _ 20
YCOORD _ -20]
(if (NULL INNER.HASH.TYPE)
then (* ;
 "if no hash type is selected, just box the current node and return")
(IMCOMPARE.BOXNODE GNODE WINDOW)
(RETURN))
(if (NULL IMCOMPARE.LAST.NODE)
then (CLRPROMPT)
(PRIN1 "You must select another graph node first." PROMPTWINDOW)
(RETURN))
(printout PROMPTWINDOW "Comparing chunks by " INNER.HASH.TYPE T)
(IMCOMPARE.CHUNKS (fetch (GRAPHNODE NODEID) of IMCOMPARE.LAST.NODE)
(fetch (GRAPHNODE NODEID) of GNODE)
INNER.HASH.TYPE
(WINDOWPROP WINDOW 'REGION)
(GRAPHERPROP (WINDOWPROP WINDOW 'GRAPH)
'FILELABELS])
(IMCOMPARE.SHOW.DIST
[LAMBDA (LST MAX) (* mjs "30-Dec-83 15:13")
@@ -634,27 +573,31 @@ Copyright (c) 1984, 1985, 1993, 1998 by Xerox Corporation. All rights reserved.
(MOVD 'COMPARETEXT 'IMCOMPARE)
(RPAQQ IMCOMPARE.LAST.NODE NIL)
(RPAQ? IMCOMPARE.LAST.NODE NIL)
(RPAQQ IMCOMPARE.LAST.GRAPH.WINDOW NIL)
(RPAQQ IMCOMPARE.HASH.TYPE.MENU NIL)
(RPAQ? IMCOMPARE.LAST.GRAPH.WINDOW NIL)
(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 (1365 39345 (COMPARETEXT 1375 . 3770) (IMCOMPARE.BOXNODE 3772 . 4288) (IMCOMPARE.CHUNKS
4290 . 8476) (IMCOMPARE.COLLECT.HASH.CHUNKS 8478 . 9707) (IMCOMPARE.DISPLAY.FILE.DIFFERENCE.GRAPH 9709
. 18575) (IMCOMPARE.FIND.TEDIT.TEXT.OBJECT 18577 . 19340) (IMCOMPARE.HASH 19342 . 26603) (
IMCOMPARE.LEFTBUTTONFN 26605 . 28341) (IMCOMPARE.LENGTHEN.ATOM 28343 . 28981) (
IMCOMPARE.MERGE.CONNECTED.CHUNKS 28983 . 32479) (IMCOMPARE.MERGE.UNCONNECTED.CHUNKS 32481 . 34436) (
IMCOMPARE.MIDDLEBUTTONFN 34438 . 37010) (IMCOMPARE.SHOW.DIST 37012 . 37458) (
IMCOMPARE.UPDATE.SYMBOL.TABLE 37460 . 39343)))))
(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

View File

@@ -1,11 +1,11 @@
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
(FILECREATED "24-Oct-2021 21:53:59" {DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>ATBL.;28 92451
(FILECREATED "19-Dec-2021 14:09:43" {DSK}<Users>kaplan>Local>medley3.5>my-medley>sources>ATBL.;31 91882
changes to%: (FNS MAKE-READER-ENVIRONMENT)
:CHANGES-TO (FNS EQUAL-READER-ENVIRONMENT)
previous date%: "24-Oct-2021 20:14:01"
{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>ATBL.;27)
:PREVIOUS-DATE "24-Oct-2021 21:53:59"
{DSK}<Users>kaplan>Local>medley3.5>my-medley>sources>ATBL.;29)
(* ; "
@@ -16,7 +16,7 @@ Copyright (c) 1982-1987, 1990, 1993, 2018, 2021 by Venue & Xerox Corporation.
(RPAQQ ATBLCOMS
[(COMS (* ;
 "Common features of read and terminal tables")
 "Common features of read and terminal tables")
(DECLARE%: DONTCOPY (EXPORT (MACROS \SYNCODE \SETSYNCODE)
(RECORDS CHARTABLE))
(CONSTANTS \NSCHARHASHKEYS \NSCHARHASHOVERFLOW)
@@ -39,9 +39,9 @@ Copyright (c) 1982-1987, 1990, 1993, 2018, 2021 by Venue & Xerox Corporation.
\SETMACROSYNTAX \SETREADSYNTAX \READTABLEP.DEFPRINT)
(PROP ARGNAMES READTABLEPROP)
(DECLARE%: EVAL@COMPILE DONTCOPY (* ;
 "READCLASSTOKENS Generates READCLASSES and some interesting SELECTQ's")
 "READCLASSTOKENS Generates READCLASSES and some interesting SELECTQ's")
(* ;
 "OTHER must be zero because of initialization.")
 "OTHER must be zero because of initialization.")
[VARS READCLASSTOKENS (READCLASSES (MAPCAR READCLASSTOKENS
(FUNCTION (LAMBDA
(PAIR)
@@ -50,7 +50,7 @@ Copyright (c) 1982-1987, 1990, 1993, 2018, 2021 by Venue & Xerox Corporation.
(CADR PAIR]
(MACROS \COMPUTED.FORM)
(* ;
 "This macro ought to be official somehow")
 "This macro ought to be official somehow")
(RECORDS CONTEXTS ESCAPES WAKEUPS)
(EXPORT (MACROS \GETREADMACRODEF \GTREADTABLE \GTREADTABLE1)
(CONSTANTS MACROBIT BREAKBIT STOPATOMBIT ESCAPEBIT INNERESCAPEBIT)
@@ -66,7 +66,7 @@ Copyright (c) 1982-1987, 1990, 1993, 2018, 2021 by Venue & Xerox Corporation.
(FNS \ATBLSET)
(INITRECORDS READER-ENVIRONMENT)
(* ;
 "Definition is on CMLREAD, need it here to initialize *OLD-INTERLISP-READ-ENVIRONMENT*")
 "Definition is on CMLREAD, need it here to initialize *OLD-INTERLISP-READ-ENVIRONMENT*")
(FNS MAKE-READER-ENVIRONMENT EQUAL-READER-ENVIRONMENT SET-READER-ENVIRONMENT)
(INITVARS (*LISP-PACKAGE*)
(*INTERLISP-PACKAGE*)
@@ -85,30 +85,27 @@ Copyright (c) 1982-1987, 1990, 1993, 2018, 2021 by Venue & Xerox Corporation.
(* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE
(PUTPROPS \SYNCODE DMACRO [OPENLAMBDA (TABLE CHAR)
(CHECK (type? CHARTABLE TABLE))
(* ;
 "0 is either NONE.TC, REAL.CCE, or OTHER.RC")
(COND
((IGREATERP CHAR \MAXTHINCHAR)
(OR (AND (fetch (CHARTABLE NSCHARHASH) of TABLE)
(GETHASH CHAR (fetch (CHARTABLE NSCHARHASH)
of TABLE)))
0))
(T (\GETBASEBYTE TABLE CHAR])
(CHECK (type? CHARTABLE TABLE)) (* ;
 "0 is either NONE.TC, REAL.CCE, or OTHER.RC")
(COND
((IGREATERP CHAR \MAXTHINCHAR)
(OR (AND (fetch (CHARTABLE NSCHARHASH) of TABLE)
(GETHASH CHAR (fetch (CHARTABLE NSCHARHASH) of TABLE)))
0))
(T (\GETBASEBYTE TABLE CHAR])
(PUTPROPS \SETSYNCODE DMACRO [LAMBDA (TABLE CHAR CODE)
(CHECK (type? CHARTABLE TABLE))
(* ;
 "0 is REAL.CCE, NONE.TC, OTHER.RC")
(COND
((ILEQ CHAR \MAXTHINCHAR)
(\PUTBASEBYTE TABLE CHAR CODE))
(T (\SETFATSYNCODE TABLE CHAR CODE])
(CHECK (type? CHARTABLE TABLE))
(* ; "0 is REAL.CCE, NONE.TC, OTHER.RC")
(COND
((ILEQ CHAR \MAXTHINCHAR)
(\PUTBASEBYTE TABLE CHAR CODE))
(T (\SETFATSYNCODE TABLE CHAR CODE])
)
(DECLARE%: EVAL@COMPILE
(DATATYPE CHARTABLE ((CHARSET0 256 BYTE)
(NSCHARHASH FULLPOINTER)))
(NSCHARHASH FULLPOINTER)))
)
(/DECLAREDATATYPE 'CHARTABLE
@@ -402,11 +399,11 @@ Copyright (c) 1982-1987, 1990, 1993, 2018, 2021 by Venue & Xerox Corporation.
(DECLARE%: EVAL@COMPILE
(PUTPROPS \CREATENSCHARHASH MACRO (ARGS (* ;
 "added size argument for creation of \ORIGTERMTABLE during initialization.")
(LIST 'HASHARRAY (OR (CAR ARGS)
'\NSCHARHASHKEYS)
'\NSCHARHASHOVERFLOW)))
(PUTPROPS \CREATENSCHARHASH MACRO (ARGS (* ;
 "added size argument for creation of \ORIGTERMTABLE during initialization.")
(LIST 'HASHARRAY (OR (CAR ARGS)
'\NSCHARHASHKEYS)
'\NSCHARHASHOVERFLOW)))
)
)
(DEFINEQ
@@ -924,8 +921,8 @@ Copyright (c) 1982-1987, 1990, 1993, 2018, 2021 by Venue & Xerox Corporation.
(CONSTANTS REAL.CCE IGNORE.CCE SIMULATE.CCE INDICATE.CCE)
)
(RPAQQ TERMCLASSES (NONE.TC EOL.TC CHARDELETE.TC WORDDELETE.TC WORDSEPR.TC LINEDELETE.TC
RETYPE.TC CTRLV.TC))
(RPAQQ TERMCLASSES (NONE.TC EOL.TC CHARDELETE.TC WORDDELETE.TC WORDSEPR.TC LINEDELETE.TC RETYPE.TC
CTRLV.TC))
(DECLARE%: EVAL@COMPILE
(RPAQQ NONE.TC 0)
@@ -950,14 +947,14 @@ Copyright (c) 1982-1987, 1990, 1993, 2018, 2021 by Venue & Xerox Corporation.
(DECLARE%: EVAL@COMPILE
(ACCESSFNS TERMCODE ((CCECHO (LOGAND DATUM 24))
(TERMCLASS (LOGAND DATUM 7))) (* ;
 "We assume that values are appropriately shifted")
(CREATE (LOGOR CCECHO TERMCLASS)))
(TERMCLASS (LOGAND DATUM 7))) (* ;
 "We assume that values are appropriately shifted")
(CREATE (LOGOR CCECHO TERMCLASS)))
(DATATYPE TERMTABLEP (TERMSA RAISEFLG DELCHARECHO LINEDELETE 1STCHDEL NTHCHDEL POSTCHDEL
EMPTYCHDEL (CONTROLFLG FLAG)
(ECHOFLG FLAG))
TERMSA _ (create CHARTABLE))
(DATATYPE TERMTABLEP (TERMSA RAISEFLG DELCHARECHO LINEDELETE 1STCHDEL NTHCHDEL POSTCHDEL EMPTYCHDEL
(CONTROLFLG FLAG)
(ECHOFLG FLAG))
TERMSA _ (create CHARTABLE))
)
(/DECLAREDATATYPE 'TERMTABLEP '(POINTER POINTER POINTER POINTER POINTER POINTER POINTER POINTER FLAG
@@ -1440,9 +1437,9 @@ Copyright (c) 1982-1987, 1990, 1993, 2018, 2021 by Venue & Xerox Corporation.
(PACKAGEDELIM (LOGOR ESCAPEBIT INNERESCAPEBIT 1))))
(RPAQ READCLASSES [MAPCAR READCLASSTOKENS (FUNCTION (LAMBDA (PAIR)
(LIST (PACK* (CAR PAIR)
".RC")
(CADR PAIR])
(LIST (PACK* (CAR PAIR)
".RC")
(CADR PAIR])
(DECLARE%: EVAL@COMPILE
@@ -1452,60 +1449,60 @@ Copyright (c) 1982-1987, 1990, 1993, 2018, 2021 by Venue & Xerox Corporation.
(DECLARE%: EVAL@COMPILE
(ACCESSFNS CONTEXTS ((KEY (SELECTC DATUM
(ALWAYS.RMC 'ALWAYS)
(FIRST.RMC 'FIRST)
(ALONE.RMC 'ALONE)
NIL))
(VAL (SELECTQ DATUM
(ALWAYS ALWAYS.RMC)
(FIRST FIRST.RMC)
(ALONE ALONE.RMC)
NIL))))
(ALWAYS.RMC 'ALWAYS)
(FIRST.RMC 'FIRST)
(ALONE.RMC 'ALONE)
NIL))
(VAL (SELECTQ DATUM
(ALWAYS ALWAYS.RMC)
(FIRST FIRST.RMC)
(ALONE ALONE.RMC)
NIL))))
(ACCESSFNS ESCAPES ((KEY (SELECTC DATUM
(ESC.RME 'ESCQUOTE)
(NOESC.RME 'NOESCQUOTE)
NIL))
(VAL (SELECTQ DATUM
((ESCQUOTE ESC)
ESC.RME)
((NOESCQUOTE NOESC)
NOESC.RME)
NIL))))
(ESC.RME 'ESCQUOTE)
(NOESC.RME 'NOESCQUOTE)
NIL))
(VAL (SELECTQ DATUM
((ESCQUOTE ESC)
ESC.RME)
((NOESCQUOTE NOESC)
NOESC.RME)
NIL))))
(ACCESSFNS WAKEUPS ((KEY (SELECTC DATUM
(IMMEDIATE.RMW 'IMMEDIATE)
(NONIMMEDIATE.RMW
'NONIMMEDIATE)
NIL))
(VAL (SELECTQ DATUM
((IMMEDIATE IMMED WAKEUP)
IMMEDIATE.RMW)
((NONIMMEDIATE NONIMMED NOWAKEUP)
NONIMMEDIATE.RMW)
NIL))))
(IMMEDIATE.RMW 'IMMEDIATE)
(NONIMMEDIATE.RMW
'NONIMMEDIATE)
NIL))
(VAL (SELECTQ DATUM
((IMMEDIATE IMMED WAKEUP)
IMMEDIATE.RMW)
((NONIMMEDIATE NONIMMED NOWAKEUP)
NONIMMEDIATE.RMW)
NIL))))
)
(* "FOLLOWING DEFINITIONS EXPORTED")(DECLARE%: EVAL@COMPILE
(PUTPROPS \GETREADMACRODEF MACRO ((C TBL)
(GETHASH C (fetch READMACRODEFS of TBL))))
(GETHASH C (fetch READMACRODEFS of TBL))))
(PUTPROPS \GTREADTABLE MACRO [ARGS (COND
[(LITATOM (CAR ARGS))
(SUBPAIR '(X . FLG)
ARGS
'(SELECTQ X
((NIL T)
(\DTEST *READTABLE* 'READTABLEP))
(\GTREADTABLE1 X . FLG]
(T 'IGNOREMACRO])
[(LITATOM (CAR ARGS))
(SUBPAIR '(X . FLG)
ARGS
'(SELECTQ X
((NIL T)
(\DTEST *READTABLE* 'READTABLEP))
(\GTREADTABLE1 X . FLG]
(T 'IGNOREMACRO])
(PUTPROPS \GTREADTABLE1 DMACRO [ARGS (COND
[(NULL (CDR ARGS))
(LIST '\DTEST (CAR ARGS)
''READTABLEP]
(T 'IGNOREMACRO])
[(NULL (CDR ARGS))
(LIST '\DTEST (CAR ARGS)
''READTABLEP]
(T 'IGNOREMACRO])
)
(DECLARE%: EVAL@COMPILE
@@ -1524,7 +1521,7 @@ Copyright (c) 1982-1987, 1990, 1993, 2018, 2021 by Venue & Xerox Corporation.
)
(RPAQQ READCODEMASKS ((CONTEXTMASK (LOGOR MACROBIT STOPATOMBIT BREAKBIT 1))
(WAKEUPMASK (LOGOR MACROBIT 2))))
(WAKEUPMASK (LOGOR MACROBIT 2))))
(DECLARE%: EVAL@COMPILE
(RPAQ CONTEXTMASK (LOGOR MACROBIT STOPATOMBIT BREAKBIT 1))
@@ -1537,8 +1534,8 @@ Copyright (c) 1982-1987, 1990, 1993, 2018, 2021 by Venue & Xerox Corporation.
)
(RPAQQ READMACROCONTEXTS ((ALWAYS.RMC (LOGOR MACROBIT STOPATOMBIT BREAKBIT 0))
(FIRST.RMC (LOGOR MACROBIT 0))
(ALONE.RMC (LOGOR MACROBIT 1))))
(FIRST.RMC (LOGOR MACROBIT 0))
(ALONE.RMC (LOGOR MACROBIT 1))))
(DECLARE%: EVAL@COMPILE
(RPAQ ALWAYS.RMC (LOGOR MACROBIT STOPATOMBIT BREAKBIT 0))
@@ -1604,7 +1601,7 @@ Copyright (c) 1982-1987, 1990, 1993, 2018, 2021 by Venue & Xerox Corporation.
)
(RPAQQ READMACROWAKEUPS ((IMMEDIATE.RMW (LOGOR MACROBIT 2))
(NONIMMEDIATE.RMW (LOGOR MACROBIT 0))))
(NONIMMEDIATE.RMW (LOGOR MACROBIT 0))))
(DECLARE%: EVAL@COMPILE
(RPAQ IMMEDIATE.RMW (LOGOR MACROBIT 2))
@@ -1617,7 +1614,7 @@ Copyright (c) 1982-1987, 1990, 1993, 2018, 2021 by Venue & Xerox Corporation.
)
(RPAQQ READMACROESCAPES ((ESC.RME ESCAPEBIT)
(NOESC.RME 0)))
(NOESC.RME 0)))
(DECLARE%: EVAL@COMPILE
(RPAQ ESC.RME ESCAPEBIT)
@@ -1631,46 +1628,46 @@ Copyright (c) 1982-1987, 1990, 1993, 2018, 2021 by Venue & Xerox Corporation.
(DECLARE%: EVAL@COMPILE
(ACCESSFNS READCODE ((ESCAPE (LOGAND DATUM ESCAPEBIT))
(ESCQUOTE (BITTEST DATUM ESCAPEBIT))
(STOPATOM (BITTEST DATUM STOPATOMBIT))
(INNERESCQUOTE (BITTEST DATUM (LOGOR STOPATOMBIT INNERESCAPEBIT)))
(MACROCONTEXT (LOGAND DATUM CONTEXTMASK))
(MACROP (BITTEST DATUM MACROBIT))
(WAKEUP (LOGAND DATUM WAKEUPMASK))
(BREAK (BITTEST DATUM BREAKBIT))))
(ESCQUOTE (BITTEST DATUM ESCAPEBIT))
(STOPATOM (BITTEST DATUM STOPATOMBIT))
(INNERESCQUOTE (BITTEST DATUM (LOGOR STOPATOMBIT INNERESCAPEBIT)))
(MACROCONTEXT (LOGAND DATUM CONTEXTMASK))
(MACROP (BITTEST DATUM MACROBIT))
(WAKEUP (LOGAND DATUM WAKEUPMASK))
(BREAK (BITTEST DATUM BREAKBIT))))
(RECORD READMACRODEF (MACROTYPE . MACROFN))
(DATATYPE READTABLEP ((READSA POINTER) (* ;
 "A CHARTABLE defining syntax of each char")
(READMACRODEFS POINTER) (* ;
 "A hash table associating macro chars with macro definitions")
(READMACROFLG FLAG) (* ;
 "True if read macros are enabled (turned off by Interlisp's crufty READMACROS function)")
(ESCAPEFLG FLAG) (* ; "True if the char(s) with escape syntax are enabled (turned off by Interlisp's crufty ESCAPE function)")
(COMMONLISP FLAG) (* ;
 "True if table is a Common Lisp read table and hence must obey Common Lisp syntax rules")
(NUMBERBASE BITS 5) (* ; "Not used")
(CASEINSENSITIVE FLAG) (* ;
 "If true, unescaped lowercase chars are converted to uppercase in symbols")
(COMMONNUMSYNTAX FLAG) (* ; "True if number notation includes Common Lisp numbers: rationals as a/b, and the dfls exponent markers")
(USESILPACKAGE FLAG) (* ;
 "If true, IL:READ ignores *PACKAGE* and reads in the IL package")
(NIL 5 FLAG)
(DISPATCHMACRODEFS POINTER) (* ;
 "An a-list of dispatching macro char and its dispatch definitions")
(HASHMACROCHAR BYTE) (* ;
 "The character code used in this read table for the # dispatch macro")
(ESCAPECHAR BYTE) (* ;
 "The character code used in this read table for single escape")
(MULTESCAPECHAR BYTE) (* ;
 "The character code used in this read table for multiple escape")
(PACKAGECHAR BYTE) (* ;
 "The character code used in this read table for package delimiter")
(READTBLNAME POINTER) (* ;
 "The canonical 'name' of this read table")
)
READSA _ (create CHARTABLE))
(DATATYPE READTABLEP ((READSA POINTER) (* ;
 "A CHARTABLE defining syntax of each char")
(READMACRODEFS POINTER) (* ;
 "A hash table associating macro chars with macro definitions")
(READMACROFLG FLAG) (* ;
 "True if read macros are enabled (turned off by Interlisp's crufty READMACROS function)")
(ESCAPEFLG FLAG) (* ; "True if the char(s) with escape syntax are enabled (turned off by Interlisp's crufty ESCAPE function)")
(COMMONLISP FLAG) (* ;
 "True if table is a Common Lisp read table and hence must obey Common Lisp syntax rules")
(NUMBERBASE BITS 5) (* ; "Not used")
(CASEINSENSITIVE FLAG) (* ;
 "If true, unescaped lowercase chars are converted to uppercase in symbols")
(COMMONNUMSYNTAX FLAG) (* ; "True if number notation includes Common Lisp numbers: rationals as a/b, and the dfls exponent markers")
(USESILPACKAGE FLAG) (* ;
 "If true, IL:READ ignores *PACKAGE* and reads in the IL package")
(NIL 5 FLAG)
(DISPATCHMACRODEFS POINTER) (* ;
 "An a-list of dispatching macro char and its dispatch definitions")
(HASHMACROCHAR BYTE) (* ;
 "The character code used in this read table for the # dispatch macro")
(ESCAPECHAR BYTE) (* ;
 "The character code used in this read table for single escape")
(MULTESCAPECHAR BYTE) (* ;
 "The character code used in this read table for multiple escape")
(PACKAGECHAR BYTE) (* ;
 "The character code used in this read table for package delimiter")
(READTBLNAME POINTER) (* ;
 "The canonical 'name' of this read table")
)
READSA _ (create CHARTABLE))
)
(/DECLAREDATATYPE 'READTABLEP
@@ -1870,8 +1867,12 @@ Copyright (c) 1982-1987, 1990, 1993, 2018, 2021 by Venue & Xerox Corporation.
REREADTABLEFORM _ READTABLEFORM])
(EQUAL-READER-ENVIRONMENT
[LAMBDA (ENV1 ENV2) (* ; "Edited 16-Aug-2021 23:43 by rmk:")
(* ; ":XCCS is the prehistoric value")
[LAMBDA (ENV1 ENV2)
(* ;; "Edited 19-Dec-2021 14:09 by rmk: Replace constant :XCCS with *DEFAULT-EXTERNALFORMAT*")
(* ;; "Edited 19-Dec-2021 14:01 by rmk")
(AND (EQ (fetch (READER-ENVIRONMENT REREADTABLE) of ENV1)
(fetch (READER-ENVIRONMENT REREADTABLE) of ENV2))
(EQ (fetch (READER-ENVIRONMENT REPACKAGE) of ENV1)
@@ -1879,9 +1880,9 @@ Copyright (c) 1982-1987, 1990, 1993, 2018, 2021 by Venue & Xerox Corporation.
(EQ (fetch (READER-ENVIRONMENT REBASE) of ENV1)
(fetch (READER-ENVIRONMENT REBASE) of ENV2))
(EQ (OR (fetch (READER-ENVIRONMENT REFORMAT) of ENV1)
:XCCS)
*DEFAULT-EXTERNALFORMAT*)
(OR (fetch (READER-ENVIRONMENT REFORMAT) of ENV2)
:XCCS))
*DEFAULT-EXTERNALFORMAT*))
(EQUAL (fetch (READER-ENVIRONMENT REPACKAGEFORM) of ENV1)
(fetch (READER-ENVIRONMENT REPACKAGEFORM) of ENV2))
(EQUAL (fetch (READER-ENVIRONMENT REREADTABLEFORM) of ENV1)
@@ -1924,22 +1925,22 @@ Copyright (c) 1982-1987, 1990, 1993, 2018, 2021 by Venue & Xerox Corporation.
(PUTPROPS ATBL COPYRIGHT ("Venue & Xerox Corporation" 1982 1983 1984 1985 1986 1987 1990 1993 2018
2021))
(DECLARE%: DONTCOPY
(FILEMAP (NIL (18046 29198 (GETSYNTAX 18056 . 22887) (SETSYNTAX 22889 . 23962) (SYNTAXP 23964 . 26461)
(\COPYSYNTAX 26463 . 27180) (\GETCHARCODE 27182 . 27470) (\SETFATSYNCODE 27472 . 28763) (
\MAPCHARTABLE 28765 . 29196)) (29231 44197 (CONTROL 29241 . 29493) (COPYTERMTABLE 29495 . 29862) (
DELETECONTROL 29864 . 32505) (GETDELETECONTROL 32507 . 33469) (ECHOCHAR 33471 . 34912) (ECHOCONTROL
34914 . 35371) (ECHOMODE 35373 . 35619) (GETECHOMODE 35621 . 35785) (GETCONTROL 35787 . 35953) (
GETTERMTABLE 35955 . 36022) (RAISE 36024 . 36450) (GETRAISE 36452 . 36614) (RESETTERMTABLE 36616 .
37700) (SETTERMTABLE 37702 . 37936) (TERMTABLEP 37938 . 38099) (\GETTERMSYNTAX 38101 . 38372) (
\GTTERMTABLE 38374 . 38710) (\ORIGTERMTABLE 38712 . 42322) (\SETTERMSYNTAX 42324 . 42959) (
\TERMCLASSTOCODE 42961 . 43390) (\TERMCODETOCLASS 43392 . 43779) (\LITCHECK 43781 . 44195)) (46727
70551 (COPYREADTABLE 46737 . 46935) (FIND-READTABLE 46937 . 47084) (IN-READTABLE 47086 . 47246) (
ESCAPE 47248 . 47501) (GETBRK 47503 . 47641) (GETREADTABLE 47643 . 47779) (GETSEPR 47781 . 47919) (
READMACROS 47921 . 48184) (READTABLEP 48186 . 48349) (READTABLEPROP 48351 . 53509) (RESETREADTABLE
53511 . 57758) (SETBRK 57760 . 59370) (SETREADTABLE 59372 . 59560) (SETSEPR 59562 . 61104) (
\GETREADSYNTAX 61106 . 63796) (\GTREADTABLE 63798 . 64023) (\GTREADTABLE1 64025 . 64281) (
\ORIGREADTABLE 64283 . 66191) (\READCLASSTOCODE 66193 . 66644) (\SETMACROSYNTAX 66646 . 68441) (
\SETREADSYNTAX 68443 . 69504) (\READTABLEP.DEFPRINT 69506 . 70549)) (83643 88096 (\ATBLSET 83653 .
88094)) (88543 91975 (MAKE-READER-ENVIRONMENT 88553 . 90231) (EQUAL-READER-ENVIRONMENT 90233 . 91377)
(SET-READER-ENVIRONMENT 91379 . 91973)))))
(FILEMAP (NIL (17750 28902 (GETSYNTAX 17760 . 22591) (SETSYNTAX 22593 . 23666) (SYNTAXP 23668 . 26165)
(\COPYSYNTAX 26167 . 26884) (\GETCHARCODE 26886 . 27174) (\SETFATSYNCODE 27176 . 28467) (
\MAPCHARTABLE 28469 . 28900)) (28935 43901 (CONTROL 28945 . 29197) (COPYTERMTABLE 29199 . 29566) (
DELETECONTROL 29568 . 32209) (GETDELETECONTROL 32211 . 33173) (ECHOCHAR 33175 . 34616) (ECHOCONTROL
34618 . 35075) (ECHOMODE 35077 . 35323) (GETECHOMODE 35325 . 35489) (GETCONTROL 35491 . 35657) (
GETTERMTABLE 35659 . 35726) (RAISE 35728 . 36154) (GETRAISE 36156 . 36318) (RESETTERMTABLE 36320 .
37404) (SETTERMTABLE 37406 . 37640) (TERMTABLEP 37642 . 37803) (\GETTERMSYNTAX 37805 . 38076) (
\GTTERMTABLE 38078 . 38414) (\ORIGTERMTABLE 38416 . 42026) (\SETTERMSYNTAX 42028 . 42663) (
\TERMCLASSTOCODE 42665 . 43094) (\TERMCODETOCLASS 43096 . 43483) (\LITCHECK 43485 . 43899)) (46412
70236 (COPYREADTABLE 46422 . 46620) (FIND-READTABLE 46622 . 46769) (IN-READTABLE 46771 . 46931) (
ESCAPE 46933 . 47186) (GETBRK 47188 . 47326) (GETREADTABLE 47328 . 47464) (GETSEPR 47466 . 47604) (
READMACROS 47606 . 47869) (READTABLEP 47871 . 48034) (READTABLEPROP 48036 . 53194) (RESETREADTABLE
53196 . 57443) (SETBRK 57445 . 59055) (SETREADTABLE 59057 . 59245) (SETSEPR 59247 . 60789) (
\GETREADSYNTAX 60791 . 63481) (\GTREADTABLE 63483 . 63708) (\GTREADTABLE1 63710 . 63966) (
\ORIGREADTABLE 63968 . 65876) (\READCLASSTOCODE 65878 . 66329) (\SETMACROSYNTAX 66331 . 68126) (
\SETREADSYNTAX 68128 . 69189) (\READTABLEP.DEFPRINT 69191 . 70234)) (83068 87521 (\ATBLSET 83078 .
87519)) (87968 91406 (MAKE-READER-ENVIRONMENT 87978 . 89656) (EQUAL-READER-ENVIRONMENT 89658 . 90808)
(SET-READER-ENVIRONMENT 90810 . 91404)))))
STOP

Binary file not shown.

View File

@@ -1,10 +1,11 @@
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
(FILECREATED " 8-Oct-2021 10:51:35" 
{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>CMLEXEC.;2 92464
(FILECREATED "19-Dec-2021 09:48:29" {DSK}<Users>kaplan>Local>medley3.5>my-medley>sources>CMLEXEC.;5 91886
previous date%: "21-Jan-93 11:16:01"
{DSK}<Users>kaplan>Local>medley3.5>git-medley>sources>CMLEXEC.;1)
:CHANGES-TO (VARS CMLEXECCOMS)
:PREVIOUS-DATE " 8-Oct-2021 10:51:35"
{DSK}<Users>kaplan>Local>medley3.5>my-medley>sources>CMLEXEC.;3)
(* ; "
@@ -18,7 +19,7 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
(XCL:PROFILES "EXEC")
(STRUCTURES COMMAND-ENTRY EXEC-EVENT-ID EXEC-EVENT HISTORY)
(* ;
 "These are public except for command-entry.")
 "These are public except for command-entry.")
(FUNCTIONS XCL::EXEC-CLOSEFN XCL::EXEC-SHRINKFN XCL::SETUP-EXEC-WINDOW
XCL::EXEC-TITLE-FUNCTION FIX-FORM XCL::GET-PROCESS-PROFILE
XCL::SAVE-CURRENT-EXEC-PROFILE XCL::SETF-GET-PROCESS-PROFILE XCL:SET-EXEC-TYPE
@@ -29,7 +30,7 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
(FUNCTIONS CIRCLAR-COPYER)
(FNS COPY-CIRCLE)
(* ;
 "CIRCLAR-COPYER and COPY-CIRCLE are the solution for AR#11172")
 "CIRCLAR-COPYER and COPY-CIRCLE are the solution for AR#11172")
(FNS EXEC-READ DIR)
(VARIABLES *PER-EXEC-VARIABLES* CL:* CL:** CL:*** + CL:++ CL:+++ - / CL:// CL:///
*CURRENT-EVENT* *EXEC-ID* XCL:*EXEC-PROMPT* XCL:*EVAL-FUNCTION* *NOT-YET-EVALUATED*
@@ -64,10 +65,10 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
(FILESLOAD CMLUNDO PROFILE)
(XCL:DEFPROFILE "EXEC" (XCL:*DEBUGGER-PROMPT* "")
(XCL:*EXEC-PROMPT* "")
(*READTABLE* "XCL")
(*PACKAGE* "XCL")
(XCL:*EVAL-FUNCTION* 'CL:EVAL))
(XCL:*EXEC-PROMPT* "")
(*READTABLE* "XCL")
(*PACKAGE* "XCL")
(XCL:*EVAL-FUNCTION* 'CL:EVAL))
(CL:DEFSTRUCT (COMMAND-ENTRY (:TYPE LIST))
ARGUMENTS
@@ -148,39 +149,37 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
(T (PRINT-EVENT-PROMPT *CURRENT-EVENT*)
(DSPFONT INPUTFONT T)
(CURSOR T) (* ;
 "make sure can edit (in case cursor smashed somehow?)")
 "make sure can edit (in case cursor smashed somehow?)")
(CL:WHEN NIL (* ; "Old expression")
(TTYIN "" NIL NIL 'LISPXREAD NIL NIL BUFFER-EXPR-FROM-BELOW *READTABLE*))
(EXEC-READ-LINE (LET ((%#RPARS NIL)
(FONTCHANGEFLG NIL)
(*PRINT-ESCAPE* T)
(*PRINT-RADIX* (NOT (= *READ-BASE* 10)))
(*PRINT-BASE* *READ-BASE*)
(*PRINT-LEVEL* NIL)
(*PRINT-LENGTH* NIL)
(*PRINT-GENSYM* ':REREAD)
(*PRINT-ARRAY* T)
(*PRINT-STRUCTURE* T))
(DECLARE (CL:SPECIAL %#RPARS FONTCHANGEFLG)
(FONTCHANGEFLG NIL)
(*PRINT-ESCAPE* T)
(*PRINT-RADIX* (NOT (= *READ-BASE* 10)))
(*PRINT-BASE* *READ-BASE*)
(*PRINT-LEVEL* NIL)
(*PRINT-LENGTH* NIL)
(*PRINT-GENSYM* ':REREAD)
(*PRINT-ARRAY* T)
(*PRINT-STRUCTURE* T))
(DECLARE (CL:SPECIAL %#RPARS FONTCHANGEFLG)
(* ;
 "others are already globally special ")
)
(CL:WITH-OUTPUT-TO-STRING
(STR)
(FOR X ON INPUT
DO (IF CIRCLE-FLAG
THEN (* ;
 "Edited by TT (31-May-1990) CL:PRIN1 can print circlar")
(CL:PRIN1 (CAR X)
STR)
ELSEIF (LISTP (CAR X))
THEN (PRINTDEF (CAR X)
(POSITION STR)
NIL NIL NIL STR)
ELSE (PRIN2 (CAR X)
STR))
(AND (CDR X)
(PRIN1 " " STR])
 "others are already globally special "))
(CL:WITH-OUTPUT-TO-STRING (STR)
(FOR X ON INPUT
DO (IF CIRCLE-FLAG
THEN (* ;
 "Edited by TT (31-May-1990) CL:PRIN1 can print circlar")
(CL:PRIN1 (CAR X)
STR)
ELSEIF (LISTP (CAR X))
THEN (PRINTDEF (CAR X)
(POSITION STR)
NIL NIL NIL STR)
ELSE (PRIN2 (CAR X)
STR))
(AND (CDR X)
(PRIN1 " " STR])
(CL:DEFUN XCL::GET-PROCESS-PROFILE (&OPTIONAL (XCL::PROCESS (THIS.PROCESS)))
(PROCESSPROP XCL::PROCESS 'PROFILE))
@@ -192,7 +191,7 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
(XCL:SAVE-PROFILE XCL::PROFILE))))
(CL:DEFUN XCL::SETF-GET-PROCESS-PROFILE (&OPTIONAL (XCL::PROCESS (THIS.PROCESS))
(XCL::PROFILE XCL:*PROFILE*))
(XCL::PROFILE XCL:*PROFILE*))
(CL:SETQ XCL::PROFILE (XCL::PROFILIZE XCL::PROFILE))
(PROCESSPROP XCL::PROCESS 'PROFILE XCL::PROFILE)
XCL::PROFILE)
@@ -215,7 +214,7 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
"Start up an exec function in the proper profile, setting the default window title properly."
(XCL:WITH-PROFILE (XCL:COPY-PROFILE XCL::PROFILE)
(XCL::EXEC-TITLE-FUNCTION T (PROCESS-EXEC-ID (THIS.PROCESS)
XCL::ID))
XCL::ID))
(CL:FUNCALL XCL::EXEC-FUNCTION)))
(CL:DEFSETF XCL::GET-PROCESS-PROFILE XCL::SETF-GET-PROCESS-PROFILE)
@@ -226,13 +225,13 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
STR
(RETRYFLAG NIL) (* ; "A really gross hack for RETRY to always break. It exists because: users can setq HELPFLAG anywhere (can't bind it in DO-EVENTand set it in RETRY), RETRY operates on commands (can't wrap the form with a binding of HELPFLAG).")
)
(DECLARE (CL:SPECIAL RETRYFLAG)) (* ;
 "RETRY command sets this variable if it wants to be sure to break.")
(DECLARE (CL:SPECIAL RETRYFLAG)) (* ;
 "RETRY command sets this variable if it wants to be sure to break.")
(DSPFONT PRINTOUTFONT T)
(SETQ INPUT ORIGINAL-INPUT)
RETRY
(SETQ TODO (COPY-CIRCLE INPUT)) (* ;
"Break EQ link between input and evaluated form (todo), so that in-place mods don't affect history.")
(SETQ TODO (COPY-CIRCLE INPUT)) (* ;
 "Break EQ link between input and evaluated form (todo), so that in-place mods don't affect history.")
[COND
[[AND (OR (STRINGP (CAR INPUT))
(CL:SYMBOLP (CAR INPUT)))
@@ -260,14 +259,13 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
(CL:WHEN *CURRENT-EVENT*
(CL:SETF (EXEC-EVENT-INPUT *CURRENT-EVENT*)
INPUT) (* ;
 " Overwrite the original input with the newly generated one.")
 " Overwrite the original input with the newly generated one.")
(CL:SETF (EXEC-EVENT-PROPS *CURRENT-EVENT*)
(LIST* '*HISTORY* ORIGINAL-INPUT (EXEC-EVENT-PROPS *CURRENT-EVENT*
))))
(LIST* '*HISTORY* ORIGINAL-INPUT (EXEC-EVENT-PROPS *CURRENT-EVENT*))))
(GO RETRY) (* ; " could have generated a command")
)
((NIL :EVAL) (* ;
 " normal kind of command, just apply")
 " normal kind of command, just apply")
[SETQ TODO `((CL:FUNCALL ',(COMMAND-ENTRY-FUNCTION COM)
',INPUT
',ENVIRONMENT]
@@ -284,11 +282,11 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
(CL:WHEN *EXEC-MAKE-UNDOABLE-P*
[if (CDR TODO)
then (SETQ TODO (CONS (OR (CDR (ASSOC (CAR TODO)
LISPXFNS))
(CAR TODO))
(CDR TODO)))
LISPXFNS))
(CAR TODO))
(CDR TODO)))
else (SETQ TODO (LIST (XCL::MAKE-UNDOABLE (CAR TODO)
NIL])]
NIL])]
(AND ADD-TO-SPELLING-LIST (HISTORY-ADD-TO-SPELLING-LISTS TODO))
(SETQ LISPXHIST *CURRENT-EVENT*)
(DSPFONT PRINTOUTFONT T)
@@ -301,8 +299,7 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
[SETQ VALUES (CL:MULTIPLE-VALUE-LIST (CL:IF RETRYFLAG
(LET ((HELPFLAG 'BREAK!))
(DECLARE (CL:SPECIAL HELPFLAG
))
(DECLARE (CL:SPECIAL HELPFLAG))
(CL:FUNCALL FUNCTION TODO
ENVIRONMENT))
(CL:FUNCALL FUNCTION TODO ENVIRONMENT))
@@ -319,69 +316,66 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
(for X in VALUES do (EXEC-PRINT X))
VALUES))))
(CL:DEFUN EXEC (&KEY XCL::TOP-LEVEL-P (* ;
 "True of top level execs. Used for event number restarting and profile caching.")
(XCL::WINDOW (WFROMDS (TTYDISPLAYSTREAM)))
(CL:DEFUN EXEC (&KEY XCL::TOP-LEVEL-P (* ;
 "True of top level execs. Used for event number restarting and profile caching.")
(XCL::WINDOW (WFROMDS (TTYDISPLAYSTREAM)))
(* ; "Window for this exec, if any.")
(XCL::TITLE NIL XCL::TITLE-SUPPLIED)(* ;
 "If given, specific title for this window.")
((:COMMAND-TABLES *THIS-EXEC-COMMANDS*)
(LIST *EXEC-COMMAND-TABLE*)) (* ;
 "List of hash tables to look up commands in.")
XCL::ENVIRONMENT (* ;
 "Lexical environment to evaluate things in, default NIL.")
XCL::PROMPT (* ;
 "Special prompt to use (optional).")
((:FUNCTION XCL::FN)
'EVAL-INPUT) (* ; "Function for processing input.")
XCL::PROFILE (* ;
 "Optional profile, sets the exec's bindings.")
XCL::ID (* ; "A handle on the exec.")
&ALLOW-OTHER-KEYS (* ; "To catch obsolete calls")
&AUX
(*EXEC-ID* (PROCESS-EXEC-ID (THIS.PROCESS)
XCL::ID))
(XCL::PROFILE-CACHE (XCL::GET-PROCESS-PROFILE (THIS.PROCESS)))
(XCL::TITLE NIL XCL::TITLE-SUPPLIED) (* ;
 "If given, specific title for this window.")
((:COMMAND-TABLES *THIS-EXEC-COMMANDS*)
(LIST *EXEC-COMMAND-TABLE*)) (* ;
 "List of hash tables to look up commands in.")
XCL::ENVIRONMENT (* ;
 "Lexical environment to evaluate things in, default NIL.")
XCL::PROMPT (* ; "Special prompt to use (optional).")
((:FUNCTION XCL::FN)
'EVAL-INPUT) (* ; "Function for processing input.")
XCL::PROFILE (* ;
 "Optional profile, sets the exec's bindings.")
XCL::ID (* ; "A handle on the exec.")
&ALLOW-OTHER-KEYS (* ; "To catch obsolete calls")
&AUX
(*EXEC-ID* (PROCESS-EXEC-ID (THIS.PROCESS)
XCL::ID))
(XCL::PROFILE-CACHE (XCL::GET-PROCESS-PROFILE (THIS.PROCESS)))
(* ;
 "The exec's cached profile (if entering from a hardreset).")
)
 "The exec's cached profile (if entering from a hardreset).")
)
[CL:PROGV (MAPCAR *PER-EXEC-VARIABLES* (FUNCTION CAR))
[MAPCAR *PER-EXEC-VARIABLES* (FUNCTION (LAMBDA (XCL::X)
(EVAL (CADR XCL::X]
(CL:WHEN (OR (NULL XCL::TOP-LEVEL-P)
(NULL XCL::PROFILE-CACHE)) (* ; "If not hardresetting...")
(CL:WHEN XCL::PROFILE (* ;
 "then initialize the profile vars.")
(CL:WHEN XCL::PROFILE (* ; "then initialize the profile vars.")
(XCL:RESTORE-PROFILE XCL::PROFILE))
(CL:WHEN XCL::PROMPT (* ;
 "If a special prompt was provided (as from the debugger)...")
 "If a special prompt was provided (as from the debugger)...")
(CL:SETQ XCL:*EXEC-PROMPT* XCL::PROMPT) (* ; "...use it.")
))
(CL:WHEN XCL::TOP-LEVEL-P
(CL:IF (NULL XCL::PROFILE-CACHE) (* ;
 "This was a new entry into top level exec.")
 "This was a new entry into top level exec.")
(CL:SETF (XCL::GET-PROCESS-PROFILE (THIS.PROCESS))
(XCL:SAVE-PROFILE (XCL:COPY-PROFILE "EXEC")))
(* ;
 "...make a fresh cache and save bindings into it.")
(XCL:RESTORE-PROFILE XCL::PROFILE-CACHE) (* ;
 "...otherwise it was a HARDRESET.")
 "...make a fresh cache and save bindings into it.")
(XCL:RESTORE-PROFILE XCL::PROFILE-CACHE) (* ; "...otherwise it was a HARDRESET.")
))
(CL:WHEN XCL::WINDOW
(COND
((NOT XCL::TITLE-SUPPLIED) (* ;
 "If no title was supplied, set it to the default.")
 "If no title was supplied, set it to the default.")
(XCL::EXEC-TITLE-FUNCTION XCL::WINDOW *EXEC-ID*))
(XCL::TITLE (* ;
 "If a non-nil title was supplied, set the title to it.")
 "If a non-nil title was supplied, set the title to it.")
(WINDOWPROP XCL::WINDOW 'TITLE XCL::TITLE)))
(TTYDISPLAYSTREAM (DECODE/WINDOW/OR/DISPLAYSTREAM XCL::WINDOW)))
(LET [(*CURRENT-EVENT* NIL) (* ;
 "the event being processed. Used by some commands")
 "the event being processed. Used by some commands")
(XCL::OLD-DS (CL:IF XCL::WINDOW
(TTYDISPLAYSTREAM (DECODE/WINDOW/OR/DISPLAYSTREAM XCL::WINDOW)))]
(CL:LOOP (CL:FORMAT T "~&~%%") (* ;
 "newlines to notice that this is a new instance of the exec")
 "newlines to notice that this is a new instance of the exec")
(PROG1 [ERSETQ (CL:LOOP (* ; "loop until errors out")
(CL:SETQ *CURRENT-EVENT* (GET-NEXT-HISTORY-EVENT
LISPXHISTORY *EXEC-ID*
@@ -397,25 +391,24 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
(DECLARE (CL:SPECIAL LISPXHIST HELPCLOCK))
(CL:UNLESS (CL:EQUAL XCL::ORIGINAL-INPUT
'(NIL))
(DO-EVENT XCL::ORIGINAL-INPUT
XCL::ENVIRONMENT XCL::FN)
(DO-EVENT XCL::ORIGINAL-INPUT XCL::ENVIRONMENT
XCL::FN)
(CL:WHEN XCL::TOP-LEVEL-P
(* ; "Used to determine whether to cache the settings of the profile back into the process (for retrieval in case of hardreset).")
(XCL::SAVE-CURRENT-EXEC-PROFILE)))]
(CL:WHEN XCL::WINDOW (TTYDISPLAYSTREAM XCL::OLD-DS)))])
(CL:DEFUN EXEC-EVAL (FORM &OPTIONAL ENVIRONMENT &KEY (PROMPT ">")
(ID "eval/")
((:TYPE *CURRENT-EXEC-TYPE*)
'COMMON-LISP)) (* ; "Edited by JDS 16-Aug-90 12:55.")
(ID "eval/")
((:TYPE *CURRENT-EXEC-TYPE*)
'COMMON-LISP)) (* ; "Edited by JDS 16-Aug-90 12:55.")
(LET ((*CURRENT-EVENT* (GET-NEXT-HISTORY-EVENT LISPXHISTORY ID PROMPT T))
(LISPXHIST LISPXHIST)
(HELPCLOCK 0)
VALUES)
(DECLARE (CL:SPECIAL *CURRENT-EVENT* LISPXHIST HELPCLOCK))
(SETQ VALUES (CL:MULTIPLE-VALUE-LIST (EVAL-INPUT (CL:SETF (EXEC-EVENT-INPUT
*CURRENT-EVENT*)
(LIST FORM))
(SETQ VALUES (CL:MULTIPLE-VALUE-LIST (EVAL-INPUT (CL:SETF (EXEC-EVENT-INPUT *CURRENT-EVENT*)
(LIST FORM))
ENVIRONMENT)))
(SETQ IT (CAR VALUES))
(COND
@@ -455,8 +448,8 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
`(EXEC-VALUE-OF ',EVENT-SPEC))
(CL:DEFUN ADD-EXEC (&KEY (XCL::PROFILE XCL:*PROFILE*)
XCL::REGION XCL::TTY (EXEC 'EXEC)
XCL::ID &ALLOW-OTHER-KEYS)
XCL::REGION XCL::TTY (EXEC 'EXEC)
XCL::ID &ALLOW-OTHER-KEYS)
(LET* [(XCL::WINDOW (XCL::SETUP-EXEC-WINDOW (CREATEW XCL::REGION "Exec")))
(XCL::HANDLE (ADD.PROCESS
`[PROGN (TTYDISPLAYSTREAM ',XCL::WINDOW)
@@ -465,7 +458,7 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
',XCL::WINDOW)
,(CASE EXEC
(EXEC `(EXEC :TOP-LEVEL-P T :PROFILE ',XCL::PROFILE :ID
',XCL::ID))
',XCL::ID))
(T `(XCL::ENTER-EXEC-FUNCTION ',EXEC ',XCL::PROFILE
',XCL::ID)))]
'NAME
@@ -483,21 +476,21 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
((AND (READP T)
(SYNTAXP (PEEKCCODE T T)
'EOL)) (* ;
 "Avoid picking up end of line as a NIL.")
 "Avoid picking up end of line as a NIL.")
(READC T)))
(SETQ LINE (LIST (EXEC-READ BUFFER-STRING)))
TOP (COND
((LISTP (CAR LINE)) (* ;
 "If we got a list, return right away--it's a standard EVAL form of input")
 "If we got a list, return right away--it's a standard EVAL form of input")
(GO OUT)))
LP (SETQ SPACEFLG NIL) (* ; "to distinguish between")
(* ; "FOO (A B)")
(* ; "FOO(A B)")
(* ;
 "the latter has no space and returns right away")
 "the latter has no space and returns right away")
LP1 (COND
((NOT (READP T)) (* ;
 "nothing more in line buffer, so must have consumed last thing on the line")
 "nothing more in line buffer, so must have consumed last thing on the line")
(GO OUT))
((NULL (SETQ CHRCODE (PEEKCCODE T T))) (* ; "PEEKCCODE can return NIL when stream is at EOF. However, we already checked for READP before getting here.")
(GO OUT))
@@ -510,7 +503,7 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
(SHOULDNT))
(AND (NULL (CDR LINE))
(SETQ LINE (NCONC1 LINE NIL))) (* ;
 " A %")%" is treated as NIL if it is the second thing on the line when EXEC-READ-LINE is called")
 " A %")%" is treated as NIL if it is the second thing on the line when EXEC-READ-LINE is called")
(GO OUT))
((EQ CHRCODE (CHARCODE SPACE))
(SETQ SPACEFLG T)
@@ -523,7 +516,7 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
(SYNTAXP CHRCODE 'RIGHTBRACKET *READTABLE*)))
(GO LP))
((NOT SPACEFLG) (* ;
 "A list terminates the line if it is the second element on the line, not preceded by a space.")
 "A list terminates the line if it is the second element on the line, not preceded by a space.")
(* ;; "[JDS 1/12/88: This used to test (AND (NOT SPACEFLG) (READP T)), and loop if there were more input pending. This seems wrong, because when you type it should throw the carriage at once, and not depend on how fast you're typing. Further, when there's type-ahead, it's often followed by a SPACE, to prevent output pausing. With the old test here, that would hang up a final eval-quote form without executing it.]")
@@ -533,7 +526,7 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
OUT (RETURN (COND
((AND (LISTP LINE)
CTRLUFLG) (* ;
 "Edit interrupt during reading--forces structure editor use.")
 "Edit interrupt during reading--forces structure editor use.")
(SETQ CTRLUFLG NIL)
(LET ((*EDIT-INPUT-WITH-TTYIN* NIL))
(FIX-FORM LINE)))
@@ -553,7 +546,7 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
(SETQ COM (GETHASH STR TABLE)))
TABLE))))
(CL:DEFUN CIRCLAR-COPYER (INPUT) (* ; "Edited by TT 31-May-1990")
(CL:DEFUN CIRCLAR-COPYER (INPUT) (* ; "Edited by TT 31-May-1990")
(PROG (SCANBUF REST VAL NEW BODY ID AUX (CIRCLAR-FLAG NIL))
(COND
((NLISTP INPUT)
@@ -580,9 +573,9 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
(SETQ CIRCLAR-FLAG T)
(RPLACD NEW (CDR ID)))
(T [push REST (SETQ AUX (CONS (CADR NEW)
(CDDR NEW]
(CDDR NEW]
(push SCANBUF (CONS (CDR NEW)
AUX))
AUX))
(RPLACD NEW AUX)))
(COND
((NLISTP (CAR NEW)))
@@ -591,9 +584,9 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
(SETQ CIRCLAR-FLAG T)
(RPLACA NEW (CDR ID)))
(T [push REST (SETQ AUX (CONS (CAAR NEW)
(CDAR NEW]
(CDAR NEW]
(push SCANBUF (CONS (CAR NEW)
AUX))
AUX))
(RPLACA NEW AUX]
(GO LP)))
(DEFINEQ
@@ -727,10 +720,10 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
"List of command hash-tables for the current executive")
(DEFGLOBALVAR *EXEC-COMMAND-TABLE* (HASHARRAY 30 NIL 'STRING-EQUAL-HASHBITS 'STRING-EQUAL)
"hash-table for top level exec commands")
"hash-table for top level exec commands")
(DEFGLOBALVAR *DEBUGGER-COMMAND-TABLE* (HASHARRAY 20 NIL 'STRING-EQUAL-HASHBITS 'STRING-EQUAL)
"string-equal hash-table for debugger commands")
"string-equal hash-table for debugger commands")
(CL:DEFVAR *CURRENT-EXEC-TYPE* NIL
"Rebound under Exec; if NIL, means use default")
@@ -1337,7 +1330,7 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
"Start an old-style LISPX window"])
(ADDTOVAR SYSTEMINITVARS (LISPXHISTORY NIL 0 100 100)
(GREETHIST))
(GREETHIST))
@@ -1347,24 +1340,23 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
(DEF-DEFINE-TYPE COMMANDS "Exec Commands")
(DEFDEFINER (DEFCOMMAND [:NAME (CL:LAMBDA (WHOLE)
(LET ((NAME (CL:SECOND WHOLE)))
(CL:IF (CL:CONSP NAME)
(CAR NAME)
NAME)]) COMMANDS (NAME ARGUMENTS &ENVIRONMENT ENV
&BODY BODY)
(LET ((NAME (CL:SECOND WHOLE)))
(CL:IF (CL:CONSP NAME)
(CAR NAME)
NAME)]) COMMANDS (NAME ARGUMENTS &ENVIRONMENT ENV
&BODY BODY)
[LET ((COMMAND-LEVEL '*EXEC-COMMAND-TABLE*)
(COMMAND-TYPE :EVAL)
(PREFIX "exec-"))
[if (LISTP NAME)
then (SETQ NAME (PROG1 (CAR NAME)
[for X in (CDR NAME)
do (CL:ECASE X
((:QUIET :HISTORY :INPUT :EVAL :MACRO) (SETQ
COMMAND-TYPE
X))
((:DEBUGGER :BREAK)
(SETQ COMMAND-LEVEL '*DEBUGGER-COMMAND-TABLE*)
(SETQ PREFIX "break-")))])]
[for X in (CDR NAME) do (CL:ECASE X
((:QUIET :HISTORY :INPUT :EVAL :MACRO)
(SETQ COMMAND-TYPE X))
((:DEBUGGER :BREAK)
(SETQ COMMAND-LEVEL
'*DEBUGGER-COMMAND-TABLE*)
(SETQ PREFIX "break-")))])]
(LET* ((CMACRONAME (PACK* PREFIX NAME))
(STRINGNAME (STRING NAME)))
(CL:MULTIPLE-VALUE-BIND (PARSED-BODY PARSED-DECLARATIONS PARSED-DOCSTRING)
@@ -1397,32 +1389,32 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
(CL:FORMAT T " ~20Tto apply function to the arguments given~&~%%or one of:")
(FOR X ON (REVERSE *THIS-EXEC-COMMANDS*)
DO (LET (COMS)
[MAPHASH (CAR X)
#'(CL:LAMBDA (VAL KEY)
(AND [NOT (SOME (CDR X)
#'(CL:LAMBDA (TAB)
(GETHASH KEY TAB]
(PUSH COMS (LIST KEY VAL]
(CL:MAPC #'[CL:LAMBDA (COM)
(CL:FORMAT T "~&")
(DSPFONT INPUTFONT T)
(CL:FORMAT T "~A " (CAR COM))
(DSPFONT COMMENTFONT T)
(PRINT-ARGLIST (COMMAND-ENTRY-ARGUMENTS (CADR COM)))
(DSPFONT DEFAULTFONT T)
(LET [(DOC (CL:DOCUMENTATION (CAR COM)
'COMMANDS]
(CL:WHEN DOC
(TAB 20 1 T)
(CL:FORMAT T "~A" DOC))]
(CL:SORT COMS #'CL:STRING< :KEY #'CAR])
[MAPHASH (CAR X)
#'(CL:LAMBDA (VAL KEY)
(AND [NOT (SOME (CDR X)
#'(CL:LAMBDA (TAB)
(GETHASH KEY TAB]
(PUSH COMS (LIST KEY VAL]
(CL:MAPC #'[CL:LAMBDA (COM)
(CL:FORMAT T "~&")
(DSPFONT INPUTFONT T)
(CL:FORMAT T "~A " (CAR COM))
(DSPFONT COMMENTFONT T)
(PRINT-ARGLIST (COMMAND-ENTRY-ARGUMENTS (CADR COM)))
(DSPFONT DEFAULTFONT T)
(LET [(DOC (CL:DOCUMENTATION (CAR COM)
'COMMANDS]
(CL:WHEN DOC
(TAB 20 1 T)
(CL:FORMAT T "~A" DOC))]
(CL:SORT COMS #'CL:STRING< :KEY #'CAR])
(CL:VALUES))
(DEFCOMMAND ("??" :QUIET) (&REST EVENT-SPECS) "Show events specified EVENT-SPECS (or all events)"
(IF (AND EVENT-SPECS (EQ (CAR EVENT-SPECS)
':INPUT))
':INPUT))
THEN (PRINT-HISTORY LISPXHISTORY (CDR EVENT-SPECS)
T)
T)
ELSE (PRINT-HISTORY LISPXHISTORY EVENT-SPECS))
(CL:VALUES))
@@ -1435,21 +1427,19 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
(DEFCOMMAND ("DIR" :EVAL) (&OPTIONAL PATHNAME &REST KEYWORDS) "Show directory listing for PATHNAME"
[DODIR (CONS PATHNAME (MAPCAR KEYWORDS (FUNCTION (LAMBDA (CL:KEYWORD)
(IF (CL:SYMBOLP CL:KEYWORD)
THEN (CL:INTERN (CL:SYMBOL-NAME
CL:KEYWORD)
"INTERLISP")
THEN (CL:INTERN (CL:SYMBOL-NAME CL:KEYWORD)
"INTERLISP")
ELSE CL:KEYWORD])
(DEFCOMMAND "DO-EVENTS" (&REST INPUTS &ENVIRONMENT ENV)
"Execute the multiple events in INPUTS, using the environment ENV for all evaluations."
[LET ((OUTER-EVENT (AND *CURRENT-EVENT* (COPY-EXEC-EVENT *CURRENT-EVENT*)))
(* ;
 "DO-EVENT smashes *CURRENT-EVENT*, so we copy and save it.")
 "DO-EVENT smashes *CURRENT-EVENT*, so we copy and save it.")
)
(CL:WHEN OUTER-EVENT
(CL:SETF (EXEC-EVENT-INPUT OUTER-EVENT)
(CONS 'DO-EVENTS INPUTS)) (* ;
 "Each of these is fixed up below.")
(CONS 'DO-EVENTS INPUTS)) (* ; "Each of these is fixed up below.")
)
(ERSETQ (CL:MAPL #'[CL:LAMBDA (INPUT)
(LET ([TODO (CL:IF (EQ (CAR (LISTP (CAR INPUT)))
@@ -1460,32 +1450,32 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
(CL:WHEN ADDSPELLFLG (HISTORY-ADD-TO-SPELLING-LISTS TODO))
(SETQ VALUES (DO-EVENT TODO ENV))
(* ;
 "If it exists, *CURRENT-EVENT* gets smashed here.")
 "If it exists, *CURRENT-EVENT* gets smashed here.")
(CL:WHEN OUTER-EVENT (* ; "If there is an outer event...")
(* ;;
 "Fix the outer event's list of inputs with the expanded input.")
 "Fix the outer event's list of inputs with the expanded input.")
(RPLACA INPUT (CAR (EXEC-EVENT-INPUT *CURRENT-EVENT*)))
(CL:WHEN VALUES (* ;
 "If the last sub-event generated some values...")
 "If the last sub-event generated some values...")
(* ;;
 "Add the new values to the outer event's values.")
 "Add the new values to the outer event's values.")
[LET [(OLD-VALUES (CL:GETF (EXEC-EVENT-PROPS
OUTER-EVENT)
[LET [(OLD-VALUES (CL:GETF (EXEC-EVENT-PROPS
OUTER-EVENT)
'LISPXVALUES]
(CL:IF OLD-VALUES
(NCONC OLD-VALUES VALUES)
(CL:SETF (EXEC-EVENT-PROPS OUTER-EVENT)
(LIST* 'LISPXVALUES VALUES
(EXEC-EVENT-PROPS
OUTER-EVENT))))]))]
(EXEC-EVENT-PROPS OUTER-EVENT))
))]))]
INPUTS))
(CL:WHEN *CURRENT-EVENT* (* ; "If there was a current event...")
(* ;
 "Smash saved values back from OUTER-EVENT.")
 "Smash saved values back from OUTER-EVENT.")
(CL:SETF (EXEC-EVENT-INPUT *CURRENT-EVENT*)
(EXEC-EVENT-INPUT OUTER-EVENT))
(CL:SETF (EXEC-EVENT-ID *CURRENT-EVENT*)
@@ -1496,19 +1486,18 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
(EXEC-EVENT-PROPS OUTER-EVENT)))]
(SETQ *CURRENT-EVENT* NIL) (* ; "Keeps the DO-EVENT which is evaluating us from setting the event's results to (the result of evaluating) the NIL we return. This is alright since *CURRENT-EVENT* is already pointed to by the history list.")
(CL:VALUES) (* ;
 "We've evaluated all the subforms directly with DO-EVENT so we don't return a form to EVAL.")
 "We've evaluated all the subforms directly with DO-EVENT so we don't return a form to EVAL.")
)
(DEFCOMMAND ("FIX" :HISTORY) (&REST EVENT-SPEC) "Edit input for specified events"
[APPLY 'FIX-FORM (CL:MULTIPLE-VALUE-LIST (CIRCLAR-COPYER (EVENTS-INPUT
(FIND-HISTORY-EVENTS
(OR EVENT-SPEC '(-1))
LISPXHISTORY])
[APPLY 'FIX-FORM (CL:MULTIPLE-VALUE-LIST (CIRCLAR-COPYER (EVENTS-INPUT (FIND-HISTORY-EVENTS
(OR EVENT-SPEC
'(-1))
LISPXHISTORY])
(DEFCOMMAND "FORGET" (&REST EVENT-SPEC) "Erase UNDO information (for specified events)."
(FOR EVENT IN (FIND-HISTORY-EVENTS (OR EVENT-SPEC '(-1))
LISPXHISTORY) DO (UNDOLISPX2 EVENT T)
FINALLY (CL:FORMAT T "Forgotten.~&"))
LISPXHISTORY) DO (UNDOLISPX2 EVENT T) FINALLY (CL:FORMAT T "Forgotten.~&"))
(CL:VALUES))
(DEFCOMMAND "NAME" (COMMAND-NAME &OPTIONAL ARGUMENT-LIST &REST EVENT-SPEC)
@@ -1517,8 +1506,7 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
(CL:PUSH ARGUMENT-LIST EVENT-SPEC)
(SETQ ARGUMENT-LIST NIL))
[LET [(EVENTS (FIND-HISTORY-EVENTS EVENT-SPEC LISPXHISTORY))
(ARGNAMES (FOR I FROM 1 AS X IN ARGUMENT-LIST
COLLECT (PACK* 'ARG I]
(ARGNAMES (FOR I FROM 1 AS X IN ARGUMENT-LIST COLLECT (PACK* 'ARG I]
(CL:EVAL `(DEFCOMMAND (,COMMAND-NAME :HISTORY) ,ARGNAMES
[SUBPAIR ',ARGNAMES (LIST ,@ARGNAMES)
',(SUBPAIR ARGUMENT-LIST ARGNAMES (EVENTS-INPUT EVENTS)
@@ -1536,7 +1524,7 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
(DEFCOMMAND ("REDO" :HISTORY) (&REST EVENT-SPEC) "Re-execute specified event(s)"
(EVENTS-INPUT (FIND-HISTORY-EVENTS (OR EVENT-SPEC '(-1))
LISPXHISTORY)))
LISPXHISTORY)))
(DEFCOMMAND ("REMEMBER" :EVAL) (&REST EVENT-SPEC)
"Tell Manager to remember type-in from specified event(s)"
@@ -1549,40 +1537,37 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
(DEFCOMMAND "UNDO" (&REST EVENT-SPEC)
"Undo side effects associated with the specified event (or last undoable one)"
[FOR EVENT IN (FIND-HISTORY-EVENTS (OR EVENT-SPEC '(-1))
LISPXHISTORY) DO (LET ((INPUT (CAR (EXEC-EVENT-INPUT EVENT)))
(RESULT (UNDOLISPX2 EVENT)))
(CL:IF (LISTP INPUT)
(SETQ INPUT (CAR INPUT)))
(COND
((NULL RESULT)
(CL:FORMAT T
"No undo info saved for ~A.~&"
INPUT))
((EQ RESULT 'already)
(CL:FORMAT T "~A already undone.~&"
INPUT))
(T (CL:FORMAT T "~A undone.~&" INPUT]
LISPXHISTORY) DO (LET ((INPUT (CAR (EXEC-EVENT-INPUT EVENT)))
(RESULT (UNDOLISPX2 EVENT)))
(CL:IF (LISTP INPUT)
(SETQ INPUT (CAR INPUT)))
(COND
((NULL RESULT)
(CL:FORMAT T "No undo info saved for ~A.~&" INPUT))
((EQ RESULT 'already)
(CL:FORMAT T "~A already undone.~&" INPUT))
(T (CL:FORMAT T "~A undone.~&" INPUT]
(CL:VALUES))
(DEFCOMMAND ("USE" :HISTORY) (&REST LINE) "USE <new> [FOR <old>] [IN <event-spec>]"
(* ;;
"this code stolen from LISPXUSE in HIST and edited. The structure is still pretty incomprehensible")
 "this code stolen from LISPXUSE in HIST and edited. The structure is still pretty incomprehensible")
[PROG (EVENT-SPECS EXPR ARGS VARS (STATE 'VARS)
LST TEM USE-ARGS GENLST)
LP [COND
([OR (NULL LST)
(NULL (CDR LINE))
(NULL (CASE-EQUALP (CAR LINE) (* ;
 "look for one of the special keywords")
(NULL (CASE-EQUALP (CAR LINE) (* ;
 "look for one of the special keywords")
(FOR (COND
((EQ STATE 'VARS)
(SETQ VARS (NCONC1 VARS LST))
(SETQ TEM (APPEND LST TEM))
(SETQ STATE 'ARGS)
(SETQ LST NIL)
T)))
((EQ STATE 'VARS)
(SETQ VARS (NCONC1 VARS LST))
(SETQ TEM (APPEND LST TEM))
(SETQ STATE 'ARGS)
(SETQ LST NIL)
T)))
(AND (COND
((EQ STATE 'EXPR)
NIL)
@@ -1590,30 +1575,30 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
((EQ STATE 'ARGS)
(SETQ ARGS (NCONC1 ARGS LST)))
((EQ STATE 'VARS)(* ;
 "E.g. user types USE A AND B following previous USE command.")
 "E.g. user types USE A AND B following previous USE command.")
(SETQ VARS (NCONC1 VARS LST]
(SETQ STATE 'VARS)
(SETQ LST NIL)
T)))
(IN (COND
((AND (EQ STATE 'VARS)
(NULL ARGS))
(SETQ VARS (NCONC1 VARS LST))
(SETQ TEM (APPEND LST TEM))
(SETQ STATE 'EXPR)
(SETQ LST NIL)
T)
((EQ STATE 'ARGS)
(SETQ ARGS (NCONC1 ARGS LST))
(SETQ STATE 'EXPR)
(SETQ LST NIL)
T]
((AND (EQ STATE 'VARS)
(NULL ARGS))
(SETQ VARS (NCONC1 VARS LST))
(SETQ TEM (APPEND LST TEM))
(SETQ STATE 'EXPR)
(SETQ LST NIL)
T)
((EQ STATE 'ARGS)
(SETQ ARGS (NCONC1 ARGS LST))
(SETQ STATE 'EXPR)
(SETQ LST NIL)
T]
(SETQ LST (NCONC1 LST (COND
(NIL (MEMBER (CAR LINE)
TEM)
(* ;;
 "This enables USE A B FOR B A, USE A FOR B AND B FOR A, or USE A FOR B AND B C FOR A")
 "This enables USE A B FOR B A, USE A FOR B AND B FOR A, or USE A FOR B AND B C FOR A")
(LET ((TEMP (CONCAT "temp string")))
(CL:PUSH (CONS (CAR LINE)
@@ -1639,7 +1624,7 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
(SETQ EXPR (MAPCAR (FIND-HISTORY-EVENTS EXPR LISPXHISTORY)
(FUNCTION EXEC-EVENT-INPUT))) (* ;
 "EXPR is now a list of event inputs")
 "EXPR is now a list of event inputs")
(* ;; "at this point, VARS is a list of list of old things, the extra list corresponding to the clauses of an AND, e.g. ")
@@ -1651,60 +1636,68 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
(IF (NULL ARGS)
THEN [SETQ EXPR (FOR X IN EXPR
JOIN (FOR VAR IN VARS
COLLECT (IF (CL:CONSP (CAR X))
THEN (CONS (CONS (CAR VAR)
(CDAR X))
(CDR X))
ELSE (CONS (CAR VAR)
(CDR X]
JOIN (FOR VAR IN VARS
COLLECT (IF (CL:CONSP (CAR X))
THEN (CONS (CONS (CAR VAR)
(CDAR X))
(CDR X))
ELSE (CONS (CAR VAR)
(CDR X]
ELSE (WHILE ARGS DO (SETQ EXPR (LISPXUSE1 (POP VARS)
(POP ARGS)
EXPR))
FINALLY (COND
(VARS (ERROR '"use what??" "" T)))
[MAPC GENLST (FUNCTION (LAMBDA (X)
(LISPXSUBST (CAR X)
(CDR X)
EXPR T]
(POP ARGS)
EXPR)) FINALLY (COND
(VARS (ERROR '"use what??" "" T)))
[MAPC GENLST (FUNCTION (LAMBDA (X)
(LISPXSUBST
(CAR X)
(CDR X)
EXPR T]
(* ;; "samples:")
(* ;; "samples:")
(* ;; " USE A B C D FOR X Y means substitute A for X and B for Y and then do it again with C for X and D for Y")
(* ;; " USE A B C D FOR X Y means substitute A for X and B for Y and then do it again with C for X and D for Y")
(* ;; " Equivalent to USE A C FOR X AND B D FOR Y")
(* ;;
 " Equivalent to USE A C FOR X AND B D FOR Y")
(* ;; " USE A B C FOR D AND X Y Z FOR W means 3 operations:")
(* ;;
 " USE A B C FOR D AND X Y Z FOR W means 3 operations:")
(* ;; " A for D and X for W in the first")
(* ;;
 " A for D and X for W in the first")
(* ;; " B for D and Y for W in the second")
(* ;;
 " B for D and Y for W in the second")
(* ;; " C for D and Z for W in the third")
(* ;;
 " C for D and Z for W in the third")
(* ;; "USE A B C FOR D AND X FOR Y means 3 operations:")
(* ;;
 "USE A B C FOR D AND X FOR Y means 3 operations:")
(* ;; " A for D and X for Y in first")
(* ;; " A for D and X for Y in first")
(* ;; " B for D and X for Y in second, etc.")
(* ;;
 " B for D and X for Y in second, etc.")
(* ;; "USE A B C FOR D AND X Y FOR Z causes error")
(* ;;
 "USE A B C FOR D AND X Y FOR Z causes error")
(* ;; "")
(* ;; "")
(* ;; " USE A B FOR B A will work correctly, but USE A FOR B AND B FOR A will result in all B's being changed to A's.")
(* ;; " USE A B FOR B A will work correctly, but USE A FOR B AND B FOR A will result in all B's being changed to A's.")
(* ;; "")
(* ;; "")
(* ;; "The general rule is substitution proceeds from left to right with each %%'AND' handled separately. Whenever the number of variables exceeds the number of expressions available, the expressions multiply.")
(* ;; "The general rule is substitution proceeds from left to right with each %%'AND' handled separately. Whenever the number of variables exceeds the number of expressions available, the expressions multiply.")
))
))
(RETURN (COND
[(CDR EXPR)
(CONS 'DO-EVENTS (for X in EXPR collect (COND
((CDR X)
(CONS 'EVENT X))
(T (CAR X]
((CDR X)
(CONS 'EVENT X))
(T (CAR X]
(T (CAR EXPR])
(DEFCOMMAND "PP" (&OPTIONAL (NAME LASTWORD)
@@ -1714,25 +1707,22 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
(* ;; "returned from if no definitions found")
(for TYPE in [OR TYPES [TYPESOF NAME NIL NIL '? (FUNCTION (LAMBDA (TYPE)
(NEQ (GET TYPE
'EDITDEF)
'NILL]
(TYPESOF [SETQ NAME (OR (FIXSPELL NAME NIL USERWORDS NIL NIL
[FUNCTION (LAMBDA (WORD)
(TYPESOF
WORD NIL
'(FIELDS FILES)
'CURRENT]
NIL NIL NIL 'MUSTAPPROVE)
(PROGN (CL:FORMAT *TERMINAL-IO*
"No definitions found for ~S."
NAME)
(RETURN NIL]
NIL NIL '? (FUNCTION (LAMBDA (TYPE)
(NEQ (GET TYPE 'EDITDEF)
'NILL]
(NEQ (GET TYPE 'EDITDEF)
'NILL]
(TYPESOF [SETQ NAME (OR (FIXSPELL NAME NIL USERWORDS NIL NIL
[FUNCTION (LAMBDA (WORD)
(TYPESOF WORD NIL
'(FIELDS FILES)
'CURRENT]
NIL NIL NIL 'MUSTAPPROVE)
(PROGN (CL:FORMAT *TERMINAL-IO*
"No definitions found for ~S." NAME)
(RETURN NIL]
NIL NIL '? (FUNCTION (LAMBDA (TYPE)
(NEQ (GET TYPE 'EDITDEF)
'NILL]
do (CL:FORMAT *TERMINAL-IO* "~A definition for ~S:~%%" TYPE NAME)
(SHOWDEF NAME TYPE)))
(SHOWDEF NAME TYPE)))
(CL:VALUES))
@@ -1740,7 +1730,7 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
(* ;; "Arrange to use the correct compiler")
(PUTPROPS CMLEXEC FILETYPE CL:COMPILE-FILE)
(PUTPROPS CMLEXEC FILETYPE :FAKE-COMPILE-FILE)
(DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS
(ADDTOVAR NLAMA DIR)
@@ -1751,22 +1741,22 @@ Copyright (c) 1985-1988, 1990-1991, 1993, 2021 by Venue & Xerox Corporation.
)
(PUTPROPS CMLEXEC COPYRIGHT ("Venue & Xerox Corporation" 1985 1986 1987 1988 1990 1991 1993 2021))
(DECLARE%: DONTCOPY
(FILEMAP (NIL (3978 4383 (XCL::EXEC-CLOSEFN 3978 . 4383)) (4385 4721 (XCL::EXEC-SHRINKFN 4385 . 4721))
(4723 4963 (XCL::SETUP-EXEC-WINDOW 4723 . 4963)) (4965 5211 (XCL::EXEC-TITLE-FUNCTION 4965 . 5211)) (
5213 8519 (FIX-FORM 5213 . 8519)) (8521 8641 (XCL::GET-PROCESS-PROFILE 8521 . 8641)) (8643 8924 (
XCL::SAVE-CURRENT-EXEC-PROFILE 8643 . 8924)) (8926 9216 (XCL::SETF-GET-PROCESS-PROFILE 8926 . 9216)) (
9218 9785 (XCL:SET-EXEC-TYPE 9218 . 9785)) (9787 9869 (XCL:SET-DEFAULT-EXEC-TYPE 9787 . 9869)) (9871
10282 (XCL::ENTER-EXEC-FUNCTION 9871 . 10282)) (10357 16750 (DO-EVENT 10357 . 16750)) (16752 23543 (
EXEC 16752 . 23543)) (23545 24886 (EXEC-EVAL 23545 . 24886)) (24888 25619 (PRINT-ALL-DOCUMENTATION
24888 . 25619)) (25621 26063 (PRINT-DOCUMENTATION 25621 . 26063)) (26146 27230 (ADD-EXEC 26146 . 27230
)) (27232 30828 (EXEC-READ-LINE 27232 . 30828)) (30899 31385 (FIND-EXEC-COMMAND 30899 . 31385)) (31387
33285 (CIRCLAR-COPYER 31387 . 33285)) (33286 34240 (COPY-CIRCLE 33296 . 34238)) (34318 37623 (
EXEC-READ 34328 . 37489) (DIR 37491 . 37621)) (39885 67019 (DO-APPLY-EVENT 39895 . 40457) (
DO-HISTORY-SEARCH 40459 . 41916) (EVAL-INPUT 41918 . 47347) (EVENTS-INPUT 47349 . 48727) (EXEC-PRIN1
48729 . 48905) (EXEC-VALUE-OF 48907 . 49246) (GET-NEXT-HISTORY-EVENT 49248 . 50743) (
HISTORY-ADD-TO-SPELLING-LISTS 50745 . 51733) (HISTORY-NTH 51735 . 52485) (PRINT-HISTORY 52487 . 53108)
(FIND-HISTORY-EVENTS 53110 . 58171) (PRINT-EVENT 58173 . 62394) (PRINT-EVENT-PROMPT 62396 . 63600) (
PROCESS-EXEC-ID 63602 . 64547) (SEARCH-FOR-EVENT-NUMBER 64549 . 65177) (\PICK.EVALQT 65179 . 65690) (
LISPXREPRINT 65692 . 67017)) (68199 68298 (EXEC-PRINT 68199 . 68298)) (68300 68565 (EXEC-FORMAT 68300
. 68565)))))
(FILEMAP (NIL (4002 4407 (XCL::EXEC-CLOSEFN 4002 . 4407)) (4409 4745 (XCL::EXEC-SHRINKFN 4409 . 4745))
(4747 4987 (XCL::SETUP-EXEC-WINDOW 4747 . 4987)) (4989 5235 (XCL::EXEC-TITLE-FUNCTION 4989 . 5235)) (
5237 8404 (FIX-FORM 5237 . 8404)) (8406 8526 (XCL::GET-PROCESS-PROFILE 8406 . 8526)) (8528 8809 (
XCL::SAVE-CURRENT-EXEC-PROFILE 8528 . 8809)) (8811 9097 (XCL::SETF-GET-PROCESS-PROFILE 8811 . 9097)) (
9099 9666 (XCL:SET-EXEC-TYPE 9099 . 9666)) (9668 9750 (XCL:SET-DEFAULT-EXEC-TYPE 9668 . 9750)) (9752
10159 (XCL::ENTER-EXEC-FUNCTION 9752 . 10159)) (10234 16465 (DO-EVENT 10234 . 16465)) (16467 23064 (
EXEC 16467 . 23064)) (23066 24317 (EXEC-EVAL 23066 . 24317)) (24319 25050 (PRINT-ALL-DOCUMENTATION
24319 . 25050)) (25052 25494 (PRINT-DOCUMENTATION 25052 . 25494)) (25577 26652 (ADD-EXEC 25577 . 26652
)) (26654 30264 (EXEC-READ-LINE 26654 . 30264)) (30335 30821 (FIND-EXEC-COMMAND 30335 . 30821)) (30823
32709 (CIRCLAR-COPYER 30823 . 32709)) (32710 33664 (COPY-CIRCLE 32720 . 33662)) (33742 37047 (
EXEC-READ 33752 . 36913) (DIR 36915 . 37045)) (39301 66435 (DO-APPLY-EVENT 39311 . 39873) (
DO-HISTORY-SEARCH 39875 . 41332) (EVAL-INPUT 41334 . 46763) (EVENTS-INPUT 46765 . 48143) (EXEC-PRIN1
48145 . 48321) (EXEC-VALUE-OF 48323 . 48662) (GET-NEXT-HISTORY-EVENT 48664 . 50159) (
HISTORY-ADD-TO-SPELLING-LISTS 50161 . 51149) (HISTORY-NTH 51151 . 51901) (PRINT-HISTORY 51903 . 52524)
(FIND-HISTORY-EVENTS 52526 . 57587) (PRINT-EVENT 57589 . 61810) (PRINT-EVENT-PROMPT 61812 . 63016) (
PROCESS-EXEC-ID 63018 . 63963) (SEARCH-FOR-EVENT-NUMBER 63965 . 64593) (\PICK.EVALQT 64595 . 65106) (
LISPXREPRINT 65108 . 66433)) (67615 67714 (EXEC-PRINT 67615 . 67714)) (67716 67981 (EXEC-FORMAT 67716
. 67981)))))
STOP

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -1,37 +1,37 @@
(DEFINE-FILE-INFO READTABLE "INTERLISP" PACKAGE "INTERLISP")
(FILECREATED "19-Jan-93 11:26:14" {DSK}<python>lde>lispcore>sources>WINDOWOBJ.;3 27891
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
changes to%: (RECORDS IMAGEOBJ IMAGEFNS IMAGEBOX)
(FILECREATED "20-Dec-2021 23:47:45" {DSK}<Users>kaplan>Local>medley3.5>my-medley>sources>WINDOWOBJ.;5 27781
previous date%: " 5-Jan-93 09:53:15" {DSK}<python>lde>lispcore>sources>WINDOWOBJ.;2)
:CHANGES-TO (FNS COPYINSERT)
:PREVIOUS-DATE "18-Dec-2021 20:09:33"
{DSK}<Users>kaplan>Local>medley3.5>my-medley>sources>WINDOWOBJ.;3)
(* ; "
Copyright (c) 1986, 1987, 1990, 1991, 1993 by Venue & Xerox Corporation. All rights reserved.
Copyright (c) 1986-1987, 1990-1991, 1993 by Venue & Xerox Corporation.
")
(PRETTYCOMPRINT WINDOWOBJCOMS)
(RPAQQ WINDOWOBJCOMS [(COMS (* ;
 "Image object support - here so that DEDIT can use it without needing TEDIT to be loaded.")
(RECORDS IMAGEOBJ IMAGEFNS IMAGEBOX)
(FNS COPYINSERT IMAGEBOX IMAGEFNSCREATE IMAGEFNSP IMAGEOBJCREATE
IMAGEOBJP IMAGEOBJPROP \IMAGEUSERPROP HPRINT.IMAGEOBJ
COPYIMAGEOBJ READIMAGEOBJ WRITEIMAGEOBJ)
(ADDVARS (HPRINTMACROS (IMAGEOBJ . WRITEIMAGEOBJ)))
(GLOBALVARS (IMAGEOBJTYPES NIL)
(IMAGEOBJGETFNS NIL)))
(COMS (* ;
 "For encapsulating unknown-type IMAGEOBJs.")
(FNS ENCAPSULATEDOBJ.BUTTONEVENTINFN ENCAPSULATEDOBJ.PUTFN
ENCAPSULATEDOBJ.DISPLAYFN ENCAPSULATEDOBJ.IMAGEBOXFN
ENCAPSULATEDIMAGEFNS)
(INITVARS ENCAPSULATEDIMAGEFNS)
(GLOBALVARS ENCAPSULATEDIMAGEFNS))
(DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS
(ADDVARS (NLAMA)
(NLAML)
(LAMA IMAGEOBJPROP])
(RPAQQ WINDOWOBJCOMS
[(COMS (* ;
 "Image object support - here so that DEDIT can use it without needing TEDIT to be loaded.")
(RECORDS IMAGEOBJ IMAGEFNS IMAGEBOX)
(FNS COPYINSERT IMAGEBOX IMAGEFNSCREATE IMAGEFNSP IMAGEOBJCREATE IMAGEOBJP IMAGEOBJPROP
\IMAGEUSERPROP HPRINT.IMAGEOBJ COPYIMAGEOBJ READIMAGEOBJ WRITEIMAGEOBJ)
(ADDVARS (HPRINTMACROS (IMAGEOBJ . WRITEIMAGEOBJ)))
(GLOBALVARS (IMAGEOBJTYPES NIL)
(IMAGEOBJGETFNS NIL)))
(COMS (* ;
 "For encapsulating unknown-type IMAGEOBJs.")
(FNS ENCAPSULATEDOBJ.BUTTONEVENTINFN ENCAPSULATEDOBJ.PUTFN ENCAPSULATEDOBJ.DISPLAYFN
ENCAPSULATEDOBJ.IMAGEBOXFN ENCAPSULATEDIMAGEFNS)
(INITVARS ENCAPSULATEDIMAGEFNS)
(GLOBALVARS ENCAPSULATEDIMAGEFNS))
(DECLARE%: DONTEVAL@LOAD DOEVAL@COMPILE DONTCOPY COMPILERVARS (ADDVARS (NLAMA)
(NLAML)
(LAMA IMAGEOBJPROP])
@@ -40,35 +40,35 @@ Copyright (c) 1986, 1987, 1990, 1991, 1993 by Venue & Xerox Corporation. All ri
(DECLARE%: EVAL@COMPILE
(DATATYPE IMAGEOBJ (OBJECTDATUM IMAGEOBJPLIST IMAGEOBJFNS)
(SYSTEM))
(SYSTEM))
(DATATYPE IMAGEFNS (DISPLAYFN (* ;
 "FN called to display the object's image")
IMAGEBOXFN (* ; "To tell how big it is")
PUTFN (* ; "To write it onto a file")
GETFN (* ; "To read it back from the file")
COPYFN (* ; "To make a copy of the object")
BUTTONEVENTINFN (* ;
 "Called when the mouse goes down over the object")
COPYBUTTONEVENTINFN (* ;
 "Called when the MIDDLE mouse button goes down over the object")
WHENMOVEDFN (* ;
 "Called when the object is moved within a document or other environment")
WHENINSERTEDFN (* ;
 "Called when the object is inserted into a context")
WHENDELETEDFN (* ;
 "Called when the object is removed from a context")
WHENCOPIEDFN (* ;
 "Called when the object is copied within a context")
WHENOPERATEDONFN (* ;
 "Called when something interesting happens to the object")
PREPRINTFN IMAGECLASSNAME (* ;
 "LITATOM unique name by which this kind of IMAGEOBJ is to be known to the world.")
)
(SYSTEM))
(DATATYPE IMAGEFNS (DISPLAYFN (* ;
 "FN called to display the object's image")
IMAGEBOXFN (* ; "To tell how big it is")
PUTFN (* ; "To write it onto a file")
GETFN (* ; "To read it back from the file")
COPYFN (* ; "To make a copy of the object")
BUTTONEVENTINFN (* ;
 "Called when the mouse goes down over the object")
COPYBUTTONEVENTINFN (* ;
 "Called when the MIDDLE mouse button goes down over the object")
WHENMOVEDFN (* ;
 "Called when the object is moved within a document or other environment")
WHENINSERTEDFN (* ;
 "Called when the object is inserted into a context")
WHENDELETEDFN (* ;
 "Called when the object is removed from a context")
WHENCOPIEDFN (* ;
 "Called when the object is copied within a context")
WHENOPERATEDONFN (* ;
 "Called when something interesting happens to the object")
PREPRINTFN IMAGECLASSNAME (* ;
 "LITATOM unique name by which this kind of IMAGEOBJ is to be known to the world.")
)
(SYSTEM))
(RECORD IMAGEBOX (XSIZE YSIZE YDESC XKERN)
(SYSTEM))
(SYSTEM))
)
(/DECLAREDATATYPE 'IMAGEOBJ '(POINTER POINTER POINTER)
@@ -98,7 +98,11 @@ Copyright (c) 1986, 1987, 1990, 1991, 1993 by Venue & Xerox Corporation. All ri
(DEFINEQ
(COPYINSERT
[LAMBDA (IMAGEOBJ) (* ; "Edited 17-Sep-90 13:19 by jds")
[LAMBDA (IMAGEOBJ)
(* ;; "Edited 20-Dec-2021 23:47 by rmk: IMAGEOBJ can now also be a list of objects in the COPYINSERTFN case")
(* ;; "Edited 17-Sep-90 13:19 by jds")
(* ;;; "inserts IMAGEOBJ into the window that currently has the tty. If this window has a COPYINSERTFN property, that is called, otherwise BKSYSBUF is called.")
@@ -106,22 +110,22 @@ Copyright (c) 1986, 1987, 1990, 1991, 1993 by Venue & Xerox Corporation. All ri
INSERTFN)
(COND
((SETQ INSERTFN (WINDOWPROP TTYW 'COPYINSERTFN))
(APPLY* INSERTFN IMAGEOBJ TTYW))
(for IMOBJ inside IMAGEOBJ do (APPLY* INSERTFN IMOBJ TTYW)))
(T (* ;
 "IMAGEOBJ can be a list of things too.")
 "IMAGEOBJ can be a list of things too.")
(for IMOBJ inside IMAGEOBJ
do (BKSYSBUF (OR (COND
[(IMAGEOBJP IMOBJ)
(COND
((SETQ INSERTFN (IMAGEOBJPROP IMOBJ 'PREPRINTFN))
(APPLY* INSERTFN IMOBJ))
(T (IMAGEOBJPROP IMOBJ 'OBJECTDATUM]
(T IMOBJ))
"")
T
(PROCESS.EVAL (TTY.PROCESS)
'(GETREADTABLE)
T])
[(IMAGEOBJP IMOBJ)
(COND
((SETQ INSERTFN (IMAGEOBJPROP IMOBJ 'PREPRINTFN))
(APPLY* INSERTFN IMOBJ))
(T (IMAGEOBJPROP IMOBJ 'OBJECTDATUM]
(T IMOBJ))
"")
T
(PROCESS.EVAL (TTY.PROCESS)
'(GETREADTABLE)
T])
(IMAGEBOX
[LAMBDA (OBJ STREAM MODE) (* jds " 8-Feb-84 10:48")
@@ -527,11 +531,11 @@ Either delete this image object or load its support files." IMAGEOBJ)
)
(PUTPROPS WINDOWOBJ COPYRIGHT ("Venue & Xerox Corporation" 1986 1987 1990 1991 1993))
(DECLARE%: DONTCOPY
(FILEMAP (NIL (5088 21106 (COPYINSERT 5098 . 6542) (IMAGEBOX 6544 . 6724) (IMAGEFNSCREATE 6726 . 7921)
(IMAGEFNSP 7923 . 8164) (IMAGEOBJCREATE 8166 . 8711) (IMAGEOBJP 8713 . 8954) (IMAGEOBJPROP 8956 .
14848) (\IMAGEUSERPROP 14850 . 15444) (HPRINT.IMAGEOBJ 15446 . 16035) (COPYIMAGEOBJ 16037 . 16780) (
READIMAGEOBJ 16782 . 19752) (WRITEIMAGEOBJ 19754 . 21104)) (21320 27527 (
ENCAPSULATEDOBJ.BUTTONEVENTINFN 21330 . 22466) (ENCAPSULATEDOBJ.PUTFN 22468 . 23583) (
ENCAPSULATEDOBJ.DISPLAYFN 23585 . 25198) (ENCAPSULATEDOBJ.IMAGEBOXFN 25200 . 26088) (
ENCAPSULATEDIMAGEFNS 26090 . 27525)))))
(FILEMAP (NIL (4895 20996 (COPYINSERT 4905 . 6432) (IMAGEBOX 6434 . 6614) (IMAGEFNSCREATE 6616 . 7811)
(IMAGEFNSP 7813 . 8054) (IMAGEOBJCREATE 8056 . 8601) (IMAGEOBJP 8603 . 8844) (IMAGEOBJPROP 8846 .
14738) (\IMAGEUSERPROP 14740 . 15334) (HPRINT.IMAGEOBJ 15336 . 15925) (COPYIMAGEOBJ 15927 . 16670) (
READIMAGEOBJ 16672 . 19642) (WRITEIMAGEOBJ 19644 . 20994)) (21210 27417 (
ENCAPSULATEDOBJ.BUTTONEVENTINFN 21220 . 22356) (ENCAPSULATEDOBJ.PUTFN 22358 . 23473) (
ENCAPSULATEDOBJ.DISPLAYFN 23475 . 25088) (ENCAPSULATEDOBJ.IMAGEBOXFN 25090 . 25978) (
ENCAPSULATEDIMAGEFNS 25980 . 27415)))))
STOP

Binary file not shown.