Import GNU diffutils-2.8.7.
authorPeter Avalos <pavalos@dragonflybsd.org>
Sun, 5 Aug 2007 05:20:51 +0000 (05:20 +0000)
committerPeter Avalos <pavalos@dragonflybsd.org>
Sun, 5 Aug 2007 05:20:51 +0000 (05:20 +0000)
60 files changed:
contrib/diffutils-2.8/COPYING [new file with mode: 0644]
contrib/diffutils-2.8/ChangeLog [new file with mode: 0644]
contrib/diffutils-2.8/NEWS [new file with mode: 0644]
contrib/diffutils-2.8/README [new file with mode: 0644]
contrib/diffutils-2.8/doc/diff.info [new file with mode: 0644]
contrib/diffutils-2.8/doc/diff.texi [new file with mode: 0644]
contrib/diffutils-2.8/doc/fdl.texi [new file with mode: 0644]
contrib/diffutils-2.8/doc/stamp-vti [new file with mode: 0644]
contrib/diffutils-2.8/doc/version.texi [new file with mode: 0644]
contrib/diffutils-2.8/lib/basename.c [new file with mode: 0644]
contrib/diffutils-2.8/lib/c-stack.c [new file with mode: 0644]
contrib/diffutils-2.8/lib/c-stack.h [new file with mode: 0644]
contrib/diffutils-2.8/lib/cmpbuf.c [new file with mode: 0644]
contrib/diffutils-2.8/lib/cmpbuf.h [new file with mode: 0644]
contrib/diffutils-2.8/lib/dirname.h [new file with mode: 0644]
contrib/diffutils-2.8/lib/error.c [new file with mode: 0644]
contrib/diffutils-2.8/lib/error.h [new file with mode: 0644]
contrib/diffutils-2.8/lib/exclude.c [new file with mode: 0644]
contrib/diffutils-2.8/lib/exclude.h [new file with mode: 0644]
contrib/diffutils-2.8/lib/exit.h [new file with mode: 0644]
contrib/diffutils-2.8/lib/exitfail.c [new file with mode: 0644]
contrib/diffutils-2.8/lib/exitfail.h [new file with mode: 0644]
contrib/diffutils-2.8/lib/file-type.c [new file with mode: 0644]
contrib/diffutils-2.8/lib/file-type.h [new file with mode: 0644]
contrib/diffutils-2.8/lib/gettext.h [new file with mode: 0644]
contrib/diffutils-2.8/lib/hard-locale.c [new file with mode: 0644]
contrib/diffutils-2.8/lib/hard-locale.h [new file with mode: 0644]
contrib/diffutils-2.8/lib/inttostr.h [new file with mode: 0644]
contrib/diffutils-2.8/lib/posixver.c [new file with mode: 0644]
contrib/diffutils-2.8/lib/posixver.h [new file with mode: 0644]
contrib/diffutils-2.8/lib/prepargs.h [new file with mode: 0644]
contrib/diffutils-2.8/lib/quotesys.c [new file with mode: 0644]
contrib/diffutils-2.8/lib/quotesys.h [new file with mode: 0644]
contrib/diffutils-2.8/lib/setmode.h [new file with mode: 0644]
contrib/diffutils-2.8/lib/strcase.h [new file with mode: 0644]
contrib/diffutils-2.8/lib/strftime.c [new file with mode: 0644]
contrib/diffutils-2.8/lib/strtoimax.c [new file with mode: 0644]
contrib/diffutils-2.8/lib/strtoumax.c [new file with mode: 0644]
contrib/diffutils-2.8/lib/unlocked-io.h [new file with mode: 0644]
contrib/diffutils-2.8/lib/version-etc.c [new file with mode: 0644]
contrib/diffutils-2.8/lib/version-etc.h [new file with mode: 0644]
contrib/diffutils-2.8/lib/xalloc.h [new file with mode: 0644]
contrib/diffutils-2.8/lib/xmalloc.c [new file with mode: 0644]
contrib/diffutils-2.8/man/diff.1 [new file with mode: 0644]
contrib/diffutils-2.8/man/diff3.1 [new file with mode: 0644]
contrib/diffutils-2.8/man/sdiff.1 [new file with mode: 0644]
contrib/diffutils-2.8/src/analyze.c [new file with mode: 0644]
contrib/diffutils-2.8/src/context.c [new file with mode: 0644]
contrib/diffutils-2.8/src/diff.c [new file with mode: 0644]
contrib/diffutils-2.8/src/diff.h [new file with mode: 0644]
contrib/diffutils-2.8/src/diff3.c [new file with mode: 0644]
contrib/diffutils-2.8/src/dir.c [new file with mode: 0644]
contrib/diffutils-2.8/src/ed.c [new file with mode: 0644]
contrib/diffutils-2.8/src/ifdef.c [new file with mode: 0644]
contrib/diffutils-2.8/src/io.c [new file with mode: 0644]
contrib/diffutils-2.8/src/normal.c [new file with mode: 0644]
contrib/diffutils-2.8/src/sdiff.c [new file with mode: 0644]
contrib/diffutils-2.8/src/side.c [new file with mode: 0644]
contrib/diffutils-2.8/src/system.h [new file with mode: 0644]
contrib/diffutils-2.8/src/util.c [new file with mode: 0644]

