Import of diffutils 2.8.1
authorEirik Nygaard <eirikn@dragonflybsd.org>
Tue, 13 Apr 2004 14:18:56 +0000 (14:18 +0000)
committerEirik Nygaard <eirikn@dragonflybsd.org>
Tue, 13 Apr 2004 14:18:56 +0000 (14:18 +0000)
102 files changed:
contrib/diffutils-2.8.1/.DRAGONFLY-upgrade.swp [new file with mode: 0644]
contrib/diffutils-2.8.1/ABOUT-NLS [new file with mode: 0644]
contrib/diffutils-2.8.1/AUTHORS [new file with mode: 0644]
contrib/diffutils-2.8.1/COPYING [new file with mode: 0644]
contrib/diffutils-2.8.1/ChangeLog [new file with mode: 0644]
contrib/diffutils-2.8.1/DRAGONFLY-upgrade [new file with mode: 0644]
contrib/diffutils-2.8.1/INSTALLME [new file with mode: 0644]
contrib/diffutils-2.8.1/Makefile.am [new file with mode: 0644]
contrib/diffutils-2.8.1/NEWS [new file with mode: 0644]
contrib/diffutils-2.8.1/README [new file with mode: 0644]
contrib/diffutils-2.8.1/THANKS [new file with mode: 0644]
contrib/diffutils-2.8.1/config.h [new file with mode: 0644]
contrib/diffutils-2.8.1/doc/Makefile.am [new file with mode: 0644]
contrib/diffutils-2.8.1/doc/diagmeet.note [new file with mode: 0644]
contrib/diffutils-2.8.1/doc/diff.info [new file with mode: 0644]
contrib/diffutils-2.8.1/doc/diff.texi [new file with mode: 0644]
contrib/diffutils-2.8.1/doc/fdl.texi [new file with mode: 0644]
contrib/diffutils-2.8.1/doc/stamp-vti [new file with mode: 0644]
contrib/diffutils-2.8.1/doc/version.texi [new file with mode: 0644]
contrib/diffutils-2.8.1/exgettext [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/Makefile.am [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/alloca.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/basename.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/c-stack.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/c-stack.h [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/cmpbuf.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/cmpbuf.h [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/dirname.h [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/error.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/error.h [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/exclude.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/exclude.h [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/exitfail.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/exitfail.h [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/fnmatch.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/fnmatch.hin [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/freesoft.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/freesoft.h [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/getopt.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/getopt.h [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/getopt1.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/gettext.h [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/hard-locale.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/hard-locale.h [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/imaxtostr.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/inttostr.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/inttostr.h [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/malloc.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/memchr.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/mkstemp.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/offtostr.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/posix/Makefile.am [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/posix/regex.h [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/posixver.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/posixver.h [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/prepargs.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/prepargs.h [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/quotesys.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/quotesys.h [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/realloc.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/regex.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/regex.hin [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/setmode.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/setmode.h [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/strcasecmp.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/strftime.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/strtoimax.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/strtol.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/strtoul.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/strtoull.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/strtoumax.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/tempname.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/umaxtostr.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/unlocked-io.h [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/waitpid.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/xalloc.h [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/xmalloc.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/xstrtol.c [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/xstrtol.h [new file with mode: 0644]
contrib/diffutils-2.8.1/lib/xstrtoumax.c [new file with mode: 0644]
contrib/diffutils-2.8.1/man/Makefile.am [new file with mode: 0644]
contrib/diffutils-2.8.1/man/cmp.1 [new file with mode: 0644]
contrib/diffutils-2.8.1/man/diff.1 [new file with mode: 0644]
contrib/diffutils-2.8.1/man/diff3.1 [new file with mode: 0644]
contrib/diffutils-2.8.1/man/sdiff.1 [new file with mode: 0644]
contrib/diffutils-2.8.1/src/Makefile.am [new file with mode: 0644]
contrib/diffutils-2.8.1/src/analyze.c [new file with mode: 0644]
contrib/diffutils-2.8.1/src/cmp.c [new file with mode: 0644]
contrib/diffutils-2.8.1/src/context.c [new file with mode: 0644]
contrib/diffutils-2.8.1/src/diff.c [new file with mode: 0644]
contrib/diffutils-2.8.1/src/diff.h [new file with mode: 0644]
contrib/diffutils-2.8.1/src/diff3.c [new file with mode: 0644]
contrib/diffutils-2.8.1/src/dir.c [new file with mode: 0644]
contrib/diffutils-2.8.1/src/ed.c [new file with mode: 0644]
contrib/diffutils-2.8.1/src/ifdef.c [new file with mode: 0644]
contrib/diffutils-2.8.1/src/io.c [new file with mode: 0644]
contrib/diffutils-2.8.1/src/normal.c [new file with mode: 0644]
contrib/diffutils-2.8.1/src/sdiff.c [new file with mode: 0644]
contrib/diffutils-2.8.1/src/side.c [new file with mode: 0644]
contrib/diffutils-2.8.1/src/system.h [new file with mode: 0644]
contrib/diffutils-2.8.1/src/util.c [new file with mode: 0644]
contrib/diffutils-2.8.1/src/version.c [new file with mode: 0644]

diff --git a/contrib/diffutils-2.8.1/.DRAGONFLY-upgrade.swp b/contrib/diffutils-2.8.1/.DRAGONFLY-upgrade.swp
new file mode 100644 (file)
index 0000000..9d5f8c1
Binary files /dev/null and b/contrib/diffutils-2.8.1/.DRAGONFLY-upgrade.swp differ
diff --git a/contrib/diffutils-2.8.1/ABOUT-NLS b/contrib/diffutils-2.8.1/ABOUT-NLS
new file mode 100644 (file)
index 0000000..022965c
--- /dev/null
@@ -0,0 +1,396 @@
+Notes on the Free Translation Project
+*************************************
+
+   Free software is going international!  The Free Translation Project
+is a way to get maintainers of free software, translators, and users all
+together, so that will gradually become able to speak many languages.
+A few packages already provide translations for their messages.
+
+   If you found this `ABOUT-NLS' file inside a distribution, you may
+assume that the distributed package does use GNU `gettext' internally,
+itself available at your nearest GNU archive site.  But you do _not_
+need to install GNU `gettext' prior to configuring, installing or using
+this package with messages translated.
+
+   Installers will find here some useful hints.  These notes also
+explain how users should proceed for getting the programs to use the
+available translations.  They tell how people wanting to contribute and
+work at translations should contact the appropriate team.
+
+   When reporting bugs in the `intl/' directory or bugs which may be
+related to internationalization, you should tell about the version of
+`gettext' which is used.  The information can be found in the
+`intl/VERSION' file, in internationalized packages.
+
+Quick configuration advice
+==========================
+
+   If you want to exploit the full power of internationalization, you
+should configure it using
+
+     ./configure --with-included-gettext
+
+to force usage of internationalizing routines provided within this
+package, despite the existence of internationalizing capabilities in the
+operating system where this package is being installed.  So far, only
+the `gettext' implementation in the GNU C library version 2 provides as
+many features (such as locale alias, message inheritance, automatic
+charset conversion or plural form handling) as the implementation here.
+It is also not possible to offer this additional functionality on top
+of a `catgets' implementation.  Future versions of GNU `gettext' will
+very likely convey even more functionality.  So it might be a good idea
+to change to GNU `gettext' as soon as possible.
+
+   So you need _not_ provide this option if you are using GNU libc 2 or
+you have installed a recent copy of the GNU gettext package with the
+included `libintl'.
+
+INSTALL Matters
+===============
+
+   Some packages are "localizable" when properly installed; the
+programs they contain can be made to speak your own native language.
+Most such packages use GNU `gettext'.  Other packages have their own
+ways to internationalization, predating GNU `gettext'.
+
+   By default, this package will be installed to allow translation of
+messages.  It will automatically detect whether the system already
+provides the GNU `gettext' functions.  If not, the GNU `gettext' own
+library will be used.  This library is wholly contained within this
+package, usually in the `intl/' subdirectory, so prior installation of
+the GNU `gettext' package is _not_ required.  Installers may use
+special options at configuration time for changing the default
+behaviour.  The commands:
+
+     ./configure --with-included-gettext
+     ./configure --disable-nls
+
+will respectively bypass any pre-existing `gettext' to use the
+internationalizing routines provided within this package, or else,
+_totally_ disable translation of messages.
+
+   When you already have GNU `gettext' installed on your system and run
+configure without an option for your new package, `configure' will
+probably detect the previously built and installed `libintl.a' file and
+will decide to use this.  This might be not what is desirable.  You
+should use the more recent version of the GNU `gettext' library.  I.e.
+if the file `intl/VERSION' shows that the library which comes with this
+package is more recent, you should use
+
+     ./configure --with-included-gettext
+
+to prevent auto-detection.
+
+   The configuration process will not test for the `catgets' function
+and therefore it will not be used.  The reason is that even an
+emulation of `gettext' on top of `catgets' could not provide all the
+extensions of the GNU `gettext' library.
+
+   Internationalized packages have usually many `po/LL.po' files, where
+LL gives an ISO 639 two-letter code identifying the language.  Unless
+translations have been forbidden at `configure' time by using the
+`--disable-nls' switch, all available translations are installed
+together with the package.  However, the environment variable `LINGUAS'
+may be set, prior to configuration, to limit the installed set.
+`LINGUAS' should then contain a space separated list of two-letter
+codes, stating which languages are allowed.
+
+Using This Package
+==================
+
+   As a user, if your language has been installed for this package, you
+only have to set the `LANG' environment variable to the appropriate
+`LL_CC' combination.  Here `LL' is an ISO 639 two-letter language code,
+and `CC' is an ISO 3166 two-letter country code.  For example, let's
+suppose that you speak German and live in Germany.  At the shell
+prompt, merely execute `setenv LANG de_DE' (in `csh'),
+`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
+This can be done from your `.login' or `.profile' file, once and for
+all.
+
+   You might think that the country code specification is redundant.
+But in fact, some languages have dialects in different countries.  For
+example, `de_AT' is used for Austria, and `pt_BR' for Brazil.  The
+country code serves to distinguish the dialects.
+
+   The locale naming convention of `LL_CC', with `LL' denoting the
+language and `CC' denoting the country, is the one use on systems based
+on GNU libc.  On other systems, some variations of this scheme are
+used, such as `LL' or `LL_CC.ENCODING'.  You can get the list of
+locales supported by your system for your country by running the command
+`locale -a | grep '^LL''.
+
+   Not all programs have translations for all languages.  By default, an
+English message is shown in place of a nonexistent translation.  If you
+understand other languages, you can set up a priority list of languages.
+This is done through a different environment variable, called
+`LANGUAGE'.  GNU `gettext' gives preference to `LANGUAGE' over `LANG'
+for the purpose of message handling, but you still need to have `LANG'
+set to the primary language; this is required by other parts of the
+system libraries.  For example, some Swedish users who would rather
+read translations in German than English for when Swedish is not
+available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
+
+   In the `LANGUAGE' environment variable, but not in the `LANG'
+environment variable, `LL_CC' combinations can be abbreviated as `LL'
+to denote the language's main dialect.  For example, `de' is equivalent
+to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
+(Portuguese as spoken in Portugal) in this context.
+
+Translating Teams
+=================
+
+   For the Free Translation Project to be a success, we need interested
+people who like their own language and write it well, and who are also
+able to synergize with other translators speaking the same language.
+Each translation team has its own mailing list.  The up-to-date list of
+teams can be found at the Free Translation Project's homepage,
+`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams"
+area.
+
+   If you'd like to volunteer to _work_ at translating messages, you
+should become a member of the translating team for your own language.
+The subscribing address is _not_ the same as the list itself, it has
+`-request' appended.  For example, speakers of Swedish can send a
+message to `sv-request@li.org', having this message body:
+
+     subscribe
+
+   Keep in mind that team members are expected to participate
+_actively_ in translations, or at solving translational difficulties,
+rather than merely lurking around.  If your team does not exist yet and
+you want to start one, or if you are unsure about what to do or how to
+get started, please write to `translation@iro.umontreal.ca' to reach the
+coordinator for all translator teams.
+
+   The English team is special.  It works at improving and uniformizing
+the terminology in use.  Proven linguistic skill are praised more than
+programming skill, here.
+
+Available Packages
+==================
+
+   Languages are not equally supported in all packages.  The following
+matrix shows the current state of internationalization, as of March
+2002.  The matrix shows, in regard of each package, for which languages
+PO files have been submitted to translation coordination, with a
+translation percentage of at least 50%.
+
+     Ready PO files    bg ca cs da de el en eo es et fi fr
+                     +-------------------------------------+
+     a2ps            |          [] []             []    [] |
+     bash            |             []       [] []       [] |
+     bfd             |                         []       [] |
+     binutils        |                         []       [] |
+     bison           |             []             []    [] |
+     clisp           |             []    []    []       [] |
+     cpio            |          [] []          []       [] |
+     diffutils       |       [] [] []       [] []       [] |
+     enscript        |             []                   [] |
+     error           |                         []       [] |
+     fetchmail       |       () [] []          []       () |
+     fileutils       |          [] []          [] []    [] |
+     findutils       |          [] []          [] []    [] |
+     flex            |    []    []             []       [] |
+     gas             |                         []       [] |
+     gawk            |                         []       [] |
+     gcal            |    []                            [] |
+     gcc             |                         []       [] |
+     gettext         |    []    [] []          []       [] |
+     gnupg           |             [] []    [] [] []    [] |
+     gprof           |                         []       [] |
+     grep            | [] []       []          [] []    [] |
+     hello           |          [] [] []    [] [] [] [] [] |
+     id-utils        |          [] []                   [] |
+     indent          |    []       []       []    []    [] |
+     jpilot          |       () [] []                   [] |
+     jwhois          |                         []       [] |
+     kbd             |                         []       [] |
+     ld              |                         []       [] |
+     libc            |    [] [] [] [] []       []       [] |
+     lilypond        |          []                      [] |
+     lynx            |       [] [] []             []       |
+     m4              |       [] [] [] []                [] |
+     make            |          [] []          []       [] |
+     mysecretdiary   |             []                   [] |
+     nano            |    [] () [] []          []       [] |
+     nano_1_0        |    [] () [] []          []       [] |
+     opcodes         |          []             []       [] |
+     parted          |    []    [] []                   [] |
+     ptx             |          [] []          [] []    [] |
+     python          |                                     |
+     recode          |          [] [] []    [] []       [] |
+     sed             |       [] [] [] []    [] [] []    [] |
+     sh-utils        |    [] [] [] [] []       [] []    [] |
+     sharutils       |       [] [] [] []       []       [] |
+     sketch          |             ()          []       () |
+     soundtracker    |             []          []       [] |
+     sp              |                                     |
+     tar             |       [] [] []          [] []    [] |
+     texinfo         |       [] [] []       []          [] |
+     textutils       |    []    [] []          []       [] |
+     util-linux      |       [] []             []       [] |
+     vorbis-tools    |                                     |
+     wdiff           |          [] []          [] []    [] |
+     wget            |    [] [] [] [] []       [] []    [] |
+                     +-------------------------------------+
+                       bg ca cs da de el en eo es et fi fr
+                        1 12 11 31 36  9  1  8 39 15  1 50
+     
+                       gl he hr hu id it ja ko lv nb nl nn
+                     +-------------------------------------+
+     a2ps            |                ()    ()       []    |
+     bash            |                                     |
+     bfd             |                   []                |
+     binutils        |                   []                |
+     bison           |                   []          []    |
+     clisp           |                               []    |
+     cpio            | []                   []       []    |
+     diffutils       | [] []             []                |
+     enscript        |                               []    |
+     error           |          []                         |
+     fetchmail       |                                     |
+     fileutils       |          []    [] []                |
+     findutils       | []          [] [] [] []       []    |
+     flex            |                      []             |
+     gas             |                                     |
+     gawk            |    []                               |
+     gcal            |                                     |
+     gcc             |                                     |
+     gettext         |                      []             |
+     gnupg           | []             [] []                |
+     gprof           |                                     |
+     grep            |                []                   |
+     hello           | [] []    []    [] [] [] [] [] [] [] |
+     id-utils        |                               []    |
+     indent          | []                []          []    |
+     jpilot          |                   ()          ()    |
+     jwhois          |                                     |
+     kbd             |                                     |
+     ld              |                                     |
+     libc            | []                [] []    []       |
+     lilypond        |                   []          []    |
+     lynx            |                   []          []    |
+     m4              | []          []    []          []    |
+     make            | []                [] []       []    |
+     mysecretdiary   |                                     |
+     nano            | []          [] [] ()       [] () [] |
+     nano_1_0        | []          [] [] ()       [] () [] |
+     opcodes         |                               []    |
+     parted          | []                []             [] |
+     ptx             | []          []             [] []    |
+     python          |                                     |
+     recode          | [] []          []                   |
+     sed             | [] []       [] [] [] []       []    |
+     sh-utils        | []             [] []       [] []    |
+     sharutils       | []                []          []    |
+     sketch          |                ()                   |
+     soundtracker    | []                                  |
+     sp              |                                     |
+     tar             |                [] []       []       |
+     texinfo         |    []             []                |
+     textutils       |                      []    []       |
+     util-linux      |                () []                |
+     vorbis-tools    |                                     |
+     wdiff           |                                     |
+     wget            | [] []    []       []          []    |
+                     +-------------------------------------+
+                       gl he hr hu id it ja ko lv nb nl nn
+                       19  7  0  4  6 11 22  9  1  8 19  4
+     
+                       no pl pt pt_BR ru sk sl sv tr uk zh_TW
+                     +----------------------------------------+
+     a2ps            | () () ()       []    [] [] ()          |  8
+     bash            |                                        |  4
+     bfd             |                         [] []          |  5
+     binutils        |                            []          |  4
+     bison           |                []       [] []          |  8
+     clisp           |                                        |  5
+     cpio            |    []     []   []       []             | 11
+     diffutils       |    []          []       [] []     []   | 14
+     enscript        |           []   []       []             |  6
+     error           |                   []       []     []   |  6
+     fetchmail       |    ()     ()               []          |  4
+     fileutils       |                []    [] [] []          | 12
+     findutils       |    []     []   [] [] [] [] []          | 18
+     flex            |                []       [] []          |  8
+     gas             |                            []          |  3
+     gawk            |                         [] []          |  5
+     gcal            |                         [] []          |  4
+     gcc             |                            []          |  3
+     gettext         |                   [] [] [] []          | 10
+     gnupg           |    []                   [] []          | 12
+     gprof           |                         [] []          |  4
+     grep            |                []    []    []          | 10
+     hello           | [] []          [] []    [] [] []       | 25
+     id-utils        |                []       []             |  6
+     indent          |                [] []    [] []          | 12
+     jpilot          | ()                      ()             |  3
+     jwhois          |                ()       () []          |  3
+     kbd             |                         [] []          |  4
+     ld              |                         [] []          |  4
+     libc            | [] []     []      []    [] []          | 17
+     lilypond        |                         []             |  5
+     lynx            |           []   []       []             |  9
+     m4              |    []          []       []             | 12
+     make            |    []     []   []          []          | 12
+     mysecretdiary   |                         [] []          |  4
+     nano            | () []          []       []    []       | 14
+     nano_1_0        | ()             []       []    []       | 13
+     opcodes         |                         [] []          |  6
+     parted          |       []  []            []             | 10
+     ptx             | [] [] []       []       [] []          | 15
+     python          |                                        |  0
+     recode          |    []          []    [] []             | 13
+     sed             |           []   [] [] [] [] []          | 21
+     sh-utils        | [] []     []   [] [] [] [] []     []   | 22
+     sharutils       |                []       []        []   | 12
+     sketch          |           []   ()                      |  3
+     soundtracker    |                         []             |  5
+     sp              |                                        |  0
+     tar             | [] []     []      [] [] [] []          | 16
+     texinfo         |                []       []        []   | 10
+     textutils       |                      [] [] []     []   | 11
+     util-linux      |           []            [] []          |  8
+     vorbis-tools    |                         []             |  1
+     wdiff           |                [] []    [] []          |  9
+     wget            |                [] [] [] [] [] []  []   | 20
+                     +----------------------------------------+
+       35 teams        no pl pt pt_BR ru sk sl sv tr uk zh_TW
+       55 domains       5 13  2  12   25 11 11 41 34  4   7    489
+
+   Some counters in the preceding matrix are higher than the number of
+visible blocks let us expect.  This is because a few extra PO files are
+used for implementing regional variants of languages, or language
+dialects.
+
+   For a PO file in the matrix above to be effective, the package to
+which it applies should also have been internationalized and
+distributed as such by its maintainer.  There might be an observable
+lag between the mere existence a PO file and its wide availability in a
+distribution.
+
+   If March 2002 seems to be old, you may fetch a more recent copy of
+this `ABOUT-NLS' file on most GNU archive sites.  The most up-to-date
+matrix with full percentage details can be found at
+`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.
+
+Using `gettext' in new packages
+===============================
+
+   If you are writing a freely available program and want to
+internationalize it you are welcome to use GNU `gettext' in your
+package.  Of course you have to respect the GNU Library General Public
+License which covers the use of the GNU `gettext' library.  This means
+in particular that even non-free programs can use `libintl' as a shared
+library, whereas only free software can use `libintl' as a static
+library or use modified versions of `libintl'.
+
+   Once the sources are changed appropriately and the setup can handle
+to use of `gettext' the only thing missing are the translations.  The
+Free Translation Project is also available for packages which are not
+developed inside the GNU project.  Therefore the information given above
+applies also for every other Free Software Project.  Contact
+`translation@iro.umontreal.ca' to make the `.pot' files available to
+the translation teams.
+
diff --git a/contrib/diffutils-2.8.1/AUTHORS b/contrib/diffutils-2.8.1/AUTHORS
new file mode 100644 (file)
index 0000000..f5f0e90
--- /dev/null
@@ -0,0 +1,112 @@
+Authors of GNU diffutils.
+
+       Copyright 2001 Free Software Foundation, Inc.
+
+       This file is part of GNU diffutils.
+
+       GNU diffutils is free software; you can redistribute it and/or modify
+       it under the terms of the GNU General Public License as published by
+       the Free Software Foundation; either version 2, or (at your option)
+       any later version.
+
+       GNU diffutils is distributed in the hope that it will be useful,
+       but WITHOUT ANY WARRANTY; without even the implied warranty of
+       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+       GNU General Public License for more details.
+
+       You should have received a copy of the GNU General Public License
+       along with GNU diffutils; see the file COPYING.  If not, write to
+       the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+       Boston, MA 02111-1307, USA.
+
+The following contributions warranted legal paper exchanges with the
+Free Software Foundation.  Also see files ChangeLog and THANKS.
+
+DIFFUTILS      Leonard H. Tower Jr.    US 1949 1987-03-09
+Assigns diff (diff.c, initial version).
+
+DIFFUTILS      Torbjorn Granlund       Sweden 1961     1988-01-11
+Assigns cmp.
+tege@matematik.su.se
+
+DIFFUTILS      Mike Haertel    US 1967 1988-09-16
+Assigns changes to diff.
+
+DIFFUTILS      David S. Hayes  US ?    1988-01-12
+Assigns changes to diff.
+
+DIFFUTILS      Randall Smith   US 1964 1988-09-21
+Assigns diff3.
+
+DIFFUTILS      Richard Stallman        US 1953 1988-01-15
+Assigns changes to GNU Diff.
+
+DIFFUTILS      F. Thomas May   US 1965 1989-08-22
+Assigns changes to diff (for -D).
+
+DIFFUTILS      Optimal Solutions, Inc. 1989-08-14
+Disclaims changes by Thomas May to diff.
+
+DIFFUTILS      Wayne Davison   1990-09-10
+Disclaims changes to diff.
+
+DIFFUTILS      Digital Research Inc.   1990-09-13
+Disclaims changes by Wayne Davison to diff.
+
+DIFFUTILS      Paul Eggert     1990-03-16
+Disclaims changes to diff.
+eggert@twinsun.com
+
+DIFFUTILS      Paul Eggert     1990-08-14
+Disclaims changes to GNU Diff.
+eggert@twinsun.com
+
+DIFFUTILS      Twin Sun Inc.   1990-03-16
+Disclaims changes to GNU Diff by Paul Eggert.
+
+DIFFUTILS      Twin Sun Inc.   1990-08-14
+Disclaims changes to GNU Diff by Paul Eggert.
+
+DIFFUTILS      Chip Rosenthal  US 1959 1990-03-06
+Assigns changes to diff.
+chip@chinacat.Unicom.COM
+
+DIFFUTILS      Unicom Systems Development      1990-03-06
+Disclaims changes by Chip Rosenthal to diff.
+
+GCC DIFFUTILS  Paul Eggert and Twin Sun Inc.   1992-03-11
+Disclaims changes by Paul Eggert to gcc and diff.
+eggert@twinsun.com
+
+DIFF   Wayne Davison   1993-06-20
+Disclaims diffcvt.c.
+
+DIFFUTILS      Francois Pinard Canada 1949     1993-01-15
+Assigns wdiff and future changes submitted to the FSF.
+pinard@iro.umontreal.ca
+
+DIFFUTILS      Patrick D'Cruze Australia 1971  1994-11-10
+Assigns changes (makefile.in, analyze.c, cmp.c, error.c, diff.c,
+diff3.c, getopt.c, getopt1.c, regex.c, sdiff.c, util.c, xmalloc.c;
+new file: language.++)
+
+DIFFUTILS      Paul R. Eggert  US 1954 1997-04-07
+Assigns past and future changes.
+eggert@twinsun.com
+
+DIFFUTILS      Paul R. Eggert  US 1954 1997-04-07
+Assigns past and future changes to manual.
+eggert@twinsun.com
+
+ANY DIFFUTILS GNATS    Cyclic Software 1997-11-11
+Assigns past and future works (work for hire by Tim Pierce (diffutils) and
+Abe Feldman (GNATS)).
+kingdon@cyclic.com
+
+WEBPAGES        Gregory B. Harvey       Canada 1976     1998-02-14
+Assigns web pages describing GNU Diffutils and future changes.
+
+DIFFUTILS      Olga Nikulin    Russia 1965     2001-01-11
+Assigns changes to diff. (diffutils-2.7.2/analyze.c, context.c, diff.[ch],
+ed.c, ifdef.c, io.c, normal.c, side.c, util.c)
+onikulin@yahoo.com
diff --git a/contrib/diffutils-2.8.1/COPYING b/contrib/diffutils-2.8.1/COPYING
new file mode 100644 (file)
index 0000000..d60c31a
--- /dev/null
@@ -0,0 +1,340 @@
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+\f
+                   GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+\f
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+\f
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+\f
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                           NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+\f
+           How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year  name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/contrib/diffutils-2.8.1/ChangeLog b/contrib/diffutils-2.8.1/ChangeLog
new file mode 100644 (file)
index 0000000..1e8723d
--- /dev/null
@@ -0,0 +1,3409 @@
+2002-04-05  Paul Eggert  <eggert@sic.twinsun.com>
+
+       * NEWS, configure.ac (AC_INIT): Version 2.8.1.
+
+       * configure.ac (AC_HEADER_STDBOOL): Add.
+       (AC_CHECK_HEADERS): Remove stdbool.h.
+       * m4/stdbool.m4: New file.
+       * m4/prereq.m4 (jm_PREREQ_EXCLUDE):
+       Use AC_HEADER_STDBOOL rather than AC_CHECK_HEADERS(stdbool.h).
+       (jm_PREREQ_HASH): Likewise.
+
+       * src/system.h (SSIZE_MAX): Define if limits.h doesn't.
+
+       * src/analyze.c (diff_2_files): Assign PTRDIFF_MAX - 1 to a
+       size_t variable, just in case there's a problem with ptrdiff_t
+       versus size_t.
+
+       * lib/cmpbuf.c (errno): Remove decl; K&R C is no longer supported.
+       Include limits.h.
+       (SIZE_MAX, SSIZE_MAX): Define if standard headers don't.
+       (MIN): New macro.
+       (block_read): Do not attempt to read more than SSIZE_MAX bytes, as the
+       resulting behavior is implementation-defined.  Work around bug in
+       Tru64 5.1, which can't read more than INT_MAX bytes at a time.
+       * src/cmp.c (cmp): Use block_read instead of read, to work
+       around Tru64 5.1 bug.
+       * src/diff3.c (read_diff): Likewise.
+       * src/diff3.c: Include cmpbuf.h.
+
+       * THANKS: Add Ulrich Drepper.
+
+       * INSTALLME: Mention GNU texinfo.
+
+       * doc/diff.texi:
+       Use new @copying directive.
+       Put @contents first, not last, since Texinfo now suggests this.
+       Fix bug in -w documentation noted by Karl Berry.
+       Mention links for speedup.
+       New node "Speedups" for future speedups.
+       Just say "Index", not "Concept Index".
+
+2002-03-26  Paul Eggert  <eggert@twinsun.com>
+
+       * src/Makefile.am:
+       (INCLUDES): Remove this obsolete macro, replacing it with:
+       (AM_CPPFLAGS): New macro.
+
+2002-03-26  Albert Chin-A-Young  <china@thewrittenword.com>
+
+       * src/Makefile.am (datadir): Remove, as it conflicts with --datadir.
+
+2002-03-26  Paul Eggert  <eggert@twinsun.com>
+
+       * doc/diff.texi (dircategory GNU packages): Fix typo: a "* " was
+       missing before the menu entry.  Bug diagnosed by Adam Heath.
+       Also, put this dircategory after the Individual utilities dircategory,
+       to work around a compatibility problem with Debian install-info.
+       
+2002-03-24  Eli Zaretskii  <eliz@is.elta.co.il>
+
+       * src/io.c (sip): Do not mishandle buffered count when reverting
+       to text mode.
+
+2002-03-23  Paul Eggert  <eggert@twinsun.com>
+
+       * NEWS, configure.ac (AC_INIT): Version 2.8.
+       * configure.ac (AC_PREREQ): 2.53.
+       * INSTALLME: Upgrade to gettext 0.11.1 and help2man 1.27.
+
+       * doc/diff.texi: Upgrade the description of `patch' to GNU patch
+       2.5.4, and revamp the documentation accordingly.
+
+       * src/diff.c (main): Fix typo that prevented diff -y from working.
+       Bug reported by Mitsuru Chinen.
+
+2002-03-15  Paul Eggert  <eggert@twinsun.com>
+
+       * lib/c-stack.c (c_stack_die) [!HAVE_SIGINFO_T]: Don't use info.
+       Bug reported by Eli Zaretskii.
+
+2002-03-15  Eli Zaretskii  <eliz@is.elta.co.il>
+
+       * ms/config.sed: Tweak editing of install-info-am target.
+
+2002-03-12  Paul Eggert  <eggert@twinsun.com>
+
+       * NEWS, configure.ac (AC_INIT): Version 2.7.10.
+
+       * NEWS: cmp -l -s and cmp -s -l are not allowed.
+       Deprecate diff -h, -H, -L, -P, --inhibit-hunk-merge.
+
+       * configure.ac (jm_PREREQ_HARD_LOCALE): Add.
+       (AM_INIT_AUTOMAKE): Do not distribute shar file.
+
+       * doc/diff.texi (Overview): byte != character.
+       (Detailed Context, Detailed Unified, Alternate Names, diff Options):
+       Do not document diff -L.
+       (Comparing Directories, Making Patches, diff Options):
+       Do not document diff -P.
+       (diff Performance, sdiff Option Summary, diff Options, sdiff Options):
+       Do not document diff -H.
+       (diff Performance, diff Options): Do not document --horizon-lines.
+       (cmp Options): Prefer -b to -c.
+       (cmp Options, diff Options, diff3 Options, patch Options,
+       sdiff Options): Put short options next to the similar long options.
+       Document --help, and use the same wording for --verbose.
+       (diff3 Options): Fix typo in description of -E, which used wrongly used
+       "-e" instead of "-E".
+
+       * lib/hard-locale.c (alloca): Remove.
+       Include stdlib.h if available, for malloc.
+       (hard_locale): Use malloc, not alloca, so that we need not worry about
+       alloca issues.  Test for storage allocation failure.
+
+       * m4/prereq.m4 (jm_PREREQ): Add jm_PREREQ_HARD_LOCALE.
+       (jm_PREREQ_HARD_LOCALE): New macro.
+
+       * src/cmp.c (specify_comparison_type): New function.
+       (check_stdout): "indices and codes" -> "byte numbers and values"
+       (main): Detect clashing options.
+       (cmp): Use "byte" rather than "char" if a translation for "byte"
+       is available, even when in the POSIX locale.
+
+       * src/diff.c (option_help_msgid): Do not document -L, -P,
+       --horizon-lines, --inhibit-hunk-merge, -H.
+       * src/diff.h: -L -> --label
+
+2002-03-11  Paul Eggert  <eggert@twinsun.com>
+
+       * NEWS, configure.ac (AC_INIT): Version 2.7.9.
+
+       * INSTALLME: Update to autoconf 2.53, automake 1.6, help2man
+       1.25 with patch.
+
+       * configure.ac (AC_INIT):
+       Change package name from diff to diffutils.
+       (AM_INIT_AUTOMAKE): Use new form, with option gnits,
+       rather than old from that duplicated AC_INIT.
+       (AM_MISSING_PROG): Add help2man.
+       (REGEX_MALLOC): Define.
+       (AC_CONFIG_FILES): Add man/Makefile.
+
+       * Makefile.am (AUTOMAKE_OPTIONS): Remove.
+       * doc/Makefile.am (AUTOMAKE_OPTIONS): Remove.
+       * lib/Makefile.am (AUTOMAKE_OPTIONS): Likewise.
+       * ms/Makefile.am (AUTOMAKE_OPTIONS): Likewise.
+       * src/Makefile.am (AUTOMAKE_OPTIONS): Likewise.
+
+       * lib/c-stack.c: Include <errno.h>
+       (ENOTSUP): Define if errno.h doesn't.
+       (SA_NODEFER, SA_ONSTACK, SA_RESETHAND, SA_SIGINFO, SIGSTKSZ,
+       _SC_PAGESIZE, ALTERNATE_STACK_SIZE, stack_t, sigaltstack):
+       Remove; we now assume them all when
+       HAVE_XSI_STACK_OVERFLOW_HEURISTIC, so we don't need
+       substitutes.
+       (<ucontext.h>): Include only if HAVE_XSI_STACK_OVERFLOW_HEURISTIC.
+       (alternate_signal_stack): Now of size SIGSTKSZ.
+       (segv_handler): Simplify, under the assumption that
+       HAVE_XSI_STACK_OVERFLOW_HEURISTIC is nonzero.
+       (c_stack_action): Likewise.
+       (exit_failure) [DEBUG]: Initialize to 0, not 1.
+       (recurse, main) [DEBUG]: Remove main args.
+
+       * m4/c-stack.m4 (AC_SYS_XSI_STACK_OVERFLOW_HEURISTIC): Change
+       wording of message.  Do not check for stdbool.h or ucontext.h,
+       or for ucontext_t or sigaction or sigaltstack.
+
+       * po/LINGUAS: Add zh_TW.
+       
+       * Makefile.am (SUBDIRS): Add man.
+       * man/Makefile.am: New file.
+       * src/cmp.c (usage): Reword for help2man.
+       * src/diff.c (option_help_msgid): Likewise.
+       * src/diff3.c (option_help_msgid, usage): Likewise.
+       * src/sdiff3.c (option_help_msgid, usage): Likewise.
+       Reword for help2man.
+
+       * THANKS: Add email address for Tower.
+
+       * config/config.guess, config/config.sub, config/depcomp,
+       config/install-sh, config/mdate-sh, config/missing,
+       config/mkinstalldirs, config/texinfo.texi: Update
+       to recent version (maintained in other packages).
+
+2002-03-04  Bruno Haible <haible@ilog.fr>
+
+       * m4/gettext.m4 (AM_GNU_GETTEXT): Set LIBINTL and LTLIBINTL to empty if
+       no preinstalled GNU gettext was found.
+
+2002-03-02  Eli Zaretskii  <eliz@is.elta.co.il>
+
+       * ms/config.sed: Tweak editing of install-info-am and
+       uninstall-info-am targets, to include 8+3-butchered names of Info
+       files.
+
+2002-02-28  Paul Eggert  <eggert@twinsun.com>
+
+       * NEWS, configure.ac (AC_INIT, AM_INIT_AUTOMAKE): Version 2.7.8.
+
+       * doc/diff.texi: Add vr index.
+       Update copyright to 2002.
+       (Standards conformance): New chapter.
+       (Binary): Differing binary files are trouble unless the user asked for
+       brief output.
+       (Detailed Context): Prefer ISO time stamp format in discussion.
+       (Detailed Unified, Pagination): Likewise.
+       (Less Context): Likewise.  Also use short option.
+       (Alternate Names): Separate option from arg.
+       (Making Patches): Mention -U 2.
+       (diff Options): Deprecate -LINES, as POSIX 1003.1-2001 does not
+       allow it.
+
+       * INSTALLME: Update advice for Solaris installation problems.
+       We no longer use a test version of gettext.
+       Autoconf test version updated from 2.52f to 2.52h.
+       POSIX 1003.1-2001 patch for Automake.
+       
+       * configure.ac (AC__GNU_SOURCE): Add this,
+       replacing AH_VERBATIM of _GNU_SOURCE.
+       (tempname): Use AC_LIBOBJS, not LIBOBJS=, as now required by autoconf.
+       (jm_PREREQ_C_STACK): Add.
+       (AC_CONFIG_FILES): Remove intl/Makefile.
+       (AM_GNU_GETTEXT): Add external arg, from gettext 0.11.
+
+       * lib/c-stack.c, lib/c-stack.h, lib/exitfail.c, lib/exitfail.h,
+       lib/posixver.c, lib/posixver.h, m4/c-stack.m4, m4/gnu-source.m4,
+       po/cs.po, po/ja.po: New files.
+
+       * intl/ChangeLog, intl/Makefile.in, intl/VERSION,
+       intl/bindtextdom.c, intl/config.charset, intl/dcgettext.c,
+       intl/dcigettext.c, intl/dcngettext.c, intl/dgettext.c,
+       intl/dngettext.c, intl/explodename.c, intl/finddomain.c,
+       intl/gettext.c, intl/gettextP.h, intl/gmo.h, intl/hash-string.h,
+       intl/intl-compat.c, intl/l10nflist.c, intl/libgnuintl.h,
+       intl/loadinfo.h, intl/loadmsgcat.c, intl/localcharset.c,
+       intl/locale.alias, intl/localealias.c, intl/localename.c,
+       intl/ngettext.c, intl/os2compat.c, intl/os2compat.h, intl/osdep.c,
+       intl/plural-eval.c, intl/plural-exp.c, intl/plural-exp.h,
+       intl/plural.c, intl/plural.y, intl/ref-add.sin, intl/ref-del.sin,
+       intl/textdomain.c, m4/isc-posix.m4, m4/libtool.m4: Remove.
+
+       * ABOUT-NLS: Update to Gettext 0.11.
+
+       * Makefile.am (SUBDIRS): Remove intl.
+
+       * config/config.guess, config/config.rpath, config/config.sub,
+       config/texinfo.tex, config/depcomp, config/texinfo.tex,
+       lib/tempname.c: Update to latest version from other packages.
+
+       * lib/xalloc.h (xalloc_exit_failure): Remove; subsumed by exit_failure.
+       * lib/xmalloc.c: Include exitfail.h.
+       (xalloc_exit_failure): Remove; subsumed by exit_failure.
+       All uses changed.
+
+       * lib/Makefile.am (noinst_HEADERS): Add c-stack.h, exitfail.h.
+       (libdiffutils_a_SOURCES): Add c-stack.c, exitfail.c, quotesys.c.
+       (INCLUDES): Remove.
+
+       * lib/cmpbuf.h (buffer_lcm): New arg LCM_MAX.
+       * lib/cmpbuf.c: Include errno.h.
+       (errno): Declare if !STDC_HEADERS.
+       Include signal.h.
+       (SA_RESTART): Define if not already defined.
+       Include <inttypes.h>.
+       (PTRDIFF_MAX): Define if not already defined.
+       (TYPE_SIGNED, TYPE_MINIMUM, TYPE_MAXIMUM): Likewise.
+       (block_read): Accommodate ancient AIX hosts that set errno to EINTR
+       after uncaught SIGCONT.
+       (buffer_lcm): Return a reasonable size if the multiple is too large.
+       New arg LCM_MAX.  All callers changed.
+
+       * lib/hard-locale.c: Include "hard-locale.h".
+       (hard_locale): Ignore ENABLE_NLS, since we want to operate on
+       locales other than LC_MESSAGES.
+
+       * m4/prereq.m4 (jm_PREREQ): Add jm_PREREQ_POSIXVER.
+       (jm_PREREQ_POSIXVER): New macro.
+
+       * m4/setmode.m4 (AC_FUNC_SETMODE_DOS):
+       Check for fcntl.h and unistd.h unconditionally.
+       Suggested by Bruno Haible.
+       
+       * po/LINGUAS: Add cs, ja.
+       * po/POTFILES.in: Add lib/c-stack.c, src/dir.c.
+
+       * src/Makefile.am (datadir): @DATADIRNAME@ -> share.
+       (INCLUDES): Remove intl.
+       (LDADD): Change INTLLIBS to LIBINTL.
+       No longer need to link libdiffutils.a twice.
+
+       * src/analyze.c (diff_2_files):
+       Avoid arithmetic overflow in buffer size calculation.
+
+       * src/cmp.c: Include c-stack.h, exitfail.h.
+       (hard_locale_LC_MESSAGES): Depend on ENABLE_NLS.
+       (try_help, check_stdout, main, cmp): 2 -> EXIT_TROUBLE.
+       (main): Check for stack overflow.
+       0 -> EXIT_SUCCESS.
+       1 -> EXIT_FAILURE.
+       (cmp): Likewise.
+       Accommodate ancient AIX hosts that set errno to
+       EINTR after uncaught SIGCONT.
+
+       * src/context.c (pr_context_hunk):
+       Do not dump core if an enormous context causes an
+       arithmetic overflow.
+       (pr_unidiff_hunk): Likewise.
+       (find_hunk): Likewise.
+
+       * src/diff.h: unsigned -> unsigned int.
+       * src/diff.c: Include c-stack.h, exitfail.h.
+       Do not include signal.h.
+       (specify_style, specify_value): Bring these routines back, as POSIX
+       requires that the order of options not matter.
+       (shortopts): New constant.
+       (group_format_option, line_format_option): New constants.
+       (main): 0 -> EXIT_SUCCESS, 1 -> EXIT_FAILURE, 2 -> EXIT_TROUBLE.
+       Ensure that order of options does not matter.
+       Check for stack overflow.
+       If contexts overflow, substitute LIN_MAX, as that's good enough.
+       If multiple contexts are specified, use their maximum.
+       -c is equivalent to -C 3 now, instead of having an implicit context;
+       likewise for -u and -U 3.
+       Use specify_style and specify_value.
+       (SIGCHLD): Do not define; now done in a header.
+       Use new style time stamp format for -u / -U.
+       Reject numeric-string options if operating in POSIX 1003.1-2001 mode.
+       Avoid overflow problems with tab width.
+       Simplify from-file and to-file code.
+       (usage): Do not mention obsolete options.
+       (filetype): Do not mention whether a file is executable.
+       Add typed memory objects.
+       (compare_files): 0 -> EXIT_SUCCESS, 1 -> EXIT_FAILURE, 2 ->
+       EXIT_TROUBLE.
+
+       * src/diff3.c: Include c-stack.h, exitfail.h.
+       (ALLOCATE): Remove.  All uses changed to xmalloc, or to xmalloc plus
+       an overflow check.
+       (myread): Remove.
+       (main): Check for stack overflow.
+       0 -> EXIT_SUCCESS, 1 -> EXIT_FAIULRE, 2 -> EXIT_TROUBLE.
+       (try_help): Likewise.
+       (process_diff): Check for integer overflow, to avoid core dumps.
+       2 -> EXIT_TROUBLE.
+       (read_diff): Exit with status 126 if the file is not executable,
+       for compatibility with POSIX 1003.1-2001.
+       Accommodate ancient AIX hosts that set errno to EINTR after uncaught
+       SIGCONT.
+       Check for integer overflow to avoid core dumps.
+       (fatal, perror_with_exit): 2 -> EXIT_TROUBLE.
+
+       * src/dir.c (dir_read):
+       Ignore st_size of directories: POSIX says it's garbage.
+       Check for integer overflow to avoid core dumps.
+       (diff_dirs): 0 -> EXIT_SUCCESS, 2 -> EXIT_TROUBLE.
+
+       * src/ifdef.c: Include <xalloc.h>.
+       (format_group, print_ifdef_lines): Avoid core dumps with bad formats.
+       (do_printf_spec): Avoid alloca.
+
+       * src/io.c (sip):
+       Avoid integer overflow and core dumps if buffer alignments are
+       preposterously incompatible.
+       (slurp): Do not dump core if the file is growing as we read it.
+       If a regular file grows, keep reading until we catch up with its EOF.
+       (find_and_hash_each_line): Check for integer overflow to avoid cores.
+       (GUESS_LINES): Remove.
+       (guess_lines): New function.  Avoid integer overflow.
+       (find_identical_ends): Use it.
+       Avoid integer overflow and possible core dumps.
+
+       * src/sdiff.c: Include c-stack.h, exitfail.h.  Do not include signal.h.
+       0 -> EXIT_SUCCESS, 1 -> EXIT_FAILURE, 2 -> EXIT_TROUBLE.
+       (ck_editor_status): New function.
+       (main): Check for stack overflow.
+       Adopt POSIX convention for subsidiary programs not found.
+       (diffarg): Check for integer overflow to avoid core dumps.
+       (trapsigs): Remove SA_INTERRUPT special case; now done by header.
+       (SIGCHLD): Likewise.
+       (edit): Adopt POSIX convention for subsidiary programs not found.
+
+       * src/side.c: unsigned -> unsigned int.
+
+       * src/system.h: Don't use alloca or include <alloca.h>.
+       unsigned -> unsigned int
+       (EXIT_SUCCESS, EXIT_FAILURE, EXIT_TROUBLE): Define if not defined.
+       Include signal.h.
+       (SA_RESTART): Define if not defined.
+       (SIGCHLD): Likewise.
+       
+       * src/util.c: 2 -> EXIT_TROUBLE.
+       Adopt POSIX convention for ENOEXEC and exit status 126.
+       unsigned -> unsigned int
+
+2002-01-24  Paul Eggert  <eggert@twinsun.com>
+
+       * NEWS, configure.ac (AC_INIT, AM_INIT_AUTOMAKE): Version 2.7.7.
+
+       * intl/plural.c: Regenerate with Bison 1.31.
+
+       * ABOUT-NLS, intl/*: Update to Gettext 0.11-pre5++.
+       * INSTALL: Update to Autoconf 2.52f.
+
+       * INSTALLME: New file.
+       * Makefile.am (EXTRA_DIST): Add config/config.rpath, INSTALLME.
+       (DISTCLEANFILES): Remove.
+       * NEWS: Reformat for imminent 2.8 release.
+       * README: Mention INSTALLME.
+       * README-alpha: Move most of contents to INSTALLME.
+       * THANKS: Add Bruno Haible, Jim Meyering, and Eli Zaretskii.
+
+       * config: New subdirectory, containing the following files from .:
+       config.guess, config.sub, depcomp, missing, install-sh, mkinstalldirs.
+       Move the following files here from doc: texinfo.tex, mdate-sh.
+       * config/config.guess, config/config.sub, config/texinfo.tex:
+       Update to latest version from FSF.
+       * config/config.rpath: New file, from Gettext 0.11-pre5++.
+
+       * configure.ac (AC_INIT): Use new 3-arg form.
+       (AC_CONFIG_SRCDIR): Specify src/diff.c here, not in AC_INIT.
+       (ALL_LINGUAS): Remove: now in po/LINGUAS as per Gettext 0.11.
+       (AC_CONFIG_AUX_DIR): New macro invocation.
+
+       * lib/Makefile.am (noinst_HEADERS): Add gettext.h.
+       * lib/gettext.h: New file, from Gettext 0.11-pre5++.
+       * lib/prepargs.c: Include <string.h>.  Reported by Bruno Haible.
+
+       * m4/codeset.m4, m4/gettext.m4, glibc21.m4, iconv.m4, isc-posix.m4,
+       lcmessage.m4, progtest.m4: Upgrade to Gettext 0.11-pre5++.
+       * m4/lib-ld.m4, m4/lib-link.m4, m4/lib-prefix.m4: New files, from
+       Gettext 0.11-pre5++.
+
+       * po/LINGUAS: New file.
+       * po/Makefile.in.in: Upgrade to Gettext 0.11-pre5++.
+       * po/Makevars, po/Rules-quot, po/boldquot.sed: New files,
+       from Gettext 0.11-pre5++.
+
+       * src/cmp.c (copyright_string): Update to 2002.
+       * src/diff.c (copyright_string): Likewise.
+       * src/diff3.c (copyright_string): Likewise.
+       * src/sdiff.c (copyright_string): Likewise.
+
+       * src/cmp.c (bytes, parse_ignore_initial, cmp): Use UINTMAX_MAX
+       instead of (uintmax_t) -1, to avoid warnings on some compilers.
+       * src/io.c (file_block_read): Likewise, for SIZE_MAX.
+
+       * src/cmp.c (usage): Reformat messages to ease translation.
+       * src/diff3.c (usage): Likewise.
+       * src/sdiff.c (usage): Likewise.
+
+       * src/diff3.c (main): Remove unused variable.
+
+       * src/dir.c: Include <setjmp.h>
+       (struct dirdata): New member nnames.
+       (locale_specific_sorting, failed_strcoll): New vars.
+       (dir_read): Renamed from dir_sort.  Don't sort the dir.
+       Set new nnames member of struct dirdata.  All callers changed.
+       (compare_names): Don't check for errno after strcasecmp.
+       Use strcoll only if locale_specific_sorting is nonzero.
+       If strcoll fails, longjmp out rather than returning a value
+       that might result in an invalid comparison function that might
+       make qsort dump core.
+       (diff_dirs): Sort the directory ourselves.  Use setjmp to recover
+       from strcoll failure, falling back on native byte comparison.
+       Make local variables volatile if they need to preserve their value
+       after setjmp/longjmp.
+
+       * src/sdiff.c (handler_index_of_SIGINT, handler_index_of_SIGPIPE):
+       New macros.
+       (main): Do not confuse signal numbers with their indices.
+       Bug reported by Bruno Haible.
+       (edit): Cat lin to long before printing with %ld, since lin might
+       be narrow than long.
+
+       * src/system.h (UINTMAX_MAX): New macro.
+       Include gettext.h, not libgettext.h.
+       (N_): Do not wrap arg in parentheses.  Fix from Bruno Haible.
+
+       * src/util.c (finish_output): Ensure that werrno is initialized.
+       (lines_differ): Have an explicit do-nothing case for
+       IGNORE_NO_WHITE_SPACE, to pacify gcc -Wall.
+
+2001-12-29  Eli Zaretskii  <eliz@is.elta.co.il>
+
+       * src/sdiff.c (interact): After extracting rlen from the editor
+       command, test for a terminating null character, not for a newline.
+
+       * ms/config.bat: Allow longer source directory names without
+       overflowing the line length limits.  Create the cache in the
+       build directory, not in the source directory
+       * ms/config.sed: Fix AC_CONFIG_LINKS for when symlinks are
+       unavailable.
+
+2001-12-23  Paul Eggert  <eggert@twinsun.com>
+
+       * NEWS, configure.ac (AM_INIT_AUTOMAKE): Version 2.7.6.
+
+       * configure.ac (ALL_LINGUAS): Add tr.
+
+       * src/util.c (begin_output):
+       Have child exit with status 127 rather than reporting
+       failure on its own.  Set errno to 0 before invoking popen.
+       (finish_output): Report errno on pclose failure.
+       Distinguish between subsidiary program not found, and failure.
+
+       * src/sdiff.c (not_found, execdiff): Remove.
+       (DIFF_PROGRAM_OPTION): New constant.
+       (longopts, option_help_msgid, main): Add --diff-program=PROGRAM.
+       (check_stdout): New function.
+       (main): Remove DIFF_PROGRAM.  Check stdout after printing version.
+       Use check_stdout after printing help.  Use execvp/perror_fatail rather
+       than execdiff.  Set errno to 0 before invoking popen.
+       Check for pclose failure properly.
+       (main, edit): If child exec fails, exit with 127 rather than trying to
+       print diagnostic.
+       Distinguish between subsidiary program failing and not being found.
+       (edit): Handle signals the same way, regardless of whether we're using
+       system or fork+exec.  Check for system returning -1.
+
+       * src/diff3.c (DIFF_PROGRAM_OPTION, HELP_OPTION): New constants.
+       (longopts, main): Use them.
+       (longopts, main, option_help_msgid): New option --diff-option=PROGRAM.
+       (main): Remove DIFF_PROGRAM support.
+       Check stdout after printing version.
+       (check_stdout): Report errno info if fclose fails.
+       (read_diff): Have child exit with status 127 when program is not found,
+       rather than trying to have the child report failure.  Check for
+       pclose returning -1.
+
+       * src/diff.c (DEFAULT_WIDTH): Remove.
+       (main): Use 130 instead of DEFAULT_WIDTH, since it's not really
+       builder-settable.  Do not prepend DIFF_OPTIONS.
+       (check-stdout): If fclose (stdout) fails, print errno info.
+       (option_help_msgid): Default context is 3, not 2.
+       (usage): Work even if ptrdiff_t is wider than int.
+
+       * doc/diff.texi (diff Options): Remove DIFF_OPTIONS.
+       (Invoking diff3, Invoking sdiff): Remove DIFF_PROGRAM.
+       (diff3 Options, sdiff Options): Add --diff-program.
+
+       * src/cmp.c (valid_suffixes):
+       Add '0', to support suffixes like "MB" and "MiB".
+       (check_stdout): Don't assume that the translations of "write failed"
+       and of "standard output" lack '%'.
+       (main): Check stdout after printing version.
+
+       * lib/setmode.c: [HAVE_FCNTL_H && HAVE_SETMODE_DOS]: Include <fcntl.h>.
+       [!HAVE_SETMODE_DOS]: Do not include <unistd.h>.
+       (set_binary_mode): Return mode (not 1) if fd is a tty.
+       Do not assume that O_TEXT is zero.
+
+       * doc/diff.texi (cmp Options):
+       In byte counts, a plain suffix (without any integer)
+       is assumed to modify the integer 1.  Index terms like "kibibyte".
+       Document plain "k".
+
+       (Reporting Bugs): Mention bug-report archive and test version
+       location.  Ask for "diff --version" in bug reports.
+
+2001-12-13  Paul Eggert  <eggert@twinsun.com>
+
+       * src/diff.c (DEFAULT_WIDTH): Remove; couldn't be changed without
+       also changing option_help_msgid.  All uses replaced with 130.
+
+       * lib/setmode.c: Include fcntl.h and unistd.h only if
+       HAVE_SETMODE_DOS.
+       (setmode): Assume a file is binary unless the mode is O_TEXT.
+       * ms/README: Fix minor typos.
+
+2001-12-13  Eli Zaretskii  <eliz@is.elta.co.il>
+
+       * ms/README: New file.
+
+       * lib/setmode.c (set_binary_mode) [HAVE_SETMODE_DOS]: Don't assume
+       O_TEXT has a zero value.  If FD is a terminal device, do nothing
+       and return MODE, thus pretending that it was already in the
+       requested MODE.
+       [HAVE_FCNTL_H]: Include fcntl.h (needed for O_BINARY).
+
+       * ms/config.sed: Remove the split prevention of config.status.
+       Fix Sed commands for converting absolute file names into
+       top_srcdir-relative ones.
+
+       * ms/config.bat: Fix typos.
+
+2001-12-12  Neal H Walfield  <neal@cs.uml.edu>
+
+       * diff.c (option_help_msgid): Correct the default context width
+       from 2 to 3.
+
+2001-12-11  Paul Eggert  <eggert@twinsun.com>
+
+       * m4/Makefile.am.in: Remove jm-glibc-io.m4
+
+       * NEWS, configure.ac (AM_INIT_AUTOMAKE): Version 2.7.5.
+
+       * configure.ac (PR_PROGRAM): Use AC_DEFINE_UNQUOTED, so that
+       $PR_PROGRAM is expanded by sh.
+       (ptrdiff_t, ssize_t): Use AC_CHECK_TYPE with a default of int,
+       not AC_CHECK_TYPES.
+       (jm_AC_DOS, AC_FUNC_SETMODE_DOS): New macros.
+       (AC_CONFIG_FILES): Add ms/Makefile.
+
+       * doc/diff.texi: Add --no-ignore-file-name-case.
+       File name case sensitivity now affects file name exclusion.
+       Fix typos.
+
+       * src/util.c: Include dirname.h.
+       (dir_file_pathname): Use base_name rather than file_name_lastdirchar.
+
+       * src/system.h (S_IXUSR, S_IXGRP, S_IXOTH): New macros.
+       Include <libgettext.h> rather than rolling it ourselves.
+       (file_name_lastdirchar, HAVE_SETMODE, set_binary_mode): Remove.
+
+       * src/sdiff.c: Include <dirname.h>.
+       (expand_name): Use base_name rather than file_name_lastdirchar, for
+       portability to DOS.
+       (main): Initialize xalloc_exit_failure before possibly invoking
+       any memory allocator.
+
+       * src/io.c: Include setmode.h.
+
+       * src/diff3.c (main):
+       Initialize xalloc_exit_failure before possibly invoking any memory
+       allocator.
+
+       * src/diff.c: Include dirname.h, setmode.h.
+
+       (main): Later values and/or styles now silently override earlier.
+       (specify_value, specify_style): Likewise.  All callers changed.
+       Remove.
+       (binary, main, option_help_msgid, compare_files):
+       HAVE_SETMODE -> HAVE_SETMODE_DOS.
+       (NO_IGNORE_FILE_NAME_CASE_OPTION): New constant.
+       (longopts, main, option_help_msgid): Support it.
+       (exclude_options): New function.
+       (main): Use it. Initialize xalloc_exit_failure before potentially
+       allocating memory.
+
+       (filetype): Distinguish executable files from others, as POSIX
+       suggests.
+
+       (compare_files): Use base_name instead of file_name_lastdirchar.
+
+       * src/cmp.c: Include <hard-locale.h>, <setmode.h>.
+       (hard_locale_LC_MESSAGES): New macro.
+       (sprintc): Remove int width arg; it's now the caller's responsibility
+       to pad.  All callers changed.
+       (stat_buf): New static var; was formerly a local var in 'main'.
+       (valid_suffixes): Add 'K', for 'KiB'.
+       (option_help_msgid): Don't confuse bytes with characters.
+       (main): Set xalloc_exit_failure before invoking anything that might
+       allocate memory.  Fix bug: -n was incorrectly ignored when optimizing
+       the case of regular files with different lengths.
+       (cmp): Use an index column wide enough to store this comparison's
+       indexes.  In locales other than the POSIX locale, say "byte"
+       rather than "char".
+
+       * ms/config.bat: pc -> ms
+
+       * ms/Makefile.am, m4/setmode.m4, lib/setmode.c, lib/setmode.h:
+       New file.
+
+       * lib/Makefile.am (noinst_HEADERS): Add dirname.h, setmode.h.
+       (libdiffutils_a_SOURCES): Add basename.c, setmode.c.
+
+       * Makefile.am (SUBDIRS): Add ms.
+
+2001-12-10  Paul Eggert  <eggert@twinsun.com>
+
+       * m4/fnmatch.m4: Test for FNM_CASEFOLD.
+
+2001-12-03  Paul Eggert  <eggert@twinsun.com>
+
+       * lib/posix/regex.h: Fix copyright notice.
+
+2001-12-03  Paul Eggert  <eggert@twinsun.com>
+
+       * NEWS, configure.ac (AM_INIT_AUTOMAKE): Version 2.7.4.
+
+       * diff.texi (direntry, Overview, Comparison, Binary, Invoking cmp):
+       Use "byte" rather than "character" when talking about cmp, since
+       it compares bytes, not character.
+       (Invoking cmp): New trailing operands FROM-SKIP and TO-SKIP.
+       -i or --ignore-initial now accepts FROM-SKIP:TO-SKIP.
+       New option -n or --bytes.
+       Count operands now may be in octal or hex, and may be followed by a
+       size multiplier.
+
+       * configure.ac (DEFAULT_DIFF_PROGRAM):
+       Define to "diff", not "$bindir/diff" (which didn't work anyway).
+       (AC_CHECK_MEMBERS): Add struct stat.st_blksize, struct stat.st_rdev.
+       (AC_STRUCT_ST_BLKSIZE, AC_STRUCT_ST_RDEV): Remove; obsolescent.
+       (AC_FUNC_FORK): Use this, instead of obsolescent AC_FUNC_VFORK.
+       (AC_CONFIG_FILES, AC_CONFIG_COMMANDS): Add.
+       (AC_OUTPUT): Remove args; they were obsolescent.
+
+       * util.c (setup_output, begin_output, finish_output):
+       HAVE_FORK -> HAVE_WORKING_FORK || HAVE_WORKING_VFORK.
+       * sdiff.c (diffpid, cleanup, main, edit): Likewise.
+       * diff3.c (read_diff): Likewise.
+
+       * system.h (STAT_BLOCKSIZE):
+       Use HAVE_STRUCT_STAT_ST_BLKSIZE, not HAVE_ST_BLKSIZE.
+       (vfork): New macro.
+       (HAVE_FORK): Remove.
+       (set_binary_mode): New macro.
+
+       * sdiff.c (main): HAVE_VFORK -> HAVE_WORKING_VFORK.
+       (edit): Reopen the temporary file after the editor has run, in case
+       the editor operates by unlinking the old file and linking a new one.
+       (P_tmpdir): Rename from PVT_tmpdir; this fixes a typo.
+       All uses changed.
+
+       * io.c (sip, read_files):
+       Remove tests for HAVE_SETMODE; use set_binary_mode
+       instead of setmode.
+       (sip): Fix typo in backward lseek when reverting to text mode.
+
+       * config.site, config.sed, config.bat: New file.
+
+       * Makefile.am (EXTRA_DIST): Add xstrtol.c.
+       (noinst_HEADERS): Add xstrtol.h.
+       (libdiffutils_a_SOURCES): Add xstrtoumax.c.
+
+       * cmp.c: <xstrtol.h>: Include.
+       (ignore_initial): Now an array with 2 elements.  All uses changed.
+       (bytes): New var.
+       (HELP_OPTION): New constant.
+       (long_options, main): Use it.
+       (long_options, option_help_msgid, main, cmp):
+       Add support for -n or --bytes.
+       (parse_ignore_initial): New function.
+       (option_help_msgid, main): Add -i M:N.
+       (usage, main): Add two optional trailing operands, a la BSD.
+       (main): setmode -> set_binary_mode.
+       (cmp): Report byte number of what we've seen, not of the entire file.
+       This is to be consistent with the line number, which is always relative
+       with what we've seen.
+
+2001-12-02  Paul Eggert  <eggert@twinsun.com>
+
+       * diff.c (main, compare_files): setmode -> set_binary_mode.
+
+       * xstrtol.c (__xstrtol): Don't accept 'Ki'; require 'KiB'.
+
+       * xstrtol.c (__xstrtol): Add support for IEC 60027-2.
+
+2001-11-25  Paul Eggert  <eggert@twinsun.com>
+
+       * NEWS, configure.ac (AM_INIT_AUTOMAKE): Version 2.7.3.
+
+       * README-alpha: New file.
+
+       * src/Makefile.am (INCLUDES): Add -I../lib, for regex.h.
+
+       * configure.ac:
+       Don't set LIB_CLOCK_GETTIME to 'none required'; set it to
+       the empty string instead.
+
+       * lib/Makefile.am (EXTRA_DIST): Add strtoimax.c, strtol.c.
+
+       * Makefile.am (SUBDIRS): Put intl before lib, so that libintl.h exists.
+
+       * lib/Makefile.am (noinst_HEADERS): Add unlocked-io.h.
+
+       * configure.ac (__EXTENSIONS__): New define, for the unlocked macros.
+
+       * README: Add copyright notice.
+       Remove stuff that doesn't apply any more.
+
+       * doc/diff.texi: offsets -> indices for cmp
+
+       * src/cmp.c (option_help_msgid): offsets -> indices
+
+       * src/diff.c (option_help_msgid):
+       Don't mention --binary on POSIX hosts.
+
+       * src/sdiff.c (STRIP_TRAILING_CR_OPTION): New constant.
+       (longopts, option_help_msgid, main): Add -E, --ignore-tab-expansion,
+       --strip-trailing-cr.
+
+       * doc/diff.texi: Change direcategory from Utilities to GNU Packages.
+       Add individual utilities.
+       Switch to Free Documentation License.
+       @code -> @command
+       @samp -> @option
+       GNU -> @sc{gnu}
+       Expand tabs to spaces, except when in an example that actually
+       uses tabs.
+       Prefer @node with just one arg.
+       Document -E or --ignore-tab-expansion, --strip-trailing-cr,
+       --ignore-file-name-case.
+       Regular expressions are now grep style, not Emacs style.
+       cmp's -c or --print-chars option is now -b or --print-bytes.
+       Time stamps now depend on LC_TIME.
+       -p now implies ^[[:alpha:]$_].
+       Flags now include ' and 0.
+       cmp -i is an alias for --ignore-initial
+       Document --from-file, --to-file.
+       Document DIFF_OPTIONS.
+
+       * configure.ac (AC_CHECK_FUNCS): Add gettimeofday, clock_gettime.
+       (LIB_CLOCK_GETTIME): New subst.
+
+       * src/system.h: Assume C89 or better.
+       (_GNU_SOURCE): Remove; config.h now defines it.
+       (alloca): Declare like coreutils does it.
+       (verify, TYPE_SIGNED, TYPE_MINIMUM, TYPE_MAXIMUM, O_RDWR,
+       S_IRUSR, S_IWUSR): New macros.
+       (STAT_BLOCKSIZE): Parenthesize definiens.
+       <inttypes.h>: Include if HAVE_INTTYPES_H.
+       (CHAR_MAX, INT_MAX): Remove.
+       (PTRDIFF_MAX, SIZE_MAX): New macros.
+       (strtoumax): New decl.
+       Include stddef.h.
+       (bzero): Remove.
+       (bindtextdomain, textdomain, N_): New macros.
+       (ISPRINT, ISSPACE): Remove ifndef wrappers.
+       (ISUPPER, ISDIGIT): Remove.
+       (TOLOWER): New macro.
+       (MIN): Renamed from min; all callers changed.
+       (MAX): Likewise, from max.
+       (lin): New type.
+       (LIN_MAX): New macro.
+       (file_name_cmp): Renamed from filename_cmp.  All callers changed.
+       (file_name_lastdirchar): Renamed from file_name_lastdirchar.
+       All callers changed.
+       (could_be_mvfs_stat_bug, could_be_nfs_stat_bug,
+       dev_may_have_duplicate_ino): Remove.
+       (HAVE_SETMODE, NULL_DEVICE): New macros.
+       (same_file): Do not check attributes.
+       (same_file_attributes): New macro.
+
+       * src/util.c: Assume C89 or better.
+       int -> bool for booleans.
+       int -> lin for line numbers.
+       int -> size_t for sizes.
+       Use angle-brackets when including quotesys.h.
+       Include error.h, regex.h, xalloc.h.
+       (message5): sizeof -> offsetof
+       (begin_output): Invoke pr without -f.
+       (lines_differ): Renamed from line_cmp, and return bool not 3-way int.
+       All callers changed.
+       Add support for IGNORE_TAB_EXPANSION.
+       (change_letter): Now an array rather than a function.  All
+       callers changed.
+       (translate_range): Translate line numbers to long, not lin,
+       for convenience with printf.
+       (analyze_hunk): Return enum changes instead of a count of
+       inserts and deletes.  All callers changed.
+       (zalloc): New function.
+
+       * src/side.c: Assume C89 or better.
+       int -> bool for booleans.
+       int -> lin for line numbers.
+
+       * src/sdiff.c: Assume C89 or better.
+       int -> bool for booleans.
+       int -> lin for line numbers.
+       Use angle-brackets when including getopt.h, quotesys.h.
+       Include error.h, freesoft.h, stdio.h, xalloc.h.
+       (copyright_string): Use only most recent year.
+       (authorship_msgid, option_help_msgid): Wrap in N_().
+
+       (tmpname): Now volatile.
+       (tmpmade): Remove.
+       (tmp): New var.
+       (private_tempnam, exists, letters): Remove.
+       (temporary_file): New function.
+       (edit): Use it.
+       (interact): Use strtoumax, not atoi.
+
+       * src/normal.c: Assume C89 or better.
+       int -> lin for line numbers.
+
+       * src/io.c: Assume C89 or better.
+       int -> bool for booleans.
+       int -> lin for line numbers.
+       int -> size_t for sizes.
+       Use angle-brackets when including cmpbuf.h.
+       Include regex.h, xalloc.h.
+       (word): Remove; now done in system.h.
+       (hash_value): New type; use it instead of 'unsigned' for hash values.
+       (file_block_read): New function.
+       (sip, slurp): Use it.  Now static.
+       (sip): Ensure block size is a multiple of word size.  Clear eof flag.
+       (slurp): Use xalloc_die to report memory exhaustion.
+       (find_and_hash_each_line): Use TOLOWER instead of _tolower.
+       Add support for IGNORE_TAB_EXPANSION.
+       (prepare_text_end): Strip trailing CR if requested.
+       (find_identical_ends): Prepare the text only once,
+       if they're duplicates.
+       Let the compiler take advantage more of the fact that the buffers are
+       word-aligned.
+       (primes): Remove.
+       (prime_offset): New var.
+       (read_var): Use prime_offset instead of primes.
+       Use zalloc instead of xmalloc + bzero.
+
+       * src/ifdef.c: Assume C89 or better.
+       int -> lin for line numbers.
+       (format_group): Use strtoumax to parse line numbers.
+       (format_group, print_ifdef_lines): Use do_printf_spec to
+       handle printf specs.
+       (groups_letter_value): Don't use _tolower; it's locale-dependent.
+       (do_printf_spec): Renamed from scan_printf_spec; now does the printing.
+
+       * src/ed.c: Assume C89 or better.
+       int -> lin for line numbers (or 'long' when that's more convenient).
+       (print_ed_hunk): Fix bug when handling double-dot inserts.
+
+       * src/dir.c: Assume C89 or better.
+       int -> bool for booleans.
+       Include error.h, exclude.h, xalloc.h.
+
+       (dir_sort): Return 0 on error, 1 on success.  All callers changed.
+       compare_names -> compare_names_for_qsort.
+
+       (compare_names): Try strcasecmp if ignore_file_name_case.  Then try
+       strcoll.  Use file_name_cmp only as a last resort.  Warn about
+       strcasecmp or strcoll failure.
+       (compare_names_for_qsort): New function.
+
+       (diff_dirs): Use compare_names rather than filename_cmp.
+
+       * src/diff3.c: Assume C89 or better.
+       int -> bool for booleans.
+       int -> lin for line numbers.
+       Use angle-brackets when including getopt.h, quotesys.h.
+       Include error.h, freesoft.h, inttostr.h, xalloc.h.
+       (copyright_string): Use only most recent year.
+       (authorship_msgid, option_help_msgid): Wrap in N_().
+
+       Rename the following variables for consistency with user-visible
+       option spellings.  All uses changed.
+       (text): Renamed from always_text.
+       (initial_tab): Renamed from tab_align_flag.
+
+       (horizon_lines): Remove.  Remove all uses.
+
+       (main): Invoke bindtextdomain and textdomain after setlocale.
+       Rename "DIFF" to "DIFF_PROGRAM".
+
+       Try to compare file0 to file1, because this is where changes are
+       expected to come from.  Diffing between these pairs of files is more
+       likely to avoid phantom changes from file0 to file1.
+       However, use file2 as the common file if this is a 3-way diff,
+       for backward compatibility.  Suggested by Karl Tomlinson.
+
+       (create_diff3_block): Use xcalloc instead of malloc + bzero.
+
+       (INT_STRLEN_BOUND): Remove; now in system.h.
+
+       (read_diff): Always use --horizon-lines=100 rather than trying
+       to guess it.
+       Do not pass --inhibit-hunk-merge.
+       Minimum chunk size is 1, not 8KiB.
+       Use xalloc_die to report memory exhaustion.
+       (undotlines): Use long for start, not int.
+
+       * src/diff.h: Assume C89 or better.
+       int -> bool for booleans.
+       int -> lin for line numbers.
+       Don't include regex.h.
+       (enum changes): New enum.
+       (enum line_class): Remove; subsumed by enum changes.
+       (enum output_style): New constant OUTPUT_UNSPECIFIED.
+
+       (ignore_space_change_flag, ignore_all_space_flag): Remove.
+       (ignore_white_space): New decl, subsuming the above two.  All
+       uses changed.
+
+       Rename the following decls for consistency with user-visible
+       option spellings.  All uses changed.
+       (text): Renamed from always_text_flag.
+       (ignore_blank_lines): Renamed from ignore_blank_lines_flag.
+       (ignore_case): Renamed from ignore_case_flag.
+       (brief): Renamed from no_details_flag.
+       (initial_tab): Renamed from tab_align_flag.
+       (expand_tabs): Renamed from tab_expand_flag.
+       (starting_file): Renamed from dir_start_file.
+       (paginate): Renamed from paginate_flag.
+       (sdiff_merge_assist): Renamed from sdiff_help_sdiff.
+       (left_column): Renamed from sdiff_left_only.
+       (suppress_common_lines): Renamed from sdiff_skip_common_lines.
+       (speed_large_files): Renamed from heuristic.
+       (minimal): Renamed from no_discards.
+
+       (inhibit_hunk_merge): Remove.
+
+       (strip_trailing_cr, excluded, time_format): New decls.
+
+       (files_can_be_treated_as_binary): Renamed from ignore_some_changes.
+
+       (group_format, line_format): Now char const *[], not char *[].
+
+       (struct file_data): Buffer is now word*, not char*, as it's always
+       aligned and this can help the compiler.  buffered_chars -> buffered
+       (since it's a byte count, not a char count).  All uses changed.
+       New member `eof'.
+
+       (FILE_BUFFER): New macro.
+
+       (excluded_filename, error, free_software_msgid): Remove decls; now in
+       other .h files.
+
+       (sip, slurp): Remove decls.
+       (file_block_read): New decl.
+       (change_letter): Now an array, not a function.
+       (lines_differ): Renamed from line_cmp.
+       (analyze_hunk): Now returns enum changes rather than two change counts.
+
+       * src/Makefile.am (diff_LDADD): New symbol.
+
+       * src/diff.c: Assume C89 or better.
+       int -> bool for booleans.
+       long -> off_t for line numbers.
+       Use angle-brackets when including getopt.h, fnmatch.h, quotesys.h.
+       Include error.h, exclude.h, freesoft.h, hard-locale.h, prepargs.h,
+       regex.h, signal.h, xalloc.h.
+       (copyright_string): Use only most recent year.
+       (authorship_msgid, option_help_msgid): Wrap in N_().
+
+       Rename the following variables for consistency with user-visible
+       option spellings.  All uses changed.
+       (binary): Renamed from binary_flag.
+       (new_file): Renamed from entire_new_file_flag.
+       (unidirectional_new_file): Renamed from unidirectional_new_file_flag.
+       (report_identical_files): Renamed from print_file_same_flag.
+
+       (numeric_arg): Remove.
+
+       (exclude, exclude_alloc, exclude_count, excluded_filename, add_exclude,
+       add_exclude_file):
+       Remove; now done by exclude.h.
+
+       (BINARY_OPTION, FROM_FILE_OPTION, HELP_OPTION, HORIZON_LINES_OPTION,
+       IGNORE_FILE_NAME_CASE_OPTION, INHIBIT_HUNK_MERGE_OPTION,
+       LEFT_COLUMN_OPTION, LINE_FORMAT_OPTION, NORMAL_OPTION,
+       SDIFF_MERGE_ASSIST_OPTION, STRIP_TRAILING_CR_OPTION,
+       SUPPRESS_COMMON_LINES_OPTION, TO_FILE_OPTION,
+       UNCHANGED_LINE_FORMAT_OPTION, OLD_LINE_FORMAT_OPTION,
+       NEW_LINE_FORMAT_OPTION, UNCHANGED_GROUP_FORMAT_OPTION,
+       OLD_GROUP_FORMAT_OPTION, NEW_GROUP_FORMAT_OPTION,
+       CHANGED_GROUP_FORMAT_OPTION): New constants.
+       (longopts, main): Use them.
+
+       (longopts, main, option_help_msgid): Add -E, --from-file, --to-file.
+
+       (main): Invoke bindtextdomain and textdomain after setlocale.
+       Use grep syntax, not Emacs, for regular expressions.
+       Use exclude.h, not our own functions.
+       Use ISO 8601 time format in hard locales.
+       Prepend DIFF_OPTIONS.
+       Don't update ignore_some_changes.
+       Use strtoumax instead of numeric_arg.
+       Use specify_value when appropriate.
+       error -> try_help when appropriate.
+       -p now means ^[[:alpha:]$_], not ^[_a-zA-Z$].
+       Ignore --inhibit-hunk-merge.
+       Prefer changed group formats to unchanged ones.
+       Remove now-unnecessary casts.
+       Set files_can_be_treated_as_binary.
+
+       (specify_value): Renamed from specify_format.  All uses changed.
+
+       (specify_style): Default is now unspecified, not normal.  All
+       uses changed.
+
+       (set_mtime_to_now): New function.
+       (compare_files): Use it.  Use memset, not bzero.
+       Set stdin mtime to current time even when stdin is not a regular file.
+       Check for same file attributes, as well as for same file.
+       Use files_can_be_treated_as_binary.
+       "write failed" -> "standard output on output failure.
+
+       * src/context.c: Assume C89 or better.
+       int -> lin for line numbers.
+       Include inttostr.h, regex.h.
+       (TIMESPEC_NS): New macro.
+       (nstrftime): New decl.
+       (print_context_label): Use nstrftime and time_format to format times.
+       Print numeric time stamp value if localtime fails.
+       (print_context_function): New function.
+       (pr_context_hunk, pr_unidiff_hunk): Use it.
+       (find_function): Use size_t for sizes, not int.
+
+       * src/cmp.c: Assume C89 or better.
+       int -> bool for booleans.
+       long -> off_t for line numbers.
+       Use angle-brackets when including cmpbuf.h, getopt.h.
+       Include error.h, freesoft.h, inttostr.h, xalloc.h.
+       (copyright_string): Use only most recent year.
+       (authorship_msgid): Wrap in N_().
+       (buffer): Now word*, not char*.  All uses changed.
+       (word): Remove macro; now in system.h.
+       (long_options, option_help_msgid, main): -c --print-chars ->
+       -b --print-bytes
+       (check_stdout): "write failed" -> "standard output"
+       (option_help_msgid): Wrap in N_().
+       (main): Invoke bindtextdomain and textdomain after setlocale.
+       Use strtoumax instead of doing the work ourselves.
+       Check for same_file_attributes as well as same_file.
+       (cmp): Use ssize_t for read returns, not size_t.
+       Do not assume that size_t is not narrower than int.
+       Do not assume that line numbers fit in 'long'.
+       (block_compare_and_count, block_compare):
+       Compiler now checks that buffers are word-aligned.
+       (block_compare_and_count): Count sizes with size_t, not long.
+       (sprintc): byte arg is unsigned char, not unsigned.
+
+       * src/analyze.c: Assume C89 or better.
+       int -> lin for line numbers.
+       int -> bool for booleans.
+       unsigned int -> size_t for sizes.
+       Use angle-brackets when including cmpbuf.h.
+       Include error.h, regex.h, xalloc.h.
+       (discard_confusing_lines, diff_2_files): Use zalloc rather
+       than xalloc+bzero.
+       (discard_confusing_lines): unsigned int -> lin for values that
+       are really line numbers.
+       (shift_boundaries): Do not inhibit hunk merges.
+       (build_reverse_script, build_script, diff_2_files): Use |, not ||.
+       (diff_2_files): no_details_flag & ~ignore_some_changes ->
+       files_can_be_treated_as_binary.  Esure that buffer size is a multiple
+       of sizeof (word).  Use file_block_read to read buffers.
+       (diff_2_files): Abort if output style is not one of the
+       expected styles.
+
+2001-11-23  Paul Eggert  <eggert@twinsun.com>
+
+       * src/Makefile.am, m4/vararrays.m4: New file.
+
+       * m4/prereq.m4 (jm_PREREQ_READUTMP):
+       Remove, as it gives autoheader the willies.
+
+       * m4/README, lib/prepargs.h, lib/prepargs.c, lib/offtostr.c,
+       lib/umaxtostr.c, lib/inttostr.c, lib/inttostr.h,
+       lib/imaxtostr.c, lib/freesoft.h: New files.
+
+       * lib/freesoft.c: Include config.h, freesoft.h rather than diff.h.
+       (free_software_msgid): Wrap contents in N_.
+
+       * lib/cmpbuf.h: Use prototypes instead of old-style functions.
+
+       * lib/cmpbuf.c:
+       Don't include system.h; instead, include config.h, unistd.h.
+       Use prototypes instead of old-style functions.
+       (block_read): Don't assume that int is no wider than size_t.
+
+       * lib/Makefile.am, po/POTFILES.in: New file.
+
+2001-11-22  Paul Eggert  <eggert@twinsun.com>
+
+       * pc/config.h:
+       Define filename_cmp as an object-like macro, not as a function-like
+       macro.
+
+       * exgettext: Always operate in the C locale.
+       Set AWK using a method that works even with broken shells.
+
+       * doc/Makefile.am: New file.
+
+       * configure.ac (AC_INIT):
+       Use src/diff.c, not diff.h, as the source files got removed.
+       (AM_CONFIG_HEADER): Switch from AC_CONFIG_HEADER.
+       (AC_ARG_PROGRAM, AC_MINIX): Remove.
+
+       (AC_PREREQ, AM_INIT_AUTOMAKE, ALL_LINGUAS, AC_PROG_AWK,
+       AM_PROG_CC_STDC, AC_PROG_RANLIB, AC_C_INLINE, AC_C_VARARRAYS,
+       DEFAULT_DIFF_PROGRAM, DEFAULT_EDITOR_PROGRAM,
+       AC_STRUCT_ST_MTIM_NSEC): Add.
+
+       (PR_PROGRAM): AC_DEFINE.
+
+       (AC_SYS_LARGEFILE): Use instead of our homebrew version.
+
+       (_GNU_SOURCE): Define if not defined.
+
+       (AC_CHECK_HEADERS): Add stdbool.h, unistd.h.
+       (AC_CHECK_TYPES): Add ptrdiff_t, uintmax_t.
+       (AM_GNU_GETTEXT, XGETTEXT): Add.
+
+       (WITH_MVFS_STAT_BUG, WITH_NFS_STAT_BUG): Remove.
+       (HAVE_MEMCHR): Remove.
+       (AC_CHECK_FUNCS): Add diraccess.
+       (AC_REPLACE_FUNCS): Add memchr, waitpid.
+       (jm_FUNC_GLIBC_UNLOCKED_IO, jm_FUNC_GNU_STRFTIME, jm_FUNC_MALLOC,
+        jm_FUNC_REALLOC, jm_PREREQ_ERROR, jm_PREREQ_QUOTEARG, jm_PREREQ_REGEX,
+        jm_PREREQ_TEMPNAME, jm_AC_PREREQ_XSTRTOUMAX, AC_FUNC_FNMATCH): Add.
+       (fnmatch.h, regex.h): Do not create these files unless we're using
+       our own fnmatch and regex.
+
+       (AC_OUTPUT): Add doc/Makefile, intl/Makefile, lib/Makefile,
+       lib/posix/Makefile, m4/Makefile, po/Makefile.in, src/Makefile.
+
+       * Makefile.am: New file.
+
+       * po/en_GB.po: Don't translate "program" to "programme".
+
+2001-11-20  Paul Eggert  <eggert@twinsun.com>
+
+       * m4/prereq.m4: New file.
+
+2001-03-16  Paul Eggert  <eggert@twinsun.com>
+
+       * lib/tempname.c (uint64_t):
+       Define if not defined, and if UINT64_MAX is not defined.
+
+2001-02-26  Paul Eggert  <eggert@twinsun.com>
+
+       * lib/tempname.c: glibc 1.32
+
+2001-02-17  Paul Eggert  <eggert@twinsun.com>
+
+       * m4/Makefile.am.in: GNU fileutils 4.1
+
+2001-01-09  Paul Eggert  <eggert@twinsun.com>
+
+       * lib/tempname.c (struct_stat64): New macro.
+       (direxists, __gen_tempname): Use it.  This avoids a portability problem
+       with Solaris 8.
+
+       * lib/tempname.c (<config.h>): Include if HAVE_CONFIG_H.
+       (<stddef.h>, <stdint.h>, <string.h>):
+       Include only if STDC_HEADERS || _LIBC.
+       (<fcntl.h>): Include only if HAVE_FCNTL_H || _LIBC.
+       (<unistd.h>): Include only if HAVE_UNISTD_H || _LIBC.
+       (<sys/time.h>): Include only if HAVE_SYS_TIME_H || _LIBC.
+       (__set_errno): Define this macro if <errno.h> doesn't.
+       (P_tmpdir, TMP_MAX, __GT_FILE, __GT_BIGFILE, __GT_DIR, __GT_NOCREATE):
+       Define these macros if <stdio.h> doesn't.
+       (S_ISDIR, S_IRUSR, S_IWUSR, S_IXUSR):
+       Define these macros if <sys/stat.h>
+       doesn't.  Ignore <sys/stat.h> S_ISDIR if STAT_MACROS_BROKEN.
+       (stat64, __getpid, __gettimeofday, __mkdir, __open, __open64, lxstat64,
+       __xstat64): Define if not _LIBC.
+       (__secure_getenv): Define if ! (HAVE___SECURE_GETENV || _LIBC).
+       (__gen_tempname): Invoke gettimeofday only if HAVE_GETTIMEOFDAY
+       || _LIBC; otherwise, fall back on plain "time".
+       Use macros like S_IRUSR | S_IWUSR rather than octal values like 0600.
+
+       * lib/mkstemp.c (__GT_FILE): Define to zero if not defined.
+
+2000-10-25  Paul Eggert  <eggert@twinsun.com>
+
+       * lib/hard-locale.c: New file.
+
+2000-02-05  Paul Eggert  <eggert@twinsun.com>
+
+       * exgettext: From GCC repository
+
+1999-07-06  Paul Eggert  <eggert@twinsun.com>
+
+       * lib/mkstemp.c: glibc 2.2
+
+1998-12-11  Paul Eggert  <eggert@twinsun.com>
+
+       * src/sdiff.c (lf_snarf):
+       Fix bug when help line wrapped around the input buffer.
+
+1998-09-15  Paul Eggert  <eggert@twinsun.com>
+
+       * diff.texi: Add @dircategory and @direntry.
+
+1998-09-14  Paul Eggert  <eggert@twinsun.com>
+
+       * Makefile.in (VERSION): Version 2.7.2.
+       (DEFAULT_DIFF_PROGRAM): Renamed from DIFF_PROGRAM.
+       (PR_PROGRAM): All `configure' to define it.
+       (srcs): Add $(diffutils_srcs), freesoft.c, quotearg.c instead of
+       quote.c, quotearg.h.
+       (distfiles): Add acconfig.h, message/*.
+       (all): Depend on $(destfiles), not info.
+       (version.c): Parenthesize `GNU diffutils'.
+       (common_o): Add freesoft.o
+       (diff_o): quote.o -> quotearg.o
+       (diff3_o, sdiff_o): Likewise.
+       (diff.dvi): Depend on version.texi.
+       (diff.o diff3.o quotearg.o sdiff.o util.o):
+       New dependency on quotearg.h
+       (diff3.o): DIFF_PROGRAM -> DEFAULT_DIFF_PROGRAM.
+       (sdiff.o): Likewise.
+       (messages.po): Remove.
+       (message/msgid.po, message/template.po): New rules.
+       (maintainer-clean): Renamed from realclean.
+       (install): Install from source directory, if applicable.
+       Invoke install-info if needed.
+       (install-strip): New rule.
+       (check): Set DIFF.
+       (stamp-h.in): Don't put the date into the timestamp.
+       (D_dirs): Add $D/message.
+       ($D.tar.gz): Compress with gzip -9.
+       Don't use ln to create distribution; it doesn't work with symlinks.
+       (srcs, distfiles, diff_o, diff3_o, sdiff_o): Rename quotearg.c to
+       quotesys.c and quotearg.h to quotesys.h.
+
+       * configure.in (AC_PATH_PROG): Add PR_PROGRAM.
+       If available, prefer support for large files unless the user specified
+       one of the CPPFLAGS, LDFLAGS, or LIBS variables.
+       (AC_STRUCT_ST_RDEV): Add.
+       (HAVE_ST_FSTYPE_STRING): Add.
+       (--with-mvfs-stat-bug, --with-nfs-stat-bug): New options.
+       (HAVE_MEMCHR): New macro.
+       (AC_CHECK_FUNCS): Add sicprocmask.
+
+       * diff.h (XTERN): Renamed from EXTERN.
+       (struct filedata): Remove dir_p arg.
+       (struct comparison): New type.
+       (diff_2_files, diff_dirs)" Ise ot/
+       (error): Add printf attribute if applicable.
+       (free_software_msgid): New decl.
+       (pr_program): New decl.
+       (fatal): Add noreturn attribute.
+       (pfatal_with_name): Likewise.
+
+       * system.h (__attribute__): New macro.
+       (getenv): Don't declare if HAVE_STDLIB_H.
+       (CHAR_MAX): New macro.
+       (<locale.h>): New include.
+       (<locale.h>): Include before <libintl.h>.
+       (could_be_mvfs_stat_bug, could_be_nfs_stat_bug,
+       dev_may_have_duplicate_ino, same_special_file): New macros.
+       (same_file): Use them.
+
+       * cmp.c (authorship_msgid): New var.
+       (free_software_msgid): New decl.
+       (error): Now has printf attribute.
+       (try_help): Likewise.
+       (long_options): Don't assume ASCII.
+       (try_help): Now accepts operand arg.
+       (main): Check for -1, not EOF, when calling getopt_long.
+       Report --ignore-initial value when complaining about it.
+       Output copyright and free software info with -v.
+       Don't assume ASCII.
+       Report last operand when one is missing.
+       Report text of extra operand.
+       Move block_read into cmpbuf.c.
+
+       * diff.c (authorship_msgid): New var.
+       (quotesys.h): Include.
+       (ck_atoi): Remove.
+       (function_regexp_list, ignore_regexp_list): Now static.
+       (binary_flag): Renamed from binary_I_O.
+       (entire_new_file_flag, unidirectional_new_file_flag,
+       print_file_same_flag): Now static.
+       (numeric_arg): Renamed from ck_atoi.
+       New argument specifying the argument type.
+       (longopts, main): Don't assume ASCII.
+       (longopts): Remove old aliases --file-label, --entire-new-file,
+       --ascii, --print.
+       (main): Check for -1, not EOF, when calling getopt_long.
+       Use numeric_arg to report errors.
+       Report error if -l specified but pagination is not supported.
+       Report error if -S is specified twice with conflicting values.
+       Have --version conform to the new GNU standards.
+       Add new --from-file, --to-file, --inhibit-hun,-merge options.
+       Make the horizon at least as large as the context.
+       Add casts to pacify gcc -Wall.
+       (try_help): Add operand arg.
+       (option_help_msgid): Doc fix to match above.
+       (usage): Indent option_help_msgid.
+       (compare_files): Now takes struct comparison
+       instead of two directory names and a depth.
+       (NONEXISTENT, UNOPENED, ERRNO_ENCODE, ERRNO_DECODE):
+       New macros.
+       (DIR_P): New macro.
+       Report error if fflush does.
+
+       * cmpbuf.c (block_read): Moved here from cmp.c.
+
+       * cmpbuf.h (block_read): New decl.
+
+       * io.c (cmpbuf.h): Include.
+       (slurp): Check for arithmetic overflow when computing buffer size.
+
+       * dir.c (diff_dirs): Check for recursive directory loop.
+       Arg is now struct comparison const *.
+       (dir_loop): New function
+
+       * analyze.c (no_discards): Remove.
+       (inhibit): Remove.
+       (shift_boundaries): Don't inhibit.  If inhibit_hunk_merge is nonzero,
+       don't merge hunks.
+       (briefly_report): Now returns 2 if trouble, CHANGES otherwise.
+       (diff_2_files): Now takes struct comparison.  If briefly_report reports
+       trouble, pass it on to caller.
+
+       * side.c (print_half_line): Add brackets to pacify GCC -Wall.
+
+       * sdiff.c (quotesys.h): Include.
+       (DIFF_PROGRAM, DEFAULT_EDITOR_PROGRAM): Remove.
+       (free_software_msgid, editor_program, not_found): New vars.
+       (diffbin, edbin): Remove.
+       (editor_program): Renamed from edbin.
+       (edit, interact): Now take extra string arg.
+       (exiterr, fatal, perror_fatal, try_help): Add noreturn attribute.
+       (sigset_t, sigemptyset, sigmask, sigaddset, SIG_BLOCK, SIG_SETMASK):
+       (sigprocmask): New macros, if !HAVE_SIGPROCMASK.
+       (error): Now has printf attribute.
+       (longopts, main): Don't assume ASCII.
+       (try_help): New operand arg.
+       (usage): Conform to new GNU standards.
+       (main): Set static vars for editor and diff program.
+       Compare getopt_long result to -1, not EOF.
+       -v conforms to new GNU standard.
+       Complain better about extra and missing operands.
+       If HAVE_VFORK, block SIGINT and SIGPIPE in the parent, since when
+       the child munges its handlers it may somp on the parent.
+       Pass rname to intract.
+       Translate not-found message before forking.
+       (give_help): Just output it all at once.
+       (edit): New args lname, lline, rname, rline.
+       (edit): New command 'd'.
+       (interact): New args lname, rname.
+
+       * util.c (quotesys.h): Include.
+       (PR_PROGRAM): New macro.
+       (pfatal_with_name): Abort if error returns.
+       (fatal): Likewise.
+       (print_message_queue): Free message chain after printing.
+       (currently_recursive): Renamed from current_depth, and now a boolean.
+       (begin_output): Report error if fflush does.
+       Avoid stdio and gettext in child.
+
+       * diff3.c (quotesys.h): Include.
+       (free_software_msgid): New decl.
+       (RANGE_START, RANGE_END): Renamed from START and END.
+       (fatal, perror_with_exit, try_help): Add noreturn attribute.
+       (error): Add printf attribute.
+       (diff_program): Now a ptr, not an array.
+       Initialize to DEFAULT_DIFF_PROGRAM instead of DIFF_PROGRAM.
+       (longopts, main): Don't assume ASCII.
+       (main): Use DIFF environment var to specify name of diff program.
+       Compare getopt_long result to -1, not EOF.
+       -v now reports version according to new GNU standard.
+       Report spelling of extra operand, or last operand before missing one.
+       (try_help): Now takes operand arg.
+       (option_help_ms): Fix typo: missing comma.
+       (usage): Update as per current GNU standards.
+       (environ): Remove decl.
+       (read_diff): Invoke diff with --inhibit-hunk-merge.
+       Translate `not found' message before forking.
+       Quote name of diff program.
+       Pass horizon lines.
+       `memory exhausted' -> `Memory exhausted'
+
+       * pc/makefile (%.exe): Remove.
+       (pc-clean): Remove *.exe
+       * pc/makefile.sed (DEFAULT_DIFF_PROGRAM): Renamed from DIFF_PROGRAM.
+       When editing mkinstalldirs rule, look for exec_prefix and prefix.
+       Add .exe when installing files.
+       * pc/emx/config.h (same_file): Add.
+       * pc/config.h (same_file): Remove.
+       * pc/djgpp/config.h: Adjust to latest patch from eliz.
+       * pc/djgpp/makefile.sed: Don't alter PROGRAMS.
+       * pc/pc.c: Update FSF address.
+       (quote_system_arg): Renamed from system_quote_arg.
+
+       * README: Add --with-mvfs-stat-bug, --with-nfs-stat-bug.
+
+       * getmsgids: Add copyright date and update FSF address.
+
+       * diff.texi: Document recent changes.
+       The patch doc still corresponds to patch 2.2, unfortunately.
+       Update GNU bug reporting address.  Omit Larry Wall's address;
+       it's obsolete and he's busy with perl.
+
+       * context.c: Fix spacing.
+
+       * NEWS: Mention --from-file=FILE, --to-file=FILE, ed.
+
+       * acconfig.h, freesoft.c, message/de.po, message/en_UK.po,
+       message/es.po, message/fr.po, message/pl.po, message/sv.po:
+       New files.
+
+       * ed.c: Remove `#if 0'ed code.
+
+       * normal.c, waitpid.c: Update FSF address.
+
+1998-03-15  Paul Eggert  <eggert@twinsun.com>
+
+       * quotesys.c: Renamed from quotearg.c.
+
+       * quotesys.h: Renamed from quotearg.h
+       (__QUOTESYS_P): Renamed from __QUOTEARG_P.
+
+1997-05-05  Paul Eggert  <eggert@twinsun.com>
+
+       * quotesys.c, quotesys.h: New file.
+
+Mon Nov 14 05:10:56 1994  Paul Eggert  <eggert@twinsun.com>
+
+       Add internationalization support.
+       Several messages have been changed slightly,
+       to make them more consistent and easier to translate.
+       All strings that are messages are passed through gettext once before
+       being used, so that they can be localized.
+       Each function and macro whose first parameter is a gettext msgid
+       has had its first parameter's name changed so it ends in `msgid'.
+       All arrays of msgids have had their names changed to end in `msgid'.
+       `getmsgids' uses this to determine which strings are msgids.
+
+       * pc/COPYING, pc/INSTALL, pc/config.h,
+       pc/djgpp/config.h, pc/djgpp/makefile.sed,
+       pc/emx/config.h, pc/emx/diff.def, pc/emx/gnuregex.def,
+       pc/emx/makefile.sed,
+       pc/makefile, pc/makefile.sed, pc/pc.c: New files, for PC support.
+
+       * getmsgids: New file.
+
+       * Makefile.in (PACKAGE, VERSION, diffutils_srcs, D): New vars.
+       (version.c, version.texi, messages.po): New files.
+       messages.po is built automatically from source files and `getmsgids'.
+       (distfiles): Add them, pc/*, and getmsgids.
+       (diff.info): Now depends on version.texi.
+       (realclean): Clean messages.po, version.*.
+       (dist): Just build $D.tar.gz.
+       ($D.tar.gz): New file, takes over old `dist' function.
+       Don't assume $(distfiles) are all in same directory.
+
+       * configure.in (AC_CHECK_HEADERS): Add libintl.h, locale.h.
+       (AC_CHECK_LIB): Check for -lintl.
+
+       * analyze.c (briefly_report): Rewrite `message (A?"B":"C")' as
+       `if (A) message ("B") : message ("C")'; this is for getmsgids.
+       (briefly_report, diff_2_files): For label, use file_label if set.
+       * diff.c (compare_files): Likewise.
+
+       * system.h (gettext): Declare; use a stub if ! HAVE_LIBINTL_H.
+       (setlocale): Declare; use a stub if ! HAVE_LOCALE_H.
+
+       * cmp.c, diff.c, diff3.c, sdiff.c (main):
+       Invoke setlocale first thing, to tell library we're internationalized.
+       (option_help_msgid): New constant.
+       (usage): Use it, so message is translated one option at a time.
+       * sdiff (help_msgid, give_help): Likewise.
+
+       * cmp.c (sprintc): Renamed from `printc'.
+       Now outputs to a buffer instead of stdout.
+       (cmp): Use new sprintc; it's easier to internationalize.
+
+       * diff.c (main): -D FOO now outputs `/* ! FOO */ instead of
+       `/* not FOO */'.
+
+       * sdiff.c (version_string): Fix decl typo: `const' was missing.
+       (trapsigs): Ignore sigaction failure, to be compatible with `signal'.
+
+       * util.c (struct msg, message5, print_message_queue):
+       Allocate just one block of memory to save a message.
+
+Wed Nov  9 17:42:44 1994  Paul Eggert  <eggert@twinsun.com>
+
+       * sdiff.c (trapsigs): Don't check signal return value, since it's
+       bogus under djgpp.
+
+Mon Oct 31 07:27:27 1994  Paul Eggert  <eggert@twinsun.com>
+
+       * Makefile.in (srcs, diff_o, diff3_o, sdiff_o):
+       New files quote.c, quote.o.
+
+       * diff.h (function_regexp, ignore_regexp): Replace lists of compiled
+       regexps with these single compiled regexps.  All users changed.
+       (regexp_list,function_regexp_list,ignore_regexp_list): Move to diff.c.
+       * diff.c (add_regexp): Build one big regexp instead of a regexp list.
+       (summarize_regexp_list): New function.
+       (regexp_list): Redesigned struct; moved here from diff.h.
+       (function_regexp_list, ignore_regexp_list): Likewise, for vars.
+
+       * context.c (find_function): Simplify interface:
+       don't return size of function line.  All callers changed.
+       (print_context_script, find_function): INT_MAX now denotes no
+       previous match; this is simpler than `- file->prefix_lines - 1'.
+
+       * diff3.c (read_diff): Quote arguments with system_quote_arg.
+       * sdiff.c (main): Use system_quote_arg to compute command.
+       * diff.c (option_list): Quote options with system_quote_arg.
+       * util.c (begin_output): Use system_quote_arg to compute command.
+
+       * util.c (pr_program): New var.
+       (analyze_hunk): Fix off-by-1 line length bug.
+       Match with one big regexp instead of a list of regexps.
+       Use new `trivial_length' local instead of comparing first byte to `\n'.
+       Help the compiler with linbuf local vars.
+
+       * system.h (system_quote_arg):
+       New function; replaces SYSTEM_QUOTE_ARG macro.
+
+Sat Oct 15 20:09:12 1994  Paul Eggert  <eggert@twinsun.com>
+
+       * system.h (_tolower): Define if not already defined.
+       * io.c (find_and_hash_each_line): Change tolower to _tolower; this
+       speeds up diff -i considerably on some hosts (e.g. Solaris 2.3).
+       * util.c (line_cmp): Likewise.
+       * ifdef.c (groups_letter_value): Likewise.
+
+       * diff.h (ignore_some_line_changes): Remove.  All users changed.
+       * io.c (find_and_hash_each_line): Don't invoke line_cmp if the length
+       differs and -i is in force.  Don't assume ISSPACE ('\n') is nonzero.
+
+       * diff.h (xmalloc_exit_failure): New variable.
+       All `main' programs set this variable at the start.
+       xmalloc and xrealloc are now taken from GNU library.
+       * cmp.c (main): Align buffer size to word size; some mallocs care.
+       * io.c (slurp): Likewise.
+       * diff.c (add_exclude): Can now assume xrealloc (0, ...) works.
+       (add_regexp): Free storage on failure.  Allocate storage all at one go.
+       * system.h (malloc, realloc): Remove unused declarations.
+       * diff3.c, sdiff.c, util.c (xmalloc, xrealloc): Remove.
+       * sdiff.c (diffarg): Take advantage of cleaner xrealloc semantics.
+
+       * io.c (ROL): Use sizeof to make it more generic.
+
+       * Makefile.in (common_o): New variable.
+       Link error.o and xmalloc.o into all programs.
+       (check): Depend on $(PROGRAMS).
+
+       * diff.h (error): Change to GNU library standard.  All callers changed.
+       * diff3.c (main): Use strerror (EISDIR) instead of "Is a directory".
+       (fatal, perror_with_exit): Use `error'.
+       * util.c (perror_with_name, fatal): Use GNU `error'.
+       (error): Remove.
+
+Wed Oct 12 17:04:40 1994  David J. MacKenzie  (djm@duality.gnu.ai.mit.edu)
+
+       * cmp.c (main): Set xmalloc_exit_failure.
+
+Sat Oct  1 05:24:19 1994  Paul Eggert  <eggert@twinsun.com>
+
+       * Version 2.7 released.
+
+       * configure.in (AC_HEADER_SYS_WAIT): Add.
+       (AC_CHECK_HEADERS): Remove sys/wait.h.
+       (AC_CHECK_FUNCS): Add tmpnam.
+       * system.h (<sys/wait.h>, WEXITSTATUS): Use simpler scheme
+       now that HAVE_SYS_WAIT_H is not set on hosts
+       that are incompatible with Posix applications.
+
+       * util.c (dir_file_pathname): Use filename_lastdirchar not strrchr.
+       * sdiff.c (expand_name): Likewise.
+       (private_tempnam): Use tmpnam if HAVE_TMPNAM; this simplifies porting.
+       (exists, letters): Omit if HAVE_TMPNAM.
+
+       * diff3.c (read_diff): If STAT_BLOCKSIZE yields zero,
+       adjust it to a more reasonable value.
+
+Sat Sep 24 20:36:40 1994  Paul Eggert  <eggert@twinsun.com>
+
+       * sdiff.c (exists, private_tempname): Adopt latest GNU libc algorithm.
+       (private_tempnam): Specialize for sdiff to avoid portability problems.
+
+Thu Sep 22 16:47:00 1994  Paul Eggert  <eggert@twinsun.com>
+
+       * configure.in (AC_ARG_PROGRAM): Added.
+       (AC_OUTPUT): Add [date > stamp-h].
+
+       * Makefile.in (DEFAULT_EDITOR_PROGRAM, DIFF_PROGRAM, LIBOBJS,
+       NULL_DEVICE, PR_PROGRAM, PROGRAMS): New variables.
+       (check, stamp-h.in, cmp.o, util.o): New targets.
+       (edit_program_name): New variable; replaces old binprefix method.
+       (install, uninstall): Use it.
+       (binprefix): Removed.
+       (distfiles): Add stamp-h.in.
+       (clean): Clean stamp-h.
+       (config.hin, config.h): Use time stamp files.
+       (cmp_o): Add $(LIBOBJS).
+       (install): Install info files from srcdir if they're not in `.'.
+
+       * cmp.c, io.c (word): Don't define if already defined.
+
+       * comp.c (main): Use setmode, not open(..., O_BINARY); this gets stdin.
+       Use NULL_DEVICE instead of "/dev/null".
+       (cmp): Use %lu instead of %ld when it is more likely to be right.
+
+       * diff.h (PR_FILE_NAME): Rename to PR_PROGRAM and move to Makefile.in,
+       util.c.
+
+       * diff3.c (main): Give proper diagnostic if too many labels were given.
+       (read_diff): Use SYSTEM_QUOTE_ARG.
+
+       * system.h: <string.h>: Include if HAVE_STRING_H, too.
+       <ctype.h>: Include here.  All includers changed.
+       (CTYPE_DOMAIN, ISDIGIT, ISPRINT, ISSPACE, ISUPPER): New macros that
+       work around common <ctype.h> problems.
+       (O_BINARY): Remove.
+       (SYSTEM_QUOTE_ARG): New macros.
+
+       * diff.c: Add comment.
+
+       * util.c (PR_PROGRAM): Moved here from diff.h.
+       (begin_output): Use SYSTEM_QUOTE_ARG.
+
+       * io.c (read_files): Set mode to binary before returning 1.
+
+       * sdiff.c (TMPDIR_ENV): New macro.
+       (DEFAULT_EDITOR_PROGRAM): Renamed from DEFAULT_EDITOR for consistency.
+       (expand_name): Change `isdir' to `is_dir' to avoid theoretical ctype
+       namespace contamination.
+       (main): Use SYSTEM_QUOTE_ARG.
+       (private_tempnam): Don't access "/tmp" directly; use PVT_tmpdir.
+
+Tue Sep 13 18:46:43 1994  Paul Eggert  <eggert@twinsun.com>
+
+       * configure.in (AC_FUNC_MEMCHR): Remove.  Autoconf didn't adopt this,
+       since we need not worry about an old experimental library
+       where memchr didn't work.
+       (AC_FUNC_MEMCMP): Not needed, since we only test for equality.
+       (AC_REPLACE_FUNCS): Add test for memchr.
+       (AC_CHECK_FUNCS): Check for memchr, not memcpy, since it'll be cached.
+       (AC_CHECK_HEADERS): Add string.h; regex.c uses on some old hosts.
+
+       * system.h (memcmp): Define in terms of bcmp.
+       Use HAVE_MEMCHR to test for all mem* routines.
+
+       * Makefile.in (srcs): Remove memcmp.c.
+       We use bcmp if memcmp doesn't work, since we only test for equality.
+
+Mon Sep 12 15:52:22 1994  Paul Eggert  <eggert@twinsun.com>
+
+       * configure.in (AC_CONFIG_HEADER): Rename config.h.in to config.hin.
+       (AC_ISC_POSIX, AC_MINIX): Go back to these old names for Autoconf 2.
+       (AC_CHECK_HEADERS): Remove now-redundant check for <string.h>.
+       (AC_CHECK_FUNCS): Check for strchr.
+       (AC_FUNC_MEMCHR, AC_FUNC_MEMCMP, AC_CHECK_FUNCS): Use special-purpose
+       macros when suitable.
+       * memcmp.c: New file.
+       * Makefile.in (CPPFLAGS, DEFS, CFLAGS, LDFLAGS, prefix, exec_prefix):
+       Default to autoconf-specified strings.
+       (COMPILE): Use the defaults.
+       (srcs): Add memcmp.c.
+       (distfiles): Rename config.h.in->config.hin, install.sh->install-sh.
+       (Makefile, config.h, config.hin, config.status): Rework for
+       compatibility with Autoconf 2.
+       * io.c (binary_file_p): Assume non-broken memchr.
+       * memchr.c: Assume compiler understands void *; otherwise
+       we don't match GCC's internal declaration of memchr.
+       * system.h: Use more modern autoconf approach to standard C headers.
+       * version.c: Include <config.h>, not "config.h".
+
+       * diff.c, diff.h (ignore_some_line_changes):
+       New variable; replaces `length_varies'.
+       (line_end_char): Replace with '\n'; it wasn't being used consistently.
+
+       * io.c (find_and_hash_each_line): Fix inconsistencies with -b -w -i and
+       incomplete lines.  Put incomplete lines into their own bucket.
+       This means line_cmp no longer needs line length arguments,
+       and equivalence classes' line lengths no longer need to include \n.
+       Invoke line_cmp only if ignore_some_line_changes.
+       (prepare_text_end): -B no longer ignores missing newlines.
+       (read_files): Allocate another bucket for incomplete lines.
+
+       * util.c (line_cmp): Now takes just two arguments.  No longer
+       optimizes for common case of exact equality; the caller does that
+       optimization now.  The caller is changed accordingly.
+       Optimize for the common case of mostly equality.
+       Use isupper+tolower instead of islower+toupper, for consistency.
+
+       * waitpid.c (waitpid): Fix typo with internal scoping.
+
+Thu Sep  8 08:23:15 1994  Paul Eggert  <eggert@twinsun.com>
+
+       * configure.in: Revamp for Autoconf 2.
+       * memchr.c, waitpid.c: New source files for substitute functions.
+       * Makefile.in (diff_o, diff3_o, sdiff_o): Add $(LIBOBJS).
+       (srcs): Add memchr.c, waitpid.c.
+       (distfiles): Add install.sh, memchr.c, waitpid.c, install.sh.
+       * system.h: Use Autoconf 2 style HAVE_DIRENT_H etc. macros for dirs.
+       * dir.c (dir_sort): Prefer NAMLEN (p) to strlen (p->d_name).
+       Change VOID_CLOSEDIR to CLOSEDIR_VOID for Autoconf 2.
+       * sdiff.c, util.c (memchr, waitpid): Remove; use new substitutes.
+       * diff3.c (read_diff): Use new waitpid substitute.
+
+       * cmp.c, diff.c, diff3.c, sdiff.c (check_stdout, try_help): New fns.
+       (usage): Just print more detailed usage message; let caller exit.
+       * diff.c (option_help): New variable.
+       (filetype): Add Posix.1b file types.
+
+Fri Sep  2 16:01:49 1994  Paul Eggert  <eggert@twinsun.com>
+
+       * configure.in: Switch to new autoconf names.  Add sys/file.h test.
+       * Makefile.in (distclean): Clean config.cache, config.log
+       (used by new autoconf).
+
+       * diff.c, diff3.c, (main), sdiff.c (trapsigs): If we'll have children,
+       make sure SIGCHLD isn't ignored.
+
+       * diff3.c (DIFF_CHUNK_SIZE): Removed.  Get size from STAT_BLOCKSIZE.
+       (INT_STRLEN_BOUND): New macro.
+
+       * ifdef.c (format_group, groups_letter_value):
+       Use * instead of [] in prototypes.
+
+       * system.h: Include <sys/file.h> only if HAVE_SYS_FILE_H.
+       (S_IXGRP, S_IXOTH, S_IXUSR): Remove unused macros.
+
+       * util.c (begin_output): Check fdopen result.
+
+       The following changes simplify porting to non-Posix environments.
+       * cmp.c, diff.c, diff3.c, sdiff.c, (main): Call initialize_main first.
+       * diff.c (binary_I_O): New variable for --binary option.
+       (main, usage, compare_files): Support --binary option.
+       (compare_files): Use filename_lastdirchar to find last
+       directory char in a file name.
+       * cmp.c (main), diff.c (compare_files), dir.c (compare_names,
+       diff_dirs): Use filename_cmp to compare file names.
+       Use same_file to determine whether two files are the same.
+       * context.c (print_context_label): Check whether ctime yields 0.
+       * diff3.c (read_diff), sdiff.c (cleanup, main, waitpid),
+       util.c (begin_output): Use popen+pclose if !HAVE_FORK.
+       * io.c (sip): If HAVE_SETMODE, test for binary files in O_BINARY mode.
+       * sdiff.c (ck_fdopen): Function removed.
+       (edit): Use system if !HAVE_FORK.
+       (execdiff): Now assumes caller has pushed all args, plus trailing 0.
+       All callers changed.
+       (private_tempnam): Try TMP if TMPDIR isn't defined.
+       Fit temporary filenames into 8.3 limit.
+       * system.h (STAT_BLOCKSIZE): Don't define if already defined.
+       (min, max): Undef if already defined.
+       (filename_cmp, filename_lastdirchar, HAVE_FORK, HAVE_SETMODE,
+       initialize_main, O_BINARY, same_file): New macros.
+
+Fri Jun 17 11:23:53 1994  David J. MacKenzie  (djm@geech.gnu.ai.mit.edu)
+
+       * Makefile.in (info, dvi, diff.dvi): New targets.
+       (clean): Remove TeX output files.
+
+Fri Jun 17 05:37:52 1994  Paul Eggert  (eggert@twinsun.com)
+
+       * cmp.c, io.c (word): Change from typedef to #define, to avoid
+       collision with Unicos 8.0 <sys/types.h>, which also typedefs `word'.
+
+Thu Apr 15 00:53:01 1994  Paul Eggert  (eggert@twinsun.com)
+
+       * diff3.c (scan_diff_line), util.c (print_number_range): Don't
+       rely on promotion to make the old-style parameter type agree
+       with the prototype parameter type; this doesn't work on
+       Apollos running bsd4.3.
+
+Mon Jan  3 02:05:51 1994  Paul Eggert  (eggert@twinsun.com)
+
+       * Makefile.in (LDFLAGS): Remove -g.  Change all link commands
+       to use both $(CFLAGS) and $(LDFLAGS).
+
+Mon Dec 13 12:23:27 1993  Paul Eggert  (eggert@twinsun.com)
+
+       * system.h: Don't assume dirent.h exists just because
+       _POSIX_VERSION is defined.
+
+Fri Dec  3 18:39:39 1993  Paul Eggert  (eggert@twinsun.com)
+
+       * diff.c (main): allow -pu.
+
+Tue Nov 23 03:51:08 1993  Paul Eggert  (eggert@twinsun.com)
+
+       * Makefile.in (distclean): Remove config.h.
+
+Wed Nov 10 00:28:27 1993  Paul Eggert  (eggert@twinsun.com)
+
+       * Version 2.6 released.
+
+       * analyze.c (too_expensive): New variable, for heuristic to
+       limit the worst-case cost to O(N**1.5 log N) at the price of
+       producing suboptimal output for large inputs with many differences.
+       (diff_2_files): Initialize it.
+       (struct partition): New type.
+       (SNAKE_LIMIT): New macro; merely documents already-used number 20.
+       (diag): New `minimal' arg; all callers changed.  Put results into
+       struct partition.  Apply `too_expensive' heuristic.  Tune.
+       (compareseq): New `minimal' arg; all callers changed.  Tune.
+       (shift_boundaries): Improve heuristic to also coalesce adjacent runs
+       of changes more often.
+
+       * diff.c (long_options, main, usage): Add `--help'.
+       (main): Send version number to stdout, not stderr.
+       (usage): Send usage to stdout, not stderr.
+       (compare_files): Initialize `inf' properly.
+
+       * io.c (word): Change to `int'; it makes a big difference on x86.
+       (sip, slurp): Put off allocating room to hold the whole file until we
+       have to read the whole file.  This wins if the file turns out
+       to be binary.
+
+       * util.c (xmalloc, xrealloc): "virtual memory" -> "memory"
+       (primes): Omit large primes if INT_MAX is small.
+
+       * sdiff.c (usage): Send usage to stdout, not stderr.
+       (long_options, main, usage): Add `--help'.
+       (main): Send version number to stdout, not stderr.  Exit afterwards.
+
+       * diff3.c (usage): Send usage to stdout, not stderr.
+       (long_options, main, usage): Add `--help'.
+       (read_diff): Detect integer overflow in buffer size calculations.
+
+       * cmp.c (word): New type.  All uses of `long' for
+       word-at-a-time comparisons changed to `word'.
+       (long_options, main, usage): Add `--help'.
+       (usage): Send usage to stdout, not stderr.
+       (main): Add `-v'.  Send version number to stdout, not stderr.
+
+       * configure.in (AC_HAVE_HEADERS): Add unistd.h; remove AC_UNISTD_H.
+
+Mon Sep 27 07:20:24 1993  Paul Eggert  (eggert@twinsun.com)
+
+       * diff.c (add_exclude_file): Cast memchr to (char *)
+       to suppress bogus warnings on some nonstandard hosts.
+
+       * Makefile.in (cmp): Add version.o.
+
+       * analyze.c (diff_2_files): Work around memcmp bug with size=0.
+
+       * cmp.c (main, usage, version_string): Add --version option.
+
+       * system.h (malloc, realloc): Declare only if !HAVE_STDLIB_H.
+       (memchr): Declare only if !HAVE_MEMCHR.  These changes are
+       needed to keep some nonstandard hosts happy.
+
+       * util.c (memchr): Make first arg char const *
+       to match standard.
+       (xmalloc, xrealloc): Cast malloc, realloc
+       to (VOID *) to suppress bogus warnings on some nonstandard hosts.
+
+       * diff3.c (xmalloc, xrealloc): Cast malloc, realloc
+       to (VOID *) to suppress bogus warnings on some nonstandard hosts.
+
+       * sdiff.c (xmalloc, xrealloc): Cast malloc, realloc
+       to (VOID *) to suppress bogus warnings on some nonstandard hosts.
+       (lf_copy, lf_skip, lf_snarf): Cast memchr to (char *)
+       to suppress bogus warnings on some nonstandard hosts.
+       (memchr): Make first arg char const *
+       to match standard.
+
+Mon Sep 27 00:23:37 1993  Paul Eggert  (eggert@twinsun.com)
+
+       * Version 2.5 released.
+
+       * analyze.c (diff_2_files): Work around memcmp bug with size=0.
+
+       * cmp.c (main, usage, version_string): Add --version option.
+       * Makefile.in (cmp): Add version.o.
+
+       * diff.c (add_exclude_file): Cast memchr to (char *)
+       to suppress bogus warnings on some nonstandard hosts.
+       * sdiff.c (lf_copy, lf_skip, lf_snarf): Likewise.
+
+       * diff3.c, sdiff.c, util.c (xmalloc, xrealloc): Cast malloc, realloc
+       to (VOID *) to suppress bogus warnings on some nonstandard hosts.
+
+       * sdiff.c, util.c (memchr): Make first arg char const *
+       to match standard.
+
+       * system.h (malloc, realloc): Declare only if !HAVE_STDLIB_H.
+       (memchr): Declare only if !HAVE_MEMCHR.  These changes are
+       needed to keep some nonstandard hosts happy.
+
+       * xmalloc.c: Include <sys/types.h> always; some nonstandard hosts
+       need it for size_t even if STDC_HEADERS.
+
+Sat Sep 18 01:33:07 1993  Paul Eggert  (eggert@twinsun.com)
+
+       * configure.in (AC_STAT_MACROS_BROKEN): Add.
+       * system.h (S_IS{BLK,CHR,DIR,FIFO,REG,SOCK}): Fix defns if
+       STAT_MACROS_BROKEN.
+
+       * Makefile.in (diff3, sdiff, cmp): Do not link $(ALLOCA).
+
+       * analyze.c (discard_confusing_lines): Make defn static, like decl.
+       * sdiff.c (xmalloc): Likewise.
+
+       * ifdef.c (format_group): Ensure isdigit argument isn't < 0.
+
+       * side.c (print_half_line): Use isprint, since some hosts lack isgraph.
+       * util.c (output_1_line): Likewise.  Ensure its argument isn't < 0.
+       (xmalloc, xrealloc): Remove needless casts.
+
+       * system.h (volatile, const):
+       Define these before including any system headers,
+       so that they're used consistently in all system includes.
+       (getenv, malloc, realloc): Declare even if HAVE_STDLIB_H, since some
+       <stdlib.h>s don't declare them.
+       (memchr): Likewise for <string.h>.
+
+       * cmp.c, diff3.c, diff.h, sdiff.c: Include "system.h" first.
+       * diff.c: Remove redundant "system.h" inclusion.
+
+       * diff3.c (xmalloc): Now static.
+       (xmalloc, realloc): Remove needless casts.
+       (READNUM): Ensure isdigit argument isn't negative.
+
+Wed Sep 14 07:14:15 1993  Paul Eggert  (eggert@twinsun.com)
+
+       * Version 2.4 released.
+
+       * ifdef.c (scan_char_literal): New function, for new %c'x' and
+       %c'\ooo' format specs.
+       (format_group, print_ifdef_lines): Use it.  Remove %0 format spec.
+
+       * cmp.c (cmp): Don't try to read past end of file; this doesn't
+       work on ttys.
+
+       * system.h, version.c: #include <config.h>, not "config.h", to allow
+       configuring in a separate directory when the source directory has
+       already been configured.
+       * Makefile.in (COMPILE): New defn, with proper -I options so that
+       `#include <config.h>' works.
+       (.c.o, diff3.o, sdiff.o): Use it.
+
+Mon Sep 13 06:45:43 1993  Paul Eggert  (eggert@twinsun.com)
+
+       * diff.c (main, longopts): Add --line-format=FORMAT option.
+       (specify_format): Args no longer const pointers.  All callers changed.
+
+       * ifdef.c: Add support for %?c, %(A=B?T:E), PRINTF_SPECn formats.
+       (struct group): New struct.
+       (print_ifdef_lines): Use it to simplify argument passing.
+       Remove the convention that last arg -1 signifies that the lines
+       from file 2 are the same as the lines from file 1; this
+       convention no longer works, now that line numbers might be
+       printed out, since the line numbers may differ.
+       Add first FILE * argument to output to.  All callers changed.
+       Use a faster test for the single-fwrite optimization.
+       (format_group, scan_printf_spec, groups_letter_value): New functions.
+
+       * diff.h (group_format, line_format): No longer const pointers.
+       (format_ifdef): 1st arg is no longer const pointer.
+
+       * configure.in: Configure HAVE_LIMITS_H, HAVE_STDLIB_H.
+       * system.h <limits.h>, <stdlib.h>, <string.h>:
+       Include only if HAVE_LIMITS_H etc.
+
+       * system.h (memcmp, memcpy, strchr, strrchr, struct dirent): Prefer
+       these standard names to the traditional names (bcmp, bcpy, index,
+       rindex, struct direct).  All callers changed.
+
+       * system.h (PARAMS, VOID):
+       Define earlier so that malloc decl can use VOID.
+       (STAT_BLOCKSIZE): Simplify ersatz defn; just use 8K.
+
+Fri Sep  3 00:21:02 1993  Paul Eggert  (eggert@twinsun.com)
+
+       * diff.c (compare_files): Two files with the same name must be
+       the same file; avoid a needless `stat' in that case.
+
+Fri Aug 27 06:59:03 1993  Paul Eggert  (eggert@twinsun.com)
+
+       * Pervasive changes for portability to 64-bit hosts:
+       Add prototypes to function declarations.
+       Use size_t, not int, when needed.
+
+       * Other pervasive changes:
+       Use `const' more often.
+       Use STD{IN,OUT,ERR}_FILENO instead of [012].
+       Use 0, not NULL, for portability to broken hosts.
+
+       * Makefile.in: (srcs, objs, distfiles, cmp): New files cmpbuf.[ch].
+       (distfiles): New files config.h.in, mkinstalldirs.
+       (.c.o): Add -DHAVE_CONFIG_H.
+
+       * analyze.c: (diag): Pacify `gcc -Wall' with a useless assignment.
+       (diff_2_files): Use l.c.m., not max, of files' buffer sizes.
+
+       * cmp.c: Make globals static when possible.
+
+       (file): Now a 2-element array; replaces `file1' and `file2'.
+       (file_desc, buffer): Likewise, for file[12]_desc and buf[12].
+       (main): Likewise, for stat_buf[12].  Index these variables with `i'.
+
+       (ignore_initial): New var.
+       (long_options): Now const.  Add `--ignore-initial'.
+       (usage): Sort options and add `--ignore-initial'.
+       (main, cmp): Add `--ignore-initial' support.
+
+       (main): `cmp - -' now succeeds.
+       When comparing standard input to a file, and using a shortcut (e.g.
+       looking at file sizes or inode numbers), take the lseek offset into
+       account before deciding whether the files are identical.
+       Avoid mentioning `dev_t', `ino_t' for portability to nonstandard hosts.
+       Use l.c.m. of files' buffer sizes, not 8 * 1024.
+       ferror (stdout) does not imply errno has a useful value.
+       If 2nd file is "-", treat it first, in case stdin is closed.
+
+       (cmp): Always compute `char_number', `smaller' for speed and simplicity.
+       Say `cmp: EOF on input', not `/usr/gnu/bin/cmp: EOF on input',
+       as per Posix.2.
+
+       (block_compare_and_count): Increment line_number argument.
+       Remove end_char argument; it's always '\n'.  All callers changed.
+       Do not assume sizeof(long) == 4; this isn't true on some 64-bit hosts.
+       (block_compare): Minimize differences with block_compare_and_count.
+
+       (block_read): Coalesce `bp += nread's.
+
+       (printc): Remove `FILE *' arg; output to stdout.  All callers changed.
+
+       * configure.in: Configure HAVE_SIGACTION, RETSIGTYPE, HAVE_VPRINTF.
+       Configure into config.h.
+
+       * context.c (print_context_label):
+       Standard input's st_mtime is no longer a special case
+       here, since `compare_files' now sets it to the current time.
+
+       * diff.c (usage): Sort options.
+       (filetype): New function.
+       (compare_files): Set stdin's st_mtime to be the current time.
+       Leave its name "-" instead of changing it to "Standard Input";
+       to test whether a file is stdin, we must compare its name to "-" instead
+       of its desc to 0, since if it's closed other file descs may be 0.
+       When comparing standard input to a file, and using a shortcut (e.g.
+       looking at file sizes or inode numbers), take the lseek offset into
+       account before deciding whether the files are identical.
+       Pretend that nonexistent files have the same filetype as existing files.
+       Rename `errorcount' to `failed', since it's boolean.
+       In directory comparisons, if a file is neither a regular file nor a
+       directory, just print its type and the other file's type.
+
+       * diff.h (Is_space, textchar): Remove.
+       (struct msg, msg_chain, msg_chain_end): Move to util.c.
+       (VOID): Move to system.h.
+       (line_cmp, version_string, change_letter, print_number_range,
+       find_change): New decls.
+
+       * diff.texi:
+       whitespace -> white space.  It now stands for whatever isspace yields.
+       Add --ignore-initial.
+
+       * diff3.c (VOID): Move to system.h.
+       (version_string): Now char[].
+       (usage): Sort options.
+       (process_diff): Pacify `gcc -Wall' with a useless assignment.
+       (read_diff): pid is of type pid_t, not int.  Use waitpid if available.
+       (output_diff3): Simplify test for `\ No newline at end of file' message.
+
+       * dir.c (struct dirdata): Rename `files' to `names' to avoid confusion
+       with external struct file_data `files'.
+
+       * io.c (line_cmp): Move declaration to diff.h.
+       (textchar): Remove.
+       (find_and_hash_each_line): Use locale's definition of white space
+       instead of using one hardwired defn for -b and another for -w.
+
+       * normal.c (change_letter, print_number_range, find_change):
+       Move decls to diff.h.
+       (print_normal_hunk): Now static.
+
+       * sdiff.c (SEEK_SET): Move to system.h.
+       (version_string): Now char[], not char*.
+       (private_tempnam): Remove hardcoded limit on temporary file names.
+       (exiterr, perror_fatal, main): When exiting because of a signal,
+       exit with that signal's status.
+       (lf_refill, main, skip_white, edit, interact): Check for signal.
+       (ignore_SIGINT): Renamed from `ignore_signals'.
+       (NUM_SIGS, initial_handler): New macros.
+       (initial_action, signal_received, sigs_trapped): New vars.
+       (catchsig, trapsigs): Use sigaction if possible, since this closes the
+       windows of vulnerability that `signal' has.  Use RETSIGTYPE not void.
+       When a signal comes in, just set a global variable; this is safer.
+       (checksigs, untrapsig): New functions.
+       (edit): Pacify `gcc -Wall' with a useless assignment.
+       Respond to each empty line with help, not to every other empty line.
+       (private_tempnam): Remove hardcoded limit on temporary file name length.
+       Don't assume sizeof (pid_t) <= sizeof (int).
+
+       * system.h: (S_IXOTH, S_IXGRP, S_IXUSR,
+       SEEK_SET, SEEK_CUR,
+       STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO):
+       New macros, if system doesn't define them.
+       (volatile): Don't define if already defined.
+       (PARAMS): New macro.
+       (VOID): Move here from diff.h.
+
+       * util.c (struct msg, msg_chain, msg_chain_end): Moved here from diff.h.
+       (message5): New function.
+       (pr_pid): New var.
+       (begin_output): Allocate `name' more precisely.
+       Put child pid into pr_pid, so that we can wait for it later.
+       Don't check execl's return value, since any return must be an error.
+       (finish_output): Detect and report output errors.
+       Use waitpid if available.  Check pr exit status.
+       (line_cmp): Use locale's definition of white space
+       instead of using one hardwired defn for -b and another for -w.
+       (analyze_cmp): Avoid double negation with `! nontrivial'.
+       Pacify `gcc -Wall' be rewriting for-loop into do-while-loop.
+       (dir_file_pathname): New function.
+
+       * version.c (version_string): Now char[], not char*.
+
+Thu Jul 29 20:44:30 1993  David J. MacKenzie  (djm@wookumz.gnu.ai.mit.edu)
+
+       * Makefile.in (config.status): Run config.status --recheck, not
+       configure, to get the right args passed.
+
+Thu Jul 22 10:46:30 1993  Paul Eggert  (eggert@twinsun.com)
+
+       * Makefile.in (dist): Replace `if [ ! TEST ]; then ACTION; fi'
+       with `[ TEST ] || ACTION || exit' so that the containing for-loop exits
+       with proper status for `make'.
+
+Thu Jul  8 19:47:22 1993  David J. MacKenzie  (djm@goldman.gnu.ai.mit.edu)
+
+       * Makefile.in (installdirs): New target.
+       (install): Use it.
+       (Makefile, config.status, configure): New targets.
+
+Sat Jun  5 23:10:40 1993  Paul Eggert  (eggert@twinsun.com)
+
+       * Makefile.in (dist): Switch from .z to .gz.
+
+Wed May 26 17:16:02 1993  Paul Eggert  (eggert@twinsun.com)
+
+       * diff.c (main): Cast args to compare_files, for traditional C.
+       * side.c (print_sdiff_common_lines_print_sdiff_hunk): Likewise.
+       * analyze.c, diff3.c, sdiff.c, util.c: Don't assume NULL is defined
+       properly.
+
+Tue May 25 14:54:05 1993  Paul Eggert  (eggert@twinsun.com)
+
+       * analyze.c (diff_2_files):  With -q, do not report that files differ
+       if all their differences are ignored.
+       (briefly_report): New function.
+       * diff.h (ignore_some_changes): New variable.
+       * diff.c (compare_files): Don't use the file size shortcut if
+       ignore_some_changes is nonzero, since the file size may differ
+       merely due to ignored changes.
+       (main):  Set ignore_some_changes if we might ignore some changes.
+       Remove unsystematic assignment of 0 to static vars.
+       * io.c (read_files): New argument PRETEND_BINARY says whether to
+       pretend the files are binary.
+
+       * diff3.c (tab_align_flag): New variable, for new -T option.
+       (main, usage, output_diff3): Add support for -T.
+
+Sun May 23 15:25:29 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+
+       * dir.c (dir_sort): Always init `data' to avoid GCC warning.
+
+Sat May 22 15:35:02 1993  Paul Eggert  (eggert@twinsun.com)
+
+       * Makefile.in (dist): Change name of package from diff to diffutils.
+       Don't bother to build .Z dist; .z suffices.
+
+Fri May 21 16:35:22 1993  Paul Eggert  (eggert@twinsun.com)
+
+       * diff.c: Include "system.h" to get memchr declaration.
+       * system.h (memchr): Declare if !HAVE_MEMCHR, not if
+       !HAVE_MEMCHR && !STDC_HEADERS.
+
+Wed May 19 17:43:55 1993  Paul Eggert  (eggert@twinsun.com)
+
+       * Version 2.3 released.
+
+Fri Apr 23 17:18:44 1993  Paul Eggert  (eggert@twinsun.com)
+
+       * io.c (find_identical_ends): Do not discard the last HORIZON_LINES
+       lines of the prefix, or the first HORIZON_LINES lines of the suffix.
+       * diff.c (main, longopts, usage): Add --horizon-lines option.
+       * diff3.c (main, process_diff, read_diff): Invoke second diff
+       with --horizon-lines determined by the first diff.
+       * diff.h, diff3.c (horizon_lines): New variable.
+
+Mon Mar 22 16:16:00 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)
+
+       * system.h [HAVE_STRING_H || STDC_HEADERS] (bcopy, bcmp, bzero):
+       Don't define if already defined.
+
+Fri Mar  5 00:20:16 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+
+       * diff.c (main): Use NULL in arg to compare_files.
+
+Thu Feb 25 15:26:01 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)
+
+       * system.h: Declare memchr #if !HAVE_MEMCHR && !STDC_HEADERS,
+       not #if !HAVE_MEMCHR || !STDC_HEADERS.
+
+Mon Feb 22 15:04:46 1993  Richard Stallman  (rms@geech.gnu.ai.mit.edu)
+
+       * io.c (find_identical_ends): Move complicated arg outside GUESS_LINES.
+
+Mon Feb 22 12:56:12 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)
+
+       * Makefile.in (.c.o): Add -I$(srcdir); put $(CFLAGS) last before $<.
+
+Sat Feb 20 19:18:56 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+
+       * io.c (binary_file_p): Return zero if file size is zero.
+
+Fri Feb 19 17:31:32 1993  Roland McGrath  (roland@geech.gnu.ai.mit.edu)
+
+       * Version 2.2 released.
+
+       * system.h [HAVE_STRING_H || STDC_HEADERS] (index, rindex): Don't
+       define if already defined.
+
+Wed Feb 17 17:08:00 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)
+
+       * Makefile.in (srcs): Remove limits.h.
+
+Thu Feb 11 03:36:00 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+
+       * diff3.c (xmalloc): No longer static.
+
+       * sdiff.c (edit): Allocate buf dynamically.
+
+       * dir.c (dir_sort): Handle VOID_CLOSEDIR.
+
+Wed Feb 10 00:15:54 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+
+       * limits.h: File deleted (should never have been there).
+
+Tue Feb  9 03:53:22 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+
+       * Makefile.in (.c.o, diff3.o, sdiff.o): Put $(CFLAGS) last.
+
+Wed Feb  3 15:42:10 1993  David J. MacKenzie  (djm@goldman.gnu.ai.mit.edu)
+
+       * system.h: Don't #define const; let configure do it.
+
+Mon Feb  1 02:13:23 1993  Paul Eggert  (eggert@hal.gnu.ai.mit.edu)
+
+       * Version 2.1 released.
+
+       * Makefile.in (dist): Survive ln failures.  Create .tar.z
+       (gzipped tar) file as well as .tar.Z (compressed tar) file.
+
+Fri Jan  8 22:31:41 1993  Paul Eggert  (eggert@twinsun.com)
+
+       * side.c (print_half_line): When the input position falls
+       outside the column, do not output a tab even if the output
+       position still falls within the column.
+
+Mon Dec 21 13:54:36 1992  David J. MacKenzie  (djm@kropotkin.gnu.ai.mit.edu)
+
+       * Makefile.in (.c.o): Add -I.
+
+Fri Dec 18 14:08:20 1992  Paul Eggert  (eggert@twinsun.com)
+
+       * configure.in: Add HAVE_FCNTL_H, since system.h uses it.
+
+Tue Nov 24 10:06:48 1992  David J. MacKenzie  (djm@goldman.gnu.ai.mit.edu)
+
+       * Makefile.in: Note change from USG to HAVE_STRING_H.
+
+Mon Nov 23 18:44:00 1992  Paul Eggert  (eggert@twinsun.com)
+
+       * io.c (find_and_hash_each_line): When running out of lines,
+       double the number of allocated lines, instead of just doubling
+       that number minus the prefix lines.  This is more likely to
+       avoid the need for further memory allocation.
+
+Wed Nov 18 20:40:28 1992  Paul Eggert  (eggert@twinsun.com)
+
+       * dir.c (dir_sort): Plug memory leak: space holding directory
+       contents was not being reclaimed.  Get directory size from
+       struct file_data for initial guess at memory needed.
+       Detect errors when reading and closing directory.
+       (diff_dirs): Pass struct file_data to dir_sort.  Finish plugging leak.
+       * diff.c (compare_files): Pass struct file_data to diff_dirs.
+
+       * io.c (find_and_hash_each_line): Don't assume alloc_lines is
+       nonzero when allocating more lines.
+
+Thu Nov 12 16:02:18 1992  Paul Eggert  (eggert@twinsun.com)
+
+       * diff.c (main): Add `-U lines' as an alias for `--unified=lines'.
+
+       * diff3.c (usage): Add third --label option in example.
+
+       * util.c (analyze_hunk): Fix test for ignoring blank lines.
+
+       * configure.in, system.h: Avoid USG; use HAVE_TIME_H etc. instead.
+
+Mon Nov  9 05:13:25 1992  Paul Eggert  (eggert@twinsun.com)
+
+       * diff3.c (main, usage): Add -A or --show-all.
+       -m now defaults to -A, not -E.  Allow up to three -L options.
+       (output_diff3_edscript, output_diff3_merge):
+       Remove spurious differences between these two functions.
+       Output ||||||| for -A.  Distinguish between conflicts and overlaps.
+       (dotlines, undotlines): New functions that output `Ns', not `N,Ns'.
+       (output_diff3_edscript, output_diff3_merge): Use them.
+
+       * io.c (find_identical_ends): shift_boundaries needs an extra
+       identical line at the end, not at the beginning.
+
+       * sdiff.c (edit): execvp wants char **, not const char **.
+
+Mon Oct 19 04:39:32 1992  Paul Eggert  (eggert@twinsun.com)
+
+       * context.c (print_context_script, find_function): Context
+       line numbers start with - file->prefix_lines, not 0.
+
+       * io.c (binary_file_p): Undo last change; it was a library bug.
+
+Sun Oct 18 00:17:29 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+
+       * io.c (binary_file_p): Consider empty file as non-binary.
+
+Mon Oct  5 05:18:46 1992  Paul Eggert  (eggert@twinsun.com)
+
+       * diff3.c (main, make_3way_diff, using_to_diff3_block): Don't
+       report bogus differences (for one of -mexEX3) just because the
+       file0-file1 diffs don't line up with the file0-file2 diffs.
+       (This is entirely possible since we don't use diff's -n
+       option.)  Always compare file1 to file2, so that diff3 sees
+       those changes directly.  Typically, file2 is now the common
+       file, not file0.
+       (output_diff3_merge): The input file is file 0, not the common file.
+
+       (FC, FO): New macros; they replace FILE1, FILE0 for two-way diffs,
+       to distinguish them from three-way diffs.
+
+       * diff3.c (using_to_diff3_block): Fold repeated code into loops.
+
+       * diff3.c (make_3way_diff, process_diff): Have the *_end
+       variable point to the next field to be changed, not to the last
+       object allocated; this saves an if-then-else.
+
+       * diff3.c (process_diff): Use D_NUMLINES instead of its definiens.
+
+       * diff3.c: Make fns and vars static unless they must be external.
+
+Wed Sep 30 09:21:59 1992  Paul Eggert  (eggert@twinsun.com)
+
+       * analyze.c (diff_2_files): OUTPUT_IFDEF is now robust.
+       * diff.h (ROBUST_OUTPUT_STYLE): Likewise.
+       (default_line_format): Remove.  All refs removed.
+
+       * ifdef.c (print_ifdef_lines): Add %L.  Optimize %l\n even if user
+       specified it, as opposed to its being the default.
+
+Tue Sep 29 19:01:28 1992  Paul Eggert  (eggert@twinsun.com)
+
+       * diff.c (longopts, main): --{old,new,unchanged,changed}--group-format
+       are new options, so that -D is no longer overloaded.  Set
+       no_diff_means_no_output if --unchanged-{line,group}-format allows it.
+       * diff.h (enum line_class): New type.
+       (group_format, line_format): Use it to regularize option flags.
+       All refs changed.
+
+       * ifdef.c (format_ifdef, print_ifdef_lines): %n is no longer a format.
+
+Mon Sep 28 04:51:42 1992  Paul Eggert  (eggert@twinsun.com)
+
+       * diff.c (main, usage): Replace --line-prefix with the more general
+       --{old,new,unchanged}-line-format options.
+       * ifdef.c (format_ifdef, print_ifdef_lines): Likewise.
+       * diff.h (line_format): Renamed from line_prefix.  All refs changed.
+       * diff.h, ifdef.c (default_line_format): New variable.
+       * util.c (output_1_line): New function.
+       (print_1_line): Use it.
+
+       * ifdef.c: (format_ifdef, print_ifdef_lines): Add %0 format.
+
+Sun Sep 27 05:38:13 1992  Paul Eggert  (eggert@twinsun.com)
+
+       * diff.c (main): Add -E or --line-prefix option.  Add -D'=xxx'
+       for common lines.  Change default -D< format from copy of -D>
+       format to to -D<%<; similarly for default -D> format.
+       * diff.h (common_format, line_prefix): New variables.
+       * ifdef.c (format_ifdef): New function.
+       (print_ifdef_script, print_ifdef_hunk, print_ifdef_lines):
+       Use it for -D'=xxx', -E.
+
+       * context.c (find_hunk): Glue together two non-ignorable changes that
+       are exactly CONTEXT * 2 lines apart.  This shortens output, removes
+       a behavioral discontinuity at CONTEXT = 0, and is more compatible
+       with traditional diff.
+
+       * io.c (find_identical_ends): Slurp stdin at most once.
+
+       * util.c (print_line_line): line_flag is const char *.
+
+Thu Sep 24 15:18:07 1992  Paul Eggert  (eggert@twinsun.com)
+
+       * ifdef.c (print_ifdef_lines): New function, which fwrites a sequence
+       of lines all at once for speed.
+       (print_ifdef_script, print_ifdef_hunk): Use it.
+
+Thu Sep 24 05:54:14 1992  Paul Eggert  (eggert@twinsun.com)
+
+       * diff.c (main): Support new -D options for if-then-else formats.
+       (specify_format): New function.
+       * diff.h (ifndef_format, ifdef_format, ifnelse_format): New variables.
+       * ifdef.c (print_ifdef_hunk): Use the new variables instead of
+       a hardwired format.
+
+       * side.c (print_1sdiff_line): Represent incomplete lines on output.
+       (print_sdiff_script): Likewise.  Don't print 'q' at end,
+       since that doesn't work with incomplete lines.
+       * sdiff.c (interact): Don't assume diff output ends with 'q' line.
+       * diff.h (ROBUST_OUTPUT_STYLE): OUTPUT_SDIFF is now robust.
+
+       * sdiff.c (lf_copy, lf_snarf): Use memchr instead of index,
+       to avoid dumping core when files contain null characters.
+       (memchr): New function (if memchr is missing).
+
+       * io.c (sip): New arg SKIP_TEST to skip test for binary file.
+       (read_files): Don't bother testing second file if first is binary.
+
+Thu Sep 17 21:17:49 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)
+
+       * system.h [!USG && !_POSIX_VERSION]: Protect from conflicting
+       prototype for wait in sys/wait.h.
+
+Wed Sep 16 12:32:18 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)
+
+       * Makefile.in: Include binprefix in -DDIFF_PROGRAM.
+
+Tue Sep 15 14:27:25 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)
+
+       * Version 2.0.
+
+Sat Sep 12 01:31:19 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)
+
+       * util.c, diff.h, system.h [!HAVE_MEMCHR]: Don't use void *
+       and const when declaring memchr replacement.  Declare memchr
+       if !STDC_HEADERS && !USG.
+
+Thu Sep 10 15:17:32 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)
+
+       * Makefile.in (uninstall): New target.
+
+       * diff.c (excluded_filename): Use fnmatch, not wildmat.
+       (usage): Document -x, -X, --exclude, --exclude-from.
+       Makefile.in: Use fnmatch.c, not wildmat.c.
+
+Sun Sep  6 23:46:25 1992  Paul Eggert (eggert@twinsun.com)
+
+       * configure.in: Add HAVE_MEMCHR.
+       * diff.h, util.c: Use it instead of MEMCHR_MISSING.
+
+Sun Sep  6 07:25:49 1992  Paul Eggert (eggert@twinsun.com)
+
+       * diff.h: (struct line_def): Replace this 3-word struct with char *.
+       This uses less memory, particularly for large files with short lines.
+       (struct file_data): New member linbuf_base counts number of lines
+       in common prefix that are not recorded in linbuf;
+       this uses less memory if files are identical or differ only at end.
+       New member buffered_lines counts possibly differing lines.
+       New member valid_lines counts valid data.
+       New member alloc_lines - linbuf_base replaces old linbufsize.
+       linbuf[0] now always points at first differing line.
+       Remove unused members ltran, suffix_lines.
+       Add const where appropriate.
+       (Is_space): New macro, for consistent definition of `white space'.
+       (excluded_filename, memchr, sip, slurp): New declarations.
+       * ed.c (print_ed_hunk): Adjust to diff.h's struct changes.
+       * context.c (pr_context_hunk): Likewise.
+       * ifdef.c (print_ifdef_script): Likewise.
+       * side.c (print_sdiff_script, print_half_line): Likewise.
+       * util.c (analyze_hunk, line_cmp, print_1_line): Likewise.
+
+       * analyze.c (shift_boundaries): Remove unneeded variable `end' and
+       unnecessary comparisons of `preceding' and `other_preceding' against 0.
+       (diff_2_files): When comparing files byte-by-byte for equality,
+       don't slurp them all in at once; just compare them a buffer at a time.
+       This can win big if they differ early on.
+       Move some code to compare_files to enable this change.
+       Use only one buffer for stdin with `diff - -'.
+       (discard_confusing_lines, diff_2_files): Coalesce malloc/free calls.
+       (build_script): Remove obsolete OUTPUT_RCS code.
+
+       * diff.c (add_exclude, add_exclude_file, excluded_filename): New fns.
+       (main): Use them for the new --exclude and --exclude-from options.
+       (compare_files): Don't open a file unless it must be read.
+       Treat `diff file file' and `diff file dir' similarly.
+       Move some code here from diff_2_files to enable this.
+       Simplify file vs dir warning.
+
+       * dir.c (dir_sort): Support new --exclude* options.
+
+       * io.c (struct equivclass): Put hash code and line length here instead
+       of struct line_def, so that they can be shared.
+       (find_and_hash_each_line): Compute equivalence class as we go,
+       instead of doing it in a separate pass; this thrashes memory less.
+       Make buckets realloc-able, since we can't preallocate them.
+       Record one more line start than there are lines, so that we can compute
+       any line's length by subtracting its start from the next line's,
+       instead of storing the length explicitly.  This saves memory.
+       Move prefix-handling code to find_identical_ends;
+       this wins with large prefixes.
+       Use Is_space, not is_space, for consistent treatment of white space.
+       (prepare_text_end): New function.
+       (find_identical_ends): Move slurping here, so it's only done when
+       needed.  Work even if the buffers are the same (because of `diff - -').
+       Compare prefixes a word at a time for speed.
+       (find_equiv_class): Delete; now done by find_and_hash_each_line.
+       (read_files): Don't slurp unless needed.
+       find_equiv_class's work is now folded into find_and_hash_each_line.
+       Don't copy stdin buffer if `diff - -'.
+       Check for running out of primes.
+       (sip, slurp): Split first part of `slurp' into another function `sip'.
+       `sip' sets things up and perhaps reads the first ST_BLKSIZE buffer to
+       see whether the file is binary; `slurp' now just finishes the job.
+       This lets diff_2_files compare binary files lazily.
+       Allocate a one-word sentinel to allow word-at-a-time prefix comparison.
+       Count prefix lines only if needed, only count the first file's prefix.
+       Don't bother to count suffix lines; it's never needed.
+       Set up linbuf[0] to point at first differing line.
+       (binary_file_p): Change test for binary files:
+       if it has a null byte in its first buffer, it's binary.
+       (primes): Add more primes.
+
+       * util.c (line_cmp): Use bcmp for speed.
+       Use Is_space, not is_space, for consistent treatment of white space.
+       (translate_line_number): Internal line numbers now count from 0
+       starting after the prefix.
+       (memchr): New function (if memchr is missing).
+
+       * Makefile.in: Document HAVE_ST_BLKSIZE.  Link with wildmat.o.
+       * system.h (STAT_BLOCKSIZE): New macro based on HAVE_ST_BLKSIZE.
+       * configure.in: Add AC_ST_BLKSIZE.
+       * wildmat.c: New file.
+
+Fri Sep  4 01:28:51 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+
+       * sdiff.c (xmalloc): Renamed from ck_malloc.  Callers changed.
+
+Thu Sep  3 15:28:59 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)
+
+       * diff.h: Don't declare free, index, rindex.
+
+Tue Aug 11 22:18:06 1992  John Gilmore  (gnu at cygnus.com)
+
+       * io.c (binary_file_p):  Use heuristic to avoid declaring info
+       files as binary files.  Allow about 1.5% non-printing
+       characters (in info's case, ^_).
+
+Tue Jul  7 01:09:26 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)
+
+       * diff.h: Replace function_regexp and ignore_regexp with lists
+       of compiled regexps.
+       * analyze.c, context.c, util.c: Test whether the lists, not
+       the old variables, are empty.
+       * util.c (analyze_hunk), context.c (find_function): Compare
+       lines with the lists of regexps.
+       * diff.c (add_regexp): New function.
+       (main): Use it.
+
+       * diff3: Add -v --version option.
+       * Makefile.in: Link with version.o.
+
+       * system.h: New file.
+       * diff.h, cmp.c, diff3.c, sdiff.c: Use it.
+
+       * diff.h, diff3.c: Include string.h or strings.h, as appropriate.
+       Declare malloc and realloc.
+
+       * diff3.c (perror_with_exit): Include program name in message.
+
+       * diff3.c: Lowercase error messages for GNU standards.
+
+       * sdiff.c [USG || STDC_HEADERS]: Define bcopy in terms of memcpy.
+
+       * sdiff.c: Use the version number from version.c.
+       * Makefile.in: Link with version.o.
+
+       * cmp.c error.c xmalloc.c: New files from textutils.
+       * Makefile.in: Add rules for them.
+
+       * diff.c (longopts): --unidirectional-new-file is like -P, not -N.
+       Rename --file-label to --label (leave old name, but undocumented).
+
+       * sdiff.c, diff.c (usage): Condense messages and fix some errors.
+
+       * diff3.c (main, usage): Add long-named options.
+
+Fri Jul  3 14:31:18 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)
+
+       * diff.h, diff3.c, sdiff.c: Change FOO_MISSING macros to HAVE_FOO.
+
+Thu Jun 25 16:59:47 1992  David J. MacKenzie  (djm@apple-gunkies.gnu.ai.mit.edu)
+
+       * diff.c: --reversed-ed -> --forward-ed.
+
+Wed Feb 26 12:17:32 1992  Paul Eggert  (eggert@yata.uucp)
+
+       * analyze.c, diff.c, diff.h, io.c: For -y, compare even if same file.
+
+Fri Feb 14 22:46:38 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+
+       * io.c, diff3.c, analyze.c: Add extra parentheses.
+
+Sun Feb  9 00:22:42 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+
+       * diff.h (unidirectional_new_file_flag): New variable.
+       * diff.c (main): Set that for -P.
+       (compare_files): Support -P, somewhat like -N.
+       (longopts): Support long name for -P.
+
+Sat Jan  4 20:10:34 1992  Paul Eggert (eggert at yata.uucp)
+
+       * Makefile.in: Distribute diff.info-* too.
+
+       * README, sdiff.c: version number now matches version.c.
+
+       * configure: Fix and document vfork test.
+
+       * ifdef.c: Don't dump core if `diff -Dx f f'.
+
+Mon Dec 23 23:36:08 1991  David J. MacKenzie  (djm at wookumz.gnu.ai.mit.edu)
+
+       * diff.h, diff3.c, sdiff.c: Change POSIX ifdefs to
+       HAVE_UNISTD_H and _POSIX_VERSION.
+
+Wed Dec 18 17:00:31 1991  David J. MacKenzie  (djm at wookumz.gnu.ai.mit.edu)
+
+       * Makefile.in (srcs): Add sdiff.c.
+       (tapefiles): Add diff.texi and diff.info.
+
+       * diff.h, diff3.c, sdiff.c: Use HAVE_VFORK_H instead of
+       VFORK_HEADER and VFORK_WORKS.
+
+Tue Dec 17 00:02:59 1991  Paul Eggert  (eggert at yata.uucp)
+
+       * Makefile.in (all): Add diff.info, sdiff.
+
+       * configure, diff.c, sdiff.c:
+       Prefix long options with `--', not `+'.
+       * diff.c: Regularize option names.
+
+       * configure: Fix check for vfork.
+       * configure, diff.c, diff.h, diff3.c, sdiff.c:
+       Use Posix definitions when possible.
+
+       * context.c: Align context with tab if -T is given.  Tune.
+       * diff.c, diff.h, side.c: Calculate column widths so that tabs line up.
+       * io.c: Add distinction between white space and printing chars.
+       * side.c: Don't expand tabs unless -t is given.
+       * side.c, util.c: Tab expansion now knows about '\b', '\f', '\r', '\v'.
+       * util.c: -w skips all white space.  Remove lint.  Tune.
+
+       * sdiff.c: Support many more diff options, e.g. `-', `sdiff file dir'.
+       Ignore interrupts while the subsidiary editor is in control.
+       Clean up temporary file and kill subsidiary diff if interrupted.
+       Ensure subsidiary diff doesn't ignore SIGPIPE.
+       Don't get confused while waiting for two subprocesses.
+       Don't let buffers overflow.  Check for I/O errors.
+       Convert to GNU style.  Tune.
+
+       * sdiff.c, util.c: Don't lose errno.
+       Don't confuse sdiff with messages like `Binary files differ'.
+       * sdiff.c, side.c: Don't assume that common lines are identical.
+       Simplify --sdiff-merge-assist format.
+
+Mon Sep 16 16:42:01 1991  Tom Lord  (lord at churchy.gnu.ai.mit.edu)
+
+       * Makefile.in, sdiff.c: introduced sdiff front end to diff.
+
+       * Makefile.in, analyze.c, diff.c, diff.h, io.c, side.c: Added
+       sdiff-style output format to diff.
+
+Mon Aug 26 16:44:55 1991  David J. MacKenzie  (djm at pogo.gnu.ai.mit.edu)
+
+       * Makefile.in, configure: Only put $< in Makefile if using VPATH,
+       because older makes don't understand it.
+
+Fri Aug  2 12:22:30 1991  David J. MacKenzie  (djm at apple-gunkies)
+
+       * configure: Create config.status.  Remove it and Makefile if
+       interrupted while creating them.
+
+Thu Aug  1 22:24:31 1991  David J. MacKenzie  (djm at apple-gunkies)
+
+       * configure: Check for +srcdir etc. arg and look for
+       Makefile.in in that directory.  Set VPATH if srcdir is not `.'.
+       * Makefile.in: Get rid of $(archpfx).
+
+Tue Jul 30 21:28:44 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)
+
+       * Makefile.in (prefix): Renamed from DESTDIR.
+
+Wed Jul 24 23:08:56 1991  David J. MacKenzie  (djm at wookumz.gnu.ai.mit.edu)
+
+       * diff.h, diff3.c: Rearrange ifdefs to use POSIX,
+       STDC_HEADERS, VFORK_MISSING, DIRENT.  This way it works on
+       more systems that aren't pure USG or BSD.
+       Don't not define const if __GNUC__ is defined -- that would
+       break with -traditional.
+       * configure: Check for those features.
+
+Wed Jul 10 01:39:23 1991  David J. MacKenzie  (djm at wookumz.gnu.ai.mit.edu)
+
+       * configure, Makefile.in: $(INSTALLPROG) -> $(INSTALL).
+
+Sat Jul  6 16:39:04 1991  David J. MacKenzie  (djm at geech.gnu.ai.mit.edu)
+
+       * Replace Makefile with configure and Makefile.in.
+       Update README with current compilation instructions.
+
+Sat Jul  6 14:03:29 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)
+
+       * util.c (setup_output): Just save the args for later use.
+       (begin_output): Do the real work, with the values that were saved.
+       It's safe to call begin_output more than once.
+       Print the special headers for context format here.
+       * analyze.c (diff_2_files): Don't print special headers here.
+       * context.c (pr_context_hunk, pr_unidiff_hunk): Call begin_output.
+       * ed.c (print_ed_hunk, print_forward_ed_hunk, print_rcs_hunk):
+       * normal.c (print_normal_hunk): Likewise.
+       * ifdef.c (print_ifdef_hunk): Likewise.
+       * util.c (finish_output): Don't die if begin_output was not called.
+
+Thu Jun 20 23:10:01 1991  David J. MacKenzie  (djm at geech.gnu.ai.mit.edu)
+
+       * Makefile: Add TAGS, distclean, and realclean targets.
+       Set SHELL.
+
+Tue Apr 30 13:54:36 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)
+
+       * diff.h (TRUE, FALSE): Undefine these before defining.
+
+Thu Mar 14 18:27:27 1991  Richard Stallman  (rms@mole.ai.mit.edu)
+
+       * Makefile (objs): Include $(ALLOCA).
+
+Sat Mar  9 22:34:03 1991  Richard Stallman  (rms at mole.ai.mit.edu)
+
+       * diff.h: Include regex.h.
+
+Thu Feb 28 18:59:53 1991  Richard Stallman  (rms at mole.ai.mit.edu)
+
+       * Makefile (diff3): Link with GNU getopt.
+
+Sat Feb 23 12:49:43 1991  Richard Stallman  (rms at mole.ai.mit.edu)
+
+       * io.c (find_equiv_class): Make hash code unsigned before mod.
+
+       * diff.h (files): Add EXTERN.
+
+Sun Jan 13 21:33:01 1991  Richard Stallman  (rms at mole.ai.mit.edu)
+
+       * diff.c: +print option renamed +paginate.  Remove +all-text.
+
+Mon Jan  7 06:18:01 1991  David J. MacKenzie  (djm at geech.ai.mit.edu)
+
+       * Makefile (dist): New target, replacing diff.tar and
+       diff.tar.Z, to encode version number in distribution directory
+       and tar file names.
+
+Sun Jan  6 18:42:23 1991  Michael I Bushnell  (mib at geech.ai.mit.edu)
+
+       * Version 1.15 released.
+
+       * version.c: Updated from 1.15 alpha to 1.15
+
+       * context.c (print_context_number_range,
+       print_unidiff_number_range): Don't print N,M when N=M, print
+       just N instead.
+
+       * README: Updated for version 1.15.
+       Makefile: Updated for version 1.15.
+
+       * diff3.c (main): Don't get confused if one of the arguments
+       is a directory.
+
+       * diff.c (compare_files): Don't get confused if comparing
+       standard input to a directory; print error instead.
+
+       * analyze.c (diff_2_files), context.c (print_context_header,
+       print_context_script), diff.c (main), diff.h (enum
+       output_style): Tread unidiff as an output style in its own
+       right.  This also generates an error when both -u and -c are
+       given.
+
+       * diff.c (main): Better error messages when regexps are bad.
+
+       * diff.c (compare_files): Don't assume stdin is opened.
+
+       * diff3.c (read_diff): Don't assume things about the order of
+       descriptor assignment and closes.
+
+       * util.c (setup_output): Don't assume things about the order
+       of descriptor assignment and closes.
+
+       * diff.c (compare_files): Set a flag so that closes don't
+       happen more than once.
+
+       * diff.c (main): Don't just flush stdout, do a close.  That
+       way on broken systems we can still get errors.
+
+Mon Dec 24 16:24:17 1990  Richard Stallman  (rms at mole.ai.mit.edu)
+
+       * diff.c (usage): Use = for args of long options.
+
+Mon Dec 17 18:19:20 1990  Michael I Bushnell  (mib at geech.ai.mit.edu)
+
+       * context.c (print_context_label): Labels were interchanged badly.
+
+       * context.c (pr_unidiff_hunk): Changes to deal with files
+       ending in incomplete lines.
+       * util.c (print_1_line): Other half of the changes.
+
+Mon Dec  3 14:23:55 1990  Richard Stallman  (rms at mole.ai.mit.edu)
+
+       * diff.c (longopts, usage): unidiff => unified.
+
+Wed Nov  7 17:13:08 1990  Richard Stallman  (rms at mole.ai.mit.edu)
+
+       * analyze.c (diff_2_files): No warnings about newlines for -D.
+
+       * diff.c (pr_unidiff_hunk): Remove ref to output_patch_flag.
+
+Tue Oct 23 23:19:18 1990  Richard Stallman  (rms at mole.ai.mit.edu)
+
+       * diff.c (compare_files): For -D, compare even args are same file.
+       * analyze.c (diff_2_files): Likewise.
+       Also, output even if files have no differences.
+
+       * analyze.c (diff_2_files): Print missing newline messages last.
+       Return 2 if a newline is missing.
+       Print them even if files end with identical text.
+
+Mon Oct 22 19:40:09 1990  Richard Stallman  (rms at mole.ai.mit.edu)
+
+       * diff.c (usage): Return 2.
+
+Wed Oct 10 20:54:04 1990  Richard Stallman  (rms at mole.ai.mit.edu)
+
+       * diff.c (longopts): Add +new-files.
+
+Sun Sep 23 22:49:29 1990  Richard Stallman  (rms at mole.ai.mit.edu)
+
+       * context.c (print_context_script): Handle unidiff_flag.
+       (print_context_header): Likewise.
+       (print_unidiff_number_range, pr_unidiff_hunk): New functions.
+       * diff.c (longopts): Add element for +unidiff.
+       (main): Handle +unidiff and -u.
+       (usage): Mention them.
+
+Wed Sep  5 16:33:22 1990  Richard Stallman  (rms at mole.ai.mit.edu)
+
+       * io.c (find_and_hash_each_line): Deal with missing final newline
+       after buffering necessary context lines.
+
+Sat Sep  1 16:32:32 1990  Richard Stallman  (rms at mole.ai.mit.edu)
+
+       * io.c (find_identical_ends): ROBUST_OUTPUT_FORMAT test was backward.
+
+Thu Aug 23 17:17:20 1990  Richard Stallman  (rms at mole.ai.mit.edu)
+
+       * diff3.c (WIFEXITED): Undef it if WEXITSTATUS is not defined.
+       * context.c (find_function): Don't try to return values.
+
+Wed Aug 22 11:54:39 1990  Richard Stallman  (rms at mole.ai.mit.edu)
+
+       * diff.h (O_RDONLY): Define if not defined.
+
+Tue Aug 21 13:49:26 1990  Richard Stallman  (rms at mole.ai.mit.edu)
+
+       * Handle -L option.
+       * context.c (print_context_label): New function.
+       (print_context_header): Use that.
+       * diff.c (main): Recognize the option.
+       (usage): Updated.
+       * diff.h (file_label): New variable.
+       * diff3.c (main): Recognize -L instead of -t.
+
+       * diff3.c (main): Support -m without other option.
+
+       * diff3.c (WEXITSTATUS, WIFEXITED): Define whenever not defined.
+
+       * diff3.c (bcopy, index, rindex): Delete definitions; not used.
+       (D_LINENUM, D_LINELEN): Likewise.
+       (struct diff_block): lengths includes newlines.
+       (struct diff3_block): Likewise.
+       (always_text, merge): New variables.
+       (read_diff): Return address of end, not size read.  Calls changed.
+       Pass -a to diff if given to diff3.
+       current_chunk_size now an int.  Detect error in `pipe'.
+       Check for incomplete line of output here.
+       (scan_diff_line): Don't make scan_ptr + 2 before knowing it is valid.
+       No need to check validity of diff output here.
+       Include newline in length of line.
+       (main): Compute rev_mapping here.  Handle -a and -m.
+       Error message if excess -t operands.  Error for incompatible options.
+       Error if `-' given more than once.
+       Fix error storing in tag_strings.
+       (output_diff3): REV_MAPPING is now an arg.  Call changed.
+       Change syntax of "missing newline" message.
+       Expect length of line to include newline.
+       (output_diff3_edscript): Return just 0 or 1.
+       REV_MAPPING is now an arg.  Call changed.
+       (output_diff3_merge): New function.
+       (process_diff): Better error message for bad diff format.
+       (fatal, perror_with_exit): Return status 2.
+
+       * analyze.c (diff_2_files): Report missing newline in either
+       or both files, if not robust output style.
+
+       * util.c (setup_output): Detect error from pipe.
+       No need to close stdin.
+
+       * util.c (print_1_line): Change format of missing-newline msg.
+       Change if statements to switch.
+
+       * io.c (slurp): Don't mention differences in final newline if -B.
+
+       * io.c (binary_file_p): Use ISO char set as criterion, not ASCII.
+
+       * io.c (find_identical_ends): Increase value of BEG0 by 1.
+       Other changes in backwards scan to avoid decrementing pointers
+       before start of array, and set LINES properly.
+
+       * diff.h (ROBUST_OUTPUT_STYLE): New macro.
+       * io.c (find_identical_ends, find_and_hash_each_line): Use that macro.
+
+       * diff.h (dup2): Don't define if XENIX.
+
+       * diff.c (main): Check for write error at end.
+
+       * context.c (find_function): Don't return a value.
+       Use argument FILE rather than global files.
+
+       * analyze.c: Add external function declarations.
+       * analyze.c (build_script): Turn off explicit check for final newline.
+
+       * analyze.c (discard_confusing_lines): Make integers unsigned.
+
+Tue Jul 31 21:37:16 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * io.c (find_and_hash_each_line): Correct the criterion
+       for leaving out the newline from the end of the line.
+
+Tue May 29 21:28:16 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * dir.c (diff_dirs): Free things only if nonzero.
+
+Mon Apr 16 18:31:05 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * diff.h (NDIR_IN_SYS): New macro controls location of ndir.h.
+
+       * diff3.c (xmalloc, xrealloc): Don't die if size == 0 returns 0.
+
+Sun Mar 25 15:58:42 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * analyze.c (discard_confusing_lines):
+       `many' wasn't being used; use it.
+       Canceling provisionals near start of run must handle already
+       canceled provisionals.
+       Canceling subruns of provisionals was canceling last nonprovisional.
+
+Sat Mar 24 14:02:51 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * analyze.c (discard_confusing_lines):
+       Threshold for line occurring many times scales by square root
+       of total lines.
+       Within each run, cancel any long subrun of provisionals.
+       Don't update `provisional' while canceling provisionals.
+       In big outer loop, handle provisional and nonprovisional separately.
+
+Thu Mar 22 16:35:33 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * analyze.c (discard_confusing_lines):
+       The first loops to discard provisionals from ends failed to step.
+       In second such loops, keep discarding all consecutive provisionals.
+       Increase threshold for stopping discarding, and also check for
+       consecutive nondiscardables as separate threshold.
+
+Fri Mar 16 00:33:08 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * diff3.c (read_diff): Pass -- as first arg to diff.
+
+       * diff3.c: Include wait.h or define equivalent macros.
+       (read_diff): Don't use stdio printing error in the inferior.
+       Remember the pid and wait for it.  Report failing status.
+       Report failure of vfork.
+
+Sun Mar 11 17:10:32 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * diff3.c (main): Accept -t options and pass to output_diff3_edscript.
+       (usage): Mention -t.
+       (read_diff): Use vfork.
+       (vfork): Don't use it on Sparc.
+
+       * diff.h (vfork): Don't use it on Sparc.
+
+Tue Mar  6 22:37:20 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * diff3.c (dup2): Don't define on Xenix.
+
+       * Makefile: Comments for Xenix.
+
+Thu Mar  1 17:19:23 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * analyze.c (diff_2_files): `message' requires three args.
+
+Fri Feb 23 10:56:50 1990  David J. MacKenzie  (djm at albert.ai.mit.edu)
+
+       * diff.h, util.c, diff3.c: Change 'void *' to 'VOID *', with
+       VOID defined as void if __STDC__, char if not.
+
+Sun Feb 18 20:31:58 1990  David J. MacKenzie  (djm at albert.ai.mit.edu)
+
+       * Makefile: Add rules for getopt.c, getopt1.c, getopt.h.
+
+       * getopt.c, getopt.h, getopt1.c: New files.
+
+       * main.c (main, usage): Add long options.
+
+       * analyze.c (shift_boundaries): Remove unused var 'j_end'.
+
+Thu Feb  8 02:43:16 1990  Jim Kingdon  (kingdon at pogo.ai.mit.edu)
+
+       * GNUmakefile: include ../Makerules before Makefile.
+
+Fri Feb  2 23:21:38 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * analyze.c (diff_2_files): If -B or -I, don't return 1
+       if all changes were ignored.
+
+Wed Jan 24 20:43:57 1990  Richard Stallman  (rms at albert.ai.mit.edu)
+
+       * diff3.c (fatal): Output to stderr.
+
+Thu Jan 11 00:25:56 1990  David J. MacKenzie  (djm at hobbes.ai.mit.edu)
+
+       * diff.c (usage): Mention -v.
+
+Wed Jan 10 16:06:38 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * diff3.c (output_diff3_edscript): Return number of overlaps.
+       (main): If have overlaps, exit with status 1.
+
+Sun Dec 24 10:29:20 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * io.c (find_equiv_class): Fix typo that came from changing init of B
+       to an assignment.
+
+       * version.c: New file.
+       * diff.c (main): -v prints version number.
+
+       * io.c (binary_file_p): Null char implies binary file.
+
+Fri Nov 17 23:44:55 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * util.c (print_1_line): Fix off by 1 error.
+
+Thu Nov 16 13:51:10 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * util.c (xcalloc): Function deleted.
+
+       * io.c (slurp): Null-terminate the buffer.
+
+       * io.c (read_files): Delete unused vars.
+
+       * io.c (find_equiv_class): Don't index by N if too low.
+
+       * dir.c (dir_sort): Delete the extra declaration of compare_names.
+
+       * diff.h: Don't declare xcalloc.  Declare some other functions.
+
+       * analyze.c (shift_boundaries):
+       Test for END at end of range before indexing by it.
+       Fix misspelling of `preceding' in var names.
+
+Sat Nov 11 14:04:16 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * diff3.c (using_to_diff3_block): Delete unused vars.
+       (make_3way_diff, process_diff_control, read_diff, output_diff3): Likewise.
+
+Mon Nov  6 18:15:50 EST 1989 Jay Fenlason (hack@ai.mit.edu)
+
+       * README Fix typo.
+
+Fri Nov  3 15:27:47 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * diff.c (usage): Mention -D.
+
+       * ifdef.c (print_ifdef_hunk): Write comments on #else and #endif.
+
+Sun Oct 29 16:41:07 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * diff.c (compare_files): Don't fflush for identical files.
+
+Wed Oct 25 17:57:12 1989  Randy Smith  (randy at apple-gunkies.ai.mit.edu)
+
+       * diff3.c (using_to_diff3_block): When defaulting lines from
+       FILE0, only copy up to just under the *lowest* line mentioned
+       in the next diff.
+
+       * diff3.c (fatal): Add \n to error messages.
+
+Wed Oct 25 15:05:49 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * Makefile (tapefiles): Add ChangeLog.
+
+Tue Oct  3 00:51:17 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * diff3.c (process_diff, create_diff3_block): Init ->next field.
+
+Fri Sep 29 08:16:45 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * util.c (line_cmp): Alter end char of line 2, not line 1.
+
+Wed Sep 20 00:12:37 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * Makefile (diff.tar): Expect ln to fail on some files;
+       copy them with cp.
+
+Mon Sep 18 02:54:29 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * Handle -D option:
+       * io.c (find_and_hash_each_line): Keep all lines of 1st file.
+       * diff.c (main): Handle -D option.
+       (compare_files): Reject -D if files spec'd are directories.
+       * analyze.c (diff_2_files): Handle OUTPUT_IFDEF case.
+
+Fri Sep  1 20:15:50 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * diff.c (option_list): Rename arg VECTOR as OPTIONVEC.
+
+Mon Aug 28 17:58:27 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * diff.c (compare_files): Clear entire inf[i].stat.
+
+Wed Aug 23 17:48:47 1989  Richard Stallman  (rms at apple-gunkies.ai.mit.edu)
+
+       * io.c (find_identical_ends): Sign was backward
+       determining where to bound the scan for the suffix.
+
+Wed Aug 16 12:49:16 1989  Richard Stallman  (rms at hobbes.ai.mit.edu)
+
+       * analyze.c (diff_2_files): If -q, treat all files as binary.
+       * diff.c (main): Detect -q, record in no_details_flag.
+
+Sun Jul 30 23:12:00 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * diff.c (usage): New function.
+       (main): Call it.
+
+Wed Jul 26 02:02:19 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * diff.c (main): Make -C imply -c.
+
+Thu Jul 20 17:57:51 1989  Chris Hanson  (cph at kleph)
+
+       * io.c (find_and_hash_each_line): Bug fix in context handling,
+       introduced by last change.
+
+Fri Jul 14 17:39:20 1989  Chris Hanson  (cph at kleph)
+
+       * analyze.c: To make RCS work correctly on files that don't
+       necessarily end in newline, introduce some changes that cause
+       diffs to be sensitive to missing final newline.  Because
+       non-RCS modes don't want to be affected by these changes, they
+       are conditional on `output_style == OUTPUT_RCS'.
+       (diff_2_files) [OUTPUT_RCS]: Suppress the "File X missing
+       newline" message.
+       (build_script) [OUTPUT_RCS]: Cause the last line to compare as
+       different if exactly one of the files is missing its final
+       newline.
+
+       * io.c (find_and_hash_each_line): Bug fix in
+       ignore_space_change mode.  Change line's length to include the
+       newline.  For OUTPUT_RCS, decrement last line's length if
+       there is no final newline.
+       (find_identical_ends) [OUTPUT_RCS]: If one of the files is
+       missing a final newline, make sure it's not included in either
+       the prefix or suffix.
+
+       * util.c (print_1_line): Change line output routine to account
+       for line length including the newline.
+
+Tue Jun 27 02:35:28 1989  Roland McGrath  (roland at hobbes.ai.mit.edu)
+
+       * Makefile: Inserted $(archpfx) where appropriate.
+
+Wed May 17 20:18:43 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * diff3.c [USG]: Include fcntl.h.
+
+       * diff.h [USG]: New compilation flags HAVE_NDIR, HAVE_DIRECT.
+
+Wed Apr 26 15:35:57 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * dir.c (diff_dirs): Two new args, NONEX1 and NONEX2, say to pretend
+       nonex dirs are empty.
+       (dir_sort): New arg NONEX, likewise.
+       * diff.c (compare_files): Pass those args.
+       Sometimes call diff_dirs if subdir exists in just one place.
+
+Wed Apr 12 01:10:27 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * io.c (find_identical_ends): Set END0 *after* last char
+       during backward scan for suffix.
+
+Sat Apr  8 15:49:49 1989  Randall Smith  (randy at apple-gunkies.ai.mit.edu)
+
+       * diff3.c (using_to_diff3_block): Now find high marks in files 1
+       and 2 through mapping off of the last difference instead of the
+       first.
+
+       * diff3.c: Many trivial changes to spelling inside comments.
+
+Fri Feb 24 12:38:03 1989  Randall Smith  (randy at gluteus.ai.mit.edu)
+
+       * util.c, normal.c, io.c, ed.c, dir.c, diff.h, diff.c, context.c,
+       analyze.c, Makefile: Changed copyright header to conform with new
+       GNU General Public license.
+       * diff3.c: Changed copyright header to conform with new GNU
+       General Public license.
+       * COPYING: Made a hard link to /gp/rms/COPYING.
+
+Fri Feb 24 10:01:58 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * io.c (slurp): Leave 2 chars space at end of buffer, not one.
+       (find_identical_ends): Special case if either file is empty;
+       don't try to make a sentinel since could crash.
+
+Wed Feb 15 14:24:48 1989  Jay Fenlason  (hack at apple-gunkies.ai.mit.edu)
+
+       * diff3.c (message)  Re-wrote routine to avoid using alloca()
+
+Wed Feb 15 06:19:14 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * io.c (find_identical_ends): Delete the variable `bytes'.
+
+Sun Feb 12 11:50:36 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * io.c (slurp): ->bufsize is nominal amount we have room for;
+       add room for sentinel when calling xmalloc or xrealloc.
+
+       * io.c (find_identical_ends): Do need overrun check in finding suffix.
+
+Fri Feb 10 01:28:15 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * diff.c (main): -C now takes arg to specify context length.
+       Now -p to show C function name--Damned IEEE!
+       Fatal error if context length spec'd twice.
+
+       * ed.c (print_ed_hunk): Now special treatment only for lines containing
+       precisely a dot and nothing else.  Output `..', end the insert,
+       substitute that one line, then resume the insert if nec.
+
+       * io.c (find_and_hash_lines): When backing up over starting context,
+       don't move past buffer-beg.
+
+       * io.c (find_identical_ends): Use sentinels to make the loops faster.
+       If files are identical, skip the 2nd loop and return quickly.
+       (slurp): Leave 1 char extra space after each buffer.
+
+       * analyze.c (diff_2_files): Mention difference in final newlines.
+
+Wed Jan 25 22:44:44 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * dir.c (diff_dirs): Use * when calling fcn ptr variable.
+
+Sat Dec 17 14:12:06 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * Makefile: New vars INSTALL and LIBS used in some rules;
+       provide default defns plus commented-put defns for sysV.
+
+Thu Nov 17 16:42:53 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * dir.c (dir_sort): Open-trouble not fatal; just say # files is -1.
+       (diff_dirs): If dir_sort does that, give up and return 2.
+
+       * diff.c (compare_files): Don't open directories.
+       Don't close them specially either.
+       Cross-propagate inf[i].dir_p sooner.
+
+Sun Nov 13 11:19:36 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)
+
+       * diff.h: Declare index, rindex.
+
+       * diff.c (compare_files): If comparing foodir with b/f,
+       use foodir/f, not foodir/b/f.
+
+       * diff.c (compare_files): Don't print "are identical" msg for 2 dirs.
+       Status now 1 if one file is a dir and the other isn't, etc.
+
+Thu Nov  3 16:30:24 1988  Randall Smith  (randy at gluteus.ai.mit.edu)
+
+       * Makefile: Added a define for diff3 to define DIFF_PROGRAM.
+
+       * util.c: Added hack to make sure that perror was not called with
+       a null pointer.
+
+       * diff.c: Changed S_IFDIR to S_IFMT in masking type of file bits
+       out.
+
+       * diff3.c: Included USG compatibility defines.
+
+       * diff.h: Moved sys/file.h into #else USG section (not needed or
+       wanted on System V).
+
+       * ed.c, analyze.c, context.c: Shortened names to 12 characters for
+       the sake of System V (too simple not to do).
+
+
+Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1997, 1998, 1999,
+2000, 2001, 2002 Free Software Foundation, Inc.
+
+This file is part of GNU Diffutils.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+This program is distributed in the hope that they will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; see the file COPYING.  If not, write to
+the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.
diff --git a/contrib/diffutils-2.8.1/DRAGONFLY-upgrade b/contrib/diffutils-2.8.1/DRAGONFLY-upgrade
new file mode 100644 (file)
index 0000000..b300535
--- /dev/null
@@ -0,0 +1,27 @@
+$DragonFly: src/contrib/diffutils-2.8.1/Attic/DRAGONFLY-upgrade,v 1.1.1.1 2004/04/13 14:17:23 eirikn Exp $
+
+Original source available at
+ftp://ftp.gnu.org/gnu/diffutils/diffutils-2.8.1.tar.gz
+
+The following files and directories were removed for this import:
+INSTALL
+config/
+m4/
+ms/
+po/
+src/Makefile.in
+lib/posix/Makefile.in
+lib/Makefile.in
+doc/Makefile.in
+man/Makefile.in
+Makefile.in
+aclocal.m4
+config.hin
+configure
+configure.ac
+
+Imported with command:
+ cvs import -m "Import of diffutils 2.8.1" src/contrib/diffutils-2.8.1 \
+     FSF DIFFUTILS_2_8_1
+
+ - Eirik Nygaard <eirikn@kerneled.com>
diff --git a/contrib/diffutils-2.8.1/INSTALLME b/contrib/diffutils-2.8.1/INSTALLME
new file mode 100644 (file)
index 0000000..eab4119
--- /dev/null
@@ -0,0 +1,53 @@
+Installation instructions specific to GNU Diffutils
+
+       Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+
+       This file is part of GNU Diffutils.
+
+       This program is free software; you can redistribute it and/or modify
+       it under the terms of the GNU General Public License as published by
+       the Free Software Foundation; either version 2, or (at your option)
+       any later version.
+
+       This program is distributed in the hope that it will be useful,
+       but WITHOUT ANY WARRANTY; without even the implied warranty of
+       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+       GNU General Public License for more details.
+
+       You should have received a copy of the GNU General Public License
+       along with this program; see the file COPYING.  If not, write to
+       the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+       Boston, MA 02111-1307, USA.
+
+
+Please send comments and problem reports to <bug-gnu-utils@gnu.org>.
+
+If you have a problem with internationalization, you might be able to
+work around it as described in ABOUT-NLS by invoking `./configure
+--disable-nls'.  Many of the problems arise from dynamic linking
+issues on non-GNU platforms (e.g. with the iconv library).  Such
+problems tend to be shared by other GNU applications on these
+platforms, and can usually be fixed by carefully tweaking your non-GNU
+installation.  If you have an older version of libiconv, please
+upgrade to the latest one, preferably libiconv-1.8 or newer.
+(libiconv-1.8 is not yet available as of this writing, but it should
+be out soon.)  If the problem seems isolated to diffutils, though,
+please report a bug.
+
+This program requires a Standard C compiler (C89 or later); if you
+have an older K&R compiler, please install GCC first.
+
+If you make changes to the source code, you may need recent test
+versions of GNU build tools to regenerate the intermediate files.  The
+following versions were used to generate the intermediate files in
+this distribution:
+
+* GNU Autoconf 2.53 <ftp://ftp.gnu.org/gnu/autoconf/autoconf-2.53.tar.gz>
+
+* GNU Automake 1.6 <ftp://ftp.gnu.org/gnu/automake/automake-1.6.tar.gz>
+
+* GNU gettext 0.11.1 <ftp://ftp.gnu.org/gnu/gettext/gettext-0.11.1.tar.gz>
+
+* GNU help2man 1.27 <ftp://ftp.gnu.org/gnu/help2man/help2man-1.27.tar.gz>
+
+* GNU texinfo 4.2 <ftp://ftp.gnu.org/gnu/texinfo/texinfo-4.2.tar.gz>
diff --git a/contrib/diffutils-2.8.1/Makefile.am b/contrib/diffutils-2.8.1/Makefile.am
new file mode 100644 (file)
index 0000000..a579b1d
--- /dev/null
@@ -0,0 +1,23 @@
+# Main Automakefile for GNU diffutils.
+
+# Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2, or (at your option)
+## any later version.
+
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+## GNU General Public License for more details.
+
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+## 02111-1307, USA.
+
+EXTRA_DIST = config/config.rpath exgettext INSTALLME
+SUBDIRS = doc lib m4 ms src man po
+
+ACLOCAL_AMFLAGS = -I m4
diff --git a/contrib/diffutils-2.8.1/NEWS b/contrib/diffutils-2.8.1/NEWS
new file mode 100644 (file)
index 0000000..348ac82
--- /dev/null
@@ -0,0 +1,202 @@
+User-visible changes in version 2.8.1:
+
+* Documentation fixes.
+
+User-visible changes in version 2.8:
+
+* cmp and diff now conform to POSIX 1003.1-2001 (IEEE Std 1003.1-2001)
+  if the underlying system conforms to POSIX and if the _POSIX2_VERSION
+  environment variable is set to 200112.  Conformance removes support
+  for `diff -NUM', where NUM is a number.  Use -C NUM or -U NUM instead.
+* cmp now supports trailing operands SKIP1 and SKIP2, like BSD cmp.
+* cmp -i or --ignore-initial now accepts SKIP1:SKIP2 option value.
+* New cmp option: -n or --bytes.
+* cmp's old -c or --print-chars option has been renamed;
+  use -b or --print-bytes instead.
+* cmp now outputs "byte" rather than "char" outside the POSIX locale.
+* cmp -l's index column width now adjusts to fit larger (or smaller) files.
+* cmp -l -s and cmp -s -l are not allowed.  Use cmp -s or cmp -l instead.
+* diff uses ISO 8601 style time stamps for output times (e.g. "2001-11-23
+  16:44:36.875702460 -0800") unless in the C or POSIX locale and the
+  -c style is specified.
+* diff's -I and -F options use the regexp syntax of grep, not of Emacs.
+* diff now accepts multiple context arguments, and uses their maximum value.
+* New diff and sdiff options:
+  -E  --ignore-tab-expansion
+  --strip-trailing-cr
+* New diff options:
+  --from-file=FILE, --to-file=FILE
+  --ignore-file-name-case
+  --no-ignore-file-name-case
+* New diff3 and sdiff option:
+  --diff-program=PROGRAM
+* The following diff options are still accepted, but are no longer documented.
+  They may be withdrawn in future releases.
+  -h (omit; it has no effect)
+  -H (use --speed-large-files instead)
+  -L (use --label instead)
+  -P (use --unidirectional-new-file instead)
+  --inhibit-hunk-merge (omit; it has no effect)
+* Recursive diffs now sort file names according to the LC_COLLATE locale
+  category if possible, instead of using native byte comparison.
+* Diff printf specs can now use the "0" and "'" flags.
+* The new sdiff interactive command `ed' precedes each version with a header.
+* On 64-bit hosts, files larger than 2 GB can be compared.
+* Some internationalization support has been added, but multibyte locales
+  are still not completely supported yet.
+* Some diagnostics have been reworded slightly for consistency.
+  Also, `diff -D FOO' now outputs `/* ! FOO */' instead of `/* not FOO */'.
+* The `patch' part of the manual now describes `patch' version 2.5.4.
+* Man pages are now distributed and installed.
+* There is support for DJGPP; see the 'ms' subdirectory and the files
+  m4/dos.m4 and */setmode.*.
+
+
+User-visible changes in version 2.7:
+
+* New diff option: --binary (useful only on non-POSIX hosts)
+* diff -b and -w now ignore line incompleteness; -B no longer does this.
+* cmp -c now uses locale to decide which output characters to quote.
+* Help and version messages are reorganized.
+
+
+User-visible changes in version 2.6:
+
+* New cmp, diff, diff3, sdiff option: --help
+* A new heuristic for diff greatly reduces the time needed to compare
+  large input files that contain many differences.
+* Partly as a result, GNU diff's output is not exactly the same as before.
+  Usually it is a bit smaller, but sometimes it is a bit larger.
+
+
+User-visible changes in version 2.5:
+
+* New cmp option: -v --version
+
+
+User-visible changes in version 2.4:
+
+* New cmp option: --ignore-initial=BYTES
+* New diff3 option: -T --initial-tab
+* New diff option: --line-format=FORMAT
+* New diff group format specifications:
+  <PRINTF_SPEC>[eflmnEFLMN]
+      A printf spec followed by one of the following letters
+      causes the integer corresponding to that letter to be
+      printed according to the printf specification.
+      E.g. `%5df' prints the number of the first line in the
+      group in the old file using the "%5d" format.
+       e: line number just before the group in old file; equals f - 1
+       f: first line number in group in the old file
+       l: last line number in group in the old file
+       m: line number just after the group in old file; equals l + 1
+       n: number of lines in group in the old file; equals l - f + 1
+       E, F, L, M, N: likewise, for lines in the new file
+  %(A=B?T:E)
+      If A equals B then T else E.  A and B are each either a decimal
+      constant or a single letter interpreted as above.  T and E are
+      arbitrary format strings.  This format spec is equivalent to T if
+      A's value equals B's; otherwise it is equivalent to E.  For
+      example, `%(N=0?no:%dN) line%(N=1?:s)' is equivalent to `no lines'
+      if N (the number of lines in the group in the the new file) is 0,
+      to `1 line' if N is 1, and to `%dN lines' otherwise.
+  %c'C'
+      where C is a single character, stands for the character C.  C may not
+      be a backslash or an apostrophe.  E.g. %c':' stands for a colon.
+  %c'\O'
+      where O is a string of 1, 2, or 3 octal digits, stands for the
+      character with octal code O.  E.g. %c'\0' stands for a null character.
+* New diff line format specifications:
+  <PRINTF_SPEC>n
+      The line number, printed with <PRINTF_SPEC>.
+      E.g. `%5dn' prints the line number with a "%5d" format.
+  %c'C'
+  %c'\O'
+      The character C, or with octal code O, as above.
+* Supported <PRINTF_SPEC>s have the same meaning as with printf, but must
+  match the extended regular expression %-*[0-9]*(\.[0-9]*)?[doxX].
+* The format spec %0 introduced in version 2.1 has been removed, since it
+  is incompatible with printf specs like %02d.  To represent a null char,
+  use %c'\0' instead.
+* cmp and diff now conform to POSIX 1003.2-1992 (ISO/IEC 9945-2:1993)
+  if the underlying system conforms to POSIX:
+  - Some messages' wordings are changed in minor ways.
+  - ``White space'' is now whatever C's `isspace' says it is.
+  - When comparing directories, if `diff' finds a file that is not a regular
+    file or a directory, it reports the file's type instead of diffing it.
+    (As usual, it follows symbolic links first.)
+  - When signaled, sdiff exits with the signal's status, not with status 2.
+* Now portable to hosts where int, long, pointer, etc. are not all the same
+  size.
+* `cmp - -' now works like `diff - -'.
+
+
+User-visible changes in version 2.3:
+
+* New diff option: --horizon-lines=lines
+
+
+User-visible changes in version 2.1:
+
+* New diff options:
+  --{old,new,unchanged}-line-format='format'
+  --{old,new,unchanged,changed}-group-format='format'
+  -U
+* New diff3 option:
+  -A --show-all
+* diff3 -m now defaults to -A, not -E.
+* diff3 now takes up to three -L or --label options, not just two.
+  If just two options are given, they refer to the first two input files,
+  not the first and third input files.
+* sdiff and diff -y handle incomplete lines.
+
+
+User-visible changes in version 2.0:
+
+* Add sdiff and cmp programs.
+* Add Texinfo documentation.
+* Add configure script.
+* Improve diff performance.
+* New diff options:
+-x --exclude
+-X --exclude-from
+-P --unidirectional-new-file
+-W --width
+-y --side-by-side
+--left-column
+--sdiff-merge-assist
+--suppress-common-lines
+* diff options renamed:
+--label renamed from --file-label
+--forward-ed renamed from --reversed-ed
+--paginate renamed from --print
+--entire-new-file renamed from --entire-new-files
+--new-file renamed from --new-files
+--all-text removed
+* New diff3 options:
+-v --version
+* Add long-named equivalents for other diff3 options.
+* diff options -F (--show-function-line) and -I (--ignore-matching-lines)
+  can now be given more than once.
+
+\f
+
+Copyright (C) 1993, 1994, 1998, 2001, 2002 Free Software Foundation,
+Inc.
+
+This file is part of GNU Diffutils.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+This program is distributed in the hope that they will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; see the file COPYING.  If not, write to
+the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.
diff --git a/contrib/diffutils-2.8.1/README b/contrib/diffutils-2.8.1/README
new file mode 100644 (file)
index 0000000..275a8cf
--- /dev/null
@@ -0,0 +1,38 @@
+README for GNU DIFF
+
+       Copyright (C) 1992, 1998, 2001, 2002 Free Software Foundation, Inc.
+
+       This file is part of GNU Diffutils.
+
+       This program is free software; you can redistribute it and/or modify
+       it under the terms of the GNU General Public License as published by
+       the Free Software Foundation; either version 2, or (at your option)
+       any later version.
+
+       This program is distributed in the hope that it will be useful,
+       but WITHOUT ANY WARRANTY; without even the implied warranty of
+       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+       GNU General Public License for more details.
+
+       You should have received a copy of the GNU General Public License
+       along with this program; see the file COPYING.  If not, write to
+       the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+       Boston, MA 02111-1307, USA.
+
+
+This directory contains the GNU diff, diff3, sdiff, and cmp utilities.
+Their features are a superset of the Unix features and they are
+significantly faster.
+
+Please see the file COPYING for copying conditions.
+
+Please see the file doc/diff.texi (or doc/diff.info) for documentation
+that can be printed with TeX, or read with the `info' program or with
+Emacs's `M-x info'.  There are no man pages.
+
+See the file INSTALL for generic compilation and installation instructions,
+and the file INSTALLME for instructions specific to GNU diff.
+
+See the file ABOUT-NLS for notes about translations.
+
+Please report bugs to <bug-gnu-utils@gnu.org>.
diff --git a/contrib/diffutils-2.8.1/THANKS b/contrib/diffutils-2.8.1/THANKS
new file mode 100644 (file)
index 0000000..4fc388c
--- /dev/null
@@ -0,0 +1,22 @@
+Thanks to all the following for their contributions to GNU diffutils:
+
+Thomas Bushnell  <tb@becket.net>
+Wayne Davison  <wayned@users.sourceforge.net>
+Ulrich Drepper  <drepper@redhat.com>
+Paul Eggert  <eggert@twinsun.com>
+Jay Fenlason <hack@gnu.org>
+John Gilmore  <gnu@cygnus.com>
+Torbjorn Granlund  <tege@swox.com>
+Mike Haertel  <mike@ichips.intel.com>
+Bruno Haible  <haible@ilog.fr>
+Chris Hanson <cph@gnu.org>
+Jim Kingdon  <kingdon@panix.com>
+Tom Lord  <lord@gnu.org>
+David J. MacKenzie  <djm@gnu.org>
+Roland McGrath  <roland@gnu.org>
+Jim Meyering  <meyering@lucent.com>
+Eugene W. Myers  <gene@cs.arizona.edu>
+Randy Smith  <randy@gnu.org>
+Richard Stallman  <rms@gnu.org>
+Leonard H. Tower Jr.  <tower@ai.mit.edu>
+Eli Zaretskii  <eliz@is.elta.co.il>
diff --git a/contrib/diffutils-2.8.1/config.h b/contrib/diffutils-2.8.1/config.h
new file mode 100644 (file)
index 0000000..f5f68f8
--- /dev/null
@@ -0,0 +1,515 @@
+/* config.h.  Generated by configure.  */
+/* config.hin.  Generated from configure.ac by autoheader.  */
+
+/* Define to 1 if the `closedir' function returns void instead of `int'. */
+/* #undef CLOSEDIR_VOID */
+
+/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
+   systems. This function is required for `alloca.c' support on those systems.
+   */
+/* #undef CRAY_STACKSEG_END */
+
+/* Define to 1 if using `alloca.c'. */
+/* #undef C_ALLOCA */
+
+/* Name of "diff" program, unless overridden. */
+#define DEFAULT_DIFF_PROGRAM "diff"
+
+/* Name of editor program, unless overridden. */
+#define DEFAULT_EDITOR_PROGRAM "ed"
+
+/* Define to 1 if translation of program messages to the user's native
+   language is requested. */
+/* #undef ENABLE_NLS */
+
+/* Define on systems for which file names may have a so-called `drive letter'
+   prefix, define this to compute the length of that prefix, including the
+   colon. */
+#define FILESYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX 0
+
+/* Define if the backslash character may also serve as a file name component
+   separator. */
+#define FILESYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR 0
+
+#if FILESYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX
+# define FILESYSTEM_PREFIX_LEN(Filename) \
+  ((Filename)[0] && (Filename)[1] == ':' ? 2 : 0)
+#else
+# define FILESYSTEM_PREFIX_LEN(Filename) 0
+#endif
+
+/* Define to 1 if you have `alloca', as a function or macro. */
+#define HAVE_ALLOCA 1
+
+/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
+   */
+/* #undef HAVE_ALLOCA_H */
+
+/* Define to 1 if you have the `bcopy' function. */
+#define HAVE_BCOPY 1
+
+/* Define to 1 if you have the `btowc' function. */
+/* #undef HAVE_BTOWC */
+
+/* Define to 1 if you have the `bzero' function. */
+#define HAVE_BZERO 1
+
+/* Define to 1 if you have the `clock_gettime' function. */
+#define HAVE_CLOCK_GETTIME 1
+
+/* Define if backslash-a works in C strings. */
+#define HAVE_C_BACKSLASH_A 1
+
+/* Define to 1 if C supports variable-length arrays. */
+#define HAVE_C_VARARRAYS 1
+
+/* Define if the GNU dcgettext() function is already present or preinstalled.
+   */
+/* #undef HAVE_DCGETTEXT */
+
+/* Define to 1 if you have the declaration of `clearerr_unlocked', and to 0 if
+   you don't. */
+#define HAVE_DECL_CLEARERR_UNLOCKED 1
+
+/* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you
+   don't. */
+#define HAVE_DECL_FEOF_UNLOCKED 1
+
+/* Define to 1 if you have the declaration of `ferror_unlocked', and to 0 if
+   you don't. */
+#define HAVE_DECL_FERROR_UNLOCKED 1
+
+/* Define to 1 if you have the declaration of `fflush_unlocked', and to 0 if
+   you don't. */
+#define HAVE_DECL_FFLUSH_UNLOCKED 0
+
+/* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if
+   you don't. */
+#define HAVE_DECL_FGETS_UNLOCKED 0
+
+/* Define to 1 if you have the declaration of `fputc_unlocked', and to 0 if
+   you don't. */
+#define HAVE_DECL_FPUTC_UNLOCKED 0
+
+/* Define to 1 if you have the declaration of `fputs_unlocked', and to 0 if
+   you don't. */
+#define HAVE_DECL_FPUTS_UNLOCKED 0
+
+/* Define to 1 if you have the declaration of `fread_unlocked', and to 0 if
+   you don't. */
+#define HAVE_DECL_FREAD_UNLOCKED 0
+
+/* Define to 1 if you have the declaration of `fwrite_unlocked', and to 0 if
+   you don't. */
+#define HAVE_DECL_FWRITE_UNLOCKED 0
+
+/* Define to 1 if you have the declaration of `getchar_unlocked', and to 0 if
+   you don't. */
+#define HAVE_DECL_GETCHAR_UNLOCKED 1
+
+/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you
+   don't. */
+#define HAVE_DECL_GETC_UNLOCKED 1
+
+/* Define to 1 if you have the declaration of `getenv', and to 0 if you don't.
+   */
+#define HAVE_DECL_GETENV 1
+
+/* Define to 1 if you have the declaration of `putchar_unlocked', and to 0 if
+   you don't. */
+#define HAVE_DECL_PUTCHAR_UNLOCKED 1
+
+/* Define to 1 if you have the declaration of `putc_unlocked', and to 0 if you
+   don't. */
+#define HAVE_DECL_PUTC_UNLOCKED 1
+
+/* Define to 1 if you have the declaration of `strerror', and to 0 if you
+   don't. */
+#define HAVE_DECL_STRERROR 1
+
+/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you
+   don't. */
+#define HAVE_DECL_STRERROR_R 1
+
+/* Define to 1 if you have the declaration of `strtoimax', and to 0 if you
+   don't. */
+#define HAVE_DECL_STRTOIMAX 1
+
+/* Define to 1 if you have the declaration of `strtol', and to 0 if you don't.
+   */
+#define HAVE_DECL_STRTOL 1
+
+/* Define to 1 if you have the declaration of `strtoul', and to 0 if you
+   don't. */
+#define HAVE_DECL_STRTOUL 1
+
+/* Define to 1 if you have the declaration of `strtoull', and to 0 if you
+   don't. */
+#define HAVE_DECL_STRTOULL 1
+
+/* Define to 1 if you have the declaration of `strtoumax', and to 0 if you
+   don't. */
+#define HAVE_DECL_STRTOUMAX 1
+
+/* Define to 1 if you have the `diraccess' function. */
+/* #undef HAVE_DIRACCESS */
+
+/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
+   */
+#define HAVE_DIRENT_H 1
+
+/* Define if the malloc check has been performed. */
+#define HAVE_DONE_WORKING_MALLOC_CHECK 1
+
+/* Define if the realloc check has been performed. */
+#define HAVE_DONE_WORKING_REALLOC_CHECK 1
+
+/* Define to 1 if you have the `doprnt' function. */
+/* #undef HAVE_DOPRNT */
+
+/* Define to 1 if you have the `dup2' function. */
+#define HAVE_DUP2 1
+
+/* Define to 1 if you have the <fcntl.h> header file. */
+#define HAVE_FCNTL_H 1
+
+/* Define to 1 if your system has a working `fnmatch' function. */
+#define HAVE_FNMATCH 1
+
+/* Define to 1 if you have the `fork' function. */
+#define HAVE_FORK 1
+
+/* Define if the GNU gettext() function is already present or preinstalled. */
+/* #undef HAVE_GETTEXT */
+
+/* Define to 1 if you have the `gettimeofday' function. */
+#define HAVE_GETTIMEOFDAY 1
+
+/* Define if you have the iconv() function. */
+#define HAVE_ICONV 1
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#define HAVE_INTTYPES_H 1
+
+/* Define to 1 if you have the `isascii' function. */
+#define HAVE_ISASCII 1
+
+/* Define to 1 if you have the `iswprint' function. */
+/* #undef HAVE_ISWPRINT */
+
+/* Define to 1 if you have the <libintl.h> header file. */
+/* #undef HAVE_LIBINTL_H */
+
+/* Define to 1 if you have the <limits.h> header file. */
+#define HAVE_LIMITS_H 1
+
+/* Define to 1 if you have the <locale.h> header file. */
+#define HAVE_LOCALE_H 1
+
+/* Define to 1 if you have the `localtime_r' function. */
+#define HAVE_LOCALTIME_R 1
+
+/* Define if you have the long long type. */
+#define HAVE_LONG_LONG 1
+
+/* Define to 1 if you have the `mblen' function. */
+#define HAVE_MBLEN 1
+
+/* Define to 1 if you have the `mbrlen' function. */
+/* #undef HAVE_MBRLEN */
+
+/* Define to 1 if mbrtowc and mbstate_t are properly declared. */
+/* #undef HAVE_MBRTOWC */
+
+/* Define to 1 if you have the `memchr' function. */
+#define HAVE_MEMCHR 1
+
+/* Define to 1 if you have the `memcpy' function. */
+#define HAVE_MEMCPY 1
+
+/* Define to 1 if you have the <memory.h> header file. */
+#define HAVE_MEMORY_H 1
+
+/* Define to 1 if you have the `mempcpy' function. */
+/* #undef HAVE_MEMPCPY */
+
+/* Define to 1 if you have the `memset' function. */
+#define HAVE_MEMSET 1
+
+/* Define to 1 if you have the `mkstemp' function. */
+#define HAVE_MKSTEMP 1
+
+/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
+/* #undef HAVE_NDIR_H */
+
+/* Define to 1 if you have the `setlocale' function. */
+#define HAVE_SETLOCALE 1
+
+/* Define to 1 if you have the DOS-style `setmode' function. */
+/* #undef HAVE_SETMODE_DOS */
+
+/* Define to 1 if you have the `sigaction' function. */
+#define HAVE_SIGACTION 1
+
+/* Define to 1 if the system has the type `siginfo_t'. */
+#define HAVE_SIGINFO_T 1
+
+/* Define to 1 if you have the `sigprocmask' function. */
+#define HAVE_SIGPROCMASK 1
+
+/* Define to 1 if the system has the type `stack_t'. */
+#define HAVE_STACK_T 1
+
+/* Define to 1 if stdbool.h conforms to C99. */
+/* #undef HAVE_STDBOOL_H */
+
+/* Define to 1 if you have the <stddef.h> header file. */
+#define HAVE_STDDEF_H 1
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#define HAVE_STDINT_H 1
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#define HAVE_STDLIB_H 1
+
+/* Define to 1 if you have the `strcasecmp' function. */
+#define HAVE_STRCASECMP 1
+
+/* Define to 1 if you have the `strchr' function. */
+#define HAVE_STRCHR 1
+
+/* Define to 1 if you have the `strerror' function. */
+#define HAVE_STRERROR 1
+
+/* Define to 1 if you have the `strerror_r' function. */
+#define HAVE_STRERROR_R 1
+
+/* Define to 1 if you have the `strftime' function. */
+#define HAVE_STRFTIME 1
+
+/* Define to 1 if you have the <strings.h> header file. */
+#define HAVE_STRINGS_H 1
+
+/* Define to 1 if you have the <string.h> header file. */
+#define HAVE_STRING_H 1
+
+/* Define to 1 if you have the `strtoul' function. */
+#define HAVE_STRTOUL 1
+
+/* Define to 1 if you have the `strtoull' function. */
+#define HAVE_STRTOULL 1
+
+/* Define to 1 if you have the `strtoumax' function. */
+/* #undef HAVE_STRTOUMAX */
+
+/* Define to 1 if `st_blksize' is member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_BLKSIZE 1
+
+/* Define to 1 if `st_rdev' is member of `struct stat'. */
+#define HAVE_STRUCT_STAT_ST_RDEV 1
+
+/* Define to 1 if `tm_zone' is member of `struct tm'. */
+#define HAVE_STRUCT_TM_TM_ZONE 1
+
+/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
+   */
+/* #undef HAVE_SYS_DIR_H */
+
+/* Define to 1 if you have the <sys/file.h> header file. */
+#define HAVE_SYS_FILE_H 1
+
+/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
+   */
+/* #undef HAVE_SYS_NDIR_H */
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#define HAVE_SYS_STAT_H 1
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#define HAVE_SYS_TIME_H 1
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#define HAVE_SYS_TYPES_H 1
+
+/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */
+#define HAVE_SYS_WAIT_H 1
+
+/* Define to 1 if you have the <time.h> header file. */
+#define HAVE_TIME_H 1
+
+/* Define to 1 if you have the `tmpnam' function. */
+#define HAVE_TMPNAM 1
+
+/* Define if struct tm has the tm_gmtoff member. */
+#define HAVE_TM_GMTOFF 1
+
+/* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use
+   `HAVE_STRUCT_TM_TM_ZONE' instead. */
+#define HAVE_TM_ZONE 1
+
+/* Define to 1 if you don't have `tm_zone' but do have the external array
+   `tzname'. */
+/* #undef HAVE_TZNAME */
+
+/* Define to 1 if you have the `tzset' function. */
+#define HAVE_TZSET 1
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#define HAVE_UNISTD_H 1
+
+/* Define if you have the unsigned long long type. */
+#define HAVE_UNSIGNED_LONG_LONG 1
+
+/* Define to 1 if you have the `vfork' function. */
+#define HAVE_VFORK 1
+
+/* Define to 1 if you have the <vfork.h> header file. */
+/* #undef HAVE_VFORK_H */
+
+/* Define to 1 if you have the `vprintf' function. */
+#define HAVE_VPRINTF 1
+
+/* Define to 1 if you have the `waitpid' function. */
+#define HAVE_WAITPID 1
+
+/* Define to 1 if you have the <wchar.h> header file. */
+#define HAVE_WCHAR_H 1
+
+/* Define to 1 if you have the <wctype.h> header file. */
+#define HAVE_WCTYPE_H 1
+
+/* Define to 1 if `fork' works. */
+#define HAVE_WORKING_FORK 1
+
+/* Define to 1 if `vfork' works. */
+#define HAVE_WORKING_VFORK 1
+
+/* Define to 1 if extending the stack slightly past the limit causes a
+   SIGSEGV, and an alternate stack can be established with sigaltstack, and
+   the signal handler is passed a context that specifies the run time stack.
+   This behavior is defined by POSIX 1003.1-2001 with the X/Open System
+   Interface (XSI) option and is a standardized way to implement a SEGV-based
+   stack overflow detection heuristic. */
+/* #undef HAVE_XSI_STACK_OVERFLOW_HEURISTIC */
+
+/* Define to 1 if you have the `__secure_getenv' function. */
+/* #undef HAVE___SECURE_GETENV */
+
+#if FILESYSTEM_BACKSLASH_IS_FILE_NAME_SEPARATOR
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+#else
+# define ISSLASH(C) ((C) == '/')
+#endif
+
+/* Name of package */
+#define PACKAGE "diffutils"
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT "bug-gnu-utils@gnu.org"
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME "GNU diffutils"
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING "GNU diffutils 2.8.1"
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME "diffutils"
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION "2.8.1"
+
+/* Define if compiler has function prototypes */
+#define PROTOTYPES 1
+
+/* Name of "pr" program. */
+#define PR_PROGRAM "/usr/bin/pr"
+
+/* Define to 1 to avoid alloca in the regular-expression implementation. */
+#define REGEX_MALLOC 1
+
+/* Define as the return type of signal handlers (`int' or `void'). */
+#define RETSIGTYPE void
+
+/* If using the C implementation of alloca, define if you know the
+   direction of stack growth for your system; otherwise it will be
+   automatically deduced at run-time.
+        STACK_DIRECTION > 0 => grows toward higher addresses
+        STACK_DIRECTION < 0 => grows toward lower addresses
+        STACK_DIRECTION = 0 => direction of growth unknown */
+/* #undef STACK_DIRECTION */
+
+/* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */
+/* #undef STAT_MACROS_BROKEN */
+
+/* Define to 1 if you have the ANSI C header files. */
+#define STDC_HEADERS 1
+
+/* Define to 1 if strerror_r returns char *. */
+/* #undef STRERROR_R_CHAR_P */
+
+/* Define to be the nanoseconds member of struct stat's st_mtim, if it exists.
+   */
+/* #undef ST_MTIM_NSEC */
+
+/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
+#define TIME_WITH_SYS_TIME 1
+
+/* Define to 1 if your <sys/time.h> declares `struct tm'. */
+/* #undef TM_IN_SYS_TIME */
+
+/* Version number of package */
+#define VERSION "2.8.1"
+
+/* Number of bits in a file offset, on hosts where this is settable. */
+/* #undef _FILE_OFFSET_BITS */
+
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE
+#endif
+
+/* Define for large files, on AIX-style hosts. */
+/* #undef _LARGE_FILES */
+
+/* Enable Solaris extensions. */
+#define __EXTENSIONS__ 1
+
+/* Define like PROTOTYPES; this can be used by system headers. */
+#define __PROTOTYPES 1
+
+/* Define to empty if `const' does not conform to ANSI C. */
+/* #undef const */
+
+/* Define as `__inline' if that's what the C compiler calls it, or to nothing
+   if it is not supported. */
+/* #undef inline */
+
+/* Define to widest signed type if <inttypes.h> doesn't define. */
+/* #undef intmax_t */
+
+/* Define to rpl_malloc if the replacement function should be used. */
+/* #undef malloc */
+
+/* Define to a type if <wchar.h> does not define. */
+/* #undef mbstate_t */
+
+/* Define to the name of the strftime replacement function. */
+#define my_strftime nstrftime
+
+/* Define to `int' if <sys/types.h> does not define. */
+/* #undef pid_t */
+
+/* Define to `int' if <sys/types.h> does not define. */
+/* #undef ptrdiff_t */
+
+/* Define to rpl_realloc if the replacement function should be used. */
+/* #undef realloc */
+
+/* Define to `int' if <sys/types.h> does not define. */
+/* #undef ssize_t */
+
+/* Define to widest unsigned type if <inttypes.h> doesn't define. */
+/* #undef uintmax_t */
+
+/* Define as `fork' if `vfork' does not work. */
+/* #undef vfork */
diff --git a/contrib/diffutils-2.8.1/doc/Makefile.am b/contrib/diffutils-2.8.1/doc/Makefile.am
new file mode 100644 (file)
index 0000000..574fdab
--- /dev/null
@@ -0,0 +1,24 @@
+# Makefile for GNU diffutils documentation.
+
+# Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2, or (at your option)
+## any later version.
+
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+## GNU General Public License for more details.
+
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software Foundation,
+## Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+AM_MAKEINFOFLAGS = --no-split
+
+info_TEXINFOS = diff.texi
+diff_TEXINFOS = fdl.texi
+
+EXTRA_DIST = diagmeet.note
diff --git a/contrib/diffutils-2.8.1/doc/diagmeet.note b/contrib/diffutils-2.8.1/doc/diagmeet.note
new file mode 100644 (file)
index 0000000..8f7242c
--- /dev/null
@@ -0,0 +1,71 @@
+Here is a comparison matrix which shows a case in which
+it is possible for the forward and backward scan in `diag'
+to meet along a nonzero length of diagonal simultaneous
+(so that bdiag[d] and fdiag[d] are not equal)
+even though there is no snake on that diagonal at the meeting point.
+
+
+     85   1   1   1  159  1   1   17
+        1   2   3   4
+60
+    1   2
+1
+    2              2   3   4
+71
+    3       3          4   5
+85
+    4          3   4   5
+17
+    5          4   5
+1
+    6       4          5   6
+183
+    7       5   6   7
+10
+    8              6   7
+1
+    9           6   7          8
+12
+                7   8   9  10
+13
+       10       8   9  10
+14
+           10   9  10
+17
+       10      10
+1
+   10   9  10
+1
+       8      10      10      10
+183
+    8   7      9       9       9
+10
+    7   6      8   9   8       8
+1
+    6   5              7       7
+1
+            5                  6       6
+1
+               5       5       5
+50
+           5   4       4       4
+1
+                   4   3       3
+85
+           5   4   3   2       2
+1
+                           2   1
+17
+           5   4   3   2   1       1
+1
+                               1   0
+     85   1   1   1  159  1   1  17
+
+
+
+
+
+
+
+
+
diff --git a/contrib/diffutils-2.8.1/doc/diff.info b/contrib/diffutils-2.8.1/doc/diff.info
new file mode 100644 (file)
index 0000000..d58accf
--- /dev/null
@@ -0,0 +1,5084 @@
+This is diff.info, produced by makeinfo version 4.2 from diff.texi.
+
+This manual is for GNU Diffutils (version 2.8.1, 5 April 2002), and
+documents the GNU `diff', `diff3', `sdiff', and `cmp' commands for
+showing the differences between files and the GNU `patch' command for
+using their output to update files.
+
+   Copyright (C) 1992, 1993, 1994, 1998, 2001, 2002 Free Software
+Foundation, Inc.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, with the Front-Cover texts
+     being "A GNU Manual," and with the Back-Cover Texts as in (a)
+     below.  A copy of the license is included in the section entitled
+     "GNU Free Documentation License."
+
+     (a) The FSF's Back-Cover Text is: "You have freedom to copy and
+     modify this GNU Manual, like GNU software.  Copies published by
+     the Free Software Foundation raise funds for GNU development."
+   
+INFO-DIR-SECTION Individual utilities
+START-INFO-DIR-ENTRY
+* cmp: (diff)Invoking cmp.                      Compare 2 files byte by byte.
+* diff: (diff)Invoking diff.                    Compare 2 files line by line.
+* diff3: (diff)Invoking diff3.                  Compare 3 files line by line.
+* patch: (diff)Invoking patch.                  Apply a patch to a file.
+* sdiff: (diff)Invoking sdiff.                  Merge 2 files side-by-side.
+END-INFO-DIR-ENTRY
+
+INFO-DIR-SECTION GNU packages
+START-INFO-DIR-ENTRY
+* Diff: (diff).                 Comparing and merging files.
+END-INFO-DIR-ENTRY
+
+\1f
+File: diff.info,  Node: Top,  Next: Overview,  Up: (dir)
+
+Comparing and Merging Files
+***************************
+
+This manual is for GNU Diffutils (version 2.8.1, 5 April 2002), and
+documents the GNU `diff', `diff3', `sdiff', and `cmp' commands for
+showing the differences between files and the GNU `patch' command for
+using their output to update files.
+
+   Copyright (C) 1992, 1993, 1994, 1998, 2001, 2002 Free Software
+Foundation, Inc.
+
+     Permission is granted to copy, distribute and/or modify this
+     document under the terms of the GNU Free Documentation License,
+     Version 1.1 or any later version published by the Free Software
+     Foundation; with no Invariant Sections, with the Front-Cover texts
+     being "A GNU Manual," and with the Back-Cover Texts as in (a)
+     below.  A copy of the license is included in the section entitled
+     "GNU Free Documentation License."
+
+     (a) The FSF's Back-Cover Text is: "You have freedom to copy and
+     modify this GNU Manual, like GNU software.  Copies published by
+     the Free Software Foundation raise funds for GNU development."
+   
+* Menu:
+
+* Overview::              Preliminary information.
+* Comparison::            What file comparison means.
+
+* Output Formats::        Formats for two-way difference reports.
+* Incomplete Lines::      Lines that lack trailing newlines.
+* Comparing Directories:: Comparing files and directories.
+* Adjusting Output::      Making `diff' output prettier.
+* diff Performance::      Making `diff' smarter or faster.
+
+* Comparing Three Files:: Formats for three-way difference reports.
+* diff3 Merging::         Merging from a common ancestor.
+
+* Interactive Merging::   Interactive merging with `sdiff'.
+
+* Merging with patch::    Using `patch' to change old files into new ones.
+* Making Patches::        Tips for making and using patch distributions.
+
+* Invoking cmp::          Compare two files byte by byte.
+* Invoking diff::         Compare two files line by line.
+* Invoking diff3::        Compare three files line by line.
+* Invoking patch::        Apply a diff file to an original.
+* Invoking sdiff::        Side-by-side merge of file differences.
+
+* Standards conformance:: Conformance to the POSIX standard.
+* Projects::              If you've found a bug or other shortcoming.
+
+* Copying This Manual::   How to make copies of this manual.
+* Index::                 Index.
+
+\1f
+File: diff.info,  Node: Overview,  Next: Comparison,  Prev: Top,  Up: Top
+
+Overview
+********
+
+   Computer users often find occasion to ask how two files differ.
+Perhaps one file is a newer version of the other file.  Or maybe the
+two files started out as identical copies but were changed by different
+people.
+
+   You can use the `diff' command to show differences between two
+files, or each corresponding file in two directories.  `diff' outputs
+differences between files line by line in any of several formats,
+selectable by command line options.  This set of differences is often
+called a "diff" or "patch".  For files that are identical, `diff'
+normally produces no output; for binary (non-text) files, `diff'
+normally reports only that they are different.
+
+   You can use the `cmp' command to show the byte and line numbers
+where two files differ.  `cmp' can also show all the bytes that differ
+between the two files, side by side.  A way to compare two files
+character by character is the Emacs command `M-x compare-windows'.
+*Note Other Window: (emacs)Other Window, for more information on that
+command.
+
+   You can use the `diff3' command to show differences among three
+files.  When two people have made independent changes to a common
+original, `diff3' can report the differences between the original and
+the two changed versions, and can produce a merged file that contains
+both persons' changes together with warnings about conflicts.
+
+   You can use the `sdiff' command to merge two files interactively.
+
+   You can use the set of differences produced by `diff' to distribute
+updates to text files (such as program source code) to other people.
+This method is especially useful when the differences are small compared
+to the complete files.  Given `diff' output, you can use the `patch'
+program to update, or "patch", a copy of the file.  If you think of
+`diff' as subtracting one file from another to produce their
+difference, you can think of `patch' as adding the difference to one
+file to reproduce the other.
+
+   This manual first concentrates on making diffs, and later shows how
+to use diffs to update files.
+
+   GNU `diff' was written by Paul Eggert, Mike Haertel, David Hayes,
+Richard Stallman, and Len Tower.  Wayne Davison designed and
+implemented the unified output format.  The basic algorithm is described
+in "An O(ND) Difference Algorithm and its Variations", Eugene W. Myers,
+`Algorithmica' Vol. 1 No. 2, 1986, pp. 251-266; and in "A File
+Comparison Program", Webb Miller and Eugene W. Myers,
+`Software--Practice and Experience' Vol. 15 No. 11, 1985, pp. 1025-1040.
+The algorithm was independently discovered as described in "Algorithms
+for Approximate String Matching", E. Ukkonen, `Information and Control'
+Vol. 64, 1985, pp. 100-118.
+
+   GNU `diff3' was written by Randy Smith.  GNU `sdiff' was written by
+Thomas Lord.  GNU `cmp' was written by Torbjorn Granlund and David
+MacKenzie.
+
+   `patch' was written mainly by Larry Wall and Paul Eggert; several
+GNU enhancements were contributed by Wayne Davison and David MacKenzie.
+Parts of this manual are adapted from a manual page written by Larry
+Wall, with his permission.
+
+\1f
+File: diff.info,  Node: Comparison,  Next: Output Formats,  Prev: Overview,  Up: Top
+
+What Comparison Means
+*********************
+
+   There are several ways to think about the differences between two
+files.  One way to think of the differences is as a series of lines
+that were deleted from, inserted in, or changed in one file to produce
+the other file.  `diff' compares two files line by line, finds groups of
+lines that differ, and reports each group of differing lines.  It can
+report the differing lines in several formats, which have different
+purposes.
+
+   GNU `diff' can show whether files are different without detailing
+the differences.  It also provides ways to suppress certain kinds of
+differences that are not important to you.  Most commonly, such
+differences are changes in the amount of white space between words or
+lines.  `diff' also provides ways to suppress differences in alphabetic
+case or in lines that match a regular expression that you provide.
+These options can accumulate; for example, you can ignore changes in
+both white space and alphabetic case.
+
+   Another way to think of the differences between two files is as a
+sequence of pairs of bytes that can be either identical or different.
+`cmp' reports the differences between two files byte by byte, instead
+of line by line.  As a result, it is often more useful than `diff' for
+comparing binary files.  For text files, `cmp' is useful mainly when
+you want to know only whether two files are identical, or whether one
+file is a prefix of the other.
+
+   To illustrate the effect that considering changes byte by byte can
+have compared with considering them line by line, think of what happens
+if a single newline character is added to the beginning of a file.  If
+that file is then compared with an otherwise identical file that lacks
+the newline at the beginning, `diff' will report that a blank line has
+been added to the file, while `cmp' will report that almost every byte
+of the two files differs.
+
+   `diff3' normally compares three input files line by line, finds
+groups of lines that differ, and reports each group of differing lines.
+Its output is designed to make it easy to inspect two different sets of
+changes to the same file.
+
+* Menu:
+
+* Hunks::             Groups of differing lines.
+* White Space::       Suppressing differences in white space.
+* Blank Lines::       Suppressing differences in blank lines.
+* Case Folding::      Suppressing differences in alphabetic case.
+* Specified Folding:: Suppressing differences that match regular expressions.
+* Brief::             Summarizing which files are different.
+* Binary::            Comparing binary files or forcing text comparisons.
+
+\1f
+File: diff.info,  Node: Hunks,  Next: White Space,  Up: Comparison
+
+Hunks
+=====
+
+   When comparing two files, `diff' finds sequences of lines common to
+both files, interspersed with groups of differing lines called "hunks".
+Comparing two identical files yields one sequence of common lines and
+no hunks, because no lines differ.  Comparing two entirely different
+files yields no common lines and one large hunk that contains all lines
+of both files.  In general, there are many ways to match up lines
+between two given files.  `diff' tries to minimize the total hunk size
+by finding large sequences of common lines interspersed with small
+hunks of differing lines.
+
+   For example, suppose the file `F' contains the three lines `a', `b',
+`c', and the file `G' contains the same three lines in reverse order
+`c', `b', `a'.  If `diff' finds the line `c' as common, then the command
+`diff F G' produces this output:
+
+     1,2d0
+     < a
+     < b
+     3a2,3
+     > b
+     > a
+
+But if `diff' notices the common line `b' instead, it produces this
+output:
+
+     1c1
+     < a
+     ---
+     > c
+     3c3
+     < c
+     ---
+     > a
+
+It is also possible to find `a' as the common line.  `diff' does not
+always find an optimal matching between the files; it takes shortcuts
+to run faster.  But its output is usually close to the shortest
+possible.  You can adjust this tradeoff with the `--minimal' option
+(*note diff Performance::).
+
+\1f
+File: diff.info,  Node: White Space,  Next: Blank Lines,  Prev: Hunks,  Up: Comparison
+
+Suppressing Differences in Blank and Tab Spacing
+================================================
+
+   The `-E' and `--ignore-tab-expansion' options ignore the distinction
+between tabs and spaces on input.  A tab is considered to be equivalent
+to the number of spaces to the next tab stop.  `diff' assumes that tab
+stops are set every 8 print columns.
+
+   The `-b' and `--ignore-space-change' options are stronger.  They
+ignore white space at line end, and consider all other sequences of one
+or more white space characters to be equivalent.  With these options,
+`diff' considers the following two lines to be equivalent, where `$'
+denotes the line end:
+
+     Here lyeth  muche rychnesse  in lytell space.   -- John Heywood$
+     Here lyeth muche rychnesse in lytell space. -- John Heywood   $
+
+   The `-w' and `--ignore-all-space' options are stronger still.  They
+ignore difference even if one line has white space where the other line
+has none.  "White space" characters include tab, newline, vertical tab,
+form feed, carriage return, and space; some locales may define
+additional characters to be white space.  With these options, `diff'
+considers the following two lines to be equivalent, where `$' denotes
+the line end and `^M' denotes a carriage return:
+
+     Here lyeth  muche  rychnesse in lytell space.--  John Heywood$
+       He relyeth much erychnes  seinly tells pace.  --John Heywood   ^M$
+
+\1f
+File: diff.info,  Node: Blank Lines,  Next: Case Folding,  Prev: White Space,  Up: Comparison
+
+Suppressing Differences in Blank Lines
+======================================
+
+   The `-B' and `--ignore-blank-lines' options ignore insertions or
+deletions of blank lines.  These options affect only lines that are
+completely empty; they do not affect lines that look empty but contain
+space or tab characters.  With these options, for example, a file
+containing
+     1.  A point is that which has no part.
+     
+     2.  A line is breadthless length.
+     -- Euclid, The Elements, I
+
+is considered identical to a file containing
+     1.  A point is that which has no part.
+     2.  A line is breadthless length.
+     
+     
+     -- Euclid, The Elements, I
+
+\1f
+File: diff.info,  Node: Case Folding,  Next: Specified Folding,  Prev: Blank Lines,  Up: Comparison
+
+Suppressing Case Differences
+============================
+
+   GNU `diff' can treat lower case letters as equivalent to their upper
+case counterparts, so that, for example, it considers `Funky Stuff',
+`funky STUFF', and `fUNKy stuFf' to all be the same.  To request this,
+use the `-i' or `--ignore-case' option.
+
+\1f
+File: diff.info,  Node: Specified Folding,  Next: Brief,  Prev: Case Folding,  Up: Comparison
+
+Suppressing Lines Matching a Regular Expression
+===============================================
+
+   To ignore insertions and deletions of lines that match a
+`grep'-style regular expression, use the `-I REGEXP' or
+`--ignore-matching-lines=REGEXP' option.  You should escape regular
+expressions that contain shell metacharacters to prevent the shell from
+expanding them.  For example, `diff -I '^[[:digit:]]'' ignores all
+changes to lines beginning with a digit.
+
+   However, `-I' only ignores the insertion or deletion of lines that
+contain the regular expression if every changed line in the hunk--every
+insertion and every deletion--matches the regular expression.  In other
+words, for each nonignorable change, `diff' prints the complete set of
+changes in its vicinity, including the ignorable ones.
+
+   You can specify more than one regular expression for lines to ignore
+by using more than one `-I' option.  `diff' tries to match each line
+against each regular expression.
+
+\1f
+File: diff.info,  Node: Brief,  Next: Binary,  Prev: Specified Folding,  Up: Comparison
+
+Summarizing Which Files Differ
+==============================
+
+   When you only want to find out whether files are different, and you
+don't care what the differences are, you can use the summary output
+format.  In this format, instead of showing the differences between the
+files, `diff' simply reports whether files differ.  The `-q' and
+`--brief' options select this output format.
+
+   This format is especially useful when comparing the contents of two
+directories.  It is also much faster than doing the normal line by line
+comparisons, because `diff' can stop analyzing the files as soon as it
+knows that there are any differences.
+
+   You can also get a brief indication of whether two files differ by
+using `cmp'.  For files that are identical, `cmp' produces no output.
+When the files differ, by default, `cmp' outputs the byte and line
+number where the first difference occurs.  You can use the `-s' option
+to suppress that information, so that `cmp' produces no output and
+reports whether the files differ using only its exit status (*note
+Invoking cmp::).
+
+   Unlike `diff', `cmp' cannot compare directories; it can only compare
+two files.
+
+\1f
+File: diff.info,  Node: Binary,  Prev: Brief,  Up: Comparison
+
+Binary Files and Forcing Text Comparisons
+=========================================
+
+   If `diff' thinks that either of the two files it is comparing is
+binary (a non-text file), it normally treats that pair of files much as
+if the summary output format had been selected (*note Brief::), and
+reports only that the binary files are different.  This is because line
+by line comparisons are usually not meaningful for binary files.
+
+   `diff' determines whether a file is text or binary by checking the
+first few bytes in the file; the exact number of bytes is system
+dependent, but it is typically several thousand.  If every byte in that
+part of the file is non-null, `diff' considers the file to be text;
+otherwise it considers the file to be binary.
+
+   Sometimes you might want to force `diff' to consider files to be
+text.  For example, you might be comparing text files that contain null
+characters; `diff' would erroneously decide that those are non-text
+files.  Or you might be comparing documents that are in a format used
+by a word processing system that uses null characters to indicate
+special formatting.  You can force `diff' to consider all files to be
+text files, and compare them line by line, by using the `-a' or
+`--text' option.  If the files you compare using this option do not in
+fact contain text, they will probably contain few newline characters,
+and the `diff' output will consist of hunks showing differences between
+long lines of whatever characters the files contain.
+
+   You can also force `diff' to consider all files to be binary files,
+and report only whether they differ (but not how).  Use the `-q' or
+`--brief' option for this.
+
+   Differing binary files are considered to cause trouble because the
+resulting `diff' output does not capture all the differences.  This
+trouble causes `diff' to exit with status 2.  However, this trouble
+cannot occur with the `--a' or `--text' option, or with the `-q' or
+`--brief' option, as these options both cause `diff' to treat binary
+files like text files.
+
+   In operating systems that distinguish between text and binary files,
+`diff' normally reads and writes all data as text.  Use the `--binary'
+option to force `diff' to read and write binary data instead.  This
+option has no effect on a POSIX-compliant system like GNU or
+traditional Unix.  However, many personal computer operating systems
+represent the end of a line with a carriage return followed by a
+newline.  On such systems, `diff' normally ignores these carriage
+returns on input and generates them at the end of each output line, but
+with the `--binary' option `diff' treats each carriage return as just
+another input character, and does not generate a carriage return at the
+end of each output line.  This can be useful when dealing with non-text
+files that are meant to be interchanged with POSIX-compliant systems.
+
+   The `--strip-trailing-cr' causes `diff' to treat input lines that
+end in carriage return followed by newline as if they end in plain
+newline.  This can be useful when comparing text that is imperfectly
+imported from many personal computer operating systems.  This option
+affects how lines are read, which in turn affects how they are compared
+and output.
+
+   If you want to compare two files byte by byte, you can use the `cmp'
+program with the `-l' option to show the values of each differing byte
+in the two files.  With GNU `cmp', you can also use the `-b' option to
+show the ASCII representation of those bytes.  *Note Invoking cmp::,
+for more information.
+
+   If `diff3' thinks that any of the files it is comparing is binary (a
+non-text file), it normally reports an error, because such comparisons
+are usually not useful.  `diff3' uses the same test as `diff' to decide
+whether a file is binary.  As with `diff', if the input files contain a
+few non-text bytes but otherwise are like text files, you can force
+`diff3' to consider all files to be text files and compare them line by
+line by using the `-a' or `--text' options.
+
+\1f
+File: diff.info,  Node: Output Formats,  Next: Incomplete Lines,  Prev: Comparison,  Up: Top
+
+`diff' Output Formats
+*********************
+
+   `diff' has several mutually exclusive options for output format.
+The following sections describe each format, illustrating how `diff'
+reports the differences between two sample input files.
+
+* Menu:
+
+* Sample diff Input:: Sample `diff' input files for examples.
+* Normal::            Showing differences without surrounding text.
+* Context::           Showing differences with the surrounding text.
+* Side by Side::      Showing differences in two columns.
+* Scripts::           Generating scripts for other programs.
+* If-then-else::      Merging files with if-then-else.
+
+\1f
+File: diff.info,  Node: Sample diff Input,  Next: Normal,  Up: Output Formats
+
+Two Sample Input Files
+======================
+
+   Here are two sample files that we will use in numerous examples to
+illustrate the output of `diff' and how various options can change it.
+
+   This is the file `lao':
+
+     The Way that can be told of is not the eternal Way;
+     The name that can be named is not the eternal name.
+     The Nameless is the origin of Heaven and Earth;
+     The Named is the mother of all things.
+     Therefore let there always be non-being,
+       so we may see their subtlety,
+     And let there always be being,
+       so we may see their outcome.
+     The two are the same,
+     But after they are produced,
+       they have different names.
+
+   This is the file `tzu':
+
+     The Nameless is the origin of Heaven and Earth;
+     The named is the mother of all things.
+     
+     Therefore let there always be non-being,
+       so we may see their subtlety,
+     And let there always be being,
+       so we may see their outcome.
+     The two are the same,
+     But after they are produced,
+       they have different names.
+     They both may be called deep and profound.
+     Deeper and more profound,
+     The door of all subtleties!
+
+   In this example, the first hunk contains just the first two lines of
+`lao', the second hunk contains the fourth line of `lao' opposing the
+second and third lines of `tzu', and the last hunk contains just the
+last three lines of `tzu'.
+
+\1f
+File: diff.info,  Node: Normal,  Next: Context,  Prev: Sample diff Input,  Up: Output Formats
+
+Showing Differences Without Context
+===================================
+
+   The "normal" `diff' output format shows each hunk of differences
+without any surrounding context.  Sometimes such output is the clearest
+way to see how lines have changed, without the clutter of nearby
+unchanged lines (although you can get similar results with the context
+or unified formats by using 0 lines of context).  However, this format
+is no longer widely used for sending out patches; for that purpose, the
+context format (*note Context Format::) and the unified format (*note
+Unified Format::) are superior.  Normal format is the default for
+compatibility with older versions of `diff' and the POSIX standard.
+Use the `--normal' option to select this output format explicitly.
+
+* Menu:
+
+* Detailed Normal:: A detailed description of normal output format.
+* Example Normal::  Sample output in the normal format.
+
+\1f
+File: diff.info,  Node: Detailed Normal,  Next: Example Normal,  Up: Normal
+
+Detailed Description of Normal Format
+-------------------------------------
+
+   The normal output format consists of one or more hunks of
+differences; each hunk shows one area where the files differ.  Normal
+format hunks look like this:
+
+     CHANGE-COMMAND
+     < FROM-FILE-LINE
+     < FROM-FILE-LINE...
+     ---
+     > TO-FILE-LINE
+     > TO-FILE-LINE...
+
+   There are three types of change commands.  Each consists of a line
+number or comma-separated range of lines in the first file, a single
+character indicating the kind of change to make, and a line number or
+comma-separated range of lines in the second file.  All line numbers are
+the original line numbers in each file.  The types of change commands
+are:
+
+`LaR'
+     Add the lines in range R of the second file after line L of the
+     first file.  For example, `8a12,15' means append lines 12-15 of
+     file 2 after line 8 of file 1; or, if changing file 2 into file 1,
+     delete lines 12-15 of file 2.
+
+`FcT'
+     Replace the lines in range F of the first file with lines in range
+     T of the second file.  This is like a combined add and delete, but
+     more compact.  For example, `5,7c8,10' means change lines 5-7 of
+     file 1 to read as lines 8-10 of file 2; or, if changing file 2 into
+     file 1, change lines 8-10 of file 2 to read as lines 5-7 of file 1.
+
+`RdL'
+     Delete the lines in range R from the first file; line L is where
+     they would have appeared in the second file had they not been
+     deleted.  For example, `5,7d3' means delete lines 5-7 of file 1;
+     or, if changing file 2 into file 1, append lines 5-7 of file 1
+     after line 3 of file 2.
+
+\1f
+File: diff.info,  Node: Example Normal,  Prev: Detailed Normal,  Up: Normal
+
+An Example of Normal Format
+---------------------------
+
+   Here is the output of the command `diff lao tzu' (*note Sample diff
+Input::, for the complete contents of the two files).  Notice that it
+shows only the lines that are different between the two files.
+
+     1,2d0
+     < The Way that can be told of is not the eternal Way;
+     < The name that can be named is not the eternal name.
+     4c2,3
+     < The Named is the mother of all things.
+     ---
+     > The named is the mother of all things.
+     >
+     11a11,13
+     > They both may be called deep and profound.
+     > Deeper and more profound,
+     > The door of all subtleties!
+
+\1f
+File: diff.info,  Node: Context,  Next: Side by Side,  Prev: Normal,  Up: Output Formats
+
+Showing Differences in Their Context
+====================================
+
+   Usually, when you are looking at the differences between files, you
+will also want to see the parts of the files near the lines that
+differ, to help you understand exactly what has changed.  These nearby
+parts of the files are called the "context".
+
+   GNU `diff' provides two output formats that show context around the
+differing lines: "context format" and "unified format".  It can
+optionally show in which function or section of the file the differing
+lines are found.
+
+   If you are distributing new versions of files to other people in the
+form of `diff' output, you should use one of the output formats that
+show context so that they can apply the diffs even if they have made
+small changes of their own to the files.  `patch' can apply the diffs
+in this case by searching in the files for the lines of context around
+the differing lines; if those lines are actually a few lines away from
+where the diff says they are, `patch' can adjust the line numbers
+accordingly and still apply the diff correctly.  *Note Imperfect::, for
+more information on using `patch' to apply imperfect diffs.
+
+* Menu:
+
+* Context Format::  An output format that shows surrounding lines.
+* Unified Format::  A more compact output format that shows context.
+* Sections::        Showing which sections of the files differences are in.
+* Alternate Names:: Showing alternate file names in context headers.
+
+\1f
+File: diff.info,  Node: Context Format,  Next: Unified Format,  Up: Context
+
+Context Format
+--------------
+
+   The context output format shows several lines of context around the
+lines that differ.  It is the standard format for distributing updates
+to source code.
+
+   To select this output format, use the `-C LINES',
+`--context[=LINES]', or `-c' option.  The argument LINES that some of
+these options take is the number of lines of context to show.  If you
+do not specify LINES, it defaults to three.  For proper operation,
+`patch' typically needs at least two lines of context.
+
+* Menu:
+
+* Detailed Context:: A detailed description of the context output format.
+* Example Context::  Sample output in context format.
+* Less Context::     Another sample with less context.
+
+\1f
+File: diff.info,  Node: Detailed Context,  Next: Example Context,  Up: Context Format
+
+Detailed Description of Context Format
+......................................
+
+   The context output format starts with a two-line header, which looks
+like this:
+
+     *** FROM-FILE FROM-FILE-MODIFICATION-TIME
+     --- TO-FILE TO-FILE-MODIFICATION TIME
+
+The time stamp normally looks like `2002-02-21 23:30:39.942229878
+-0800' to indicate the date, time with fractional seconds, and time
+zone in Internet RFC 2822 format
+(ftp://ftp.isi.edu/in-notes/rfc2822.txt).  However, a traditional time
+stamp like `Thu Feb 21 23:30:39 2002' is used if the `LC_TIME' locale
+category is either `C' or `POSIX'.
+
+   You can change the header's content with the `--label=LABEL' option;
+see *Note Alternate Names::.
+
+   Next come one or more hunks of differences; each hunk shows one area
+where the files differ.  Context format hunks look like this:
+
+     ***************
+     *** FROM-FILE-LINE-RANGE ****
+       FROM-FILE-LINE
+       FROM-FILE-LINE...
+     --- TO-FILE-LINE-RANGE ----
+       TO-FILE-LINE
+       TO-FILE-LINE...
+
+   The lines of context around the lines that differ start with two
+space characters.  The lines that differ between the two files start
+with one of the following indicator characters, followed by a space
+character:
+
+`!'
+     A line that is part of a group of one or more lines that changed
+     between the two files.  There is a corresponding group of lines
+     marked with `!' in the part of this hunk for the other file.
+
+`+'
+     An "inserted" line in the second file that corresponds to nothing
+     in the first file.
+
+`-'
+     A "deleted" line in the first file that corresponds to nothing in
+     the second file.
+
+   If all of the changes in a hunk are insertions, the lines of
+FROM-FILE are omitted.  If all of the changes are deletions, the lines
+of TO-FILE are omitted.
+
+\1f
+File: diff.info,  Node: Example Context,  Next: Less Context,  Prev: Detailed Context,  Up: Context Format
+
+An Example of Context Format
+............................
+
+   Here is the output of `diff -c lao tzu' (*note Sample diff Input::,
+for the complete contents of the two files).  Notice that up to three
+lines that are not different are shown around each line that is
+different; they are the context lines.  Also notice that the first two
+hunks have run together, because their contents overlap.
+
+     *** lao   2002-02-21 23:30:39.942229878 -0800
+     --- tzu   2002-02-21 23:30:50.442260588 -0800
+     ***************
+     *** 1,7 ****
+     - The Way that can be told of is not the eternal Way;
+     - The name that can be named is not the eternal name.
+       The Nameless is the origin of Heaven and Earth;
+     ! The Named is the mother of all things.
+       Therefore let there always be non-being,
+         so we may see their subtlety,
+       And let there always be being,
+     --- 1,6 ----
+       The Nameless is the origin of Heaven and Earth;
+     ! The named is the mother of all things.
+     !
+       Therefore let there always be non-being,
+         so we may see their subtlety,
+       And let there always be being,
+     ***************
+     *** 9,11 ****
+     --- 8,13 ----
+       The two are the same,
+       But after they are produced,
+         they have different names.
+     + They both may be called deep and profound.
+     + Deeper and more profound,
+     + The door of all subtleties!
+
+\1f
+File: diff.info,  Node: Less Context,  Prev: Example Context,  Up: Context Format
+
+An Example of Context Format with Less Context
+..............................................
+
+   Here is the output of `diff -C 1 lao tzu' (*note Sample diff
+Input::, for the complete contents of the two files).  Notice that at
+most one context line is reported here.
+
+     *** lao   2002-02-21 23:30:39.942229878 -0800
+     --- tzu   2002-02-21 23:30:50.442260588 -0800
+     ***************
+     *** 1,5 ****
+     - The Way that can be told of is not the eternal Way;
+     - The name that can be named is not the eternal name.
+       The Nameless is the origin of Heaven and Earth;
+     ! The Named is the mother of all things.
+       Therefore let there always be non-being,
+     --- 1,4 ----
+       The Nameless is the origin of Heaven and Earth;
+     ! The named is the mother of all things.
+     !
+       Therefore let there always be non-being,
+     ***************
+     *** 11 ****
+     --- 10,13 ----
+         they have different names.
+     + They both may be called deep and profound.
+     + Deeper and more profound,
+     + The door of all subtleties!
+
+\1f
+File: diff.info,  Node: Unified Format,  Next: Sections,  Prev: Context Format,  Up: Context
+
+Unified Format
+--------------
+
+   The unified output format is a variation on the context format that
+is more compact because it omits redundant context lines.  To select
+this output format, use the `-U LINES', `--unified[=LINES]', or `-u'
+option.  The argument LINES is the number of lines of context to show.
+When it is not given, it defaults to three.
+
+   At present, only GNU `diff' can produce this format and only GNU
+`patch' can automatically apply diffs in this format.  For proper
+operation, `patch' typically needs at least three lines of context.
+
+* Menu:
+
+* Detailed Unified:: A detailed description of unified format.
+* Example Unified::  Sample output in unified format.
+
+\1f
+File: diff.info,  Node: Detailed Unified,  Next: Example Unified,  Up: Unified Format
+
+Detailed Description of Unified Format
+......................................
+
+   The unified output format starts with a two-line header, which looks
+like this:
+
+     --- FROM-FILE FROM-FILE-MODIFICATION-TIME
+     +++ TO-FILE TO-FILE-MODIFICATION-TIME
+
+The time stamp looks like `2002-02-21 23:30:39.942229878 -0800' to
+indicate the date, time with fractional seconds, and time zone.
+
+   You can change the header's content with the `--label=LABEL' option;
+see *Note Alternate Names::.
+
+   Next come one or more hunks of differences; each hunk shows one area
+where the files differ.  Unified format hunks look like this:
+
+     @@ FROM-FILE-RANGE TO-FILE-RANGE @@
+      LINE-FROM-EITHER-FILE
+      LINE-FROM-EITHER-FILE...
+
+   The lines common to both files begin with a space character.  The
+lines that actually differ between the two files have one of the
+following indicator characters in the left print column:
+
+`+'
+     A line was added here to the first file.
+
+`-'
+     A line was removed here from the first file.
+
+\1f
+File: diff.info,  Node: Example Unified,  Prev: Detailed Unified,  Up: Unified Format
+
+An Example of Unified Format
+............................
+
+   Here is the output of the command `diff -u lao tzu' (*note Sample
+diff Input::, for the complete contents of the two files):
+
+     --- lao   2002-02-21 23:30:39.942229878 -0800
+     +++ tzu   2002-02-21 23:30:50.442260588 -0800
+     @@ -1,7 +1,6 @@
+     -The Way that can be told of is not the eternal Way;
+     -The name that can be named is not the eternal name.
+      The Nameless is the origin of Heaven and Earth;
+     -The Named is the mother of all things.
+     +The named is the mother of all things.
+     +
+      Therefore let there always be non-being,
+        so we may see their subtlety,
+      And let there always be being,
+     @@ -9,3 +8,6 @@
+      The two are the same,
+      But after they are produced,
+        they have different names.
+     +They both may be called deep and profound.
+     +Deeper and more profound,
+     +The door of all subtleties!
+
+\1f
+File: diff.info,  Node: Sections,  Next: Alternate Names,  Prev: Unified Format,  Up: Context
+
+Showing Which Sections Differences Are in
+-----------------------------------------
+
+   Sometimes you might want to know which part of the files each change
+falls in.  If the files are source code, this could mean which function
+was changed.  If the files are documents, it could mean which chapter or
+appendix was changed.  GNU `diff' can show this by displaying the
+nearest section heading line that precedes the differing lines.  Which
+lines are "section headings" is determined by a regular expression.
+
+* Menu:
+
+* Specified Headings::  Showing headings that match regular expressions.
+* C Function Headings:: Showing headings of C functions.
+
+\1f
+File: diff.info,  Node: Specified Headings,  Next: C Function Headings,  Up: Sections
+
+Showing Lines That Match Regular Expressions
+............................................
+
+   To show in which sections differences occur for files that are not
+source code for C or similar languages, use the `-F REGEXP' or
+`--show-function-line=REGEXP' option.  `diff' considers lines that
+match the `grep'-style regular expression REGEXP to be the beginning of
+a section of the file.  Here are suggested regular expressions for some
+common languages:
+
+`^[[:alpha:]$_]'
+     C, C++, Prolog
+
+`^('
+     Lisp
+
+`^@node'
+     Texinfo
+
+   This option does not automatically select an output format; in order
+to use it, you must select the context format (*note Context Format::)
+or unified format (*note Unified Format::).  In other output formats it
+has no effect.
+
+   The `-F' and `--show-function-line' options find the nearest
+unchanged line that precedes each hunk of differences and matches the
+given regular expression.  Then they add that line to the end of the
+line of asterisks in the context format, or to the `@@' line in unified
+format.  If no matching line exists, they leave the output for that
+hunk unchanged.  If that line is more than 40 characters long, they
+output only the first 40 characters.  You can specify more than one
+regular expression for such lines; `diff' tries to match each line
+against each regular expression, starting with the last one given.  This
+means that you can use `-p' and `-F' together, if you wish.
+
+\1f
+File: diff.info,  Node: C Function Headings,  Prev: Specified Headings,  Up: Sections
+
+Showing C Function Headings
+...........................
+
+   To show in which functions differences occur for C and similar
+languages, you can use the `-p' or `--show-c-function' option.  This
+option automatically defaults to the context output format (*note
+Context Format::), with the default number of lines of context.  You
+can override that number with `-C LINES' elsewhere in the command line.
+You can override both the format and the number with `-U LINES'
+elsewhere in the command line.
+
+   The `-p' and `--show-c-function' options are equivalent to `-F
+'^[[:alpha:]$_]'' if the unified format is specified, otherwise `-c -F
+'^[[:alpha:]$_]'' (*note Specified Headings::).  GNU `diff' provides
+them for the sake of convenience.
+
+\1f
+File: diff.info,  Node: Alternate Names,  Prev: Sections,  Up: Context
+
+Showing Alternate File Names
+----------------------------
+
+   If you are comparing two files that have meaningless or uninformative
+names, you might want `diff' to show alternate names in the header of
+the context and unified output formats.  To do this, use the
+`--label=LABEL' option.  The first time you give this option, its
+argument replaces the name and date of the first file in the header;
+the second time, its argument replaces the name and date of the second
+file.  If you give this option more than twice, `diff' reports an
+error.  The `--label' option does not affect the file names in the `pr'
+header when the `-l' or `--paginate' option is used (*note
+Pagination::).
+
+   Here are the first two lines of the output from `diff -C 2
+--label=original --label=modified lao tzu':
+
+     *** original
+     --- modified
+
+\1f
+File: diff.info,  Node: Side by Side,  Next: Scripts,  Prev: Context,  Up: Output Formats
+
+Showing Differences Side by Side
+================================
+
+   `diff' can produce a side by side difference listing of two files.
+The files are listed in two columns with a gutter between them.  The
+gutter contains one of the following markers:
+
+white space
+     The corresponding lines are in common.  That is, either the lines
+     are identical, or the difference is ignored because of one of the
+     `--ignore' options (*note White Space::).
+
+`|'
+     The corresponding lines differ, and they are either both complete
+     or both incomplete.
+
+`<'
+     The files differ and only the first file contains the line.
+
+`>'
+     The files differ and only the second file contains the line.
+
+`('
+     Only the first file contains the line, but the difference is
+     ignored.
+
+`)'
+     Only the second file contains the line, but the difference is
+     ignored.
+
+`\'
+     The corresponding lines differ, and only the first line is
+     incomplete.
+
+`/'
+     The corresponding lines differ, and only the second line is
+     incomplete.
+
+   Normally, an output line is incomplete if and only if the lines that
+it contains are incomplete; *Note Incomplete Lines::.  However, when an
+output line represents two differing lines, one might be incomplete
+while the other is not.  In this case, the output line is complete, but
+its the gutter is marked `\' if the first line is incomplete, `/' if
+the second line is.
+
+   Side by side format is sometimes easiest to read, but it has
+limitations.  It generates much wider output than usual, and truncates
+lines that are too long to fit.  Also, it relies on lining up output
+more heavily than usual, so its output looks particularly bad if you
+use varying width fonts, nonstandard tab stops, or nonprinting
+characters.
+
+   You can use the `sdiff' command to interactively merge side by side
+differences.  *Note Interactive Merging::, for more information on
+merging files.
+
+* Menu:
+
+* Side by Side Format::  Controlling side by side output format.
+* Example Side by Side:: Sample side by side output.
+
+\1f
+File: diff.info,  Node: Side by Side Format,  Next: Example Side by Side,  Up: Side by Side
+
+Controlling Side by Side Format
+-------------------------------
+
+   The `-y' or `--side-by-side' option selects side by side format.
+Because side by side output lines contain two input lines, the output
+is wider than usual: normally 130 print columns, which can fit onto a
+traditional printer line.  You can set the width of the output with the
+`-W COLUMNS' or `--width=COLUMNS' option.  The output is split into two
+halves of equal width, separated by a small gutter to mark differences;
+the right half is aligned to a tab stop so that tabs line up.  Input
+lines that are too long to fit in half of an output line are truncated
+for output.
+
+   The `--left-column' option prints only the left column of two common
+lines.  The `--suppress-common-lines' option suppresses common lines
+entirely.
+
+\1f
+File: diff.info,  Node: Example Side by Side,  Prev: Side by Side Format,  Up: Side by Side
+
+An Example of Side by Side Format
+---------------------------------
+
+   Here is the output of the command `diff -y -W 72 lao tzu' (*note
+Sample diff Input::, for the complete contents of the two files).
+
+     The Way that can be told of is n   <
+     The name that can be named is no   <
+     The Nameless is the origin of He        The Nameless is the origin of He
+     The Named is the mother of all t   |    The named is the mother of all t
+                                        >
+     Therefore let there always be no        Therefore let there always be no
+       so we may see their subtlety,           so we may see their subtlety,
+     And let there always be being,          And let there always be being,
+       so we may see their outcome.            so we may see their outcome.
+     The two are the same,                   The two are the same,
+     But after they are produced,            But after they are produced,
+       they have different names.              they have different names.
+                                        >    They both may be called deep and
+                                        >    Deeper and more profound,
+                                        >    The door of all subtleties!
+
+\1f
+File: diff.info,  Node: Scripts,  Next: If-then-else,  Prev: Side by Side,  Up: Output Formats
+
+Making Edit Scripts
+===================
+
+   Several output modes produce command scripts for editing FROM-FILE
+to produce TO-FILE.
+
+* Menu:
+
+* ed Scripts:: Using `diff' to produce commands for `ed'.
+* Forward ed:: Making forward `ed' scripts.
+* RCS::        A special `diff' output format used by RCS.
+
+\1f
+File: diff.info,  Node: ed Scripts,  Next: Forward ed,  Up: Scripts
+
+`ed' Scripts
+------------
+
+   `diff' can produce commands that direct the `ed' text editor to
+change the first file into the second file.  Long ago, this was the
+only output mode that was suitable for editing one file into another
+automatically; today, with `patch', it is almost obsolete.  Use the
+`-e' or `--ed' option to select this output format.
+
+   Like the normal format (*note Normal::), this output format does not
+show any context; unlike the normal format, it does not include the
+information necessary to apply the diff in reverse (to produce the first
+file if all you have is the second file and the diff).
+
+   If the file `d' contains the output of `diff -e old new', then the
+command `(cat d && echo w) | ed - old' edits `old' to make it a copy of
+`new'.  More generally, if `d1', `d2', ..., `dN' contain the outputs of
+`diff -e old new1', `diff -e new1 new2', ..., `diff -e newN-1 newN',
+respectively, then the command `(cat d1 d2 ... dN && echo w) | ed -
+old' edits `old' to make it a copy of `newN'.
+
+* Menu:
+
+* Detailed ed:: A detailed description of `ed' format.
+* Example ed::  A sample `ed' script.
+
+\1f
+File: diff.info,  Node: Detailed ed,  Next: Example ed,  Up: ed Scripts
+
+Detailed Description of `ed' Format
+...................................
+
+   The `ed' output format consists of one or more hunks of differences.
+The changes closest to the ends of the files come first so that
+commands that change the number of lines do not affect how `ed'
+interprets line numbers in succeeding commands.  `ed' format hunks look
+like this:
+
+     CHANGE-COMMAND
+     TO-FILE-LINE
+     TO-FILE-LINE...
+     .
+
+   Because `ed' uses a single period on a line to indicate the end of
+input, GNU `diff' protects lines of changes that contain a single
+period on a line by writing two periods instead, then writing a
+subsequent `ed' command to change the two periods into one.  The `ed'
+format cannot represent an incomplete line, so if the second file ends
+in a changed incomplete line, `diff' reports an error and then pretends
+that a newline was appended.
+
+   There are three types of change commands.  Each consists of a line
+number or comma-separated range of lines in the first file and a single
+character indicating the kind of change to make.  All line numbers are
+the original line numbers in the file.  The types of change commands
+are:
+
+`La'
+     Add text from the second file after line L in the first file.  For
+     example, `8a' means to add the following lines after line 8 of file
+     1.
+
+`Rc'
+     Replace the lines in range R in the first file with the following
+     lines.  Like a combined add and delete, but more compact.  For
+     example, `5,7c' means change lines 5-7 of file 1 to read as the
+     text file 2.
+
+`Rd'
+     Delete the lines in range R from the first file.  For example,
+     `5,7d' means delete lines 5-7 of file 1.
+
+\1f
+File: diff.info,  Node: Example ed,  Prev: Detailed ed,  Up: ed Scripts
+
+Example `ed' Script
+...................
+
+   Here is the output of `diff -e lao tzu' (*note Sample diff Input::,
+for the complete contents of the two files):
+
+     11a
+     They both may be called deep and profound.
+     Deeper and more profound,
+     The door of all subtleties!
+     .
+     4c
+     The named is the mother of all things.
+     
+     .
+     1,2d
+
+\1f
+File: diff.info,  Node: Forward ed,  Next: RCS,  Prev: ed Scripts,  Up: Scripts
+
+Forward `ed' Scripts
+--------------------
+
+   `diff' can produce output that is like an `ed' script, but with
+hunks in forward (front to back) order.  The format of the commands is
+also changed slightly: command characters precede the lines they
+modify, spaces separate line numbers in ranges, and no attempt is made
+to disambiguate hunk lines consisting of a single period.  Like `ed'
+format, forward `ed' format cannot represent incomplete lines.
+
+   Forward `ed' format is not very useful, because neither `ed' nor
+`patch' can apply diffs in this format.  It exists mainly for
+compatibility with older versions of `diff'.  Use the `-f' or
+`--forward-ed' option to select it.
+
+\1f
+File: diff.info,  Node: RCS,  Prev: Forward ed,  Up: Scripts
+
+RCS Scripts
+-----------
+
+   The RCS output format is designed specifically for use by the
+Revision Control System, which is a set of free programs used for
+organizing different versions and systems of files.  Use the `-n' or
+`--rcs' option to select this output format.  It is like the forward
+`ed' format (*note Forward ed::), but it can represent arbitrary
+changes to the contents of a file because it avoids the forward `ed'
+format's problems with lines consisting of a single period and with
+incomplete lines.  Instead of ending text sections with a line
+consisting of a single period, each command specifies the number of
+lines it affects; a combination of the `a' and `d' commands are used
+instead of `c'.  Also, if the second file ends in a changed incomplete
+line, then the output also ends in an incomplete line.
+
+   Here is the output of `diff -n lao tzu' (*note Sample diff Input::,
+for the complete contents of the two files):
+
+     d1 2
+     d4 1
+     a4 2
+     The named is the mother of all things.
+     
+     a11 3
+     They both may be called deep and profound.
+     Deeper and more profound,
+     The door of all subtleties!
+
+\1f
+File: diff.info,  Node: If-then-else,  Prev: Scripts,  Up: Output Formats
+
+Merging Files with If-then-else
+===============================
+
+   You can use `diff' to merge two files of C source code.  The output
+of `diff' in this format contains all the lines of both files.  Lines
+common to both files are output just once; the differing parts are
+separated by the C preprocessor directives `#ifdef NAME' or `#ifndef
+NAME', `#else', and `#endif'.  When compiling the output, you select
+which version to use by either defining or leaving undefined the macro
+NAME.
+
+   To merge two files, use `diff' with the `-D NAME' or `--ifdef=NAME'
+option.  The argument NAME is the C preprocessor identifier to use in
+the `#ifdef' and `#ifndef' directives.
+
+   For example, if you change an instance of `wait (&s)' to `waitpid
+(-1, &s, 0)' and then merge the old and new files with the
+`--ifdef=HAVE_WAITPID' option, then the affected part of your code
+might look like this:
+
+         do {
+     #ifndef HAVE_WAITPID
+             if ((w = wait (&s)) < 0  &&  errno != EINTR)
+     #else /* HAVE_WAITPID */
+             if ((w = waitpid (-1, &s, 0)) < 0  &&  errno != EINTR)
+     #endif /* HAVE_WAITPID */
+                 return w;
+         } while (w != child);
+
+   You can specify formats for languages other than C by using line
+group formats and line formats, as described in the next sections.
+
+* Menu:
+
+* Line Group Formats::    Formats for general if-then-else line groups.
+* Line Formats::          Formats for each line in a line group.
+* Detailed If-then-else:: A detailed description of if-then-else format.
+* Example If-then-else::  Sample if-then-else format output.
+
+\1f
+File: diff.info,  Node: Line Group Formats,  Next: Line Formats,  Up: If-then-else
+
+Line Group Formats
+------------------
+
+   Line group formats let you specify formats suitable for many
+applications that allow if-then-else input, including programming
+languages and text formatting languages.  A line group format specifies
+the output format for a contiguous group of similar lines.
+
+   For example, the following command compares the TeX files `old' and
+`new', and outputs a merged file in which old regions are surrounded by
+`\begin{em}'-`\end{em}' lines, and new regions are surrounded by
+`\begin{bf}'-`\end{bf}' lines.
+
+     diff \
+        --old-group-format='\begin{em}
+     %<\end{em}
+     ' \
+        --new-group-format='\begin{bf}
+     %>\end{bf}
+     ' \
+        old new
+
+   The following command is equivalent to the above example, but it is a
+little more verbose, because it spells out the default line group
+formats.
+
+     diff \
+        --old-group-format='\begin{em}
+     %<\end{em}
+     ' \
+        --new-group-format='\begin{bf}
+     %>\end{bf}
+     ' \
+        --unchanged-group-format='%=' \
+        --changed-group-format='\begin{em}
+     %<\end{em}
+     \begin{bf}
+     %>\end{bf}
+     ' \
+        old new
+
+   Here is a more advanced example, which outputs a diff listing with
+headers containing line numbers in a "plain English" style.
+
+     diff \
+        --unchanged-group-format='' \
+        --old-group-format='-------- %dn line%(n=1?:s) deleted at %df:
+     %<' \
+        --new-group-format='-------- %dN line%(N=1?:s) added after %de:
+     %>' \
+        --changed-group-format='-------- %dn line%(n=1?:s) changed at %df:
+     %<-------- to:
+     %>' \
+        old new
+
+   To specify a line group format, use `diff' with one of the options
+listed below.  You can specify up to four line group formats, one for
+each kind of line group.  You should quote FORMAT, because it typically
+contains shell metacharacters.
+
+`--old-group-format=FORMAT'
+     These line groups are hunks containing only lines from the first
+     file.  The default old group format is the same as the changed
+     group format if it is specified; otherwise it is a format that
+     outputs the line group as-is.
+
+`--new-group-format=FORMAT'
+     These line groups are hunks containing only lines from the second
+     file.  The default new group format is same as the changed group
+     format if it is specified; otherwise it is a format that outputs
+     the line group as-is.
+
+`--changed-group-format=FORMAT'
+     These line groups are hunks containing lines from both files.  The
+     default changed group format is the concatenation of the old and
+     new group formats.
+
+`--unchanged-group-format=FORMAT'
+     These line groups contain lines common to both files.  The default
+     unchanged group format is a format that outputs the line group
+     as-is.
+
+   In a line group format, ordinary characters represent themselves;
+conversion specifications start with `%' and have one of the following
+forms.
+
+`%<'
+     stands for the lines from the first file, including the trailing
+     newline.  Each line is formatted according to the old line format
+     (*note Line Formats::).
+
+`%>'
+     stands for the lines from the second file, including the trailing
+     newline.  Each line is formatted according to the new line format.
+
+`%='
+     stands for the lines common to both files, including the trailing
+     newline.  Each line is formatted according to the unchanged line
+     format.
+
+`%%'
+     stands for `%'.
+
+`%c'C''
+     where C is a single character, stands for C.  C may not be a
+     backslash or an apostrophe.  For example, `%c':'' stands for a
+     colon, even inside the then-part of an if-then-else format, which
+     a colon would normally terminate.
+
+`%c'\O''
+     where O is a string of 1, 2, or 3 octal digits, stands for the
+     character with octal code O.  For example, `%c'\0'' stands for a
+     null character.
+
+`FN'
+     where F is a `printf' conversion specification and N is one of the
+     following letters, stands for N's value formatted with F.
+
+    `e'
+          The line number of the line just before the group in the old
+          file.
+
+    `f'
+          The line number of the first line in the group in the old
+          file; equals E + 1.
+
+    `l'
+          The line number of the last line in the group in the old file.
+
+    `m'
+          The line number of the line just after the group in the old
+          file; equals L + 1.
+
+    `n'
+          The number of lines in the group in the old file; equals L -
+          F + 1.
+
+    `E, F, L, M, N'
+          Likewise, for lines in the new file.
+
+     The `printf' conversion specification can be `%d', `%o', `%x', or
+     `%X', specifying decimal, octal, lower case hexadecimal, or upper
+     case hexadecimal output respectively.  After the `%' the following
+     options can appear in sequence: a series of zero or more flags; an
+     integer specifying the minimum field width; and a period followed
+     by an optional integer specifying the minimum number of digits.
+     The flags are `-' for left-justification, `'' for separating the
+     digit into groups as specified by the `LC_NUMERIC' locale category,
+     and `0' for padding with zeros instead of spaces.  For example,
+     `%5dN' prints the number of new lines in the group in a field of
+     width 5 characters, using the `printf' format `"%5d"'.
+
+`(A=B?T:E)'
+     If A equals B then T else E.  A and B are each either a decimal
+     constant or a single letter interpreted as above.  This format
+     spec is equivalent to T if A's value equals B's; otherwise it is
+     equivalent to E.
+
+     For example, `%(N=0?no:%dN) line%(N=1?:s)' is equivalent to `no
+     lines' if N (the number of lines in the group in the the new file)
+     is 0, to `1 line' if N is 1, and to `%dN lines' otherwise.
+
+\1f
+File: diff.info,  Node: Line Formats,  Next: Detailed If-then-else,  Prev: Line Group Formats,  Up: If-then-else
+
+Line Formats
+------------
+
+   Line formats control how each line taken from an input file is
+output as part of a line group in if-then-else format.
+
+   For example, the following command outputs text with a one-character
+change indicator to the left of the text.  The first character of output
+is `-' for deleted lines, `|' for added lines, and a space for
+unchanged lines.  The formats contain newline characters where newlines
+are desired on output.
+
+     diff \
+        --old-line-format='-%l
+     ' \
+        --new-line-format='|%l
+     ' \
+        --unchanged-line-format=' %l
+     ' \
+        old new
+
+   To specify a line format, use one of the following options.  You
+should quote FORMAT, since it often contains shell metacharacters.
+
+`--old-line-format=FORMAT'
+     formats lines just from the first file.
+
+`--new-line-format=FORMAT'
+     formats lines just from the second file.
+
+`--unchanged-line-format=FORMAT'
+     formats lines common to both files.
+
+`--line-format=FORMAT'
+     formats all lines; in effect, it sets all three above options
+     simultaneously.
+
+   In a line format, ordinary characters represent themselves;
+conversion specifications start with `%' and have one of the following
+forms.
+
+`%l'
+     stands for the contents of the line, not counting its trailing
+     newline (if any).  This format ignores whether the line is
+     incomplete; *Note Incomplete Lines::.
+
+`%L'
+     stands for the contents of the line, including its trailing newline
+     (if any).  If a line is incomplete, this format preserves its
+     incompleteness.
+
+`%%'
+     stands for `%'.
+
+`%c'C''
+     where C is a single character, stands for C.  C may not be a
+     backslash or an apostrophe.  For example, `%c':'' stands for a
+     colon.
+
+`%c'\O''
+     where O is a string of 1, 2, or 3 octal digits, stands for the
+     character with octal code O.  For example, `%c'\0'' stands for a
+     null character.
+
+`Fn'
+     where F is a `printf' conversion specification, stands for the
+     line number formatted with F.  For example, `%.5dn' prints the
+     line number using the `printf' format `"%.5d"'.  *Note Line Group
+     Formats::, for more about printf conversion specifications.
+
+   The default line format is `%l' followed by a newline character.
+
+   If the input contains tab characters and it is important that they
+line up on output, you should ensure that `%l' or `%L' in a line format
+is just after a tab stop (e.g. by preceding `%l' or `%L' with a tab
+character), or you should use the `-t' or `--expand-tabs' option.
+
+   Taken together, the line and line group formats let you specify many
+different formats.  For example, the following command uses a format
+similar to normal `diff' format.  You can tailor this command to get
+fine control over `diff' output.
+
+     diff \
+        --old-line-format='< %l
+     ' \
+        --new-line-format='> %l
+     ' \
+        --old-group-format='%df%(f=l?:,%dl)d%dE
+     %<' \
+        --new-group-format='%dea%dF%(F=L?:,%dL)
+     %>' \
+        --changed-group-format='%df%(f=l?:,%dl)c%dF%(F=L?:,%dL)
+     %<---
+     %>' \
+        --unchanged-group-format='' \
+        old new
+
+\1f
+File: diff.info,  Node: Detailed If-then-else,  Next: Example If-then-else,  Prev: Line Formats,  Up: If-then-else
+
+Detailed Description of If-then-else Format
+-------------------------------------------
+
+   For lines common to both files, `diff' uses the unchanged line group
+format.  For each hunk of differences in the merged output format, if
+the hunk contains only lines from the first file, `diff' uses the old
+line group format; if the hunk contains only lines from the second
+file, `diff' uses the new group format; otherwise, `diff' uses the
+changed group format.
+
+   The old, new, and unchanged line formats specify the output format of
+lines from the first file, lines from the second file, and lines common
+to both files, respectively.
+
+   The option `--ifdef=NAME' is equivalent to the following sequence of
+options using shell syntax:
+
+     --old-group-format='#ifndef NAME
+     %<#endif /* ! NAME */
+     ' \
+     --new-group-format='#ifdef NAME
+     %>#endif /* NAME */
+     ' \
+     --unchanged-group-format='%=' \
+     --changed-group-format='#ifndef NAME
+     %<#else /* NAME */
+     %>#endif /* NAME */
+     '
+
+   You should carefully check the `diff' output for proper nesting.
+For example, when using the `-D NAME' or `--ifdef=NAME' option, you
+should check that if the differing lines contain any of the C
+preprocessor directives `#ifdef', `#ifndef', `#else', `#elif', or
+`#endif', they are nested properly and match.  If they don't, you must
+make corrections manually.  It is a good idea to carefully check the
+resulting code anyway to make sure that it really does what you want it
+to; depending on how the input files were produced, the output might
+contain duplicate or otherwise incorrect code.
+
+   The `patch' `-D NAME' option behaves like the `diff' `-D NAME'
+option, except it operates on a file and a diff to produce a merged
+file; *Note patch Options::.
+
+\1f
+File: diff.info,  Node: Example If-then-else,  Prev: Detailed If-then-else,  Up: If-then-else
+
+An Example of If-then-else Format
+---------------------------------
+
+   Here is the output of `diff -DTWO lao tzu' (*note Sample diff
+Input::, for the complete contents of the two files):
+
+     #ifndef TWO
+     The Way that can be told of is not the eternal Way;
+     The name that can be named is not the eternal name.
+     #endif /* ! TWO */
+     The Nameless is the origin of Heaven and Earth;
+     #ifndef TWO
+     The Named is the mother of all things.
+     #else /* TWO */
+     The named is the mother of all things.
+     
+     #endif /* TWO */
+     Therefore let there always be non-being,
+       so we may see their subtlety,
+     And let there always be being,
+       so we may see their outcome.
+     The two are the same,
+     But after they are produced,
+       they have different names.
+     #ifdef TWO
+     They both may be called deep and profound.
+     Deeper and more profound,
+     The door of all subtleties!
+     #endif /* TWO */
+
+\1f
+File: diff.info,  Node: Incomplete Lines,  Next: Comparing Directories,  Prev: Output Formats,  Up: Top
+
+Incomplete Lines
+****************
+
+   When an input file ends in a non-newline character, its last line is
+called an "incomplete line" because its last character is not a
+newline.  All other lines are called "full lines" and end in a newline
+character.  Incomplete lines do not match full lines unless differences
+in white space are ignored (*note White Space::).
+
+   An incomplete line is normally distinguished on output from a full
+line by a following line that starts with `\'.  However, the RCS format
+(*note RCS::) outputs the incomplete line as-is, without any trailing
+newline or following line.  The side by side format normally represents
+incomplete lines as-is, but in some cases uses a `\' or `/' gutter
+marker; *Note Side by Side::.  The if-then-else line format preserves a
+line's incompleteness with `%L', and discards the newline with `%l';
+*Note Line Formats::.  Finally, with the `ed' and forward `ed' output
+formats (*note Output Formats::) `diff' cannot represent an incomplete
+line, so it pretends there was a newline and reports an error.
+
+   For example, suppose `F' and `G' are one-byte files that contain
+just `f' and `g', respectively.  Then `diff F G' outputs
+
+     1c1
+     < f
+     \ No newline at end of file
+     ---
+     > g
+     \ No newline at end of file
+
+(The exact message may differ in non-English locales.)  `diff -n F G'
+outputs the following without a trailing newline:
+
+     d1 1
+     a1 1
+     g
+
+`diff -e F G' reports two errors and outputs the following:
+
+     1c
+     g
+     .
+
+\1f
+File: diff.info,  Node: Comparing Directories,  Next: Adjusting Output,  Prev: Incomplete Lines,  Up: Top
+
+Comparing Directories
+*********************
+
+   You can use `diff' to compare some or all of the files in two
+directory trees.  When both file name arguments to `diff' are
+directories, it compares each file that is contained in both
+directories, examining file names in alphabetical order as specified by
+the `LC_COLLATE' locale category.  Normally `diff' is silent about
+pairs of files that contain no differences, but if you use the `-s' or
+`--report-identical-files' option, it reports pairs of identical files.
+Normally `diff' reports subdirectories common to both directories
+without comparing subdirectories' files, but if you use the `-r' or
+`--recursive' option, it compares every corresponding pair of files in
+the directory trees, as many levels deep as they go.
+
+   For file names that are in only one of the directories, `diff'
+normally does not show the contents of the file that exists; it reports
+only that the file exists in that directory and not in the other.  You
+can make `diff' act as though the file existed but was empty in the
+other directory, so that it outputs the entire contents of the file that
+actually exists.  (It is output as either an insertion or a deletion,
+depending on whether it is in the first or the second directory given.)
+To do this, use the `-N' or `--new-file' option.
+
+   If the older directory contains one or more large files that are not
+in the newer directory, you can make the patch smaller by using the
+`--unidirectional-new-file' option instead of `-N'.  This option is
+like `-N' except that it only inserts the contents of files that appear
+in the second directory but not the first (that is, files that were
+added).  At the top of the patch, write instructions for the user
+applying the patch to remove the files that were deleted before
+applying the patch.  *Note Making Patches::, for more discussion of
+making patches for distribution.
+
+   To ignore some files while comparing directories, use the `-x
+PATTERN' or `--exclude=PATTERN' option.  This option ignores any files
+or subdirectories whose base names match the shell pattern PATTERN.
+Unlike in the shell, a period at the start of the base of a file name
+matches a wildcard at the start of a pattern.  You should enclose
+PATTERN in quotes so that the shell does not expand it.  For example,
+the option `-x '*.[ao]'' ignores any file whose name ends with `.a' or
+`.o'.
+
+   This option accumulates if you specify it more than once.  For
+example, using the options `-x 'RCS' -x '*,v'' ignores any file or
+subdirectory whose base name is `RCS' or ends with `,v'.
+
+   If you need to give this option many times, you can instead put the
+patterns in a file, one pattern per line, and use the `-X FILE' or
+`--exclude-from=FILE' option.
+
+   If you have been comparing two directories and stopped partway
+through, later you might want to continue where you left off.  You can
+do this by using the `-S FILE' or `--starting-file=FILE' option.  This
+compares only the file FILE and all alphabetically later files in the
+topmost directory level.
+
+   If two directories differ only in that file names are lower case in
+one directory and upper case in the upper, `diff' normally reports many
+differences because it compares file names in a case sensitive way.
+With the `--ignore-file-name-case' option, `diff' ignores case
+differences in file names, so that for example the contents of the file
+`Tao' in one directory are compared to the contents of the file `TAO'
+in the other.  The `--no-ignore-file-name-case' option cancels the
+effect of the `--ignore-file-name-case' option, reverting to the default
+behavior.
+
+   If an `-x PATTERN', `--exclude=PATTERN', `-X FILE', or
+`--exclude-from=FILE' option is specified while the
+`--ignore-file-name-case' option is in effect, case is ignored when
+excluding file names matching the specified patterns.
+
+\1f
+File: diff.info,  Node: Adjusting Output,  Next: diff Performance,  Prev: Comparing Directories,  Up: Top
+
+Making `diff' Output Prettier
+*****************************
+
+   `diff' provides several ways to adjust the appearance of its output.
+These adjustments can be applied to any output format.
+
+* Menu:
+
+* Tabs::       Preserving the alignment of tab stops.
+* Pagination:: Page numbering and time-stamping `diff' output.
+
+\1f
+File: diff.info,  Node: Tabs,  Next: Pagination,  Up: Adjusting Output
+
+Preserving Tab Stop Alignment
+=============================
+
+   The lines of text in some of the `diff' output formats are preceded
+by one or two characters that indicate whether the text is inserted,
+deleted, or changed.  The addition of those characters can cause tabs to
+move to the next tab stop, throwing off the alignment of columns in the
+line.  GNU `diff' provides two ways to make tab-aligned columns line up
+correctly.
+
+   The first way is to have `diff' convert all tabs into the correct
+number of spaces before outputting them; select this method with the
+`-t' or `--expand-tabs' option.  `diff' assumes that tab stops are set
+every 8 print columns.  To use this form of output with `patch', you
+must give `patch' the `-l' or `--ignore-white-space' option (*note
+Changed White Space::, for more information).
+
+   The other method for making tabs line up correctly is to add a tab
+character instead of a space after the indicator character at the
+beginning of the line.  This ensures that all following tab characters
+are in the same position relative to tab stops that they were in the
+original files, so that the output is aligned correctly.  Its
+disadvantage is that it can make long lines too long to fit on one line
+of the screen or the paper.  It also does not work with the unified
+output format, which does not have a space character after the change
+type indicator character.  Select this method with the `-T' or
+`--initial-tab' option.
+
+\1f
+File: diff.info,  Node: Pagination,  Prev: Tabs,  Up: Adjusting Output
+
+Paginating `diff' Output
+========================
+
+   It can be convenient to have long output page-numbered and
+time-stamped.  The `-l' and `--paginate' options do this by sending the
+`diff' output through the `pr' program.  Here is what the page header
+might look like for `diff -lc lao tzu':
+
+     2002-02-22 14:20                 diff -lc lao tzu                 Page 1
+
+\1f
+File: diff.info,  Node: diff Performance,  Next: Comparing Three Files,  Prev: Adjusting Output,  Up: Top
+
+`diff' Performance Tradeoffs
+****************************
+
+   GNU `diff' runs quite efficiently; however, in some circumstances
+you can cause it to run faster or produce a more compact set of changes.
+
+   One way to improve `diff' performance is to use hard or symbolic
+links to files instead of copies.  This improves performance because
+`diff' normally does not need to read two hard or symbolic links to the
+same file, since their contents must be identical.  For example,
+suppose you copy a large directory hierarchy, make a few changes to the
+copy, and then often use `diff -r' to compare the original to the copy.
+If the original files are read-only, you can greatly improve
+performance by creating the copy using hard or symbolic links (e.g.,
+with GNU `cp -lR' or `cp -sR').  Before editing a file in the copy for
+the first time, you should break the link and replace it with a regular
+copy.
+
+   You can also affect the performance of GNU `diff' by giving it
+options that change the way it compares files.  Performance has more
+than one dimension.  These options improve one aspect of performance at
+the cost of another, or they improve performance in some cases while
+hurting it in others.
+
+   The way that GNU `diff' determines which lines have changed always
+comes up with a near-minimal set of differences.  Usually it is good
+enough for practical purposes.  If the `diff' output is large, you
+might want `diff' to use a modified algorithm that sometimes produces a
+smaller set of differences.  The `-d' or `--minimal' option does this;
+however, it can also cause `diff' to run more slowly than usual, so it
+is not the default behavior.
+
+   When the files you are comparing are large and have small groups of
+changes scattered throughout them, you can use the
+`--speed-large-files' option to make a different modification to the
+algorithm that `diff' uses.  If the input files have a constant small
+density of changes, this option speeds up the comparisons without
+changing the output.  If not, `diff' might produce a larger set of
+differences; however, the output will still be correct.
+
+   Normally `diff' discards the prefix and suffix that is common to
+both files before it attempts to find a minimal set of differences.
+This makes `diff' run faster, but occasionally it may produce
+non-minimal output.  The `--horizon-lines=LINES' option prevents `diff'
+from discarding the last LINES lines of the prefix and the first LINES
+lines of the suffix.  This gives `diff' further opportunities to find a
+minimal output.
+
+   Suppose a run of changed lines includes a sequence of lines at one
+end and there is an identical sequence of lines just outside the other
+end.  The `diff' command is free to choose which identical sequence is
+included in the hunk.  In this case, `diff' normally shifts the hunk's
+boundaries when this merges adjacent hunks, or shifts a hunk's lines
+towards the end of the file.  Merging hunks can make the output look
+nicer in some cases.
+
+\1f
+File: diff.info,  Node: Comparing Three Files,  Next: diff3 Merging,  Prev: diff Performance,  Up: Top
+
+Comparing Three Files
+*********************
+
+   Use the program `diff3' to compare three files and show any
+differences among them.  (`diff3' can also merge files; see *Note diff3
+Merging::).
+
+   The "normal" `diff3' output format shows each hunk of differences
+without surrounding context.  Hunks are labeled depending on whether
+they are two-way or three-way, and lines are annotated by their
+location in the input files.
+
+   *Note Invoking diff3::, for more information on how to run `diff3'.
+
+* Menu:
+
+* Sample diff3 Input::    Sample `diff3' input for examples.
+* Detailed diff3 Normal:: A detailed description of normal output format.
+* diff3 Hunks::           The format of normal output format.
+* Example diff3 Normal::  Sample output in the normal format.
+
+\1f
+File: diff.info,  Node: Sample diff3 Input,  Next: Detailed diff3 Normal,  Up: Comparing Three Files
+
+A Third Sample Input File
+=========================
+
+   Here is a third sample file that will be used in examples to
+illustrate the output of `diff3' and how various options can change it.
+The first two files are the same that we used for `diff' (*note Sample
+diff Input::).  This is the third sample file, called `tao':
+
+     The Way that can be told of is not the eternal Way;
+     The name that can be named is not the eternal name.
+     The Nameless is the origin of Heaven and Earth;
+     The named is the mother of all things.
+     
+     Therefore let there always be non-being,
+       so we may see their subtlety,
+     And let there always be being,
+       so we may see their result.
+     The two are the same,
+     But after they are produced,
+       they have different names.
+     
+       -- The Way of Lao-Tzu, tr. Wing-tsit Chan
+
+\1f
+File: diff.info,  Node: Detailed diff3 Normal,  Next: diff3 Hunks,  Prev: Sample diff3 Input,  Up: Comparing Three Files
+
+Detailed Description of `diff3' Normal Format
+=============================================
+
+   Each hunk begins with a line marked `===='.  Three-way hunks have
+plain `====' lines, and two-way hunks have `1', `2', or `3' appended to
+specify which of the three input files differ in that hunk.  The hunks
+contain copies of two or three sets of input lines each preceded by one
+or two commands identifying where the lines came from.
+
+   Normally, two spaces precede each copy of an input line to
+distinguish it from the commands.  But with the `-T' or `--initial-tab'
+option, `diff3' uses a tab instead of two spaces; this lines up tabs
+correctly.  *Note Tabs::, for more information.
+
+   Commands take the following forms:
+
+`FILE:La'
+     This hunk appears after line L of file FILE, and contains no lines
+     in that file.  To edit this file to yield the other files, one
+     must append hunk lines taken from the other files.  For example,
+     `1:11a' means that the hunk follows line 11 in the first file and
+     contains no lines from that file.
+
+`FILE:Rc'
+     This hunk contains the lines in the range R of file FILE.  The
+     range R is a comma-separated pair of line numbers, or just one
+     number if the range is a singleton.  To edit this file to yield the
+     other files, one must change the specified lines to be the lines
+     taken from the other files.  For example, `2:11,13c' means that
+     the hunk contains lines 11 through 13 from the second file.
+
+   If the last line in a set of input lines is incomplete (*note
+Incomplete Lines::), it is distinguished on output from a full line by
+a following line that starts with `\'.
+
+\1f
+File: diff.info,  Node: diff3 Hunks,  Next: Example diff3 Normal,  Prev: Detailed diff3 Normal,  Up: Comparing Three Files
+
+`diff3' Hunks
+=============
+
+   Groups of lines that differ in two or three of the input files are
+called "diff3 hunks", by analogy with `diff' hunks (*note Hunks::).  If
+all three input files differ in a `diff3' hunk, the hunk is called a
+"three-way hunk"; if just two input files differ, it is a "two-way
+hunk".
+
+   As with `diff', several solutions are possible.  When comparing the
+files `A', `B', and `C', `diff3' normally finds `diff3' hunks by
+merging the two-way hunks output by the two commands `diff A B' and
+`diff A C'.  This does not necessarily minimize the size of the output,
+but exceptions should be rare.
+
+   For example, suppose `F' contains the three lines `a', `b', `f', `G'
+contains the lines `g', `b', `g', and `H' contains the lines `a', `b',
+`h'.  `diff3 F G H' might output the following:
+
+     ====2
+     1:1c
+     3:1c
+       a
+     2:1c
+       g
+     ====
+     1:3c
+       f
+     2:3c
+       g
+     3:3c
+       h
+
+because it found a two-way hunk containing `a' in the first and third
+files and `g' in the second file, then the single line `b' common to
+all three files, then a three-way hunk containing the last line of each
+file.
+
+\1f
+File: diff.info,  Node: Example diff3 Normal,  Prev: diff3 Hunks,  Up: Comparing Three Files
+
+An Example of `diff3' Normal Format
+===================================
+
+   Here is the output of the command `diff3 lao tzu tao' (*note Sample
+diff3 Input::, for the complete contents of the files).  Notice that it
+shows only the lines that are different among the three files.
+
+     ====2
+     1:1,2c
+     3:1,2c
+       The Way that can be told of is not the eternal Way;
+       The name that can be named is not the eternal name.
+     2:0a
+     ====1
+     1:4c
+       The Named is the mother of all things.
+     2:2,3c
+     3:4,5c
+       The named is the mother of all things.
+     
+     ====3
+     1:8c
+     2:7c
+         so we may see their outcome.
+     3:9c
+         so we may see their result.
+     ====
+     1:11a
+     2:11,13c
+       They both may be called deep and profound.
+       Deeper and more profound,
+       The door of all subtleties!
+     3:13,14c
+     
+         -- The Way of Lao-Tzu, tr. Wing-tsit Chan
+
+\1f
+File: diff.info,  Node: diff3 Merging,  Next: Interactive Merging,  Prev: Comparing Three Files,  Up: Top
+
+Merging From a Common Ancestor
+******************************
+
+   When two people have made changes to copies of the same file,
+`diff3' can produce a merged output that contains both sets of changes
+together with warnings about conflicts.
+
+   One might imagine programs with names like `diff4' and `diff5' to
+compare more than three files simultaneously, but in practice the need
+rarely arises.  You can use `diff3' to merge three or more sets of
+changes to a file by merging two change sets at a time.
+
+   `diff3' can incorporate changes from two modified versions into a
+common preceding version.  This lets you merge the sets of changes
+represented by the two newer files.  Specify the common ancestor version
+as the second argument and the two newer versions as the first and third
+arguments, like this:
+
+     diff3 MINE OLDER YOURS
+
+You can remember the order of the arguments by noting that they are in
+alphabetical order.
+
+   You can think of this as subtracting OLDER from YOURS and adding the
+result to MINE, or as merging into MINE the changes that would turn
+OLDER into YOURS.  This merging is well-defined as long as MINE and
+OLDER match in the neighborhood of each such change.  This fails to be
+true when all three input files differ or when only OLDER differs; we
+call this a "conflict".  When all three input files differ, we call the
+conflict an "overlap".
+
+   `diff3' gives you several ways to handle overlaps and conflicts.
+You can omit overlaps or conflicts, or select only overlaps, or mark
+conflicts with special `<<<<<<<' and `>>>>>>>' lines.
+
+   `diff3' can output the merge results as an `ed' script that that can
+be applied to the first file to yield the merged output.  However, it
+is usually better to have `diff3' generate the merged output directly;
+this bypasses some problems with `ed'.
+
+* Menu:
+
+* Which Changes::            Selecting changes to incorporate.
+* Marking Conflicts::        Marking conflicts.
+* Bypassing ed::             Generating merged output directly.
+* Merging Incomplete Lines:: How `diff3' merges incomplete lines.
+* Saving the Changed File::  Emulating System V behavior.
+
+\1f
+File: diff.info,  Node: Which Changes,  Next: Marking Conflicts,  Up: diff3 Merging
+
+Selecting Which Changes to Incorporate
+======================================
+
+   You can select all unmerged changes from OLDER to YOURS for merging
+into MINE with the `-e' or `--ed' option.  You can select only the
+nonoverlapping unmerged changes with `-3' or `--easy-only', and you can
+select only the overlapping changes with `-x' or `--overlap-only'.
+
+   The `-e', `-3' and `-x' options select only "unmerged changes", i.e.
+changes where MINE and YOURS differ; they ignore changes from OLDER to
+YOURS where MINE and YOURS are identical, because they assume that such
+changes have already been merged.  If this assumption is not a safe
+one, you can use the `-A' or `--show-all' option (*note Marking
+Conflicts::).
+
+   Here is the output of the command `diff3' with each of these three
+options (*note Sample diff3 Input::, for the complete contents of the
+files).  Notice that `-e' outputs the union of the disjoint sets of
+changes output by `-3' and `-x'.
+
+   Output of `diff3 -e lao tzu tao':
+     11a
+     
+       -- The Way of Lao-Tzu, tr. Wing-tsit Chan
+     .
+     8c
+       so we may see their result.
+     .
+
+   Output of `diff3 -3 lao tzu tao':
+     8c
+       so we may see their result.
+     .
+
+   Output of `diff3 -x lao tzu tao':
+     11a
+     
+       -- The Way of Lao-Tzu, tr. Wing-tsit Chan
+     .
+
+\1f
+File: diff.info,  Node: Marking Conflicts,  Next: Bypassing ed,  Prev: Which Changes,  Up: diff3 Merging
+
+Marking Conflicts
+=================
+
+   `diff3' can mark conflicts in the merged output by bracketing them
+with special marker lines.  A conflict that comes from two files A and
+B is marked as follows:
+
+     <<<<<<< A
+     lines from A
+     =======
+     lines from B
+     >>>>>>> B
+
+   A conflict that comes from three files A, B and C is marked as
+follows:
+
+     <<<<<<< A
+     lines from A
+     ||||||| B
+     lines from B
+     =======
+     lines from C
+     >>>>>>> C
+
+   The `-A' or `--show-all' option acts like the `-e' option, except
+that it brackets conflicts, and it outputs all changes from OLDER to
+YOURS, not just the unmerged changes.  Thus, given the sample input
+files (*note Sample diff3 Input::), `diff3 -A lao tzu tao' puts
+brackets around the conflict where only `tzu' differs:
+
+     <<<<<<< tzu
+     =======
+     The Way that can be told of is not the eternal Way;
+     The name that can be named is not the eternal name.
+     >>>>>>> tao
+
+   And it outputs the three-way conflict as follows:
+
+     <<<<<<< lao
+     ||||||| tzu
+     They both may be called deep and profound.
+     Deeper and more profound,
+     The door of all subtleties!
+     =======
+     
+       -- The Way of Lao-Tzu, tr. Wing-tsit Chan
+     >>>>>>> tao
+
+   The `-E' or `--show-overlap' option outputs less information than
+the `-A' or `--show-all' option, because it outputs only unmerged
+changes, and it never outputs the contents of the second file.  Thus
+the `-E' option acts like the `-e' option, except that it brackets the
+first and third files from three-way overlapping changes.  Similarly,
+`-X' acts like `-x', except it brackets all its (necessarily
+overlapping) changes.  For example, for the three-way overlapping
+change above, the `-E' and `-X' options output the following:
+
+     <<<<<<< lao
+     =======
+     
+       -- The Way of Lao-Tzu, tr. Wing-tsit Chan
+     >>>>>>> tao
+
+   If you are comparing files that have meaningless or uninformative
+names, you can use the `-L LABEL' or `--label=LABEL' option to show
+alternate names in the `<<<<<<<', `|||||||' and `>>>>>>>' brackets.
+This option can be given up to three times, once for each input file.
+Thus `diff3 -A -L X -L Y -L Z A B C' acts like `diff3 -A A B C', except
+that the output looks like it came from files named `X', `Y' and `Z'
+rather than from files named `A', `B' and `C'.
+
+\1f
+File: diff.info,  Node: Bypassing ed,  Next: Merging Incomplete Lines,  Prev: Marking Conflicts,  Up: diff3 Merging
+
+Generating the Merged Output Directly
+=====================================
+
+   With the `-m' or `--merge' option, `diff3' outputs the merged file
+directly.  This is more efficient than using `ed' to generate it, and
+works even with non-text files that `ed' would reject.  If you specify
+`-m' without an `ed' script option, `-A' (`--show-all') is assumed.
+
+   For example, the command `diff3 -m lao tzu tao' (*note Sample diff3
+Input:: for a copy of the input files) would output the following:
+
+     <<<<<<< tzu
+     =======
+     The Way that can be told of is not the eternal Way;
+     The name that can be named is not the eternal name.
+     >>>>>>> tao
+     The Nameless is the origin of Heaven and Earth;
+     The Named is the mother of all things.
+     Therefore let there always be non-being,
+       so we may see their subtlety,
+     And let there always be being,
+       so we may see their result.
+     The two are the same,
+     But after they are produced,
+       they have different names.
+     <<<<<<< lao
+     ||||||| tzu
+     They both may be called deep and profound.
+     Deeper and more profound,
+     The door of all subtleties!
+     =======
+     
+       -- The Way of Lao-Tzu, tr. Wing-tsit Chan
+     >>>>>>> tao
+
+\1f
+File: diff.info,  Node: Merging Incomplete Lines,  Next: Saving the Changed File,  Prev: Bypassing ed,  Up: diff3 Merging
+
+How `diff3' Merges Incomplete Lines
+===================================
+
+   With `-m', incomplete lines (*note Incomplete Lines::) are simply
+copied to the output as they are found; if the merged output ends in an
+conflict and one of the input files ends in an incomplete line,
+succeeding `|||||||', `=======' or `>>>>>>>' brackets appear somewhere
+other than the start of a line because they are appended to the
+incomplete line.
+
+   Without `-m', if an `ed' script option is specified and an
+incomplete line is found, `diff3' generates a warning and acts as if a
+newline had been present.
+
+\1f
+File: diff.info,  Node: Saving the Changed File,  Prev: Merging Incomplete Lines,  Up: diff3 Merging
+
+Saving the Changed File
+=======================
+
+   Traditional Unix `diff3' generates an `ed' script without the
+trailing `w' and `q' commands that save the changes.  System V `diff3'
+generates these extra commands.  GNU `diff3' normally behaves like
+traditional Unix `diff3', but with the `-i' option it behaves like
+System V `diff3' and appends the `w' and `q' commands.
+
+   The `-i' option requires one of the `ed' script options `-AeExX3',
+and is incompatible with the merged output option `-m'.
+
+\1f
+File: diff.info,  Node: Interactive Merging,  Next: Merging with patch,  Prev: diff3 Merging,  Up: Top
+
+Interactive Merging with `sdiff'
+********************************
+
+   With `sdiff', you can merge two files interactively based on a
+side-by-side `-y' format comparison (*note Side by Side::).  Use `-o
+FILE' or `--output=FILE' to specify where to put the merged text.
+*Note Invoking sdiff::, for more details on the options to `sdiff'.
+
+   Another way to merge files interactively is to use the Emacs Lisp
+package `emerge'.  *Note emerge: (emacs)emerge, for more information.
+
+* Menu:
+
+* sdiff Option Summary:: Summary of `sdiff' options.
+* Merge Commands::       Merging two files interactively.
+
+\1f
+File: diff.info,  Node: sdiff Option Summary,  Next: Merge Commands,  Up: Interactive Merging
+
+Specifying `diff' Options to `sdiff'
+====================================
+
+   The following `sdiff' options have the same meaning as for `diff'.
+*Note diff Options::, for the use of these options.
+
+     -a -b -d -i -t -v
+     -B -E -I REGEXP
+     
+     --ignore-blank-lines  --ignore-case
+     --ignore-matching-lines=REGEXP  --ignore-space-change
+     --ignore-tab-expansion
+     --left-column  --minimal  --speed-large-files
+     --strip-trailing-cr  --suppress-common-lines  --expand-tabs
+     --text  --version  --width=COLUMNS
+
+   For historical reasons, `sdiff' has alternate names for some
+options.  The `-l' option is equivalent to the `--left-column' option,
+and similarly `-s' is equivalent to `--suppress-common-lines'.  The
+meaning of the `sdiff' `-w' and `-W' options is interchanged from that
+of `diff': with `sdiff', `-w COLUMNS' is equivalent to
+`--width=COLUMNS', and `-W' is equivalent to `--ignore-all-space'.
+`sdiff' without the `-o' option is equivalent to `diff' with the `-y'
+or `--side-by-side' option (*note Side by Side::).
+
+\1f
+File: diff.info,  Node: Merge Commands,  Prev: sdiff Option Summary,  Up: Interactive Merging
+
+Merge Commands
+==============
+
+   Groups of common lines, with a blank gutter, are copied from the
+first file to the output.  After each group of differing lines, `sdiff'
+prompts with `%' and pauses, waiting for one of the following commands.
+Follow each command with <RET>.
+
+`e'
+     Discard both versions.  Invoke a text editor on an empty temporary
+     file, then copy the resulting file to the output.
+
+`eb'
+     Concatenate the two versions, edit the result in a temporary file,
+     then copy the edited result to the output.
+
+`ed'
+     Like `eb', except precede each version with a header that shows
+     what file and lines the version came from.
+
+`el'
+     Edit a copy of the left version, then copy the result to the
+     output.
+
+`er'
+     Edit a copy of the right version, then copy the result to the
+     output.
+
+`l'
+     Copy the left version to the output.
+
+`q'
+     Quit.
+
+`r'
+     Copy the right version to the output.
+
+`s'
+     Silently copy common lines.
+
+`v'
+     Verbosely copy common lines.  This is the default.
+
+   The text editor invoked is specified by the `EDITOR' environment
+variable if it is set.  The default is system-dependent.
+
+\1f
+File: diff.info,  Node: Merging with patch,  Next: Making Patches,  Prev: Interactive Merging,  Up: Top
+
+Merging with `patch'
+********************
+
+   `patch' takes comparison output produced by `diff' and applies the
+differences to a copy of the original file, producing a patched
+version.  With `patch', you can distribute just the changes to a set of
+files instead of distributing the entire file set; your correspondents
+can apply `patch' to update their copy of the files with your changes.
+`patch' automatically determines the diff format, skips any leading or
+trailing headers, and uses the headers to determine which file to
+patch.  This lets your correspondents feed a mail message containing a
+difference listing directly to `patch'.
+
+   `patch' detects and warns about common problems like forward
+patches.  It saves any patches that it could not apply.  It can also
+maintain a `patchlevel.h' file to ensure that your correspondents apply
+diffs in the proper order.
+
+   `patch' accepts a series of diffs in its standard input, usually
+separated by headers that specify which file to patch.  It applies
+`diff' hunks (*note Hunks::) one by one.  If a hunk does not exactly
+match the original file, `patch' uses heuristics to try to patch the
+file as well as it can.  If no approximate match can be found, `patch'
+rejects the hunk and skips to the next hunk.  `patch' normally replaces
+each file F with its new version, putting reject hunks (if any) into
+`F.rej'.
+
+   *Note Invoking patch::, for detailed information on the options to
+`patch'.
+
+* Menu:
+
+* patch Input::            Selecting the type of `patch' input.
+* Revision Control::       Getting files from RCS, SCCS, etc.
+* Imperfect::              Dealing with imperfect patches.
+* Creating and Removing::  Creating and removing files with a patch.
+* Patching Time Stamps::   Updating time stamps on patched files.
+* Multiple Patches::       Handling multiple patches in a file.
+* patch Directories::      Changing directory and stripping directories.
+* Backups::                Whether backup files are made.
+* Backup Names::           Backup file names.
+* Reject Names::           Reject file names.
+* patch Messages::         Messages and questions `patch' can produce.
+* patch and POSIX::        Conformance to the POSIX standard.
+* patch and Tradition::    GNU versus traditional `patch'.
+
+\1f
+File: diff.info,  Node: patch Input,  Next: Revision Control,  Up: Merging with patch
+
+Selecting the `patch' Input Format
+==================================
+
+   `patch' normally determines which `diff' format the patch file uses
+by examining its contents.  For patch files that contain particularly
+confusing leading text, you might need to use one of the following
+options to force `patch' to interpret the patch file as a certain
+format of diff.  The output formats listed here are the only ones that
+`patch' can understand.
+
+`-c'
+`--context'
+     context diff.
+
+`-e'
+`--ed'
+     `ed' script.
+
+`-n'
+`--normal'
+     normal diff.
+
+`-u'
+`--unified'
+     unified diff.
+
+\1f
+File: diff.info,  Node: Revision Control,  Next: Imperfect,  Prev: patch Input,  Up: Merging with patch
+
+Revision Control
+================
+
+   If a nonexistent input file is under a revision control system
+supported by `patch', `patch' normally asks the user whether to get (or
+check out) the file from the revision control system.  Patch currently
+supports RCS, ClearCase and SCCS.  Under RCS and SCCS, `patch' also
+asks when the input file is read-only and matches the default version
+in the revision control system.
+
+   The `-g NUM' or `--get=NUM' affects access to files under supported
+revision control systems.  If NUM is positive, `patch' gets the file
+without asking the user; if zero, `patch' neither asks the user nor
+gets the file; and if negative, `patch' asks the user before getting
+the file.  The default value of NUM is given by the value of the
+`PATCH_GET' environment variable if it is set; if not, the default
+value is zero if `patch' is conforming to POSIX, negative otherwise.
+*Note patch and POSIX::.
+
+   The choice of revision control system is unaffected by the
+`VERSION_CONTROL' environment variable (*note Backup Names::).
+
+\1f
+File: diff.info,  Node: Imperfect,  Next: Creating and Removing,  Prev: Revision Control,  Up: Merging with patch
+
+Applying Imperfect Patches
+==========================
+
+   `patch' tries to skip any leading text in the patch file, apply the
+diff, and then skip any trailing text.  Thus you can feed a mail
+message directly to `patch', and it should work.  If the entire diff is
+indented by a constant amount of white space, `patch' automatically
+ignores the indentation.  If a context diff contains trailing carriage
+return on each line, `patch' automatically ignores the carriage return.
+If a context diff has been encapsulated by prepending `- ' to lines
+beginning with `-' as per Internet RFC 934
+(ftp://ftp.isi.edu/in-notes/rfc934.txt), `patch' automatically
+unencapsulates the input.
+
+   However, certain other types of imperfect input require user
+intervention or testing.
+
+* Menu:
+
+* Changed White Space:: When tabs and spaces don't match exactly.
+* Reversed Patches::    Applying reversed patches correctly.
+* Inexact::             Helping `patch' find close matches.
+* Dry Runs::            Predicting what `patch' will do.
+
+\1f
+File: diff.info,  Node: Changed White Space,  Next: Reversed Patches,  Up: Imperfect
+
+Applying Patches with Changed White Space
+-----------------------------------------
+
+   Sometimes mailers, editors, or other programs change spaces into
+tabs, or vice versa.  If this happens to a patch file or an input file,
+the files might look the same, but `patch' will not be able to match
+them properly.  If this problem occurs, use the `-l' or
+`--ignore-white-space' option, which makes `patch' compare blank
+characters (i.e. spaces and tabs) loosely so that any nonempty sequence
+of blanks in the patch file matches any nonempty sequence of blanks in
+the input files.  Non-blank characters must still match exactly.  Each
+line of the context must still match a line in the input file.
+
+\1f
+File: diff.info,  Node: Reversed Patches,  Next: Inexact,  Prev: Changed White Space,  Up: Imperfect
+
+Applying Reversed Patches
+-------------------------
+
+   Sometimes people run `diff' with the new file first instead of
+second.  This creates a diff that is "reversed".  To apply such
+patches, give `patch' the `-R' or `--reverse' option.  `patch' then
+attempts to swap each hunk around before applying it.  Rejects come out
+in the swapped format.
+
+   Often `patch' can guess that the patch is reversed.  If the first
+hunk of a patch fails, `patch' reverses the hunk to see if it can apply
+it that way.  If it can, `patch' asks you if you want to have the `-R'
+option set; if it can't, `patch' continues to apply the patch normally.
+This method cannot detect a reversed patch if it is a normal diff and
+the first command is an append (which should have been a delete) since
+appends always succeed, because a null context matches anywhere.  But
+most patches add or change lines rather than delete them, so most
+reversed normal diffs begin with a delete, which fails, and `patch'
+notices.
+
+   If you apply a patch that you have already applied, `patch' thinks
+it is a reversed patch and offers to un-apply the patch.  This could be
+construed as a feature.  If you did this inadvertently and you don't
+want to un-apply the patch, just answer `n' to this offer and to the
+subsequent "apply anyway" question--or type `C-c' to kill the `patch'
+process.
+
+\1f
+File: diff.info,  Node: Inexact,  Next: Dry Runs,  Prev: Reversed Patches,  Up: Imperfect
+
+Helping `patch' Find Inexact Matches
+------------------------------------
+
+   For context diffs, and to a lesser extent normal diffs, `patch' can
+detect when the line numbers mentioned in the patch are incorrect, and
+it attempts to find the correct place to apply each hunk of the patch.
+As a first guess, it takes the line number mentioned in the hunk, plus
+or minus any offset used in applying the previous hunk.  If that is not
+the correct place, `patch' scans both forward and backward for a set of
+lines matching the context given in the hunk.
+
+   First `patch' looks for a place where all lines of the context
+match.  If it cannot find such a place, and it is reading a context or
+unified diff, and the maximum fuzz factor is set to 1 or more, then
+`patch' makes another scan, ignoring the first and last line of
+context.  If that fails, and the maximum fuzz factor is set to 2 or
+more, it makes another scan, ignoring the first two and last two lines
+of context are ignored.  It continues similarly if the maximum fuzz
+factor is larger.
+
+   The `-F LINES' or `--fuzz=LINES' option sets the maximum fuzz factor
+to LINES.  This option only applies to context and unified diffs; it
+ignores up to LINES lines while looking for the place to install a
+hunk.  Note that a larger fuzz factor increases the odds of making a
+faulty patch.  The default fuzz factor is 2; there is no point to
+setting it to more than the number of lines of context in the diff,
+ordinarily 3.
+
+   If `patch' cannot find a place to install a hunk of the patch, it
+writes the hunk out to a reject file (*note Reject Names::, for
+information on how reject files are named).  It writes out rejected
+hunks in context format no matter what form the input patch is in.  If
+the input is a normal or `ed' diff, many of the contexts are simply
+null.  The line numbers on the hunks in the reject file may be
+different from those in the patch file: they show the approximate
+location where `patch' thinks the failed hunks belong in the new file
+rather than in the old one.
+
+   If the `--verbose' option is given, then as it completes each hunk
+`patch' tells you whether the hunk succeeded or failed, and if it
+failed, on which line (in the new file) `patch' thinks the hunk should
+go.  If this is different from the line number specified in the diff,
+it tells you the offset.  A single large offset _may_ indicate that
+`patch' installed a hunk in the wrong place.  `patch' also tells you if
+it used a fuzz factor to make the match, in which case you should also
+be slightly suspicious.
+
+   `patch' cannot tell if the line numbers are off in an `ed' script,
+and can only detect wrong line numbers in a normal diff when it finds a
+change or delete command.  It may have the same problem with a context
+diff using a fuzz factor equal to or greater than the number of lines
+of context shown in the diff (typically 3).  In these cases, you should
+probably look at a context diff between your original and patched input
+files to see if the changes make sense.  Compiling without errors is a
+pretty good indication that the patch worked, but not a guarantee.
+
+   A patch against an empty file applies to a nonexistent file, and vice
+versa.  *Note Creating and Removing::.
+
+   `patch' usually produces the correct results, even when it must make
+many guesses.  However, the results are guaranteed only when the patch
+is applied to an exact copy of the file that the patch was generated
+from.
+
+\1f
+File: diff.info,  Node: Dry Runs,  Prev: Inexact,  Up: Imperfect
+
+Predicting what `patch' will do
+-------------------------------
+
+   It may not be obvious in advance what `patch' will do with a
+complicated or poorly formatted patch.  If you are concerned that the
+input might cause `patch' to modify the wrong files, you can use the
+`--dry-run' option, which causes `patch' to print the results of
+applying patches without actually changing any files.  You can then
+inspect the diagnostics generated by the dry run to see whether `patch'
+will modify the files that you expect.  If the patch does not do what
+you want, you can modify the patch (or the other options to `patch')
+and try another dry run.  Once you are satisfied with the proposed
+patch you can apply it by invoking `patch' as before, but this time
+without the `--dry-run' option.
+
+\1f
+File: diff.info,  Node: Creating and Removing,  Next: Patching Time Stamps,  Prev: Imperfect,  Up: Merging with patch
+
+Creating and Removing Files
+===========================
+
+   Sometimes when comparing two directories, a file may exist in one
+directory but not the other.  If you give `diff' the `-N' or
+`--new-file' option, or if you supply an old or new file that is named
+`/dev/null' or is empty and is dated the Epoch (1970-01-01 00:00:00
+UTC), `diff' outputs a patch that adds or deletes the contents of this
+file.  When given such a patch, `patch' normally creates a new file or
+removes the old file.  However, when conforming to POSIX (*note patch
+and POSIX::), `patch' does not remove the old file, but leaves it empty.
+The `-E' or `--remove-empty-files' option causes `patch' to remove
+output files that are empty after applying a patch, even if the patch
+does not appear to be one that removed the file.
+
+   If the patch appears to create a file that already exists, `patch'
+asks for confirmation before applying the patch.
+
+\1f
+File: diff.info,  Node: Patching Time Stamps,  Next: Multiple Patches,  Prev: Creating and Removing,  Up: Merging with patch
+
+Updating Time Stamps on Patched Files
+=====================================
+
+   When `patch' updates a file, it normally sets the file's
+last-modified time stamp to the current time of day.  If you are using
+`patch' to track a software distribution, this can cause `make' to
+incorrectly conclude that a patched file is out of date.  For example,
+if `syntax.c' depends on `syntax.y', and `patch' updates `syntax.c' and
+then `syntax.y', then `syntax.c' will normally appear to be out of date
+with respect to `syntax.y' even though its contents are actually up to
+date.
+
+   The `-Z' or `--set-utc' option causes `patch' to set a patched
+file's modification and access times to the time stamps given in
+context diff headers.  If the context diff headers do not specify a
+time zone, they are assumed to use Coordinated Universal Time (UTC,
+often known as GMT).
+
+   The `-T' or `--set-time' option acts like `-Z' or `--set-utc',
+except that it assumes that the context diff headers' time stamps use
+local time instead of UTC.  This option is not recommended, because
+patches using local time cannot easily be used by people in other time
+zones, and because local time stamps are ambiguous when local clocks
+move backwards during daylight-saving time adjustments.  If the context
+diff headers specify a time zone, this option is equivalent to `-Z' or
+`--set-utc'.
+
+   `patch' normally refrains from setting a file's time stamps if the
+file's original last-modified time stamp does not match the time given
+in the diff header, of if the file's contents do not exactly match the
+patch.  However, if the `-f' or `--force' option is given, the file's
+time stamps are set regardless.
+
+   Due to the limitations of the current `diff' format, `patch' cannot
+update the times of files whose contents have not changed.  Also, if
+you set file time stamps to values other than the current time of day,
+you should also remove (e.g., with `make clean') all files that depend
+on the patched files, so that later invocations of `make' do not get
+confused by the patched files' times.
+
+\1f
+File: diff.info,  Node: Multiple Patches,  Next: patch Directories,  Prev: Patching Time Stamps,  Up: Merging with patch
+
+Multiple Patches in a File
+==========================
+
+   If the patch file contains more than one patch, and if you do not
+specify an input file on the command line, `patch' tries to apply each
+patch as if they came from separate patch files.  This means that it
+determines the name of the file to patch for each patch, and that it
+examines the leading text before each patch for file names and
+prerequisite revision level (*note Making Patches::, for more on that
+topic).
+
+   `patch' uses the following rules to intuit a file name from the
+leading text before a patch.  First, `patch' takes an ordered list of
+candidate file names as follows:
+
+   * If the header is that of a context diff, `patch' takes the old and
+     new file names in the header.  A name is ignored if it does not
+     have enough slashes to satisfy the `-pNUM' or `--strip=NUM'
+     option.  The name `/dev/null' is also ignored.
+
+   * If there is an `Index:' line in the leading garbage and if either
+     the old and new names are both absent or if `patch' is conforming
+     to POSIX, `patch' takes the name in the `Index:' line.
+
+   * For the purpose of the following rules, the candidate file names
+     are considered to be in the order (old, new, index), regardless of
+     the order that they appear in the header.
+
+Then `patch' selects a file name from the candidate list as follows:
+
+   * If some of the named files exist, `patch' selects the first name
+     if conforming to POSIX, and the best name otherwise.
+
+   * If `patch' is not ignoring RCS, ClearCase, and SCCS (*note
+     Revision Control::), and no named files exist but an RCS,
+     ClearCase, or SCCS master is found, `patch' selects the first
+     named file with an RCS, ClearCase, or SCCS master.
+
+   * If no named files exist, no RCS, ClearCase, or SCCS master was
+     found, some names are given, `patch' is not conforming to POSIX,
+     and the patch appears to create a file, `patch' selects the best
+     name requiring the creation of the fewest directories.
+
+   * If no file name results from the above heuristics, you are asked
+     for the name of the file to patch, and `patch' selects that name.
+
+   To determine the "best" of a nonempty list of file names, `patch'
+first takes all the names with the fewest path name components; of
+those, it then takes all the names with the shortest basename; of
+those, it then takes all the shortest names; finally, it takes the
+first remaining name.
+
+   *Note patch and POSIX::, to see whether `patch' is conforming to
+POSIX.
+
+\1f
+File: diff.info,  Node: patch Directories,  Next: Backups,  Prev: Multiple Patches,  Up: Merging with patch
+
+Applying Patches in Other Directories
+=====================================
+
+   The `-d DIRECTORY' or `--directory=DIRECTORY' option to `patch'
+makes directory DIRECTORY the current directory for interpreting both
+file names in the patch file, and file names given as arguments to
+other options (such as `-B' and `-o').  For example, while in a mail
+reading program, you can patch a file in the `/usr/src/emacs' directory
+directly from a message containing the patch like this:
+
+     | patch -d /usr/src/emacs
+
+   Sometimes the file names given in a patch contain leading
+directories, but you keep your files in a directory different from the
+one given in the patch.  In those cases, you can use the `-pNUMBER' or
+`--strip=NUMBER' option to set the file name strip count to NUMBER.
+The strip count tells `patch' how many slashes, along with the directory
+names between them, to strip from the front of file names.  A sequence
+of one or more adjacent slashes is counted as a single slash.  By
+default, `patch' strips off all leading directories, leaving just the
+base file names.
+
+   For example, suppose the file name in the patch file is
+`/gnu/src/emacs/etc/NEWS'.  Using `-p0' gives the entire file name
+unmodified, `-p1' gives `gnu/src/emacs/etc/NEWS' (no leading slash),
+`-p4' gives `etc/NEWS', and not specifying `-p' at all gives `NEWS'.
+
+   `patch' looks for each file (after any slashes have been stripped)
+in the current directory, or if you used the `-d DIRECTORY' option, in
+that directory.
+
+\1f
+File: diff.info,  Node: Backups,  Next: Backup Names,  Prev: patch Directories,  Up: Merging with patch
+
+Backup Files
+============
+
+   Normally, `patch' creates a backup file if the patch does not
+exactly match the original input file, because in that case the
+original data might not be recovered if you undo the patch with `patch
+-R' (*note Reversed Patches::).  However, when conforming to POSIX,
+`patch' does not create backup files by default.  *Note patch and
+POSIX::.
+
+   The `-b' or `--backup' option causes `patch' to make a backup file
+regardless of whether the patch matches the original input.  The
+`--backup-if-mismatch' option causes `patch' to create backup files for
+mismatches files; this is the default when not conforming to POSIX.  The
+`--no-backup-if-mismatch' option causes `patch' to not create backup
+files, even for mismatched patches; this is the default when conforming
+to POSIX.
+
+   When backing up a file that does not exist, an empty, unreadable
+backup file is created as a placeholder to represent the nonexistent
+file.
+
+\1f
+File: diff.info,  Node: Backup Names,  Next: Reject Names,  Prev: Backups,  Up: Merging with patch
+
+Backup File Names
+=================
+
+   Normally, `patch' renames an original input file into a backup file
+by appending to its name the extension `.orig', or `~' if using `.orig'
+would make the backup file name too long.(1)  The `-z BACKUP-SUFFIX' or
+`--suffix=BACKUP-SUFFIX' option causes `patch' to use BACKUP-SUFFIX as
+the backup extension instead.
+
+   Alternately, you can specify the extension for backup files with the
+`SIMPLE_BACKUP_SUFFIX' environment variable, which the options override.
+
+   `patch' can also create numbered backup files the way GNU Emacs
+does.  With this method, instead of having a single backup of each file,
+`patch' makes a new backup file name each time it patches a file.  For
+example, the backups of a file named `sink' would be called,
+successively, `sink.~1~', `sink.~2~', `sink.~3~', etc.
+
+   The `-V BACKUP-STYLE' or `--version-control=BACKUP-STYLE' option
+takes as an argument a method for creating backup file names.  You can
+alternately control the type of backups that `patch' makes with the
+`PATCH_VERSION_CONTROL' environment variable, which the `-V' option
+overrides.  If `PATCH_VERSION_CONTROL' is not set, the
+`VERSION_CONTROL' environment variable is used instead.  Please note
+that these options and variables control backup file names; they do not
+affect the choice of revision control system (*note Revision Control::).
+
+   The values of these environment variables and the argument to the
+`-V' option are like the GNU Emacs `version-control' variable (*note
+Backup Names: (emacs)Backup Names., for more information on backup
+versions in Emacs).  They also recognize synonyms that are more
+descriptive.  The valid values are listed below; unique abbreviations
+are acceptable.
+
+`t'
+`numbered'
+     Always make numbered backups.
+
+`nil'
+`existing'
+     Make numbered backups of files that already have them, simple
+     backups of the others.  This is the default.
+
+`never'
+`simple'
+     Always make simple backups.
+
+   You can also tell `patch' to prepend a prefix, such as a directory
+name, to produce backup file names.  The `-B PREFIX' or
+`--prefix=PREFIX' option makes backup files by prepending PREFIX to
+them.  The `-Y PREFIX' or `--basename-prefix=PREFIX' prepends PREFIX to
+the last file name component of backup file names instead; for example,
+`-Y ~' causes the backup name for `dir/file.c' to be `dir/~file.c'.  If
+you use either of these prefix options, the suffix-based options are
+ignored.
+
+   If you specify the output file with the `-o' option, that file is
+the one that is backed up, not the input file.
+
+   Options that affect the names of backup files do not affect whether
+backups are made.  For example, if you specify the
+`--no-backup-if-mismatch' option, none of the options described in this
+section have any affect, because no backups are made.
+
+   ---------- Footnotes ----------
+
+   (1) A coding error in GNU `patch' version 2.5.4 causes it to always
+use `~', but this should be fixed in the next release.
+
+\1f
+File: diff.info,  Node: Reject Names,  Next: patch Messages,  Prev: Backup Names,  Up: Merging with patch
+
+Reject File Names
+=================
+
+   The names for reject files (files containing patches that `patch'
+could not find a place to apply) are normally the name of the output
+file with `.rej' appended (or `#' if if using `.rej' would make the
+backup file name too long).
+
+   Alternatively, you can tell `patch' to place all of the rejected
+patches in a single file.  The `-r REJECT-FILE' or
+`--reject-file=REJECT-FILE' option uses REJECT-FILE as the reject file
+name.
+
+\1f
+File: diff.info,  Node: patch Messages,  Next: patch and POSIX,  Prev: Reject Names,  Up: Merging with patch
+
+Messages and Questions from `patch'
+===================================
+
+   `patch' can produce a variety of messages, especially if it has
+trouble decoding its input.  In a few situations where it's not sure
+how to proceed, `patch' normally prompts you for more information from
+the keyboard.  There are options to produce more or fewer messages, to
+have it not ask for keyboard input, and to affect the way that file
+names are quoted in messages.
+
+* Menu:
+
+* More or Fewer Messages::    Controlling the verbosity of `patch'.
+* patch and Keyboard Input::  Inhibiting keyboard input.
+* patch Quoting Style::       Quoting file names in diagnostics.
+
+   `patch' exits with status 0 if all hunks are applied successfully, 1
+if some hunks cannot be applied, and 2 if there is more serious trouble.
+When applying a set of patches in a loop, you should check the exit
+status, so you don't apply a later patch to a partially patched file.
+
+\1f
+File: diff.info,  Node: More or Fewer Messages,  Next: patch and Keyboard Input,  Up: patch Messages
+
+Controlling the Verbosity of `patch'
+------------------------------------
+
+   You can cause `patch' to produce more messages by using the
+`--verbose' option.  For example, when you give this option, the
+message `Hmm...' indicates that `patch' is reading text in the patch
+file, attempting to determine whether there is a patch in that text,
+and if so, what kind of patch it is.
+
+   You can inhibit all terminal output from `patch', unless an error
+occurs, by using the `-s', `--quiet', or `--silent' option.
+
+\1f
+File: diff.info,  Node: patch and Keyboard Input,  Next: patch Quoting Style,  Prev: More or Fewer Messages,  Up: patch Messages
+
+Inhibiting Keyboard Input
+-------------------------
+
+   There are two ways you can prevent `patch' from asking you any
+questions.  The `-f' or `--force' option assumes that you know what you
+are doing.  It causes `patch' to do the following:
+
+   * Skip patches that do not contain file names in their headers.
+
+   * Patch files even though they have the wrong version for the
+     `Prereq:' line in the patch;
+
+   * Assume that patches are not reversed even if they look like they
+     are.
+
+The `-t' or `--batch' option is similar to `-f', in that it suppresses
+questions, but it makes somewhat different assumptions:
+
+   * Skip patches that do not contain file names in their headers (the
+     same as `-f').
+
+   * Skip patches for which the file has the wrong version for the
+     `Prereq:' line in the patch;
+
+   * Assume that patches are reversed if they look like they are.
+
+\1f
+File: diff.info,  Node: patch Quoting Style,  Prev: patch and Keyboard Input,  Up: patch Messages
+
+`patch' Quoting Style
+---------------------
+
+   When `patch' outputs a file name in a diagnostic message, it can
+format the name in any of several ways.  This can be useful to output
+file names unambiguously, even if they contain punctuation or special
+characters like newlines.  The `--quoting-style=WORD' option controls
+how names are output.  The WORD should be one of the following:
+
+`literal'
+     Output names as-is.
+
+`shell'
+     Quote names for the shell if they contain shell metacharacters or
+     would cause ambiguous output.
+
+`shell-always'
+     Quote names for the shell, even if they would normally not require
+     quoting.
+
+`c'
+     Quote names as for a C language string.
+
+`escape'
+     Quote as with `c' except omit the surrounding double-quote
+     characters.
+
+   You can specify the default value of the `--quoting-style' option
+with the environment variable `QUOTING_STYLE'.  If that environment
+variable is not set, the default value is `shell', but this default may
+change in a future version of `patch'.
+
+\1f
+File: diff.info,  Node: patch and POSIX,  Next: patch and Tradition,  Prev: patch Messages,  Up: Merging with patch
+
+`patch' and the POSIX Standard
+==============================
+
+   If you specify the `--posix' option, or set the `POSIXLY_CORRECT'
+environment variable, `patch' conforms more strictly to the POSIX
+standard, as follows:
+
+   * Take the first existing file from the list (old, new, index) when
+     intuiting file names from diff headers.  *Note Multiple Patches::.
+
+   * Do not remove files that are removed by a diff.  *Note Creating
+     and Removing::.
+
+   * Do not ask whether to get files from RCS, ClearCase, or SCCS.
+     *Note Revision Control::.
+
+   * Require that all options precede the files in the command line.
+
+   * Do not backup files, even when there is a mismatch.  *Note
+     Backups::.
+
+
+\1f
+File: diff.info,  Node: patch and Tradition,  Prev: patch and POSIX,  Up: Merging with patch
+
+GNU `patch' and Traditional `patch'
+===================================
+
+   The current version of GNU `patch' normally follows the POSIX
+standard.  *Note patch and POSIX::, for the few exceptions to this
+general rule.
+
+   Unfortunately, POSIX redefined the behavior of `patch' in several
+important ways.  You should be aware of the following differences if
+you must interoperate with traditional `patch', or with GNU `patch'
+version 2.1 and earlier.
+
+   * In traditional `patch', the `-p' option's operand was optional,
+     and a bare `-p' was equivalent to `-p0'.  The `-p' option now
+     requires an operand, and `-p 0' is now equivalent to `-p0'.  For
+     maximum compatibility, use options like `-p0' and `-p1'.
+
+     Also, traditional `patch' simply counted slashes when stripping
+     path prefixes; `patch' now counts pathname components.  That is, a
+     sequence of one or more adjacent slashes now counts as a single
+     slash.  For maximum portability, avoid sending patches containing
+     `//' in file names.
+
+   * In traditional `patch', backups were enabled by default.  This
+     behavior is now enabled with the `-b' or `--backup' option.
+
+     Conversely, in POSIX `patch', backups are never made, even when
+     there is a mismatch.  In GNU `patch', this behavior is enabled
+     with the `--no-backup-if-mismatch' option, or by conforming to
+     POSIX.
+
+     The `-b SUFFIX' option of traditional `patch' is equivalent to the
+     `-b -z SUFFIX' options of GNU `patch'.
+
+   * Traditional `patch' used a complicated (and incompletely
+     documented) method to intuit the name of the file to be patched
+     from the patch header.  This method did not conform to POSIX, and
+     had a few gotchas.  Now `patch' uses a different, equally
+     complicated (but better documented) method that is optionally
+     POSIX-conforming; we hope it has fewer gotchas.  The two methods
+     are compatible if the file names in the context diff header and the
+     `Index:' line are all identical after prefix-stripping.  Your
+     patch is normally compatible if each header's file names all
+     contain the same number of slashes.
+
+   * When traditional `patch' asked the user a question, it sent the
+     question to standard error and looked for an answer from the first
+     file in the following list that was a terminal: standard error,
+     standard output, `/dev/tty', and standard input.  Now `patch'
+     sends questions to standard output and gets answers from
+     `/dev/tty'.  Defaults for some answers have been changed so that
+     `patch' never goes into an infinite loop when using default
+     answers.
+
+   * Traditional `patch' exited with a status value that counted the
+     number of bad hunks, or with status 1 if there was real trouble.
+     Now `patch' exits with status 1 if some hunks failed, or with 2 if
+     there was real trouble.
+
+   * Limit yourself to the following options when sending instructions
+     meant to be executed by anyone running GNU `patch', traditional
+     `patch', or a `patch' that conforms to POSIX.  Spaces are
+     significant in the following list, and operands are required.
+
+          `-c'
+          `-d DIR'
+          `-D DEFINE'
+          `-e'
+          `-l'
+          `-n'
+          `-N'
+          `-o OUTFILE'
+          `-pNUM'
+          `-R'
+          `-r REJECTFILE'
+
+
+\1f
+File: diff.info,  Node: Making Patches,  Next: Invoking cmp,  Prev: Merging with patch,  Up: Top
+
+Tips for Making and Using Patches
+*********************************
+
+   Use some common sense when making and using patches.  For example,
+when sending bug fixes to a program's maintainer, send several small
+patches, one per independent subject, instead of one large,
+harder-to-digest patch that covers all the subjects.
+
+   Here are some other things you should keep in mind if you are going
+to distribute patches for updating a software package.
+
+* Menu:
+
+* Tips for Patch Producers::    Advice for making patches.
+* Tips for Patch Consumers::    Advice for using patches.
+* Avoiding Common Mistakes::    Avoiding common mistakes when using `patch'.
+* Generating Smaller Patches::  How to generate smaller patches.
+
+\1f
+File: diff.info,  Node: Tips for Patch Producers,  Next: Tips for Patch Consumers,  Up: Making Patches
+
+Tips for Patch Producers
+========================
+
+   To create a patch that changes an older version of a package into a
+newer version, first make a copy of the older and newer versions in
+adjacent subdirectories.  It is common to do that by unpacking `tar'
+archives of the two versions.
+
+   To generate the patch, use the command `diff -Naur OLD NEW' where
+OLD and NEW identify the old and new directories.  The names OLD and
+NEW should not contain any slashes.  The `-N' option lets the patch
+create and remove files; `-a' lets the patch update non-text files; `-u'
+generates useful time stamps and enough context; and `-r' lets the
+patch update subdirectories.  Here is an example command, using Bourne
+shell syntax:
+
+     diff -Naur gcc-3.0.3 gcc-3.0.4
+
+   Tell your recipients how to apply the patches.  This should include
+which working directory to use, and which `patch' options to use; the
+option `-p1' is recommended.  Test your procedure by pretending to be a
+recipient and applying your patches to a copy of the original files.
+
+   *Note Avoiding Common Mistakes::, for how to avoid common mistakes
+when generating a patch.
+
+\1f
+File: diff.info,  Node: Tips for Patch Consumers,  Next: Avoiding Common Mistakes,  Prev: Tips for Patch Producers,  Up: Making Patches
+
+Tips for Patch Consumers
+========================
+
+   A patch producer should tell recipients how to apply the patches, so
+the first rule of thumb for a patch consumer is to follow the
+instructions supplied with the patch.
+
+   GNU `diff' can analyze files with arbitrarily long lines and files
+that end in incomplete lines.  However, older versions of `patch'
+cannot patch such files.  If you are having trouble applying such
+patches, try upgrading to a recent version of GNU `patch'.
+
+\1f
+File: diff.info,  Node: Avoiding Common Mistakes,  Next: Generating Smaller Patches,  Prev: Tips for Patch Consumers,  Up: Making Patches
+
+Avoiding Common Mistakes
+========================
+
+   When producing a patch for multiple files, apply `diff' to
+directories whose names do not have slashes.  This reduces confusion
+when the patch consumer specifies the `-pNUMBER' option, since this
+option can have surprising results when the old and new file names have
+different numbers of slashes.  For example, do not send a patch with a
+header that looks like this:
+
+     diff -Naur v2.0.29/prog/README prog/README
+     --- v2.0.29/prog/README   2002-03-10 23:30:39.942229878 -0800
+     +++ prog/README   2002-03-17 20:49:32.442260588 -0800
+
+because the two file names have different numbers of slashes, and
+different versions of `patch' interpret the file names differently.  To
+avoid confusion, send output that looks like this instead:
+
+     diff -Naur v2.0.29/prog/README v2.0.30/prog/README
+     --- v2.0.29/prog/README   2002-03-10 23:30:39.942229878 -0800
+     +++ v2.0.30/prog/README   2002-03-17 20:49:32.442260588 -0800
+
+   Make sure you have specified the file names correctly, either in a
+context diff header or with an `Index:' line.  Take care to not send out
+reversed patches, since these make people wonder whether they have
+already applied the patch.
+
+   Avoid sending patches that compare backup file names like
+`README.orig' or `README~', since this might confuse `patch' into
+patching a backup file instead of the real file.  Instead, send patches
+that compare the same base file names in different directories, e.g.
+`old/README' and `new/README'.
+
+   To save people from partially applying a patch before other patches
+that should have gone before it, you can make the first patch in the
+patch file update a file with a name like `patchlevel.h' or
+`version.c', which contains a patch level or version number.  If the
+input file contains the wrong version number, `patch' will complain
+immediately.
+
+   An even clearer way to prevent this problem is to put a `Prereq:'
+line before the patch.  If the leading text in the patch file contains a
+line that starts with `Prereq:', `patch' takes the next word from that
+line (normally a version number) and checks whether the next input file
+contains that word, preceded and followed by either white space or a
+newline.  If not, `patch' prompts you for confirmation before
+proceeding.  This makes it difficult to accidentally apply patches in
+the wrong order.
+
+\1f
+File: diff.info,  Node: Generating Smaller Patches,  Prev: Avoiding Common Mistakes,  Up: Making Patches
+
+Generating Smaller Patches
+==========================
+
+   The simplest way to generate a patch is to use `diff -Naur' (*note
+Tips for Patch Producers::), but you might be able to reduce the size
+of the patch by renaming or remo