From 1d6e43e1ea1dedaeb68ae64759813e75b5d321c6 Mon Sep 17 00:00:00 2001 From: rmkaplan <69548581+rmkaplan@users.noreply.github.com> Date: Wed, 10 Jan 2024 12:31:28 -0800 Subject: [PATCH] Minor fixups (typos, formatting) to a few existing documentation files (#1470) * Mostly minor fixups (typos, formatting) to a few existing documentation files Plus converting the Unicode documentation from TXT to formatted * Update UNICODE.TEDIT Previous version did not have page-looks (heading location etc.) * UNICODE.TEDIT: write unbreakable charlook property * Delete UNICODE.TEDIT Master has a newer version, trying to eliminate conflict --- library/UNICODE.TXT | 98 ----------------------------- lispusers/COMPAREDIRECTORIES.TEDIT | 29 ++++----- lispusers/EXAMINEDEFS.TEDIT | Bin 5046 -> 5030 bytes lispusers/FM-CREATOR.TEDIT | Bin 88255 -> 88120 bytes lispusers/GITFNS.TEDIT | 59 ++++++++++------- lispusers/tmax/TMAX.TEDIT | Bin 68521 -> 64953 bytes 6 files changed, 49 insertions(+), 137 deletions(-) delete mode 100644 library/UNICODE.TXT diff --git a/library/UNICODE.TXT b/library/UNICODE.TXT deleted file mode 100644 index 666872ad..00000000 --- a/library/UNICODE.TXT +++ /dev/null @@ -1,98 +0,0 @@ -This file describes the UNICODE Lisp Library package. - -Contributed by Ron Kaplan, August 2020. - -The UNICODE library package defines external file formats that enable Medley to read and write files where 16 bit character codes are represented as UTF8 byte sequences or big-endian UTF16 byte-pairs. It also provides for character codes to be converted (on reading) from Unicode codes to equivalent codes in the Medley-internal Xerox Character Code Standard (XCCS) and (on writing) from XCCS codes to equivalent Unicode codes. - -Four external formats are defined when the package is loaded: - - :UTF8 codes are represented as UTF8 byte sequences and XCCS/Unicode character - conversion takes place. - - :UTF16BE codes are represented as 2-byte pairs, with the high order by appearing - first in the file, and characters are converted. - -The two other external formats translate byte sequences into codes, but do not translate the codes. These allow Medley to see and process characters in their native encoding. - - :UTF8-RAW codes are represented as UTF8 byte sequences, but character conversion - does not take place. - - :UTF16BE-RAW codes are represented as big-ending 2-byte pairs but there is no - conversion. - -These formats all define the end-of-line convention (mostly for writing) for the external files according to the variable EXTERNALEOL (LF, CR, CRLF), with LF the default. - -The external format can be specified as a parameter when a stream is opened: - - (OPENSTREAM 'foo.txt 'INPUT 'OLD '((EXTERNALFORMAT :UTF8))) - - (CL:OPEN 'foo.txt :DIRECTION :INPUT :EXTERNAL-FORMAT :UTF8) - -The function STREAMPROP obtains or changes the external format of an open stream: - - (STREAMPROP stream 'EXTERNALFORMAT) -> :XCCS - - (STREAMPROP stream 'EXTERNALFORMAT :UTF8) -> :XCCS - -In the latter case, the stream's format is changed to :UTF8 and the previous value is returned, in this example it is Medley's historical default format :XCCS. - -Entries can be placed on the variable *DEFAULT-EXTERNALFORMATS* to change the external format that is set by default when a file is opened on a particular device. Loading UNICODE executes - - (PUSH *DEFAULT-EXTERNALFORMATS* '(UNIX :UTF8)) - -so that all files opened (by OPENSTREAM, CL:OPEN, etc.) on the UNIX file device will be initialized with :UTF8. Note that the UNIX and DSK file devices reference the same files (although some caution is needed because {UNIX} does not simulate Medley versioning), but the device name in a file name ({UNIX}/Users/... vs. {DSK}/Users/...) selects one or the other. The default setting above applies only to files specified with {UNIX}; a separate default entry for DSK must be established to change its default from :XCCS. - -The user can also specify the external format on a per-stream basis by putting a function on the list STREAM-AFTER-OPEN-FNS. After OPENSTREAM opens a stream and just before it is returned to the calling function, the functions on that list are applied in order to arguments STREAM, ACCESS, PARAMETERS. They can examine and/or change the properties of the stream, in particular, by calling STREAMPROP to change the external format from its device default. - -The XCCS/Unicode mapping tables are defined by the code-mapping files for particular XCCS character sets. These are typically located in the Library sister directory - - ../Unicode/Xerox/ - -and the variable UNICODEDIRECTORIES is initialized with a globally valid reference to that path. The global reference is constructed by prepending the value of the Unix environment-variable "MEDLEYDIR" to the suffix /Unicode/Xerox/. MEDLEYDIR should be set by the Medley start-up shell script (e.g. /Users/kaplan/local/medley3.5/lispcore/) - -The mapping files have conventional names of the form XCCS-=.TXT, for example, XCCS-0=LATIN.TXT, XCCS-357=SYMBOLS4.TXT. The translations used by the external formats are read from these files by the function - - (READ-UNICODE-MAPPING FILESPEC NOPRINT NOERROR) - -where FILESPEC can be a list of files, charset octal strings ("0" "357"), or XCCS charset names (LATIN EXTENDED-LATIN). Reading will be silent if NOPRINT, and the process will not abort if an error occurs and NOERROR. The value is a flat list of the mappings for all the character sets, with elements of the form (XCCC-code Unicode-code). - -When UNICODE is loaded the mappings for the character sets specified in the variable DEFAULT-XCCS-CHARSETS are installed. This is initialized to - - (LATIN SYMBOLS1 SYMBOLS2 EXTENDED-LATIN FORMS SYMBOLS3 SYMBOLS4 ACCENTED-LATIN GREEK) - -but DEFAULT-XCCS-CHARSETS can be set to a different collection before UNICODE is loaded. - -The internal translation tables used by the external formats are constructed from a list of correspondence pairs by the function - - (MAKE-UNICODE-TRANSLATION-TABLES MAPPING [FROM-XCCS-VAR][TO-XCCS-VAR]) - -This returns a list of two arrays (XCCS-to-Unicode Unicode-to-XCCS)containing the relevant translation information organized for rapid access. If the optional from/to-variables arguments are provide, they are the names of variables whose top-level values will be set to these arrays, for convenience. For the external formats defined above, these variables are *XCCSTOUNICODE* and *UNICODETOXCCS*. - -The macro - - (UNICODE.TRANSLATE CODE TRANSLATION-TABLE) - -is used by the external formats to perform the mappings described by the translation-tables. - -The following utilities are provided for lower-level manipulation of codes and strings - - (XTOUCODE XCCSCODE) -> corresponding Unicode - (UTOXCODE UNICODE) -> corresponding XCCS code - (NUTF8CODEBYTES N) -> number of bytes in the UTF8 representation of N - (NUTF8STRINGBYTES STRING RAWFLG) -> number of UTF8 bytes in the UTF8 - representation of STRING, translating XCCS to Unicode unless RAWFLG. - (XTOUSTRING XCCSSTRING RAWFLG) -> The string of bytes in the UTF8 representation - of the characters in XCCSSTRING (= the bytes in its UTF8 file encoding) - (HEXSTRING N WIDTH) -> the hex string for N, padded to WIDTH - - -The UNICODE file also contains a function for writing a mapping file given a list of mapping pairs. The function - - (WRITE-TRANSLATION-TABLE MAPPING [INCLUDEDCHARSETS] [FILE]) - -produces one or more mapping files for the mapping-pairs in mapping. If the optional FILE argument is provided, then a single file with that name will be produced and contain all the mappings for all the character sets in MAPPING. If FILE and INCLUDEDCHARSETS are not provided, then all of the mappings will again go to a single file with a composite name XCCS-csn1,csn2,csn3.TXT. Each cs may be a single charset number, or a range of adjacent charset numbers. For example, if the mappings contain entries for characters in charset LATIN, SYMBOLS1, SYMBOLS2, and SYMBOLS3, the file name will be XCCS-0,41-43.TXT. - -If INCLUDEDCHARSETS is provided, it specifies possibly a subset of the mappings in MAPPING for which files should be produced. This provides an implicit subsetting capability. - -Finally, if FILE is not provided and INCLUDEDCHARSETS is T, then a separate file will be produced for each of the character sets, essentially a way of splitting a collection of character-set mappings into separate canonically named files (e.g. XCCS-357=SYMBOLS4.TXT). - diff --git a/lispusers/COMPAREDIRECTORIES.TEDIT b/lispusers/COMPAREDIRECTORIES.TEDIT index 9bc20226..b82834f2 100644 --- a/lispusers/COMPAREDIRECTORIES.TEDIT +++ b/lispusers/COMPAREDIRECTORIES.TEDIT @@ -3,21 +3,14 @@ XEROX COMPAREDIRECTORIES 2 1 COMPAREDIRECTORIES 1 4 - By: Larry Masinter and Ron Kaplan This document edited on December 2, 1987 December 28, 1998 (Ron Kaplan) April 7, 2018 (Ron Kaplan) Rewritten August 25, 2020 (Ron Kaplan) COMPAREDIRECTORIES compares the contents of two directories, identifying files according to their creation dates and lengths. It is called using the function (COMPAREDIRECTORIES DIR1 DIR2 SELECT FILEPATTERNS EXTENSIONSTOAVOID USEDIRECTORYDATES OUTPUTFILE ALLVERSIONS) [Function] Compares the creation dates of files with matching names in the lists that CDFILES returns for DIR1 and DIR2. Collects or prints CDENTRIES for those files that meet the SELECT criteria. May also collect or print entries for relevant files that exist in DIR1 or DIR2 but not both. SELECT specifies which the match/mismatch criteria for filtering the output. If SELECT is or contains AFTER or >: select entries where file1 has a later date than file2 BEFORE or <: select entries where file1 has an earlier date than file2 SAMEDATE or =: select entries where file1 and file2 have the same date -*: exclude entries where file1 does not exist *-: exclude entries where file2 does not exist ~=: exclude entries where file1 and file2 are byte-equivalent SELECT = NIL is equivalent to (< > -* *-). Excludes files with matching dates, a useful default for identifying files that may require further attention. SELECT = T is equivalent to (= < > -* *-). Includes all files for processing by other functions or later filtering by CDSUBSET (below). SELECT may also contain the token AUTHOR to indicate that authors should be provided in the printed output (see CDPRINT below). Unless USEDIRECTORYDATES, the FILECREATED date is used for the date comparison of Lisp source and compiled files, otherwise the file-system CREATIONDATE is used. If OUTPUTFILE=NIL, then a list of the form (Parameters . entries) is returned. Parameters is a list (DIR1 DIR2 SELECT DATE) that records the parameters of the comparison. Entries contains one entry for each of the file-comparisons that meets the SELECT criteria. Each entry is a CDENTRY record with fields (matchname info1 daterel info2 equiv) where matchname is the name.extension shared by the two files, and each file info is either NIL (for nonexistent files) or a CDINFO record with fields (FULLNAME DATE LENGTH AUTHOR TYPE EOL) TYPE is SOURCE for Lisp source (filecreated) files, COMPILED for Lisp compiled files, otherwise the PRINTFILETYPE (TEXT, TEDIT...) or NIL. EOL is CR, LF, CRLF, or NIL. When both files exist, the date relation is one of <, =, or >. Otherwise, the date relation is * if only one file exists. EQUIV is EQUIVALENT for files with different dates but exactly the same bytes, otherwise NIL. If OUTPUTFILE is not NIL, then it is a filename or open stream on which selected entries will be printed (T for the terminal) by CDPRINT. COMPAREDIRECTORIES sets the variable LASTCDENTRIES is set to the selected entries. This is used by the functions below if their CDENTRIES is NIL. (CDFILES DIR FILEPATTERNS EXTENSIONSTOAVOID ALLVERSIONS DEPTH) [Function] Returns a list of full filenames for files in directory DIR (NIL=T=the connected directory) that match the other file-name filtering criteria. Files are excluded if: Their name does not match a pattern in FILEPATTERNS (NIL = *). Dotted files are excluded unless FILEPATTERNS includes .* and files in subdirectories are excluded if the number of subdirectories exceeds DEPTH (below). Their extension is in the list EXTENSIONSTOAVOID (* excludes all extensions). They are not the highest version unless ALLVERSIONS=T. DEPTH controls the depth of subdirectory exploration. T means all levels, NIL means no subdirectories. Otherwise the maximum number of ">" characters below the starting DIR in the fullname of files. (CDFILES) produces all the newest, undotted files in the immediate connected directory. (CDPRINT CDENTRIES FILE PRINTAUTHOR) [Function] Prints CDENTRIES on FILE, with one line for each entry. The line for each entry is of the form FILE1 (AUTHOR) SIZE DATE relation DATE FILE2 (AUTHOR) SIZE For example ACE.;1 (Joe) 4035 2-May-1985 18:03:54 < 30-Sep-1985 11:14:48 ACE.;3 (Sam) 5096. The line for byte-equivalent files is prefixed with ==. If the files are equivalent except for a difference in end-of-line conventions, the equivalence prefix will indicate the convention for each file (C for CR, L, for LF, 2 for CRLF). Thus C2 indicates that the files are equivalent except that file1 marks line ends with CR and file2 with CRLF. Note that because of the setting of LASTCDENTRIES, evaluating (CDPRINT) after COMPAREDIRECTORIES prints the results of the last comparision. For conciseness, authors are included only if PRINTAUTHOR or if AUTHOR is included in the SELECT parameter of CDENTRIES. Also, the redundant file-name hosts/directories are not printed. (CDMAP CDENTRIES FN) [Function] (CDSUBSET CDENTRIES FN) [Function] CDMAP applies FN to each CDENTRY in CDENTRIES. CDSUBSET applies FN and also returns the subset of CDENTRIES for which FN is non-NIL and preserves in the value the parameters of CDENTRIES. For convenience, at each invocation the variables MATCHNAME INFO1 DATEREL INFO2 and EQUIV are bound to the corresponding fields and can be used freely by FN. USEFUL UTILITIES (FIX-DIRECTORY-DATES FILES) [Function] For every file included in or specified by FILES, if it is a Lisp source or compiled whose directory creation date is more than 30 seconds later than its internal filecreated date (presumably because of copying), then its directory date is reset to match the internal date. FILES can be a list of file names or a pattern interpretable by FILDIR. Returns a list of files whose dates have been changed. (FIX-EQUIV-DATES CDENTRIES) [Function] If there is an entry in CDENTRIES whose files are EQUIVALENT but with different directory creation dates, the directory date of the file with the later date (presumably a copy) is reset to match the date of the earlier file. In the end all equivalent files will have the same (earliest) date. Returns a list of files whose dates have been changed. (COPY-MISSING-FILES CDENTRIES TARGET MATCHNAMES) [Function] Target is 1 or 2, indicating the direction of potential copies. If an entry with a source file but no target file has a matchname in MATCHNAMES, the source file is copied to the target directory. All target-absent files are copied if MATCNAMES is NIL. Source properties (including version number) are preserved in the target. (COPY-COMPARED-FILES CDENTRIES TARGET MATCHNAMES) [Function] Target is 1 or 2, indicating the direction of potential copies. If an entry with both source and target files has a matchname in MATCHNAMES, the source file is copied to a new version of the target file. All files are copied if MATCHNAMES is NIL. (COMPARE-ENTRY-SOURCE-FILES CDENTRY LISTSTREAM EXAMINE DW?) [Function] This is a simple wrapper for calling COMPARESOURCES if the CDENTRY files are Lisp source files. The function (CDENTRY MATCHNAME CDENTRIES is useful for extracting a particular entry, with CDENTRIES defaulting to LASTCDENTRIES. (COMPILED-ON-SAME-SOURCE CDENTRIES) [Function] Returns the subset of entries with Lisp compiled files (dfasl or lcom) that are compiled on the same source, according to SOURCE-FOR-COMPILED-P below. Presumably one should be removed to avoid confusion. (FIND-SOURCE-FILES CFILES SDIRS DFASLMARGIN) [Function] Returns (CFILE . SFILES) pairs where CFILE is a Lisp compiled file in CFILES and SFILES is list of files in SDIRS that CFILE was compiled on according to SOURCE-FOR-COMPILED-P. This suggests that at least one of SFILES should be copied to CFILE's location (or vice versa). (FIND-COMPILED-FILES SFILES CDIRS DFASLMARGIN) [Function] Returns (SFILE . CFILES) pairs where SFILE is a Lisp source file in SFILES and CFILES are files in CDIRS that are compiled on SFILE according to SOURCE-FOR-COMPILED-P. This suggests that at least one of CFILES should be copied to SFILE's location. (FIND-UNCOMPILED-FILES FILES DFASLMARGIN COMPILEXTS) [Function] Returns a list of elements each of which corresponds to a source file in FILES for which no appropriate compiled file can be found. An appropriate compiled file is a file in the same location with extension in COMPILEEXTS (defaulting to *COMPILED-EXTENSIONS*) that satisfies SOURCE-FOR-COMPILED-P. Each element is a list of the form (sourcefile . cfiles) cfiles contains compiled files that were compiled on a different version of sourcefile, NIL if no such files exist. Each cfile item is a pair (cfile timediff) where timediff is the time difference (in minutes) between the creation date of the compiled-file's source and the creation date of sourcefile (positive if the cfile was compiled later, as should be the case). FILES can be an explicit list of files, or a file specification interpretable by FILDIR; in that case only the newest source-file versions are processed. (FIND-UNSOURCED-FILES CFILES DFASLMARGIN COMPILEXTS) [Function] Returns the subset of the compiled files specified by CFILES for which a corresponding source file according to SOURCE-FOR-COMPILED-P cannot be found in the same directory. CFILES can be a list of files or a pattern that FILDIR can interpret. COMPILEEXTS can be one or more explicit compile-file extensions, defaulting to *COMPILED-EXTENSIONS*. (SOURCE-FOR-COMPILED-P SOURCE COMPILED DFASLMARGIN) [Function] Returns T if it can confirm that Lisp COMPILED file was compiled on Lisp SOURCE file. SOURCE and COMPILED can be provided as CREATED-AS values, to avoid repetitive computation. This compares the information in the filecreated expressions, original file names and original dates, and not the current directory names and dates. It appears that the times in DFASL files may differ from the filecreated source dates by a few minutes. The DFASLMARGIN can be provided to loosen up the date matching criterion. DFASLMARGIN is a pair (max min) and a DFASL COMPILED is deemed to be compiled on SOURCE if the compiled's source date is no more than max and no less than min minutes after the source date. A negative min allows for the possibility that the compiled-source date is earlier than the candidate source date. DFASLMARGIN defaults to (20 0). A single positive number x is coerced to (x 0). A single negative number is coerced to (-x x) (compiled file is no more than x minutes later or earlier). T is infinity in either direction. Examples: (T 0): COMPILED compiled on source later than SOURCE (0 T): COMPILED compiled on source earlier than SOURCE (odd) 12: COMPILED compiled on source later than SOURCE by no more than 12 minutes -12: COMPILED compiled on source 12 minutes before or after SOURCE (FIND-MULTICOMPILED-FILES FILES SHOWINFO) [Function] Returns a list of files in FILES that have more than one type of compiled file (e.g. LCOM and DFASL). FILES is interpretable by FILDIR. If SHOWINFO, then the value contains a list for each file of the form ï!(rootname loaded-version . CREATED-AS information for each compile-type) Otherwise just the rootname of the source is returns. (CREATED-AS FILE) [Function] If FILE is a Lisp source or compiled file, returns a record of its original filename and filecreated dates, and for compiled files, also the original compiled-on name and date. The return for a source file is a pair (sfullname sfilecreateddate) The return for a compiled file is a quadruple (cfullname cfilecreated sfullname sfilecreateddate) where sfullname and sourcefilecreated are extracted from the file's compiled-on information. The return is (fullname NIL) for a non-Lisp file. (EOLTYPE FILE SHOWCONTEXT) [Function] Returns the EOLTYPE of FILE (CR, LF, CRLF) if the type is unmistakable: contains at least one instance of one type and no instances of any others. Returns NIL if there is evidence of inconsistent types. If SHOWCONTEXT is an integer, it is the number of bytes for EOLTYPE to display before and after an instance of an inconsistent type. At each instance, the user is asked whether to continue scanning for other instances. SHOWCONTEXT = T is interpreted as 100. (BINCOMP FILE1 FILE2 EOLDIFFOK) [Function] Returns T if FILE1 and FILE2 are byte-identical. If EOLDIFFOK and FILE1 and FILE2 differ only in their eol conventions, the value is a list of the form (EOL1 EOL2), e.g. (CR CRLF). Otherwise the value is NIL. (LIST ((PAGE NIL (PAPERSIZE Letter FOLIOINFO (ARABIC) STARTINGPAGE# 1) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD CENTERED) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY MODERN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO (ARABIC)) (174 36 288 36) NIL) (HEADING NIL (HEADINGTYPE RUNNINGHEAD) (84 744 528 36) NIL) (TEXT NIL NIL (84 96 456 600) NIL))) (PAGE NIL (PAPERSIZE Letter FOLIOINFO (ARABIC)) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD CENTERED) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY MODERN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO (ARABIC)) (174 36 288 36) NIL) (HEADING NIL (HEADINGTYPE RUNNINGHEAD) (84 744 528 36) NIL) (TEXT NIL NIL (84 96 456 600) NIL))) (PAGE NIL (PAPERSIZE Letter FOLIOINFO (ARABIC)) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD CENTERED) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY MODERN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO (ARABIC)) (174 36 288 36) NIL) (HEADING NIL (HEADINGTYPE RUNNINGHEAD) (84 744 528 36) NIL) (TEXT NIL NIL (84 96 456 600) NIL))))) 4È$È40È$È4 È$È1$4@$È4È$È1È$1ŠŠ8$1ŠŠ8$JÈ$È PAGEHEADING RUNNINGHEAD1$ -GACHA -TERMINALMODERN -MODERN -TERMINAL -MODERN MODERN -MODERNLOGOMODERN - -  - HRULE.GETFNMODERN -  HRULE.GETFNMODERN -  HRULE.GETFNMODERN - HRULE.GETFNMODERN   HRULE.GETFNMODERN #!(ž - -[ - -fJLL44C›Š€£6)˜*©Ú‹”K¦ÙN7ÉX1_A P]Ž»  Z# “ ]0 I1 û; ä# Ì, . û4 O4 [3 HÑ:BRJ) ÐI7 Ù".9 Ñ Õ  - 1.-zº \ No newline at end of file + By: Larry Masinter and Ron Kaplan This document edited on December 2, 1987 December 28, 1998 (Ron Kaplan) April 7, 2018 (Ron Kaplan) Rewritten August 25, 2020 (Ron Kaplan) COMPAREDIRECTORIES compares the contents of two directories, identifying files according to their creation dates and lengths. It is called using the function (COMPAREDIRECTORIES DIR1 DIR2 SELECT FILEPATTERNS EXTENSIONSTOAVOID USEDIRECTORYDATES OUTPUTFILE ALLVERSIONS) [Function] Compares the creation dates of files with matching names in the lists that CDFILES returns for DIR1 and DIR2. Collects or prints CDENTRIES for those files that meet the SELECT criteria. May also collect or print entries for relevant files that exist in DIR1 or DIR2 but not both. SELECT specifies which the match/mismatch criteria for filtering the output. If SELECT is or contains AFTER or >: select entries where file1 has a later date than file2 BEFORE or <: select entries where file1 has an earlier date than file2 SAMEDATE or =: select entries where file1 and file2 have the same date -*: exclude entries where file1 does not exist *-: exclude entries where file2 does not exist ~=: exclude entries where file1 and file2 are byte-equivalent SELECT = NIL is equivalent to (< > -* *-). Excludes files with matching dates, a useful default for identifying files that may require further attention. SELECT = T is equivalent to (= < > -* *-). Includes all files for processing by other functions or later filtering by CDSUBSET (below). SELECT may also contain the token AUTHOR to indicate that authors should be provided in the printed output (see CDPRINT below). Unless USEDIRECTORYDATES, the FILECREATED date is used for the date comparison of Lisp source and compiled files, otherwise the file-system CREATIONDATE is used. If OUTPUTFILE=NIL, then a list of the form (Parameters . entries) is returned. Parameters is a list (DIR1 DIR2 SELECT DATE) that records the parameters of the comparison. Entries contains one entry for each of the file-comparisons that meets the SELECT criteria. Each entry is a CDENTRY record with fields (matchname info1 daterel info2 equiv) where matchname is the name.extension shared by the two files, and each file info is either NIL (for nonexistent files) or a CDINFO record with fields (FULLNAME DATE LENGTH AUTHOR TYPE EOL) TYPE is SOURCE for Lisp source (filecreated) files, COMPILED for Lisp compiled files, otherwise the PRINTFILETYPE (TEXT, TEDIT...) or NIL. EOL is CR, LF, CRLF, or NIL. When both files exist, the date relation is one of <, =, or >. Otherwise, the date relation is * if only one file exists. EQUIV is EQUIVALENT for files with different dates but exactly the same bytes, otherwise NIL. If OUTPUTFILE is not NIL, then it is a filename or open stream on which selected entries will be printed (T for the terminal) by CDPRINT. COMPAREDIRECTORIES sets the variable LASTCDENTRIES is set to the selected entries. This is used by the functions below if their CDENTRIES is NIL. (CDFILES DIR FILEPATTERNS EXTENSIONSTOAVOID ALLVERSIONS DEPTH) [Function] Returns a list of full filenames for files in directory DIR (NIL=T=the connected directory) that match the other file-name filtering criteria. Files are excluded if: Their name does not match a pattern in FILEPATTERNS (NIL = *). Dotted files are excluded unless FILEPATTERNS includes .* and files in subdirectories are excluded if the number of subdirectories exceeds DEPTH (below). Their extension is in the list EXTENSIONSTOAVOID (* excludes all extensions). They are not the highest version unless ALLVERSIONS=T. DEPTH controls the depth of subdirectory exploration. T means all levels, NIL means no subdirectories. Otherwise the maximum number of ">" characters below the starting DIR in the fullname of files. (CDFILES) produces all the newest, undotted files in the immediate connected directory. (CDPRINT CDENTRIES FILE PRINTAUTHOR) [Function] Prints CDENTRIES on FILE, with one line for each entry. The line for each entry is of the form FILE1 (AUTHOR) SIZE DATE relation DATE FILE2 (AUTHOR) SIZE For example ACE.;1 (Joe) 4035 2-May-1985 18:03:54 < 30-Sep-1985 11:14:48 ACE.;3 (Sam) 5096. The line for byte-equivalent files is prefixed with ==. If the files are equivalent except for a difference in end-of-line conventions, the equivalence prefix will indicate the convention for each file (C for CR, L, for LF, 2 for CRLF). Thus C2 indicates that the files are equivalent except that file1 marks line ends with CR and file2 with CRLF. Note that because of the setting of LASTCDENTRIES, evaluating (CDPRINT) after COMPAREDIRECTORIES prints the results of the last comparision. For conciseness, authors are included only if PRINTAUTHOR or if AUTHOR is included in the SELECT parameter of CDENTRIES. Also, the redundant file-name hosts/directories are not printed. (CDMAP CDENTRIES FN) [Function] (CDSUBSET CDENTRIES FN) [Function] CDMAP applies FN to each CDENTRY in CDENTRIES. CDSUBSET applies FN and also returns the subset of CDENTRIES for which FN is non-NIL and preserves in the value the parameters of CDENTRIES. For convenience, at each invocation the variables MATCHNAME INFO1 DATEREL INFO2 and EQUIV are bound to the corresponding fields and can be used freely by FN. USEFUL UTILITIES (FIX-DIRECTORY-DATES FILES) [Function] For every file included in or specified by FILES, if it is a Lisp source or compiled whose directory creation date is more than 30 seconds later than its internal filecreated date (presumably because of copying), then its directory date is reset to match the internal date. FILES can be a list of file names or a pattern interpretable by FILDIR. Returns a list of files whose dates have been changed. (FIX-EQUIV-DATES CDENTRIES) [Function] If there is an entry in CDENTRIES whose files are EQUIVALENT but with different directory creation dates, the directory date of the file with the later date (presumably a copy) is reset to match the date of the earlier file. In the end all equivalent files will have the same (earliest) date. Returns a list of files whose dates have been changed. (COPY-MISSING-FILES CDENTRIES TARGET MATCHNAMES) [Function] Target is 1 or 2, indicating the direction of potential copies. If an entry with a source file but no target file has a matchname in MATCHNAMES, the source file is copied to the target directory. All target-absent files are copied if MATCNAMES is NIL. Source properties (including version number) are preserved in the target. (COPY-COMPARED-FILES CDENTRIES TARGET MATCHNAMES) [Function] Target is 1 or 2, indicating the direction of potential copies. If an entry with both source and target files has a matchname in MATCHNAMES, the source file is copied to a new version of the target file. All files are copied if MATCHNAMES is NIL. (COMPARE-ENTRY-SOURCE-FILES CDENTRY LISTSTREAM EXAMINE DW?) [Function] This is a simple wrapper for calling COMPARESOURCES if the CDENTRY files are Lisp source files. The function (CDENTRY MATCHNAME CDENTRIES is useful for extracting a particular entry, with CDENTRIES defaulting to LASTCDENTRIES. (COMPILED-ON-SAME-SOURCE CDENTRIES) [Function] Returns the subset of entries with Lisp compiled files (dfasl or lcom) that are compiled on the same source, according to SOURCE-FOR-COMPILED-P below. Presumably one should be removed to avoid confusion. (FIND-SOURCE-FILES CFILES SDIRS DFASLMARGIN) [Function] Returns (CFILE . SFILES) pairs where CFILE is a Lisp compiled file in CFILES and SFILES is list of files in SDIRS that CFILE was compiled on according to SOURCE-FOR-COMPILED-P. This suggests that at least one of SFILES should be copied to CFILE's location (or vice versa). (FIND-COMPILED-FILES SFILES CDIRS DFASLMARGIN) [Function] Returns (SFILE . CFILES) pairs where SFILE is a Lisp source file in SFILES and CFILES are files in CDIRS that are compiled on SFILE according to SOURCE-FOR-COMPILED-P. This suggests that at least one of CFILES should be copied to SFILE's location. (FIND-UNCOMPILED-FILES FILES DFASLMARGIN COMPILEXTS) [Function] Returns a list of elements each of which corresponds to a source file in FILES for which no appropriate compiled file can be found. An appropriate compiled file is a file in the same location with extension in COMPILEEXTS (defaulting to *COMPILED-EXTENSIONS*) that satisfies SOURCE-FOR-COMPILED-P. Each element is a list of the form (sourcefile . cfiles) cfiles contains compiled files that were compiled on a different version of sourcefile, NIL if no such files exist. Each cfile item is a pair (cfile timediff) where timediff is the time difference (in minutes) between the creation date of the compiled-file's source and the creation date of sourcefile (positive if the cfile was compiled later, as should be the case). FILES can be an explicit list of files, or a file specification interpretable by FILDIR; in that case only the newest source-file versions are processed. (FIND-UNSOURCED-FILES CFILES DFASLMARGIN COMPILEXTS) [Function] Returns the subset of the compiled files specified by CFILES for which a corresponding source file according to SOURCE-FOR-COMPILED-P cannot be found in the same directory. CFILES can be a list of files or a pattern that FILDIR can interpret. COMPILEEXTS can be one or more explicit compile-file extensions, defaulting to *COMPILED-EXTENSIONS*. (SOURCE-FOR-COMPILED-P SOURCE COMPILED DFASLMARGIN) [Function] Returns T if it can confirm that Lisp COMPILED file was compiled on Lisp SOURCE file. SOURCE and COMPILED can be provided as CREATED-AS values, to avoid repetitive computation. This compares the information in the filecreated expressions, original file names and original dates, and not the current directory names and dates. It appears that the times in DFASL files may differ from the filecreated source dates by a few minutes. The DFASLMARGIN can be provided to loosen up the date matching criterion. DFASLMARGIN is a pair (max min) and a DFASL COMPILED is deemed to be compiled on SOURCE if the compiled's source date is no more than max and no less than min minutes after the source date. A negative min allows for the possibility that the compiled-source date is earlier than the candidate source date. DFASLMARGIN defaults to (20 0). A single positive number x is coerced to (x 0). A single negative number is coerced to (-x x) (compiled file is no more than x minutes later or earlier). T is infinity in either direction. Examples: (T 0): COMPILED compiled on source later than SOURCE (0 T): COMPILED compiled on source earlier than SOURCE (odd) 12: COMPILED compiled on source later than SOURCE by no more than 12 minutes -12: COMPILED compiled on source 12 minutes before or after SOURCE (FIND-MULTICOMPILED-FILES FILES SHOWINFO) [Function] Returns a list of files in FILES that have more than one type of compiled file (e.g. LCOM and DFASL). FILES is interpretable by FILDIR. If SHOWINFO, then the value contains a list for each file of the form + (rootname loaded-version . CREATED-AS information for each compile-type) Otherwise just the rootname of the source is returns. (CREATED-AS FILE) [Function] If FILE is a Lisp source or compiled file, returns a record of its original filename and filecreated dates, and for compiled files, also the original compiled-on name and date. The return for a source file is a pair (sfullname sfilecreateddate) The return for a compiled file is a quadruple (cfullname cfilecreated sfullname sfilecreateddate) where sfullname and sourcefilecreated are extracted from the file's compiled-on information. The return is (fullname NIL) for a non-Lisp file. (EOLTYPE FILE SHOWCONTEXT) [Function] Returns the EOLTYPE of FILE (CR, LF, CRLF) if the type is unmistakable: contains at least one instance of one type and no instances of any others. Returns NIL if there is evidence of inconsistent types. If SHOWCONTEXT is an integer, it is the number of bytes for EOLTYPE to display before and after an instance of an inconsistent type. At each instance, the user is asked whether to continue scanning for other instances. SHOWCONTEXT = T is interpreted as 100. (BINCOMP FILE1 FILE2 EOLDIFFOK) [Function] Returns T if FILE1 and FILE2 are byte-identical. If EOLDIFFOK and FILE1 and FILE2 differ only in their eol conventions, the value is a list of the form (EOL1 EOL2), e.g. (CR CRLF). Otherwise the value is NIL. (LIST ((PAGE NIL (PAPERSIZE Letter FOLIOINFO (ARABIC) STARTINGPAGE# 1) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD CENTERED) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY MODERN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO (ARABIC)) (174 36 288 36) NIL) (HEADING NIL (HEADINGTYPE RUNNINGHEAD) (84 744 528 36) NIL) (TEXT NIL NIL (84 96 456 600) NIL))) (PAGE NIL (PAPERSIZE Letter FOLIOINFO (ARABIC)) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD CENTERED) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY MODERN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO (ARABIC)) (174 36 288 36) NIL) (HEADING NIL (HEADINGTYPE RUNNINGHEAD) (84 744 528 36) NIL) (TEXT NIL NIL (84 96 456 600) NIL))) (PAGE NIL (PAPERSIZE Letter FOLIOINFO (ARABIC)) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD CENTERED) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY MODERN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO (ARABIC)) (174 36 288 36) NIL) (HEADING NIL (HEADINGTYPE RUNNINGHEAD) (84 744 528 36) NIL) (TEXT NIL NIL (84 96 456 600) NIL))))) 1$4@$È4È$È4È$È40È$È1$4 È$È1È$1ŠŠ8$1ŠŠ8$JÈ$È PAGEHEADING RUNNINGHEAD +MODERN +rd(DEFAULTFONT 1 (TERMINAL 12) (TERMINAL 8) (TERMINAL 8) (PDF (TERMINAL 8)) (POSTSCRIPT (TERMINAL 8))) TERMINAL +GACHA +MODERN +TERMINALMODERN +MODERN MODERNLOGO  +   HRULE.GETFN  HRULE.GETFN  HRULE.GETFN + + HRULE.GETFN  HRULE.GETFN#!(ž[fJLL44C›Š€£6)˜*©Ú‹”K¦ÙN7ÉX1_A P]Ž» #Z/“']<I=û< ä/Ì8:û@O@[?HÑ:BRJ5ÐN7Ù".9&Ñ+ÕDATE:g9^^1.zº \ No newline at end of file diff --git a/lispusers/EXAMINEDEFS.TEDIT b/lispusers/EXAMINEDEFS.TEDIT index 50aa5cefc063f249b5004bbce6b8a491f196b455..7b7b27423c96b99ce55bc65812202d70259e4206 100644 GIT binary patch delta 1009 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 Rn*_)P5714k^x5YR{RiqokcI#N diff --git a/lispusers/GITFNS.TEDIT b/lispusers/GITFNS.TEDIT index 42526590..be64fa84 100644 --- a/lispusers/GITFNS.TEDIT +++ b/lispusers/GITFNS.TEDIT @@ -1,9 +1,19 @@ -Medley GITFNS 2 - 4 - 1 - GITFNS 1 - 4 - By Ron Kaplan This document was last edited in February 2023. GITFNS provides a Medley-oriented interface for comparing the files in two different branches of a git repository. This makes it easier to understand what functions or other definitions have changed in a Lisp source file, or what text has changed in a Tedit file. This may be particularly helpful in evaluating the changes in a pull request. +Medley GITFNS +2 + +4 + +1 + +GITFNS +1 + +4 + +By Ron Kaplan +This document was last edited in February 2023. + +GITFNS provides a Medley-oriented interface for comparing the files in two different branches of a git repository. This makes it easier to understand what functions or other definitions have changed in a Lisp source file, or what text has changed in a Tedit file. This may be particularly helpful in evaluating the changes in a pull request. Separately, GITFNS also provides tools and conventions for bridging between git's file-oriented style of development and version control and Medley's residential development style with its own version control conventions. GITFNS allows for intelligent comparisons between Lisp source files, Tedit files, and text files in a local git clone and a local Medley-style working directory, and for migrating files to and from the git clone and the working directory. Git projects: Connecting git clones to GITFNS capabilities @@ -41,29 +51,37 @@ GIT-MAKE-PROJECT will also create a pseudohost {Wprojectname} for the user's wor GIT-INIT creates the default set of projects when GITFNS is loaded, as specified in the variable GIT-DEFAULT-PROJECTS, initially containing MEDLEY NOTECARDS LOOPS TEST. GIT-INIT is added to AROUNDEXITFNS so that new pseudohost bindings for the default projects will be created if the sysout or makesys is started on a new machine. GIT-DEFAULT-PROJECTS [Variable] -Determines the projects that are created (or recreated) by GIT-INIT. This is initialized for the MEDLEY NOTECARDS LOOPS TEST projects, with CLONEPATH=NIL GITFNS also defines two directory-connecting commands for conveniently connecting to the git and working pseudohosts of a project: +Determines the projects that are created (or recreated) by GIT-INIT. This is initialized for the MEDLEY NOTECARDS LOOPS TEST projects, with CLONEPATH=NIL +GITFNS also defines two directory-connecting commands for conveniently connecting to the git and working pseudohosts of a project: cdg (projectname) (subdir) [Command] cdw (projectname) (subdir) [Command] For example, cdg notecards library connects to {NOTECARDS}/library/. Comparing directories and files in different git branches In its simplest application, GITFNS is just an off-to-the-side add-on to whatever work practices the user has developed with respect to a locally installed git project. Its only advantage is to allow for more interpretable git-branch comparisons, especially for pull-request approval. These comparisons are provided by the prc ("pull request compare") Medley executive command: -prc (branch) (DRAFT) (projectname) [Command] This compares the files in branch against the files in the main branch of the project (origin/master or origin/main). Thus, suppose that a pull request has been issued on github for a particular branch, say branch rmk15 of the default project. Then prc rmk15 +prc (branch) (DRAFT) (projectname) [Command] +This compares the files in branch against the files in the main branch of the project (origin/master or origin/main). Thus, suppose that a pull request has been issued on github for a particular branch, say branch rmk15 of the default project. Then + prc rmk15 brings up a lispusers/COMPAREDIRECTORIES browser for the files that currently differ between origin/rmk15 and origin/master. If the selected files are Lisp source files, the Compare item on the file browser menu will show the differences in a lispusers/COMPARESOURCES browser. The differences for other file types will be shown in a lispusers/COMPARETEXT browser. If branch is not specified and the shell command gh is available, then a menu of open pull-request branches will be provided. If gh is not available, the menu will offer all known branches. If the optional DRAFT is provided, then the menu will include draft PR's as well as open ones. If one PR, say rmk15, contains all the commits of another (rmk14), then the menu will indicate this by rmk15 > rmk14 -Note that the prc comparison is read-only: any comments, approvals, or merges of the branch must be specified using the normal Medley-external git interfaces and commands. prc is the special case of the more general bbc command ("branch-branch compare") for comparing the files in any two branches: -bbc branch1 branch2 (project) [Command] This compares the files in branch1 and branch2, for example +Note that the prc comparison is read-only: any comments, approvals, or merges of the branch must be specified using the normal Medley-external git interfaces and commands. +prc is the special case of the more general bbc command ("branch-branch compare") for comparing the files in any two branches: +bbc branch1 branch2 (project) [Command] +This compares the files in branch1 and branch2, for example bbc rmk15 lmm12 (local) This will compare the files in origin/rmk15 and origin/lmm12 in the GIT-DEFAULT project. branch1 defaults to the origin files of the currently checked out branch, the second defaults to origin/master. If local is non-NIL, then a branch that has neither local/ or origin/ prepended will default to local (e.g. local/rmk15) instead of origin/. Local refers to the files that are currently in the clone directory, which may not be the same as the origin files, depending on the push/pull status. Either of the branches can be specified with an atom LOCAL, REMOTE, or ORIGIN, in which case bbc will offer menus listing the currently existing branches of that type. -NOTE: Branch comparison makes use of a git command that has a limit (diff.renameLimit) on the number of files that it can successfully compare. A message will be printed if that limit is exceeded, asking whether a larger value for that limit should be applied globally. The command cob ("check out branch") checks out a specified branch: +NOTE: Branch comparison makes use of a git command that has a limit (diff.renameLimit) on the number of files that it can successfully compare. A message will be printed if that limit is exceeded, asking whether a larger value for that limit should be applied globally. +The command cob ("check out branch") checks out a specified branch: cob branch (next-title-string) (project) [Command] This checks out branch of project and then executes git pull. The branch parameter may also be a local branch, T (= the current working branch), or NEW/NEXT (= the next working branch). The current working branch is the branch named nnn, e.g. rmk15. The initials are the value of INITIALS as used for SEDIT time stamps, and nnn is the largest of the integers of all of the branches beginning with those initials. If branch is NEW or NEXT, then a new initialed branch is created and becomes the user's current branch. Its number is one greater than the largest number of previous initialed branches. If next-title-string is provided, then that string will be appended to the name of the branch, after the initials and next number, and two hyphens. Spaces in next-title-string will also be replaced by hyphens, according to git conventions. -If branch is not provided, a menu of locally available branches pops up. The currently checked out branch is obtained by the b? command: -b? (project) [Command] +If branch is not provided, a menu of locally available branches pops up. +The currently checked out branch is obtained by the b? command: +b? (project) [Command] + Correlating git source control with separate Medley development It is generally unsafe to do Medley development by operating with files in a local clone repository. Medley provides a residential development environment that integrates tightly with the local file system. It is important to have consistent access to the source files of the currently running system, especially for files whose contents have been only partially loaded. A git pull or a branch switch that introduces new versions of some files or removes old files altogether can lead to unpredictable disconnects that are hard to recover from. This is true also because development can go on in the same Medley memory image for days if not weeks, so it is important to have explicit control of any file version changes. GITFNS mitigates the danger by conventions that separate the files in the git clone from the files in the working Medley development directory. The location of the Medley development source tree for a project is given by the WORKINGPATH argument to GIT-MAKE-PROJECT. If WORKINGPATH is T or NIL and there exists a directory >working-projectname> as a sister to the clone, then that is taken to be the WORKINGPATH and thus the prefix for a pseudohost {Wprojectname}. @@ -76,13 +94,12 @@ In addition to the commands for comparing and viewing files, the menu for this b If the master/main branch is the current branch then the menu has no commands to change the clone directory. The browser will show those files that have been updated from a recent merge, and they can individually be copied from the git branch to realign the two source trees with incremented Medley version numbers. If the comparison is with a different branch, say the user's current staging branch, copying files from the working Medley to the git clone or deleting git files will set git up for future commits. Note that the menu item for deleting Medley files will cause all versions to be removed, not just the latest one, to avoid the possibility that an earlier one is revealed. Deletion for Medley files is also accomplished by renaming to a {Wprojectname} subdirectory so that they can be recovered if a deletion is in error. Files in the git-clone are removed from the file system immediately, since git provides its own recovery mechanism for those files. GITFNS does not (yet?) include functions for commits, pushes, or merge for updating the remote repository. Those have to be done outside of Medley through the usual github interfaces, as guided by the information provided by the comparisons. -(LIST ((PAGE NIL (PAPERSIZE Letter FOLIOINFO (ARABIC) STARTINGPAGE# 1) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD CENTERED) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY MODERN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO (ARABIC)) (174 36 288 36) NIL) (HEADING NIL (HEADINGTYPE RUNNINGHEAD) (84 744 528 36) NIL) (TEXT NIL NIL (84 96 456 600) NIL))) (PAGE NIL (PAPERSIZE Letter FOLIOINFO (ARABIC)) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD CENTERED) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY MODERN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO (ARABIC)) (174 36 288 36) NIL) (HEADING NIL (HEADINGTYPE RUNNINGHEAD) (84 744 528 36) NIL) (TEXT NIL NIL (84 96 456 600) NIL))) (PAGE NIL (PAPERSIZE Letter FOLIOINFO (ARABIC)) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD CENTERED) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY MODERN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO (ARABIC)) (174 36 288 36) NIL) (HEADING NIL (HEADINGTYPE RUNNINGHEAD) (84 744 528 36) NIL) (TEXT NIL NIL (84 96 456 600) NIL)))))1$4È$È4È $È1È$4 È$È4 È$È4È$È4È$È4È$È4È$È1È$1ŠŠ8$1ŠŠ8$JÈ$È PAGEHEADING RUNNINGHEAD1È$ TERMINAL_Q(DEFAULTFONT 1 (TERMINAL 12) (TERMINAL 8) (TERMINAL 8) (POSTSCRIPT (TERMINAL 8))) MODERN +(LIST ((PAGE NIL (PAPERSIZE Letter FOLIOINFO (ARABIC) STARTINGPAGE# 1) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD CENTERED) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY MODERN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO (ARABIC)) (174 36 288 36) NIL) (HEADING NIL (HEADINGTYPE RUNNINGHEAD) (84 744 528 36) NIL) (TEXT NIL NIL (84 96 456 600) NIL))) (PAGE NIL (PAPERSIZE Letter FOLIOINFO (ARABIC)) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD CENTERED) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY MODERN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO (ARABIC)) (174 36 288 36) NIL) (HEADING NIL (HEADINGTYPE RUNNINGHEAD) (84 744 528 36) NIL) (TEXT NIL NIL (84 96 456 600) NIL))) (PAGE NIL (PAPERSIZE Letter FOLIOINFO (ARABIC)) (0 0 612 792) ((FOLIO NIL (PARALOOKS (QUAD CENTERED) CHARLOOKS (SUPERSCRIPT 0 INVISIBLE OFF SELECTPOINT OFF PROTECTED OFF SIZE 10 FAMILY MODERN OVERLINE OFF STRIKEOUT OFF UNDERLINE OFF EXPANSION REGULAR SLOPE REGULAR WEIGHT MEDIUM INVERTED OFF USERINFO NIL STYLE NIL) FORMATINFO (ARABIC)) (174 36 288 36) NIL) (HEADING NIL (HEADINGTYPE RUNNINGHEAD) (84 744 528 36) NIL) (TEXT NIL NIL (84 96 456 600) NIL)))))1$4È$È4È $È1È$4 È$È4 È$È4È$È4È$È4È$È4È$È1È$1ŠŠ8$1ŠŠ8$JÈ$È PAGEHEADING RUNNINGHEAD +TIMESROMAN$rd(DEFAULTFONT 1 (TERMINAL 12) (TERMINAL 8) (TERMINAL 8) (PDF (TERMINAL 8)) (POSTSCRIPT (TERMINAL 8))) MODERN TERMINAL -MODERNMODERN -MODERN  -TIMESROMAN$MODERN - HRULE.GETFN  HRULE.GETFN  HRULE.GETFN   HRULE.GETFN  HRULE.GETFN 1R Íé;¹@ -, "  &  \  +TERMINALMODERNMODERN +MODERN  HRULE.GETFN  HRULE.GETFN  HRULE.GETFN   HRULE.GETFN  HRULE.GETFN 1R Íé;¹ +@ , "  &  \  X - p 6 , ) ) +      5     @ &  I 7  o E .8 > I Y  €$; }() 9!04  c  5  vB 1OLJ''œ)2+     Z !  œ5H 55>$N ! M §‹A@4 -@Ôâ   k 6.  R   < 9  'Y"(? “F ìËò1Rþzº \ No newline at end of file + p 6 , ) ) +      5     @ &  I 7  o E .8 > I Y  €$; }() 9!04  c  5  vB 1OLJ''œ)2+     Z !  œ5H 55>$N ! M §‹A@4 +@Ôâ   k 6.  R   < 9  'Y"(? “F ìËòDATE:gK(1Rþzº \ No newline at end of file diff --git a/lispusers/tmax/TMAX.TEDIT b/lispusers/tmax/TMAX.TEDIT index a6a43f53b9a2a62824e4f8e02758a53645a6f405..c7b39a6ceccc8864efaafd3d077d4ddebac222d7 100644 GIT binary patch delta 11730 zcmeHMdvF!i8Q-&e1Coarh#?ScFOWeZ5=qDlK@mbAQ4=u@HI6k3B`Q85A}UJtqNP6Y zmGsmyI%uhFWqeet>r_jb@i85>osPDsqtj}p*0EK~_!=Fj(<=Rb-`VeE_wL@CTgE@V zGr8>jeed7*opW}V`*);%^B-?+*TA|92dtf9E9vAC?hxQu_%zx1oDY)<#e zjTc|GAw6e!_zwM6)%AKfeVv}A?$qA&@0F*!J5Nr}X*+MthD`$-(=+Sq^tH=sO6wUW zQEj@{FY~&Ts@G?wYE`d)bE!iv4fr;m& z-1=I5syn;H_?jCb_g}AV^xQ_1oe=~L>YUe6q!t7{dA4D%>ouBOBh>j%H2u;e zNkVdWFZ>ub@#OsH7e89$HgU{}P0Ct$)?aQshewC(+x(rEPVwA8816BI`uHoJ^DYk}hdI_;hnMT2&7Y?(m!K`74zS-z zSFHfC&0Mgt4GJFKaugRlvSlv_Zh^*BV{bIDt~v)V9oV>O{ouL!t)8?#P+Q~AzIG0% zZe@q9p{1d3*tUorzO(K9R1$-f&*^%@_IvY@_(&f9{(j3tIr-B&FD=(c-L^ZC!mYy{ z{+iogQ;8hx-V;7>mD+*T9C@EPnVZ~p9E*K19R^5uOOdL-c}RpA{DEo`I!nGp7kU!4aZ@g?J5{rHzf?n0B0;Uh@s$vu6_TbPtk=iWw_B%Dxi2#wCrx7QC` zfn@ZqnhJgBQ@cqqA)gPPnvwGA=X2Py`uU+b_D}xZ!$n@bITg$5BgbOPAHEo0Imu~s znw?(tg2Nv#<NI z7LwFBi*rim=al5~*5Txm)KHC~dLtP)IV4n24#{?ByJ~gDkwVJzoSKj~BOw7vh*yy` zod_uGO{o_YF#43NTDr2mqkZY}&hC{?Nzdx;Zo0s4vOe69ZWJBI^eRfa$XF-=%h3+| z2_;#4rjv3eI2F#gu2Yt`_jEhOMvIb(VO|2}hOts(8^ZLOSEs2O{lP1B`u10*%s$jA z;G)R+di3l_P={)wBN6RgcvwP`uSd^}?O3DN5gk3(nMebO70X|IQG{QPk+_a>N;-O0 zpWI%zvb}djx3a524}Um$wy47CSEiZ~uVv(wuTw~f0szPzrrQ}Uo+bz;VwgX_EW-t1 z%SrTuT}=Q=(aW;|3hH(2xFn_K>;3Of&6JS*U8o}S|B`KK_v)@??LCG+2%f_iq=&;F zF1SegQfCN4Ta1CJWTS()tTzoN?UM0`c@g$tG=)u}SyE3$lUw z4+`K6{db&a4$hRUei61r)9di zF^xd*Gn!^5SZE0Y#rm8bJhC~yumN(6eYgO^0rAx@NIXuiFyJ4bDty72U3r@Yfiu)q zSVKwiP*+aR1i2=+53^=rg=EBPp1zO*+u^8rs686QJP<#<7^jd3AomZAf0G+oP% zUM!ujKiI5s-CN#e1bj0+^zh6`5Y%4t`OGy{`*Tb`WrcHZUH zGU`0bH#&crgb$k2;JAMj2uag{ZW0m_V?e3CM31!f}laClR;S?J`<@UjQmehS5-iUUj)+bo8E|{6?tNoYNoY^r@yrBO)r)E@aTqKf zHG9{CpWrDne{gq8o^eCdEz<-*|{wKDeuxQHNqQ3Us^oDP4H zO`ImuxGzuFa;F4hEN{pMz+(CfbrL5-hd`neGdfH(7C{B65|8Fq%r=`AI3tRm-vb?B zS+`BmtZ?rIWQ#=L22lcPn;`HJH8Mc-_9juIGp`SX>bR=_YT9DObLvFwUG?#gb{qR2f?JgiosN8!N~n!wcYGZpjl)2O2PU zyCe~vNnTUIl#9?D-4Ngpg=Rq^Ryx`ka3&J%0=Gh~R*gG2`IkRZ8i)VjPHXia4N7e(K# z+IL{^5?lCAWD4?)fA+$6u7^J^gNpsX7XD39OWJG-T=-eplAB27`3kqA0GhFSH%Jl~ zpiTlqtBuE1PLIieB1*BVE@@9zw}v&Kp0R#~ix}|Lox|!`3D0F==+}N%a7$i?Aovo2q?$~wYa8#{u$NVvauy2LnYB6Xadc zTQPm?NI9?MOT-`3NHwW%34(ePBaF3Wv19w-%3Ol1{;=a1El?}ueT;fc+;9W%Ww!`! z0uW0|e2cJ)i}PZOq&j0`L*%Q>Zix+U;J^mT2^`#mZ_GEsAK;rzNjY&>dq13Dl7=%) zG%S6#2BA;MO*N@T%4DJ=2%Hh1XMB|XKO(W<6fe5zMj8b-0Qjw)l$faT5n|@mpwRBA ztitVw?)~tO3;MrrV@($ZiBN{^#qts4q|8ZAHz1W4AR`+*QTblcU^o2aL4oiDIyQiS Nr1jEXukETm{{yLuCD{M~ delta 12970 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