diff --git a/contrib/diffutils-2.8/COPYING b/contrib/diffutils-2.8/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/ChangeLog b/contrib/diffutils-2.8/ChangeLog
new file mode 100644 (file)
index 0000000..291919d
--- /dev/null
@@ -0,0 +1,3878 @@
+2004-04-13  Paul Eggert  <eggert@twinsun.com>
+
+       * NEWS, configure.ac (AC_INIT): Version 2.8.7.
+       * configure.ac (AM_GNU_GETTEXT_VERSION): Add.
+       (XGETTEXT): Restore from pre-2004-04-12 version.  This fixes
+       a bug that lost many msgids in doc/diffutils.pot.
+       * bootstrap: New file.
+       * exgettext: Don't generate a temporary file, as this runs afoul
+       of "make distcheck" which operates with read-only directories.
+       * Makefile.am (EXTRA_DIST): Add bootstrap.
+       Remove config/config.rpath as it is deduced automatically these days.
+
+2004-04-12  Paul Eggert  <eggert@twinsun.com>
+
+       * NEWS, configure.ac (AC_INIT): Version 2.8.6.
+
+       * NEWS: Add news for 2.8.4, 2.8.6.
+
+       * README: Move copyright notice to end.  Defer to "configure
+       --help" for special "configure" options.  Suggest latest libiconv.
+       Update version numbers of Autoconf etc. to current.
+
+       * configure.ac: Quote various arguments better.
+       (AC_CONFIG_MACRO_DIR): Add call, specifying "m4".
+       (AC_CONFIG_HEADER): Replaces AM_CONFIG_HEADER.
+       (gl_USE_SYSTEM_EXTENSIONS): Replaces AC_GNU_SOURCE.
+       (AC_ISC_POSIX): Remove; nobody ports to ancient ISC any more.
+       (AC_PROG_CPP, AC_PROG_INSTALL, AC_C_INLINE,
+       AC_HEADER_STDBOOL, AC_HEADER_STDC, AM_GNU_GETTEXT, XGETTEXT,
+       AC_HEADER_STAT, AC_FUNC_VPRINTF, jm_FUNC_GLIBC_UNLOCKED_IO,
+       jm_FUNC_GNU_STRFTIME, jm_FUNC_MALLOC, jm_FUNC_REALLOC,
+       jm_PREREQ_C_STACK, jm_PREREQ_ERROR, jm_PREREQ_HARD_LOCALE,
+       jm_PREREQ_QUOTEARG, jm_PREREQ_REGEX, AC_FUNC_FNMATCH_GNU, jm_AC_DOS):
+       Remove; not needed here, as our files don't use them directly
+       or we rely on gnulib modules.
+       (AC_C_CONST): Remove; we assume C89 now.
+       (AC_CHECK_HEADERS): Remove libintl.h, limits.h, stdlib.h, string.h,
+       time.h.
+       (AC_CHECK_TYPE): Remove ptrdiff_t, ssize_t.
+       (AC_CHECK_FUNCS): Remove diraccess, strchr, strerror, tmpnam).
+       (AC_REPLACE_FUNCS): Remove memchr, mkstemp, strcasecmp.
+       (GNULIB_AUTOCONF_SNIPPET): Add call.  This replaces much of
+       the above.
+       (AC_CONFIG_FILES): Remove lib/posix/Makefile.
+       (AC_CONFIG_COMMANDS): Remove.
+       
+       * doc/diff.texi (dircategory): Change to "Text creation and
+       manipulation" from "GNU packages".
+       (Translations): New node.
+       (Overview): Improve quality of algorithm citations.
+       (Binary): -q doesn't exactly cause diff to assume files are binary.
+       (Normal): Place after Side by Side, since it's less important.
+       (Detailed Context, Detailed Unified, Detailed ed,
+       Detailed if-then-else, diff3 Hunks, Detailed diff3 Normal):
+       Place at end of menu.
+       (Detailed Unified): Mention that fractional timestamps are
+       omitted on hosts that don't support them.
+       Mention what happens when hunks contain just one line.
+       (Line Group Formats, Reject Names): Fix duplicate-word typos.
+       (Comparing Directories): Trailing white space and empty lines are
+       ignored in the -X file.
+       (diff Options): Add --strip-trailing-cr.
+       (Projects): gnu -> gvc@gnu.org.
+
+       * lib/Makefile.am (SUBDIRS): Remove.
+       (EXTRA_DIST, noinst_HEADERS): Remove most entries.
+       (libdiffutils_a_SOURCES): Now just lib_SOURCES.
+       (lib_SOURCES): New macro.
+       (DISTCLEANFILES, MOSTLYCLEANFILES): Set to empty now.
+       (gnulib.mk): Include: this does most of the work eliminated
+       by the above changes.
+
+       * lib/inttostr.c (inttostr): Protect i < 0 by compile-time
+       test intended to suppress compiler warnings.
+       * lib/inttostr.h: Include limits.h unilaterally.
+       (CHAR_BIT): Remove.
+       (PARAMS): Remove; all uses changed.
+       * lib/setmode.c (__attribute__): New macro.
+       (set_binary_mode): Define only if HAVE_SETMODE_DOS.
+       Otherwise define a dummy static char, as C89 requires
+       that we define something.
+       * lib/setmode.h (set_binary_mode): Return true, not 1.
+
+       * src/analyze.c, src/context.c, src/diff.c, src/io.c, src/util.c:
+       Do not include regex.h, as diff.h does this now.
+
+       * src/cmp.c: Sort includes.  Include <exit.h>, <unlocked-io.h>.
+       (specify_comparison_type): Don't report an error if the comparison
+       type has already been specified the same way as this one.
+
+       * src/cmp.c (usage): Mention exit status.
+       * src/diff.c (option_help_msgid): Likewise.
+       * src/diff3.c (usage): Likewise.
+       * src/sdiff.c (usage): Likewise.
+
+       * src/cmp.c (main): Adjust to latest gnulib c_stack_action
+       calling conventions.
+       * src/diff.c (main): Likewise.
+       * src/diff3.c (main): Likewise.
+       * src/sdiff.c (main): Likewise.
+
+       * src/cmp.c (main): Adjust to latest version_etc calling conventions.
+       * src/diff.c (main): Likewise.
+       * src/diff3.c (main): Likewise.
+       * src/sdiff.c (main): Likewise.
+
+       * src/diff.c: Include <exit.h>.
+       (binary): Define to true if not declared.
+       (longopts): Set tabsize flag to 1.
+       (main): Don't output nanoseconds if platform lacks them.
+       Don't treat files as binary if !binary.
+       (set_mtime_to_now): Use 0, not NULL.
+       (compare_files): Mark files as nonexistent if it looks like
+       'patch' created inaccessible regular empty files to denote
+       nonexistent backups.  Don't compare such files.
+       Clear st_* members of status of nonexistent file.
+       Remove now-unnecessary tests.
+
+       * src/diff.h: Include regex.h, unlocked-io.h.
+       (struct file_data.changed): Now char *, not bool *, to save
+       space on hosts where bool takes more space than char.
+       All uses changed.
+
+       * src/diff3.c: Include unlocked-io.h.
+       (strip_trailing_cr): New var.
+       (STRIP_TRAILING_CR_OPTION): New enum.
+       (longopts, main, option_help_msgid, read_diff):
+       Add --strip-trailing-cr support.
+       (read_diff): Exit with status 126 (not 127) if errno != ENOENT
+       after failed execvp in child.  Report this in parent.
+
+       * src/dir.c: Include <strcase.h>.
+       (failed_locale_specific_sorting): Renamed from failed_strcoll.
+       All uses changed.
+       (compare_names): Don't invoke strcasecmp first thing when
+       ignore_file_name_case; if locale_specific_sorting, we should
+       just use that.
+
+       * src/ifdef.c (next_line): Remove; replace with...
+       (next_line0, next_line1): New vars.
+       (print_ifdef_script, print_ifdef_hunk):
+       Use them to fix line-number computation bug.
+
+       * src/io.c (find_and_hash_each_line): Don't convert char *
+       to unsigned char *; just leave pointers as char *.  This
+       lessens the number of potentially-dangerous casts.
+       * src/util.c (lines_differ): Likewise.
+
+       * src/sdiff.c: Include <unlocked-io.h>, <exit.h>.
+       (check_child_status): Renamed from ck_editor_status, and
+       accept a new arg MAX_OK_STATUS.  All callers changed.
+       Handle status 126/127 as per POSIX.
+       (edit): Likewise.
+       (main): Likewise.  Fix getopt typo: -E wasn't supported.
+
+       * src/system.h (S_IRWXU, S_IRWXG, S_IRWXO): Define if not defined.
+       (S_IXUSR, S_IXGRP, S_IXOTH): Remove.
+       Include <time.h> unconditionally, since we can assume C89 now.
+       Likewise for <stdlib.h>, <string.h>.
+       (getenv, EXIT_SUCCESS, EXIT_FAILURE, SSIZE_MAX, strchr, strrchr,
+       memcmp, memcpy): Remove decl; no longer needed.
+       (strcasecoll, strcasecmp): Define if not built in.
+       (CTYPE_DOMAIN, ISPRINT, ISSPACE, TOLOWER, _tolower, errno): Remove;
+       we now assume C89 or better.  All uses changed.
+       Include <stdbool.h> unconditionally now, since gnulib supports it
+       if the C compiler doesn't.  All boolean uses of 0 and 1 now
+       changed to false and true.
+       (lin_is_printable_as_long_int): Renamed from lin_is_printable_as_long.
+
+       * src/util.c (begin_output): Fix bug: 0 wasn't cast to char * arg,
+       which led to undefined behavior on 64-bit hosts.
+       Use more-standard test for exit status 126 versus 127.
+       (finish_output): Likewise.
+       (analyze_hunk): Do not cast bool to int.
+
+2004-03-15  Paul Eggert  <eggert@twinsun.com>
+
+       * src/cmp.c (main): Don't consider two files with the same name to
+       be the same, if their initial skip values differ.  This fixes a
+       bug reported by Hideki Iwamoto in
+       <http://mail.gnu.org/archive/html/bug-gnu-utils/2004-03/msg00024.html>.
+
+2004-03-11  Paul Eggert  <eggert@twinsun.com>
+
+       * src/analyze.c (diag): Return void, not lin, since the return
+       value wasn't needed.  All callers changed.
+       (diag, diff_2_files):
+       Use 'true' and 'false' instead of '1' and '0', when appropriate.
+       (compareseq): Use lin const * local variables instead of lin *.
+       Don't bother checking diag's return value.
+       (shift_boundaries, build_reverse_script, build_script, diff_2_files):
+       Use char arrays, not bool arrays, since
+       sizeof (bool) might be greater than 1.
+
+2004-02-09  Paul Eggert  <eggert@twinsun.com>
+
+       * m4/setmode.m4 (AC_FUNC_SETMODE_DOS): AC_LIBOBJ(setmode) if
+       we would return true.
+
+2002-10-14  Paul Eggert  <eggert@twinsun.com>
+
+       * src/Makefile.am (diff3.$(OBJEXT), diff.$(OBJEXT),
+       sdiff.$(OBJEXT)): Rename from (misspelled) diff3.$(OBJECT),
+       diff.$(OBJECT), sdiff.$(OBJECT).  Patch by Paul D. Smith in
+       <http://mail.gnu.org/pipermail/bug-gnu-utils/2002-October/003251.html>.
+       Bug reported by Chris Bainbridge.
+
+2002-10-13  Paul Eggert  <eggert@twinsun.com>
+
+       * src/Makefile.am (MOSTLYCLEANFILES): Add paths.ht.
+       (paths.h): Send output to paths.ht first, and then rename to
+       paths.h at the end.  This avoids problems if the disk is full.
+       It also works around what appears to be a bug with GNU make -j
+       (3.79.1); see <http://bugs.gentoo.org/show_bug.cgi?id=8934>.
+
+2002-06-27  Paul Eggert  <eggert@twinsun.com>
+
+       * NEWS, configure.ac (AC_INIT): Version 2.8.4.
+
+       * config/config.sub: Sync with latest version maintained in other
+       packages.
+
+       * lib/file-type.h: Protect against double inclusion.  Detect
+       whether <sys/stat.h> has been included.  Fix from Jim Meyering.
+
+       * src/analyze.c (briefly_report): Don't say "Binary files differ",
+       since one of the files may not be a binary file.
+       Bug reported by Dan Jacobson.
+
+2002-06-22  Paul Eggert  <eggert@twinsun.com>
+
+       * lib/c-stack.c (segv_handler, c_stack_action) [! defined
+       SA_SIGINFO]: Do not assume SA_SIGINFO behavior.
+       Bug reported by Jim Meyering on NetBSD 1.5.2.
+
+2002-06-16  Paul Eggert  <eggert@twinsun.com>
+
+       * NEWS, configure.ac (AC_INIT): Version 2.8.3.
+
+       * config/depcomp, config/missing, README: Update to automake 1.6.2.
+
+       * po/LINGUAS: Add en_US.
+       * po/en_US.po: New file.
+       * po/POTFILES.in: Remove lib/freesoft.c.
+       Add lib/file-type.c, lib/version-etc.c, lib/xmalloc.c.
+
+2002-06-15  Paul Eggert  <eggert@twinsun.com>
+
+       * doc/diff.texi (Special Files): Document behavior of symlink
+       loops.
+
+       * lib/Makefile.am (noinst_HEADERS): Remove freesoft.h.
+       Add version-etc.h.
+       (libdiffutils_a_SOURCES): Remove freesoft.c.  Add version-etc.c.
+       * lib/freesoft.c, lib/freesoft.h: Remove.
+       * lib/version-etc.h (PARAMS): Remove; we now assume C89 at least.
+
+       * lib/version-etc.h (version_etc): Remove package and version args.
+       (version_etc_copyright): Remove.
+       * lib/version-etc.c: Likewise.
+       Do not include unlocked-io.h; no longer needed.
+       Include gettext.h rather than libinto.h.
+       (_): Define unconditionally.
+       (version_etc): Adjust wording to match current GNU coding standards.
+       Translate "(C)" if possible.
+
+       * lib/version-etc.c, lib/version-etc.h: New files, taken from
+       fileutils.
+
+       * src/Makefile.am (cmp_SOURCES, diff3_SOURCES, sdiff_SOURCES,
+       diff_SOURCES): Remove version.c.
+       (MAINTAINERCLEANFILES, $(srcdir)/version.c): Remove.
+
+       * src/cmp.c: Include version-etc.h, not freesoft.h.
+       (copyright_notice): Remove.
+       (main): Use version_etc to print version.
+       * src/diff.c, src/diff3.c, src/sdiff.c: Likewise.
+
+       * src/cmp.c (version_string): Remove decl.
+       * src/diff.h, src/diff3.c, src/sdiff.c: Likewise.
+
+2002-06-11  Paul Eggert  <eggert@twinsun.com>
+
+       * lib/fnmatch.c, lib/fnmatch_loop.c (WIDE_CHAR_SUPPORT):
+       New macro.  Use it uniformly instead of
+       (defined HAVE_WCTYPE_H && defined HAVE_WCHAR_H).
+       It also uses HAVE_BTOWC, to fix a porting bug on Solaris 2.5.1
+       reported by Vin Shelton.
+       * m4/fnmatch.m4 (_AC_LIBOBJ_FNMATCH): Check for btowc.
+
+       * NEWS, configure.ac (AC_INIT): Version 2.8.2.
+
+       * ABOUT-NLS, config/config.guess, config/config.sub,
+       config/depcomp, config/texinfo.tex, lib/posix/regex.h,
+       m4/c-bs-a.m4, m4/gettext.m4, m4/gnu-source.m4, m4/lib-link.m4,
+       m4/malloc.m4:
+       Update to recent version (maintained in other packages).
+       * m4/prereq.m4 (jm_PREREQ_EXCLUSIVE): AC_FUNC_FNMATCH_GNU
+       no longer takes a lib.
+
+       * README: Incorporate contents from INSTALLME.
+       * INSTALLME: Remove.
+       * Makefile.am (EXTRA_DIST): Remove INSTALLME.
+
+       * configure.ac (AC_GNU_SOURCE): Move up, so that it affects
+       later compilations properly.
+       (DEFAULT_DIFF_PROGRAM, AC_TYPE_SIGNAL): Remove.
+       (jm_AC_TYPE_INTMAX_T): Add.
+       (AC_FUNC_FNMATCH_GNU): Use this, instead of AC_FUNC_FNMATCH.
+       (AC_CONFIG_LINKS): regex.hin renamed from regex_.h.
+
+       * doc/diff.texi: Reword "@option{-f} and @option{--foo}" to
+       "@option{-f} or @option{--foo}".
+       Use @acronym instead of @sc where appropriate.
+       (Specified Lines): Renamed from Specified Folding.
+       (Comparison, Blank Lines):
+       Clarify wordings for Blank Lines and Specified Lines nodes.
+       (Binary): Mention --verbose and --print-bytes.
+       (Tabs, sdiff Option Summary, diff Options):
+       New option --tabsize=COLUMNS.
+
+       * lib/Makefile.am (EXTRA_DIST): Add fnmatch_loop.c.
+       (noinst_HEADERS): fnmatch_.h renamed from fnmatch.hin.
+       regex_.h renamed from regex.hin.
+       Add file-type.h.
+       (libdiffutils_a_SOURCES): Add file-type.c.
+       (DISTCLEANFILES): Remove fnmatch.hno, regex.hno.
+
+       * lib/c-stack.c (__attribute__): New macro.
+       (EOVERFLOW): Define if not defined.
+       (stack_t): Define to struct sigaltstack if not defined or declared.
+       Include <sys/resource.h>, <ucontext.h> if available.
+       Include <stdio.h> if DEBUG.
+       Do not include <inttypes.h> or <stdint.h>.
+       (c_stack_die): Remove info and context args.  All uses changed.
+       (segv_action): Likewise.
+       (alternate_signal_stack): Change uintmax_t to long, to ease porting.
+       (get_stack_location, min_address_from_argv, max_address_from_argv,
+       null_action): New functions.
+       (stack_base, stack_size): New vars.
+       (segv_handler): context arg may not be used.
+       Use global stack_base, stack_size if
+       ! HAVE_XSI_STACK_OVERFLOW_HEURISTIC.
+       Add debug code.
+       Invoke die (rather than segv_action) to exit.
+       (c_stack_action): Accept new argv arg, and simpler handler arg.
+       All uses changed.  Move code into new functions above.
+       Allow null action.
+       [! (defined SA_ONSTACK && defined _SC_PAGESIZE)]: Assume all segvs
+       are stack overflows.
+       (main) [DEBUG]: Describe what output should be like.
+
+       * lib/c-stack.h (siginfo_t, c_stack_die): Remove decl.
+
+       * lib/file-type.c, lib/file-type.h: New files.  These contain code
+       that was in src/diff.c, but is now librarified and spiffed up a
+       bit.  Jim Meyering suggested this.
+
+       * lib/fnmatch.c (alloca, __builtin_expect): Define for non-GCC hosts.
+       <strings.h>: Include only if HAVE_STRINGS_H.
+       <stddef.h>: Include if we include stdlib.h.
+       Do not comment out all code if ! HAVE_FNMATCH_GNU.
+       (getenv): Do not declare if HAVE_DECL_GETENV.
+       (__strchrnul, __wcschrnul): Remove; not used.
+       (MEMPCPY): Use mempcpy if not _LIBC; use memcpy if neither _LIBC
+       nor HAVE_MEMPCPY.
+       (FOLD) [HANDLE_MULTIBYTE]: Do not pass wide char to ISUPPER.
+       (STRLEN, STRCAT, MEMPCPY) [HANDLE_MULTIBYTE && !defined _LIBC]:
+       Use wcslen rather than __wcslen, and likewise for wcscat, wmempcpy.
+       (MEMPCPY) [HANDLE_MULTIBYTE]: Use wmempcpy if not _LIBC; use wmemcpy
+       if neither _LIBC nor HAVE_WMEMPCPY.
+       * lib/fnmatch_.h (__const): Do not define to empty, as this breaks
+       Sun cc.  The code doesn't work with K&R anyway.
+       * lib/fnmatch_loop.c (struct patternlist.str): Size 1, not 0,
+       as C89 requires this.
+       (NEW_PATTERN): Use offsetof, not sizeof, since str now has size 1.
+       * lib/fnmatch_.h: Import from glibc fnmatch.h.
+       * lib/fnmatch.c, lib/fnmatch_loop.c: Import from glibc.
+
+       * lib/posixver.c: Include posixver.h.
+
+       * lib/regex_.h: Renamed from lib/regex.hin.
+
+       * m4/c-stack.m4 (jm_PREREQ_C_STACK): Do not AC_REQUIRE
+       jm_AC_TYPE_UINTMAX_T and do not use uintmax_t.
+       Check for sys/resource.h, uccontext.h.
+       Check for decls and existence of getcontext, sigaltstack.
+       Check for stack_t.
+
+       * m4/codeset.m4, m4/glibc21.m4, m4/lcmessage.m4: Remove.
+
+       * m4/fnmatch.m4: Update to latest Autoconf CVS for AC_FUNC_FNMATCH_GNU.
+       * m4/gnu-source.m4: Likewise, for AC_GNU_SOURCE (renamed from
+       AC__GNU_SOURCE).
+
+       * m4/mbstate_t.m4 (AC_TYPE_MBSTATE_T): Renamed from AC_MBSTATE_T.
+       All uses changed.  Upgrade to recent Autoconf CVS.
+
+       * m4/stdbool.m4 (AC_HEADER_STDBOOL): Do not cast pointer to
+       bool in integer constant expression; C99 does not allow it.
+       Reported by Bruno Haible.
+
+       * po/LINGUAS: Add hu, pt_BR.
+       * po/hu.po, po/pt_BR.po: New files.
+
+       * src/Makefile.am (noinst_HEADERS): Remove diff.h.
+       (DEFS): Remove.
+       (diff_sources): Add diff.h.
+       (MOSTLYCLEANFILES): New macro.
+       (cmp.$(OBJEXT) diff3.$(OBJECT) diff.$(OBJECT) sdiff.$(OBJECT)): Depend
+       on paths.h.
+       (paths.h): New rule.
+
+       * src/analyze.c, src/cmp.c, src/diff.c, src/diff3.c, src/io.c,
+       src/sdiff.c: Include <file-type.h>.
+
+       * src/cmp.c: Include paths.h.
+       (copyright_notice): Renamed from copyright_string.
+       Now a msgid, so that copyright symbol can be translated.
+       All uses changed.
+       * src/diff.c, src/diff3.c, src/sdiff.c: Likewise.
+
+       * src/diff.c: Include posixver.h.
+       (TABSIZE_OPTION): New constant.
+       (main): Allow widths up to SIZE_MAX.
+       (filetype): Move to lib/file-type.c and rename to file_type.
+       All uses changed.
+
+       * src/diff.c (longopts, main, usage): New option --tabsize=COLUMNS.
+       * src/io.c (find_and_hash_each_line): Likewise.
+
+       * src/diff.h (TAB_WIDTH): Remove.
+       (tabsize): New decl.
+       (sdiff_half_width, sdiff_column2_offset): Now size_t rather than
+       unsigned int.
+
+       * src/diff3.c (skipwhite, readnum): New functions.
+       (process_diff_control): Use them.
+       (SKIPWHITE, READNUM): Remove.
+       (read_diff): Don't worry about errno == ENOEXEC.
+
+       * src/sdiff.c (catchsig, signal_handler, initial_action): Signal
+       handlers return void, not RETSIGTYPE, since we no longer support
+       K&R.
+       (TABSIZE_OPTION): New constant.
+       (longopts, usage, main): New option --tabsize=COLUMNS.
+       (cleanup): New arg signo.  All uses changed.
+       (ck_editor_status, main, edit): Don't worry about ENOEXEC.
+
+       * src/side.c (tab_from_to, print_half_line, print_1sdiff_line):
+       New option --tabsize=COLUMNS.
+
+       * src/system.h (S_ISBLK, S_ISCHR, S_ISDIR, S_ISFIFO, S_ISREG,
+       S_ISSOCK): Remove; now in lib/file-type.h.
+
+       * src/util.c (finish_output): Check for ENOEXEC.
+       (lines_differ, output_1_line): New option --tabsize=COLUMNS.
+       (analyze_hunk): If -b or -w is also specified, -B now considers
+       lines to be empty if they contain only white space.
+
+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.tex: 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 (specify_ignore_initial): Renamed from
+       parse_ignore_initial, with different signature, to take the
+       maximum of multiple options rather than the last one.
+       All uses changed.
+
+       * src/cmp.c (bytes, specify_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/cmp.c (main): Two files with the same name are identical
+       only if the same offset is specified.
+       (block_compare_and_count): Avoid cast to unsigned char.
+
+       * 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/NEWS b/contrib/diffutils-2.8/NEWS
new file mode 100644 (file)
index 0000000..3854f8b
--- /dev/null
@@ -0,0 +1,244 @@
+Version 2.8.7 contains no user-visible changes.
+
+User-visible changes in version 2.8.6:
+
+* New diff3 option --strip-trailing-cr.
+
+* With -N and -P, inaccessible empty regular files (the kind of files
+  that 'patch' creates to indicate nonexistent backups) are now
+  treated as nonexistent when they are in the 'backup' file position.
+
+* If multiple SKIP values are given to cmp, e.g., `cmp -i 10 -i 20',
+  cmp now uses the maximal value instead of the last one.
+
+* diff now omits the ".000000000" on hosts that do not support
+  fractional time stamps.
+
+Version 2.8.5 was not publicly released.
+
+User-visible changes in version 2.8.4:
+
+* Diff now simply prints "Files A and B differ" instead of "Binary
+  files A and B differ".  The message is output if either A or B
+  appears to be a binary file, and the old wording was misleading
+  because it implied that both files are binary, which is not
+  necessarily the case.
+
+User-visible changes in version 2.8.3:
+
+* New locale: en_US.
+
+User-visible changes in version 2.8.2:
+
+* New diff and sdiff option:
+  --tabsize=COLUMNS
+* If --ignore-space-change or --ignore-all-space is also specified,
+  --ignore-blank-lines now considers lines to be empty if they contain
+  only white space.
+* More platforms now handle multibyte characters correctly when
+  excluding files by name (diff -x and -X).
+* New locales: hu, pt_BR.
+
+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.
+* Recursive diffs now detect and report directory loops.
+* 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, 2004 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/README b/contrib/diffutils-2.8/README
new file mode 100644 (file)
index 0000000..0c37230
--- /dev/null
@@ -0,0 +1,69 @@
+README for GNU DIFF
+
+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/version.texi for version information.
+
+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'.  Brief man pages are in man/*, but they are no
+substitute for the documentation.
+
+Please see the file ABOUT-NLS for notes about translations.
+
+Please see the file INSTALL for generic compilation and installation
+instructions.  Briefly, you can run "./configure; make install".  The
+command "./configure --help" lists the supported --enable and --with
+options.
+
+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; see <ftp://ftp.gnu.org/gnu/libiconv/>.  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 a nonstandard compiler, please install GCC first.
+
+If you make changes to the source code, you may need appropriate
+versions of GNU build tools to regenerate the intermediate files.  The
+following versions were used to generate the intermediate files in
+this distribution:
+
+* Autoconf 2.59   <ftp://ftp.gnu.org/gnu/autoconf/autoconf-2.59.tar.gz>
+* Automake 1.8.3  <ftp://ftp.gnu.org/gnu/automake/automake-1.8.3.tar.gz>
+* gettext 0.14.1  <ftp://ftp.gnu.org/gnu/gettext/gettext-0.14.1.tar.gz>
+* help2man 1.33   <ftp://ftp.gnu.org/gnu/help2man/help2man-1.33.1.tar.gz>
+* Texinfo 4.7     <ftp://ftp.gnu.org/gnu/texinfo/texinfo-4.7.tar.gz>
+
+Please report bugs to <bug-gnu-utils@gnu.org>.
+
+-----
+
+Copyright (C) 1992, 1998, 2001, 2002, 2004 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.
diff --git a/contrib/diffutils-2.8/doc/diff.info b/contrib/diffutils-2.8/doc/diff.info
new file mode 100644 (file)
index 0000000..ca36345
--- /dev/null
@@ -0,0 +1,5223 @@
+This is diff.info, produced by makeinfo version 4.7 from diff.texi.
+
+   This manual is for GNU Diffutils (version 2.8.7, 12 April 2004), 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, 2004 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 Text creation and manipulation
+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.7, 12 April 2004), 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, 2004 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.
+* Translations::          Available translations 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
+by Eugene W. Myers in "An O(ND) Difference Algorithm and its
+Variations", `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 by E. Ukkonen in
+"Algorithms for Approximate String Matching", `Information and Control'
+Vol. 64, 1985, pp. 100-118.  Unless the `--minimal' option is used,
+`diff' uses a heuristic by Paul Eggert that limits the cost to O(N^1.5
+log N) at the price of producing suboptimal output for large inputs
+with many differences.  Related algorithms are surveyed by Alfred V.
+Aho in section 6.3 of "Algorithms for Finding Patterns in Strings",
+`Handbook of Theoretical Computer Science' (Jan Van Leeuwen, ed.), Vol.
+A, `Algorithms and Complexity', Elsevier/MIT Press, 1990, pp. 255-300.
+
+   GNU `diff3' was written by Randy Smith.  GNU `sdiff' was written by
+Thomas Lord.  GNU `cmp' was written by Torbjo"rn Granlund and David
+MacKenzie.
+
+   GNU `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
+
+1 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 whose lines are all blank.
+* Specified Lines::   Suppressing differences whose lines all match a pattern.
+* Case Folding::      Suppressing differences in alphabetic case.
+* 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
+
+1.1 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 `-d' or `--minimal'
+option (*note diff Performance::).
+
+\1f
+File: diff.info,  Node: White Space,  Next: Blank Lines,  Prev: Hunks,  Up: Comparison
+
+1.2 Suppressing Differences in Blank and Tab Spacing
+====================================================
+
+The `-E' or `--ignore-tab-expansion' option ignores 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 (*note Tabs::).
+
+   The `-b' or `--ignore-space-change' option is stronger.  It ignores
+white space at line end, and considers all other sequences of one or
+more white space characters within a line to be equivalent.  With this
+option, `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' or `--ignore-all-space' option is stronger still.  It
+ignores differences 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 this option, `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: Specified Lines,  Prev: White Space,  Up: Comparison
+
+1.3 Suppressing Differences Whose Lines Are All Blank
+=====================================================
+
+The `-B' or `--ignore-blank-lines' option ignores changes that consist
+entirely of blank lines.  With this option, 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
+
+   Normally this option affects only lines that are completely empty,
+but if you also specify the `-b' or `--ignore-space-change' option, or
+the `-w' or `--ignore-all-space' option, lines are also affected if
+they look empty but contain white space.  In other words, `-B' is
+equivalent to `-I '^$'' by default, but it is equivalent to `-I
+'^[[:space:]]*$'' if `-b' or `-w' is also specified.
+
+\1f
+File: diff.info,  Node: Specified Lines,  Next: Case Folding,  Prev: Blank Lines,  Up: Comparison
+
+1.4 Suppressing Differences Whose Lines All Match 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: Case Folding,  Next: Brief,  Prev: Specified Lines,  Up: Comparison
+
+1.5 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: Brief,  Next: Binary,  Prev: Case Folding,  Up: Comparison
+
+1.6 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' or
+`--brief' option selects 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, or reports that one file is a
+prefix of the other.  You can use the `-s', `--quiet', or `--silent'
+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
+
+1.7 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 report only whether files differ (but
+not how).  Use the `-q' or `--brief' option for this.
+
+   Normally, differing binary files count as 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 generate a form
+of output that represents differences as requested.
+
+   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' or `--verbose' option to show the values of each
+differing byte in the two files.  With GNU `cmp', you can also use the
+`-b' or `--print-bytes' 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' option.
+
+\1f
+File: diff.info,  Node: Output Formats,  Next: Incomplete Lines,  Prev: Comparison,  Up: Top
+
+2 `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.
+* Context::           Showing differences with the surrounding text.
+* Side by Side::      Showing differences in two columns.
+* Normal::            Showing differences without surrounding text.
+* Scripts::           Generating scripts for other programs.
+* If-then-else::      Merging files with if-then-else.
+
+\1f
+File: diff.info,  Node: Sample diff Input,  Next: Context,  Up: Output Formats
+
+2.1 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: Context,  Next: Side by Side,  Prev: Sample diff Input,  Up: Output Formats
+
+2.2 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
+
+2.2.1 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:
+
+* Example Context::  Sample output in context format.
+* Less Context::     Another sample with less context.
+* Detailed Context:: A detailed description of the context output format.
+
+\1f
+File: diff.info,  Node: Example Context,  Next: Less Context,  Up: Context Format
+
+2.2.1.1 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,  Next: Detailed Context,  Prev: Example Context,  Up: Context Format
+
+2.2.1.2 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: Detailed Context,  Prev: Less Context,  Up: Context Format
+
+2.2.1.3 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).  (The fractional seconds are
+omitted on hosts that do not support fractional time stamps.)  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-NUMBERS ****
+       FROM-FILE-LINE
+       FROM-FILE-LINE...
+     --- TO-FILE-LINE-NUMBERS ----
+       TO-FILE-LINE
+       TO-FILE-LINE...
+
+   If a hunk contains two or more lines, its line numbers look like
+`START,END'.  Otherwise only its end line number appears.  An empty
+hunk is considered to end at the line that precedes the hunk.
+
+   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: Unified Format,  Next: Sections,  Prev: Context Format,  Up: Context
+
+2.2.2 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:
+
+* Example Unified::  Sample output in unified format.
+* Detailed Unified:: A detailed description of unified format.
+
+\1f
+File: diff.info,  Node: Example Unified,  Next: Detailed Unified,  Up: Unified Format
+
+2.2.2.1 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: Detailed Unified,  Prev: Example Unified,  Up: Unified Format
+
+2.2.2.2 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.  The
+fractional seconds are omitted on hosts that do not support fractional
+time stamps.
+
+   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-LINE-NUMBERS TO-FILE-LINE-NUMBERS @@
+      LINE-FROM-EITHER-FILE
+      LINE-FROM-EITHER-FILE...
+
+   If a hunk contains just one line, only its start line number appears.
+Otherwise its line numbers look like `START,COUNT'.  An empty hunk is
+considered to start at the line that follows the hunk.
+
+   If a hunk and its context contain two or more lines, its line
+numbers look like `START,COUNT'.  Otherwise only its end line number
+appears.  An empty hunk is considered to end at the line that precedes
+the hunk.
+
+   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: Sections,  Next: Alternate Names,  Prev: Unified Format,  Up: Context
+
+2.2.3 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
+
+2.2.3.1 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' or `--show-function-line' option finds the nearest
+unchanged line that precedes each hunk of differences and matches the
+given regular expression.  Then it adds 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, this option leaves the output for
+that hunk unchanged.  If that line is more than 40 characters long, it
+outputs 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
+
+2.2.3.2 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' or `--show-c-function' option is equivalent to `-F
+'^[[:alpha:]$_]'' if the unified format is specified, otherwise `-c -F
+'^[[:alpha:]$_]'' (*note Specified Headings::).  GNU `diff' provides
+this option for the sake of convenience.
+
+\1f
+File: diff.info,  Node: Alternate Names,  Prev: Sections,  Up: Context
+
+2.2.4 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: Normal,  Prev: Context,  Up: Output Formats
+
+2.3 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
+
+2.3.1 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
+
+2.3.2 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: Normal,  Next: Scripts,  Prev: Side by Side,  Up: Output Formats
+
+2.4 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:
+
+* Example Normal::  Sample output in the normal format.
+* Detailed Normal:: A detailed description of normal output format.
+
+\1f
+File: diff.info,  Node: Example Normal,  Next: Detailed Normal,  Up: Normal
+
+2.4.1 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: Detailed Normal,  Prev: Example Normal,  Up: Normal
+
+2.4.2 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: Scripts,  Next: If-then-else,  Prev: Normal,  Up: Output Formats
+
+2.5 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
+
+2.5.1 `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:
+
+* Example ed::  A sample `ed' script.
+* Detailed ed:: A detailed description of `ed' format.
+
+\1f
+File: diff.info,  Node: Example ed,  Next: Detailed ed,  Up: ed Scripts
+
+2.5.1.1 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: Detailed ed,  Prev: Example ed,  Up: ed Scripts
+
+2.5.1.2 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: Forward ed,  Next: RCS,  Prev: ed Scripts,  Up: Scripts
+
+2.5.2 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
+
+2.5.3 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
+
+2.6 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.
+* Example If-then-else::  Sample if-then-else format output.
+* Detailed If-then-else:: A detailed description of if-then-else format.
+
+\1f
+File: diff.info,  Node: Line Group Formats,  Next: Line Formats,  Up: If-then-else
+
+2.6.1 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 new file) is
+     0, to `1 line' if N is 1, and to `%dN lines' otherwise.
+
+\1f
+File: diff.info,  Node: Line Formats,  Next: Example If-then-else,  Prev: Line Group Formats,  Up: If-then-else
+
+2.6.2 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: Example If-then-else,  Next: Detailed If-then-else,  Prev: Line Formats,  Up: If-then-else
+
+2.6.3 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: Detailed If-then-else,  Prev: Example If-then-else,  Up: If-then-else
+
+2.6.4 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: Incomplete Lines,  Next: Comparing Directories,  Prev: Output Formats,  Up: Top
+
+3 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
+
+4 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.  Trailing white space and empty lines are
+ignored in the pattern file.
+
+   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' or `--exclude=PATTERN' option, or an `-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
+
+5 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
+
+5.1 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.  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).  `diff'
+normally assumes that tab stops are set every 8 print columns, but this
+can be altered by the `--tabsize=COLUMNS' option.
+
+   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
+
+5.2 Paginating `diff' Output
+============================
+
+It can be convenient to have long output page-numbered and time-stamped.
+The `-l' or `--paginate' option does 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
+
+6 `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
+
+7 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.
+* Example diff3 Normal::  Sample output in the normal format.
+* diff3 Hunks::           The format of normal output format.
+* Detailed diff3 Normal:: A detailed description of normal output format.
+
+\1f
+File: diff.info,  Node: Sample diff3 Input,  Next: Example diff3 Normal,  Up: Comparing Three Files
+
+7.1 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: Example diff3 Normal,  Next: diff3 Hunks,  Prev: Sample diff3 Input,  Up: Comparing Three Files
+
+7.2 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: Detailed diff3 Normal,  Prev: diff3 Hunks,  Up: Comparing Three Files
+
+7.3 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: Detailed diff3 Normal,  Prev: Example diff3 Normal,  Up: Comparing Three Files
+
+7.4 `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: diff3 Merging,  Next: Interactive Merging,  Prev: Comparing Three Files,  Up: Top
+
+8 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
+
+8.1 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
+
+8.2 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 `--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
+--label X --label Y --label 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
+
+8.3 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' 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
+
+8.4 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
+
+8.5 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
+
+9 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
+
+9.1 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
+
+     --expand-tabs
+     --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
+     --tabsize=COLUMNS  --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
+
+9.2 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
+
+10 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
+
+10.1 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
+
+10.2 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' option 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
+
+10.3 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
+
+10.3.1 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
+
+10.3.2 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
+
+10.3.3 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
+
+10.3.4 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
+
+10.4 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
+
+10.5 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
+
+10.6 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
+
+10.7 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
+
+10.8 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
+
+10.9 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
+
+10.10 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 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
+
+10.11 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
+
+10.11.1 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
+
+10.11.2 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
+
+10.11.3 `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
+
+10.12 `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
+
+10.13 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
+
+11 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
+
+11.1 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
+
+11.2 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
+
+11.3 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
+
+11.4 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 removing some files before making the patch.  If
+the older version of the package contains any files that the newer
+version does not, or if any files have been renamed between the two
+versions, make a list of `rm' and `mv' commands for the user to execute
+in the old version directory before applying the patch.  Then run those
+commands yourself in the scratch directory.
+
+   If there are any files that you don't need to include in the patch
+because they can easily be rebuilt from other files (for example,
+`TAGS' and output from `yacc' and `makeinfo'), exclude them from the
+patch by giving `diff' the `-x PATTERN' option (*note Comparing
+Directories::).  If you want your patch to modify a derived file
+because your recipients lack tools to build it, make sure that the
+patch for the derived file follows any patches for files that it
+depends on, so that the recipients' time stamps will not confuse `make'.
+
+   Now you can create the patch using `diff -Naur'.  Make sure to
+specify the scratch directory first and the newer directory second.
+
+   Add to the top of the patch a note telling the user any `rm' and
+`mv' commands to run before applying the patch.  Then you can remove
+the scratch directory.
+
+   You can also shrink the patch size by using fewer lines of context,
+but bear in mind that `patch' typically needs at least two lines for
+proper operation when patches do not exactly match the input files.
+
+\1f
+File: diff.info,  Node: Invoking cmp,  Next: Invoking diff,  Prev: Making Patches,  Up: Top
+
+12 Invoking `cmp'
+*****************
+
+The `cmp' command compares two files, and if they differ, tells the
+first byte and line number where they differ or reports that one file
+is a prefix of the other.  Bytes and lines are numbered starting with
+1.  The arguments of `cmp' are as follows:
+
+     cmp OPTIONS... FROM-FILE [TO-FILE [FROM-SKIP [TO-SKIP]]]
+
+   The file name `-' is always the standard input.  `cmp' also uses the
+standard input if one file name is omitted.  The FROM-SKIP and TO-SKIP
+operands specify how many bytes to ignore at the start of each file;
+they are equivalent to the `--ignore-initial=FROM-SKIP:TO-SKIP' option.
+
+   By default, `cmp' outputs nothing if the two files have the same
+contents.  If one file is a prefix of the other, `cmp' prints to
+standard error a message of the following form:
+
+     cmp: EOF on SHORTER-FILE
+
+   Otherwise, `cmp' prints to standard output a message of the
+following form:
+
+     FROM-FILE TO-FILE differ: char BYTE-NUMBER, line LINE-NUMBER
+
+   The message formats can differ outside the POSIX locale.  Also,
+POSIX allows the EOF message to be followed by a blank and some
+additional information.
+
+   An exit status of 0 means no differences were found, 1 means some
+differences were found, and 2 means trouble.
+
+* Menu:
+
+* cmp Options:: Summary of options to `cmp'.
+
+\1f
+File: diff.info,  Node: cmp Options,  Up: Invoking cmp
+
+12.1 Options to `cmp'
+=====================
+
+Below is a summary of all of the options that GNU `cmp' accepts.  Most
+options have two equivalent names, one of which is a single letter
+preceded by `-', and the other of which is a long name preceded by
+`--'.  Multiple single letter options (unless they take an argument)
+can be combined into a single command line word: `-bl' is equivalent to
+`-b -l'.
+
+`-b'
+`--print-bytes'
+     Print the differing bytes.  Display control bytes as a `^'
+     followed by a letter of the alphabet and precede bytes that have
+     the high bit set with `M-' (which stands for "meta").
+
+`--help'
+     Output a summary of usage and then exit.
+
+`-i SKIP'
+`--ignore-initial=SKIP'
+     Ignore any differences in the first SKIP bytes of the input files.
+     Treat files with fewer than SKIP bytes as if they are empty.  If
+     SKIP is of the form `FROM-SKIP:TO-SKIP', skip the first FROM-SKIP
+     bytes of the first input file and the first TO-SKIP bytes of the
+     second.
+
+`-l'
+`--verbose'
+     Output the (decimal) byte numbers and (octal) values of all
+     differing bytes, instead of the default standard output.
+
+`-n COUNT'
+`--bytes=COUNT'
+     Compare at most COUNT input bytes.
+
+`-s'
+`--quiet'
+`--silent'
+     Do not print anything; only return an exit status indicating
+     whether the files differ.
+
+`-v'
+`--version'
+     Output version information and then exit.
+
+   In the above table, operands that are byte counts are normally
+decimal, but may be preceded by `0' for octal and `0x' for hexadecimal.
+
+   A byte count can be followed by a suffix to specify a multiple of
+that count; in this case an omitted integer is understood to be 1.  A
+bare size letter, or one followed by `iB', specifies a multiple using
+powers of 1024.  A size letter followed by `B' specifies powers of 1000
+instead.  For example, `-n 4M' and `-n 4MiB' are equivalent to `-n
+4194304', whereas `-n 4MB' is equivalent to `-n 4000000'.  This
+notation is upward compatible with the SI prefixes
+(http://www.bipm.fr/enus/3_SI/si-prefixes.html) for decimal multiples
+and with the IEC 60027-2 prefixes for binary multiples
+(http://physics.nist.gov/cuu/Units/binary.html).
+
+   The following suffixes are defined.  Large sizes like `1Y' may be
+rejected by your computer due to limitations of its arithmetic.
+
+`kB'
+     kilobyte: 10^3 = 1000.
+
+`k'
+`K'
+`KiB'
+     kibibyte: 2^10 = 1024.  `K' is special: the SI prefix is `k' and
+     the IEC 60027-2 prefix is `Ki', but tradition and POSIX use `k' to
+     mean `KiB'.
+
+`MB'
+     megabyte: 10^6 = 1,000,000.
+
+`M'
+`MiB'
+     mebibyte: 2^20 = 1,048,576.
+
+`GB'
+     gigabyte: 10^9 = 1,000,000,000.
+
+`G'
+`GiB'
+     gibibyte: 2^30 = 1,073,741,824.
+
+`TB'
+     terabyte:  10^12 = 1,000,000,000,000.
+
+`T'
+`TiB'
+     tebibyte: 2^40 = 1,099,511,627,776.
+
+`PB'
+     petabyte: 10^15 = 1,000,000,000,000,000.
+
+`P'
+`PiB'
+     pebibyte: 2^50 = 1,125,899,906,842,624.
+
+`EB'
+     exabyte: 10^18 = 1,000,000,000,000,000,000.
+
+`E'
+`EiB'
+     exbibyte: 2^60 = 1,152,921,504,606,846,976.
+
+`ZB'
+     zettabyte: 10^21 = 1,000,000,000,000,000,000,000
+
+`Z'
+`ZiB'
+     2^70 = 1,180,591,620,717,411,303,424.  (`Zi' is a GNU extension to
+     IEC 60027-2.)
+
+`YB'
+     yottabyte: 10^24 = 1,000,000,000,000,000,000,000,000.
+
+`Y'
+`YiB'
+     2^80 = 1,208,925,819,614,629,174,706,176.  (`Yi' is a GNU
+     extension to IEC 60027-2.)
+
+\1f
+File: diff.info,  Node: Invoking diff,  Next: Invoking diff3,  Prev: Invoking cmp,  Up: Top
+
+13 Invoking `diff'
+******************
+
+The format for running the `diff' command is:
+
+     diff OPTIONS... FILES...
+
+   In the simplest case, two file names FROM-FILE and TO-FILE are
+given, and `diff' compares the contents of FROM-FILE and TO-FILE.  A
+file name of `-' stands for text read from the standard input.  As a
+special case, `diff - -' compares a copy of standard input to itself.
+
+   If one file is a directory and the other is not, `diff' compares the
+file in the directory whose name is that of the non-directory.  The
+non-directory file must not be `-'.
+
+   If two file names are given and both are directories, `diff'
+compares corresponding files in both directories, in alphabetical
+order; this comparison is not recursive unless the `-r' or
+`--recursive' option is given.  `diff' never compares the actual
+contents of a directory as if it were a file.  The file that is fully
+specified may not be standard input, because standard input is nameless
+and the notion of "file with the same name" does not apply.
+
+   If the `--from-file=FILE' option is given, the number of file names
+is arbitrary, and FILE is compared to each named file.  Similarly, if
+the `--to-file=FILE' option is given, each named file is compared to
+FILE.
+
+   `diff' options begin with `-', so normally file names may not begin
+with `-'.  However, `--' as an argument by itself treats the remaining
+arguments as file names even if they begin with `-'.
+
+   An exit status of 0 means no differences were found, 1 means some
+differences were found, and 2 means trouble.  Normally, differing
+binary files count as trouble, but this can be altered by using the
+`-a' or `--text' option, or the `-q' or `--brief' option.
+
+* Menu:
+
+* diff Options:: Summary of options to `diff'.
+
+\1f
+File: diff.info,  Node: diff Options,  Up: Invoking diff
+
+13.1 Options to `diff'
+======================
+
+Below is a summary of all of the options that GNU `diff' accepts.  Most
+options have two equivalent names, one of which is a single letter
+preceded by `-', and the other of which is a long name preceded by
+`--'.  Multiple single letter options (unless they take an argument)
+can be combined into a single command line word: `-ac' is equivalent to
+`-a -c'.  Long named options can be abbreviated to any unique prefix of
+their name.  Brackets ([ and ]) indicate that an option takes an
+optional argument.
+
+`-a'
+`--text'
+     Treat all files as text and compare them line-by-line, even if they
+     do not seem to be text.  *Note Binary::.
+
+`-b'
+`--ignore-space-change'
+     Ignore changes in amount of white space.  *Note White Space::.
+
+`-B'
+`--ignore-blank-lines'
+     Ignore changes that just insert or delete blank lines.  *Note
+     Blank Lines::.
+
+`--binary'
+     Read and write data in binary mode.  *Note Binary::.
+
+`-c'
+     Use the context output format, showing three lines of context.
+     *Note Context Format::.
+
+`-C LINES'
+`--context[=LINES]'
+     Use the context output format, showing LINES (an integer) lines of
+     context, or three if LINES is not given.  *Note Context Format::.
+     For proper operation, `patch' typically needs at least two lines of
+     context.
+
+     On older systems, `diff' supports an obsolete option `-LINES' that
+     has effect when combined with `-c' or `-p'.  POSIX 1003.1-2001
+     (*note Standards conformance::) does not allow this; use `-C LINES'
+     instead.
+
+`--changed-group-format=FORMAT'
+     Use FORMAT to output a line group containing differing lines from
+     both files in if-then-else format.  *Note Line Group Formats::.
+
+`-d'
+`--minimal'
+     Change the algorithm perhaps find a smaller set of changes.  This
+     makes `diff' slower (sometimes much slower).  *Note diff
+     Performance::.
+
+`-D NAME'
+`--ifdef=NAME'
+     Make merged `#ifdef' format output, conditional on the preprocessor
+     macro NAME.  *Note If-then-else::.
+
+`-e'
+`--ed'
+     Make output that is a valid `ed' script.  *Note ed Scripts::.
+
+`-E'
+`--ignore-tab-expansion'
+     Ignore changes due to tab expansion.  *Note White Space::.
+
+`-f'
+`--forward-ed'
+     Make output that looks vaguely like an `ed' script but has changes
+     in the order they appear in the file.  *Note Forward ed::.
+
+`-F REGEXP'
+`--show-function-line=REGEXP'
+     In context and unified format, for each hunk of differences, show
+     some of the last preceding line that matches REGEXP.  *Note
+     Specified Headings::.
+
+`--from-file=FILE'
+     Compare FILE to each operand; FILE may be a directory.
+
+`--help'
+     Output a summary of usage and then exit.
+
+`--horizon-lines=LINES'
+     Do not discard the last LINES lines of the common prefix and the
+     first LINES lines of the common suffix.  *Note diff Performance::.
+
+`-i'
+`--ignore-case'
+     Ignore changes in case; consider upper- and lower-case letters
+     equivalent.  *Note Case Folding::.
+
+`-I REGEXP'
+`--ignore-matching-lines=REGEXP'
+     Ignore changes that just insert or delete lines that match REGEXP.
+     *Note Specified Lines::.
+
+`--ignore-file-name-case'
+     Ignore case when comparing file names during recursive comparison.
+     *Note Comparing Directories::.
+
+`-l'
+`--paginate'
+     Pass the output through `pr' to paginate it.  *Note Pagination::.
+
+`--label=LABEL'
+     Use LABEL instead of the file name in the context format (*note
+     Context Format::) and unified format (*note Unified Format::)
+     headers.  *Note RCS::.
+
+`--left-column'
+     Print only the left column of two common lines in side by side
+     format.  *Note Side by Side Format::.
+
+`--line-format=FORMAT'
+     Use FORMAT to output all input lines in if-then-else format.
+     *Note Line Formats::.
+
+`-n'
+`--rcs'
+     Output RCS-format diffs; like `-f' except that each command
+     specifies the number of lines affected.  *Note RCS::.
+
+`-N'
+`--new-file'
+     In directory comparison, if a file is found in only one directory,
+     treat it as present but empty in the other directory.  *Note
+     Comparing Directories::.
+
+`--new-group-format=FORMAT'
+     Use FORMAT to output a group of lines taken from just the second
+     file in if-then-else format.  *Note Line Group Formats::.
+
+`--new-line-format=FORMAT'
+     Use FORMAT to output a line taken from just the second file in
+     if-then-else format.  *Note Line Formats::.
+
+`--old-group-format=FORMAT'
+     Use FORMAT to output a group of lines taken from just the first
+     file in if-then-else format.  *Note Line Group Formats::.
+
+`--old-line-format=FORMAT'
+     Use FORMAT to output a line taken from just the first file in
+     if-then-else format.  *Note Line Formats::.
+
+`-p'
+`--show-c-function'
+     Show which C function each change is in.  *Note C Function
+     Headings::.
+
+`-q'
+`--brief'
+     Report only whether the files differ, not the details of the
+     differences.  *Note Brief::.
+
+`-r'
+`--recursive'
+     When comparing directories, recursively compare any subdirectories
+     found.  *Note Comparing Directories::.
+
+`-s'
+`--report-identical-files'
+     Report when two files are the same.  *Note Comparing Directories::.
+
+`-S FILE'
+`--starting-file=FILE'
+     When comparing directories, start with the file FILE.  This is
+     used for resuming an aborted comparison.  *Note Comparing
+     Directories::.
+
+`--speed-large-files'
+     Use heuristics to speed handling of large files that have numerous
+     scattered small changes.  *Note diff Performance::.
+
+`--strip-trailing-cr'
+     Strip any trailing carriage return at the end of an input line.
+     *Note Binary::.
+
+`--suppress-common-lines'
+     Do not print common lines in side by side format.  *Note Side by
+     Side Format::.
+
+`-t'
+`--expand-tabs'
+     Expand tabs to spaces in the output, to preserve the alignment of
+     tabs in the input files.  *Note Tabs::.
+
+`-T'
+`--initial-tab'
+     Output a tab rather than a space before the text of a line in
+     normal or context format.  This causes the alignment of tabs in
+     the line to look normal.  *Note Tabs::.
+
+`--tabsize=COLUMNS'
+     Assume that tab stops are set every COLUMNS (default 8) print
+     columns.  *Note Tabs::.
+
+`--to-file=FILE'
+     Compare each operand to FILE; FILE may be a directory.
+
+`-u'
+     Use the unified output format, showing three lines of context.
+     *Note Unified Format::.
+
+`--unchanged-group-format=FORMAT'
+     Use FORMAT to output a group of common lines taken from both files
+     in if-then-else format.  *Note Line Group Formats::.
+
+`--unchanged-line-format=FORMAT'
+     Use FORMAT to output a line common to both files in if-then-else
+     format.  *Note Line Formats::.
+
+`--unidirectional-new-file'
+     When comparing directories, if a file appears only in the second
+     directory of the two, treat it as present but empty in the other.
+     *Note Comparing Directories::.
+
+`-U LINES'
+`--unified[=LINES]'
+     Use the unified output format, showing LINES (an integer) lines of
+     context, or three if LINES is not given.  *Note Unified Format::.
+     For proper operation, `patch' typically needs at least two lines of
+     context.
+
+     On older systems, `diff' supports an obsolete option `-LINES' that
+     has effect when combined with `-u'.  POSIX 1003.1-2001 (*note
+     Standards conformance::) does not allow this; use `-U LINES'
+     instead.
+
+`-v'
+`--version'
+     Output version information and then exit.
+
+`-w'
+`--ignore-all-space'
+     Ignore white space when comparing lines.  *Note White Space::.
+
+`-W COLUMNS'
+`--width=COLUMNS'
+     Output at most COLUMNS (default 130) print columns per line in
+     side by side format.  *Note Side by Side Format::.
+
+`-x PATTERN'
+`--exclude=PATTERN'
+     When comparing directories, ignore files and subdirectories whose
+     basenames match PATTERN.  *Note Comparing Directories::.
+
+`-X FILE'
+`--exclude-from=FILE'
+     When comparing directories, ignore files and subdirectories whose
+     basenames match any pattern contained in FILE.  *Note Comparing
+     Directories::.
+
+`-y'
+`--side-by-side'
+     Use the side by side output format.  *Note Side by Side Format::.
+
+\1f
+File: diff.info,  Node: Invoking diff3,  Next: Invoking patch,  Prev: Invoking diff,  Up: Top
+
+14 Invoking `diff3'
+*******************
+
+The `diff3' command compares three files and outputs descriptions of
+their differences.  Its arguments are as follows:
+
+     diff3 OPTIONS... MINE OLDER YOURS
+
+   The files to compare are MINE, OLDER, and YOURS.  At most one of
+these three file names may be `-', which tells `diff3' to read the
+standard input for that file.
+
+   An exit status of 0 means `diff3' was successful, 1 means some
+conflicts were found, and 2 means trouble.
+
+* Menu:
+
+* diff3 Options:: Summary of options to `diff3'.
+
+\1f
+File: diff.info,  Node: diff3 Options,  Up: Invoking diff3
+
+14.1 Options to `diff3'
+=======================
+
+Below is a summary of all of the options that GNU `diff3' accepts.
+Multiple single letter options (unless they take an argument) can be
+combined into a single command line argument.
+
+`-a'
+`--text'
+     Treat all files as text and compare them line-by-line, even if they
+     do not appear to be text.  *Note Binary::.
+
+`-A'
+`--show-all'
+     Incorporate all unmerged changes from OLDER to YOURS into MINE,
+     surrounding conflicts with bracket lines.  *Note Marking
+     Conflicts::.
+
+`--diff-program=PROGRAM'
+     Use the compatible comparison program PROGRAM to compare files
+     instead of `diff'.
+
+`-e'
+`--ed'
+     Generate an `ed' script that incorporates all the changes from
+     OLDER to YOURS into MINE.  *Note Which Changes::.
+
+`-E'
+`--show-overlap'
+     Like `-e', except bracket lines from overlapping changes' first
+     and third files.  *Note Marking Conflicts::.  With `-E', an
+     overlapping change looks like this:
+
+          <<<<<<< MINE
+          lines from MINE
+          =======
+          lines from YOURS
+          >>>>>>> YOURS
+
+`--help'
+     Output a summary of usage and then exit.
+
+`-i'
+     Generate `w' and `q' commands at the end of the `ed' script for
+     System V compatibility.  This option must be combined with one of
+     the `-AeExX3' options, and may not be combined with `-m'.  *Note
+     Saving the Changed File::.
+
+`--label=LABEL'
+     Use the label LABEL for the brackets output by the `-A', `-E' and
+     `-X' options.  This option may be given up to three times, one for
+     each input file.  The default labels are the names of the input
+     files.  Thus `diff3 --label X --label Y --label Z -m A B C' acts
+     like `diff3 -m 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'.  *Note Marking Conflicts::.
+
+`-m'
+`--merge'
+     Apply the edit script to the first file and send the result to
+     standard output.  Unlike piping the output from `diff3' to `ed',
+     this works even for binary files and incomplete lines.  `-A' is
+     assumed if no edit script option is specified.  *Note Bypassing
+     ed::.
+
+`--strip-trailing-cr'
+     Strip any trailing carriage return at the end of an input line.
+     *Note Binary::.
+
+`-T'
+`--initial-tab'
+     Output a tab rather than two spaces before the text of a line in
+     normal format.  This causes the alignment of tabs in the line to
+     look normal.  *Note Tabs::.
+
+`-v'
+`--version'
+     Output version information and then exit.
+
+`-x'
+`--overlap-only'
+     Like `-e', except output only the overlapping changes.  *Note
+     Which Changes::.
+
+`-X'
+     Like `-E', except output only the overlapping changes.  In other
+     words, like `-x', except bracket changes as in `-E'.  *Note
+     Marking Conflicts::.
+
+`-3'
+`--easy-only'
+     Like `-e', except output only the nonoverlapping changes.  *Note
+     Which Changes::.
+
+\1f
+File: diff.info,  Node: Invoking patch,  Next: Invoking sdiff,  Prev: Invoking diff3,  Up: Top
+
+15 Invoking `patch'
+*******************
+
+Normally `patch' is invoked like this:
+
+     patch <PATCHFILE
+
+   The full format for invoking `patch' is:
+
+     patch OPTIONS... [ORIGFILE [PATCHFILE]]
+
+   You can also specify where to read the patch from with the `-i
+PATCHFILE' or `--input=PATCHFILE' option.  If you do not specify
+PATCHFILE, or if PATCHFILE is `-', `patch' reads the patch (that is,
+the `diff' output) from the standard input.
+
+   If you do not specify an input file on the command line, `patch'
+tries to intuit from the "leading text" (any text in the patch that
+comes before the `diff' output) which file to edit.  *Note Multiple
+Patches::.
+
+   By default, `patch' replaces the original input file with the
+patched version, possibly after renaming the original file into a
+backup file (*note Backup Names::, for a description of how `patch'
+names backup files).  You can also specify where to put the output with
+the `-o FILE' or `--output=FILE' option; however, do not use this option
+if FILE is one of the input files.
+
+* Menu:
+
+* patch Options::     Summary table of options to `patch'.
+
+\1f
+File: diff.info,  Node: patch Options,  Up: Invoking patch
+
+15.1 Options to `patch'
+=======================
+
+Here is a summary of all of the options that GNU `patch' accepts.
+*Note patch and Tradition::, for which of these options are safe to use
+in older versions of `patch'.
+
+   Multiple single-letter options that do not take an argument can be
+combined into a single command line argument with only one dash.
+
+`-b'
+`--backup'
+     Back up the original contents of each file, even if backups would
+     normally not be made.  *Note Backups::.
+
+`-B PREFIX'
+`--prefix=PREFIX'
+     Prepend PREFIX to backup file names.  *Note Backup Names::.
+
+`--backup-if-mismatch'
+     Back up the original contents of each file if the patch does not
+     exactly match the file.  This is the default behavior when not
+     conforming to POSIX.  *Note Backups::.
+
+`--binary'
+     Read and write all files in binary mode, except for standard output
+     and `/dev/tty'.  This option has no effect on POSIX-conforming
+     systems like GNU/Linux.  On systems where this option makes a
+     difference, the patch should be generated by `diff -a --binary'.
+     *Note Binary::.
+
+`-c'
+`--context'
+     Interpret the patch file as a context diff.  *Note patch Input::.
+
+`-d DIRECTORY'
+`--directory=DIRECTORY'
+     Make directory DIRECTORY the current directory for interpreting
+     both file names in the patch file, and file names given as
+     arguments to other options.  *Note patch Directories::.
+
+`-D NAME'
+`--ifdef=NAME'
+     Make merged if-then-else output using NAME.  *Note If-then-else::.
+
+`--dry-run'
+     Print the results of applying the patches without actually changing
+     any files.  *Note Dry Runs::.
+
+`-e'
+`--ed'
+     Interpret the patch file as an `ed' script.  *Note patch Input::.
+
+`-E'
+`--remove-empty-files'
+     Remove output files that are empty after the patches have been
+     applied.  *Note Creating and Removing::.
+
+`-f'
+`--force'
+     Assume that the user knows exactly what he or she is doing, and do
+     not ask any questions.  *Note patch Messages::.
+
+`-F LINES'
+`--fuzz=LINES'
+     Set the maximum fuzz factor to LINES.  *Note Inexact::.
+
+`-g NUM'
+`--get=NUM'
+     If NUM is positive, get input files from a revision control system
+     as necessary; if zero, do not get the files; if negative, ask the
+     user whether to get the files.  *Note Revision Control::.
+
+`--help'
+     Output a summary of usage and then exit.
+
+`-i PATCHFILE'
+`--input=PATCHFILE'
+     Read the patch from PATCHFILE rather than from standard input.
+     *Note patch Options::.
+
+`-l'
+`--ignore-white-space'
+     Let any sequence of blanks (spaces or tabs) in the patch file match
+     any sequence of blanks in the input file.  *Note Changed White
+     Space::.
+
+`-n'
+`--normal'
+     Interpret the patch file as a normal diff.  *Note patch Input::.
+
+`-N'
+`--forward'
+     Ignore patches that `patch' thinks are reversed or already applied.
+     See also `-R'.  *Note Reversed Patches::.
+
+`--no-backup-if-mismatch'
+     Do not back up the original contents of files.  This is the default
+     behavior when conforming to POSIX.  *Note Backups::.
+
+`-o FILE'
+`--output=FILE'
+     Use FILE as the output file name.  *Note patch Options::.
+
+`-pNUMBER'
+`--strip=NUMBER'
+     Set the file name strip count to NUMBER.  *Note patch
+     Directories::.
+
+`--posix'
+     Conform to POSIX, as if the `POSIXLY_CORRECT' environment variable
+     had been set.  *Note patch and POSIX::.
+
+`--quoting-style=WORD'
+     Use style WORD to quote names in diagnostics, as if the
+     `QUOTING_STYLE' environment variable had been set to WORD.  *Note
+     patch Quoting Style::.
+
+`-r REJECT-FILE'
+`--reject-file=REJECT-FILE'
+     Use REJECT-FILE as the reject file name.  *Note Reject Names::.
+
+`-R'
+`--reverse'
+     Assume that this patch was created with the old and new files
+     swapped.  *Note Reversed Patches::.
+
+`-s'
+`--quiet'
+`--silent'
+     Work silently unless an error occurs.  *Note patch Messages::.
+
+`-t'
+`--batch'
+     Do not ask any questions.  *Note patch Messages::.
+
+`-T'
+`--set-time'
+     Set the modification and access times of patched files from time
+     stamps given in context diff headers, assuming that the context
+     diff headers use local time.  *Note Patching Time Stamps::.
+
+`-u'
+`--unified'
+     Interpret the patch file as a unified diff.  *Note patch Input::.
+
+`-v'
+`--version'
+     Output version information and then exit.
+
+`-V BACKUP-STYLE'
+`--version=control=BACKUP-STYLE'
+     Select the naming convention for backup file names.  *Note Backup
+     Names::.
+
+`--verbose'
+     Print more diagnostics than usual.  *Note patch Messages::.
+
+`-x NUMBER'
+`--debug=NUMBER'
+     Set internal debugging flags.  Of interest only to `patch'
+     patchers.
+
+`-Y PREFIX'
+`--basename-prefix=PREFIX'
+     Prepend PREFIX to base names of backup files.  *Note Backup
+     Names::.
+
+`-z SUFFIX'
+`--suffix=SUFFIX'
+     Use SUFFIX as the backup extension instead of `.orig' or `~'.
+     *Note Backup Names::.
+
+`-Z'
+`--set-utc'
+     Set the modification and access times of patched files from time
+     stamps given in context diff headers, assuming that the context
+     diff headers use UTC.  *Note Patching Time Stamps::.
+
+
+\1f
+File: diff.info,  Node: Invoking sdiff,  Next: Standards conformance,  Prev: Invoking patch,  Up: Top
+
+16 Invoking `sdiff'
+*******************
+
+The `sdiff' command merges two files and interactively outputs the
+results.  Its arguments are as follows:
+
+     sdiff -o OUTFILE OPTIONS... FROM-FILE TO-FILE
+
+   This merges FROM-FILE with TO-FILE, with output to OUTFILE.  If
+FROM-FILE is a directory and TO-FILE is not, `sdiff' compares the file
+in FROM-FILE whose file name is that of TO-FILE, and vice versa.
+FROM-FILE and TO-FILE may not both be directories.
+
+   `sdiff' options begin with `-', so normally FROM-FILE and TO-FILE
+may not begin with `-'.  However, `--' as an argument by itself treats
+the remaining arguments as file names even if they begin with `-'.  You
+may not use `-' as an input file.
+
+   `sdiff' without `-o' (or `--output') produces a side-by-side
+difference.  This usage is obsolete; use the `-y' or `--side-by-side'
+option of `diff' instead.
+
+   An exit status of 0 means no differences were found, 1 means some
+differences were found, and 2 means trouble.
+
+* Menu:
+
+* sdiff Options:: Summary of options to `diff'.
+
+\1f
+File: diff.info,  Node: sdiff Options,  Up: Invoking sdiff
+
+16.1 Options to `sdiff'
+=======================
+
+Below is a summary of all of the options that GNU `sdiff' accepts.
+Each option has two equivalent names, one of which is a single letter
+preceded by `-', and the other of which is a long name preceded by
+`--'.  Multiple single letter options (unless they take an argument)
+can be combined into a single command line argument.  Long named
+options can be abbreviated to any unique prefix of their name.
+
+`-a'
+`--text'
+     Treat all files as text and compare them line-by-line, even if they
+     do not appear to be text.  *Note Binary::.
+
+`-b'
+`--ignore-space-change'
+     Ignore changes in amount of white space.  *Note White Space::.
+
+`-B'
+`--ignore-blank-lines'
+     Ignore changes that just insert or delete blank lines.  *Note
+     Blank Lines::.
+
+`-d'
+`--minimal'
+     Change the algorithm to perhaps find a smaller set of changes.
+     This makes `sdiff' slower (sometimes much slower).  *Note diff
+     Performance::.
+
+`--diff-program=PROGRAM'
+     Use the compatible comparison program PROGRAM to compare files
+     instead of `diff'.
+
+`-E'
+`--ignore-tab-expansion'
+     Ignore changes due to tab expansion.  *Note White Space::.
+
+`--help'
+     Output a summary of usage and then exit.
+
+`-i'
+`--ignore-case'
+     Ignore changes in case; consider upper- and lower-case to be the
+     same.  *Note Case Folding::.
+
+`-I REGEXP'
+`--ignore-matching-lines=REGEXP'
+     Ignore changes that just insert or delete lines that match REGEXP.
+     *Note Specified Lines::.
+
+`-l'
+`--left-column'
+     Print only the left column of two common lines.  *Note Side by
+     Side Format::.
+
+`-o FILE'
+`--output=FILE'
+     Put merged output into FILE.  This option is required for merging.
+
+`-s'
+`--suppress-common-lines'
+     Do not print common lines.  *Note Side by Side Format::.
+
+`--speed-large-files'
+     Use heuristics to speed handling of large files that have numerous
+     scattered small changes.  *Note diff Performance::.
+
+`--strip-trailing-cr'
+     Strip any trailing carriage return at the end of an input line.
+     *Note Binary::.
+
+`-t'
+`--expand-tabs'
+     Expand tabs to spaces in the output, to preserve the alignment of
+     tabs in the input files.  *Note Tabs::.
+
+`--tabsize=COLUMNS'
+     Assume that tab stops are set every COLUMNS (default 8) print
+     columns.  *Note Tabs::.
+
+`-v'
+`--version'
+     Output version information and then exit.
+
+`-w COLUMNS'
+`--width=COLUMNS'
+     Output at most COLUMNS (default 130) print columns per line.
+     *Note Side by Side Format::.  Note that for historical reasons,
+     this option is `-W' in `diff', `-w' in `sdiff'.
+
+`-W'
+`--ignore-all-space'
+     Ignore white space when comparing lines.  *Note White Space::.
+     Note that for historical reasons, this option is `-w' in `diff',
+     `-W' in `sdiff'.
+
+\1f
+File: diff.info,  Node: Standards conformance,  Next: Projects,  Prev: Invoking sdiff,  Up: Top
+
+17 Standards conformance
+************************
+
+In a few cases, the GNU utilities' default behavior is incompatible
+with the POSIX standard.  To suppress these incompatibilities, define
+the `POSIXLY_CORRECT' environment variable.  Unless you are checking
+for POSIX conformance, you probably do not need to define
+`POSIXLY_CORRECT'.
+
+   Normally options and operands can appear in any order, and programs
+act as if all the options appear before any operands.  For example,
+`diff lao tzu -C 2' acts like `diff -C 2 lao tzu', since `2' is an
+option-argument of `-C'.  However, if the `POSIXLY_CORRECT' environment
+variable is set, options must appear before operands, unless otherwise
+specified for a particular command.
+
+   Newer versions of POSIX are occasionally incompatible with older
+versions.  For example, older versions of POSIX allowed the command
+`diff -c -10' to have the same meaning as `diff -C 10', but POSIX
+1003.1-2001 `diff' no longer allows digit-string options like `-10'.
+
+   The GNU utilities normally conform to the version of POSIX that is
+standard for your system.  To cause them to conform to a different
+version of POSIX, define the `_POSIX2_VERSION' environment variable to
+a value of the form YYYYMM specifying the year and month the standard
+was adopted.  Two values are currently supported for `_POSIX2_VERSION':
+`199209' stands for POSIX 1003.2-1992, and `200112' stands for POSIX
+1003.1-2001.  For example, if you are running older software that
+assumes an older version of POSIX and uses `diff -c -10', you can work
+around the compatibility problems by setting `_POSIX2_VERSION=199209'
+in your environment.
+
+\1f
+File: diff.info,  Node: Projects,  Next: Copying This Manual,  Prev: Standards conformance,  Up: Top
+
+18 Future Projects
+******************
+
+Here are some ideas for improving GNU `diff' and `patch'.  The GNU
+project has identified some improvements as potential programming
+projects for volunteers.  You can also help by reporting any bugs that
+you find.
+
+   If you are a programmer and would like to contribute something to the
+GNU project, please consider volunteering for one of these projects.
+If you are seriously contemplating work, please write to <gvc@gnu.org>
+to coordinate with other volunteers.
+
+* Menu:
+
+* Shortcomings:: Suggested projects for improvements.
+* Bugs::         Reporting bugs.
+
+\1f
+File: diff.info,  Node: Shortcomings,  Next: Bugs,  Up: Projects
+
+18.1 Suggested Projects for Improving GNU `diff' and `patch'
+============================================================
+
+One should be able to use GNU `diff' to generate a patch from any pair
+of directory trees, and given the patch and a copy of one such tree,
+use `patch' to generate a faithful copy of the other.  Unfortunately,
+some changes to directory trees cannot be expressed using current patch
+formats; also, `patch' does not handle some of the existing formats.
+These shortcomings motivate the following suggested projects.
+
+* Menu:
+
+* Internationalization:: Handling multibyte and varying-width characters.
+* Changing Structure::   Handling changes to the directory structure.
+* Special Files::        Handling symbolic links, device special files, etc.
+* Unusual File Names::   Handling file names that contain unusual characters.
+* Time Stamp Order::     Outputting diffs in time stamp order.
+* Ignoring Changes::     Ignoring certain changes while showing others.
+* Speedups::             Improving performance.
+
+\1f
+File: diff.info,  Node: Internationalization,  Next: Changing Structure,  Up: Shortcomings
+
+18.1.1 Handling Multibyte and Varying-Width Characters
+------------------------------------------------------
+
+`diff', `diff3' and `sdiff' treat each line of input as a string of
+unibyte characters.  This can mishandle multibyte characters in some
+cases.  For example, when asked to ignore spaces, `diff' does not
+properly ignore a multibyte space character.
+
+   Also, `diff' currently assumes that each byte is one column wide,
+and this assumption is incorrect in some locales, e.g., locales that
+use UTF-8 encoding.  This causes problems with the `-y' or
+`--side-by-side' option of `diff'.
+
+   These problems need to be fixed without unduly affecting the
+performance of the utilities in unibyte environments.
+
+   The IBM GNU/Linux Technology Center Internationalization Team has
+proposed patches to support internationalized `diff'
+(http://oss.software.ibm.com/developer/opensource/linux/patches/i18n/diffutils-2.7.2-i18n-0.1.patch.gz).
+Unfortunately, these patches are incomplete and are to an older version
+of `diff', so more work needs to be done in this area.
+
+\1f
+File: diff.info,  Node: Changing Structure,  Next: Special Files,  Prev: Internationalization,  Up: Shortcomings
+
+18.1.2 Handling Changes to the Directory Structure
+--------------------------------------------------
+
+`diff' and `patch' do not handle some changes to directory structure.
+For example, suppose one directory tree contains a directory named `D'
+with some subsidiary files, and another contains a file with the same
+name `D'.  `diff -r' does not output enough information for `patch' to
+transform the directory subtree into the file.
+
+   There should be a way to specify that a file has been removed without
+having to include its entire contents in the patch file.  There should
+also be a way to tell `patch' that a file was renamed, even if there is
+no way for `diff' to generate such information.  There should be a way
+to tell `patch' that a file's time stamp has changed, even if its
+contents have not changed.
+
+   These problems can be fixed by extending the `diff' output format to
+represent changes in directory structure, and extending `patch' to
+understand these extensions.
+
+\1f
+File: diff.info,  Node: Special Files,  Next: Unusual File Names,  Prev: Changing Structure,  Up: Shortcomings
+
+18.1.3 Files that are Neither Directories Nor Regular Files
+-----------------------------------------------------------
+
+Some files are neither directories nor regular files: they are unusual
+files like symbolic links, device special files, named pipes, and
+sockets.  Currently, `diff' treats symbolic links as if they were the
+pointed-to files, except that a recursive `diff' reports an error if it
+detects infinite loops of symbolic links (e.g., symbolic links to
+`..').  `diff' treats other special files like regular files if they
+are specified at the top level, but simply reports their presence when
+comparing directories.  This means that `patch' cannot represent
+changes to such files.  For example, if you change which file a
+symbolic link points to, `diff' outputs the difference between the two
+files, instead of the change to the symbolic link.
+
+   `diff' should optionally report changes to special files specially,
+and `patch' should be extended to understand these extensions.
+
+\1f
+File: diff.info,  Node: Unusual File Names,  Next: Time Stamp Order,  Prev: Special Files,  Up: Shortcomings
+
+18.1.4 File Names that Contain Unusual Characters
+-------------------------------------------------
+
+When a file name contains an unusual character like a newline or white
+space, `diff -r' generates a patch that `patch' cannot parse.  The
+problem is with format of `diff' output, not just with `patch', because
+with odd enough file names one can cause `diff' to generate a patch
+that is syntactically correct but patches the wrong files.  The format
+of `diff' output should be extended to handle all possible file names.
+
+\1f
+File: diff.info,  Node: Time Stamp Order,  Next: Ignoring Changes,  Prev: Unusual File Names,  Up: Shortcomings
+
+18.1.5 Outputting Diffs in Time Stamp Order
+-------------------------------------------
+
+Applying `patch' to a multiple-file diff can result in files whose time
+stamps are out of order.  GNU `patch' has options to restore the time
+stamps of the updated files (*note Patching Time Stamps::), but
+sometimes it is useful to generate a patch that works even if the
+recipient does not have GNU patch, or does not use these options.  One
+way to do this would be to implement a `diff' option to output diffs in
+time stamp order.
+
+\1f
+File: diff.info,  Node: Ignoring Changes,  Next: Speedups,  Prev: Time Stamp Order,  Up: Shortcomings
+
+18.1.6 Ignoring Certain Changes
+-------------------------------
+
+It would be nice to have a feature for specifying two strings, one in
+FROM-FILE and one in TO-FILE, which should be considered to match.
+Thus, if the two strings are `foo' and `bar', then if two lines differ
+only in that `foo' in file 1 corresponds to `bar' in file 2, the lines
+are treated as identical.
+
+   It is not clear how general this feature can or should be, or what
+syntax should be used for it.
+
+   A partial substitute is to filter one or both files before comparing,
+e.g.:
+
+     sed 's/foo/bar/g' file1 | diff - file2
+
+   However, this outputs the filtered text, not the original.
+
+\1f
+File: diff.info,  Node: Speedups,  Prev: Ignoring Changes,  Up: Shortcomings
+
+18.1.7 Improving Performance
+----------------------------
+
+When comparing two large directory structures, one of which was
+originally copied from the other with time stamps preserved (e.g., with
+`cp -pR'), it would greatly improve performance if an option told
+`diff' to assume that two files with the same size and time stamps have
+the same content.  *Note diff Performance::.
+
+\1f
+File: diff.info,  Node: Bugs,  Prev: Shortcomings,  Up: Projects
+
+18.2 Reporting Bugs
+===================
+
+If you think you have found a bug in GNU `cmp', `diff', `diff3', or
+`sdiff', please report it by electronic mail to the GNU utilities bug
+report mailing list
+(http://mail.gnu.org/mailman/listinfo/bug-gnu-utils)
+<bug-gnu-utils@gnu.org>.  Please send bug reports for GNU `patch' to
+<bug-patch@gnu.org>.  Send as precise a description of the problem as
+you can, including the output of the `--version' option and sample
+input files that produce the bug, if applicable.  If you have a
+nontrivial fix for the bug, please send it as well.  If you have a
+patch, please send it too.  It may simplify the maintainer's job if the
+patch is relative to a recent test release, which you can find in the
+directory `ftp://alpha.gnu.org/gnu/diffutils/'.
+
+\1f
+File: diff.info,  Node: Copying This Manual,  Next: Translations,  Prev: Projects,  Up: Top
+
+Appendix A Copying This Manual
+******************************
+
+* Menu:
+
+* GNU Free Documentation License::  License for copying this manual.
+
+\1f
+File: diff.info,  Node: GNU Free Documentation License,  Up: Copying This Manual
+
+A.1 GNU Free Documentation License
+==================================
+
+                      Version 1.2, November 2002
+
+     Copyright (C) 2000,2001,2002 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.
+
+  0. PREAMBLE
+
+     The purpose of this License is to make a manual, textbook, or other
+     functional and useful document "free" in the sense of freedom: to
+     assure everyone the effective freedom to copy and redistribute it,
+     with or without modifying it, either commercially or
+     noncommercially.  Secondarily, this License preserves for the
+     author and publisher a way to get credit for their work, while not
+     being considered responsible for modifications made by others.
+
+     This License is a kind of "copyleft", which means that derivative
+     works of the document must themselves be free in the same sense.
+     It complements the GNU General Public License, which is a copyleft
+     license designed for free software.
+
+     We have designed this License in order to use it for manuals for
+     free software, because free software needs free documentation: a
+     free program should come with manuals providing the same freedoms
+     that the software does.  But this License is not limited to
+     software manuals; it can be used for any textual work, regardless
+     of subject matter or whether it is published as a printed book.
+     We recommend this License principally for works whose purpose is
+     instruction or reference.
+
+  1. APPLICABILITY AND DEFINITIONS
+
+     This License applies to any manual or other work, in any medium,
+     that contains a notice placed by the copyright holder saying it
+     can be distributed under the terms of this License.  Such a notice
+     grants a world-wide, royalty-free license, unlimited in duration,
+     to use that work under the conditions stated herein.  The
+     "Document", below, refers to any such manual or work.  Any member
+     of the public is a licensee, and is addressed as "you".  You
+     accept the license if you copy, modify or distribute the work in a
+     way requiring permission under copyright law.
+
+     A "Modified Version" of the Document means any work containing the
+     Document or a portion of it, either copied verbatim, or with
+     modifications and/or translated into another language.
+
+     A "Seconda