]> git.wh0rd.org Git - nano.git/commitdiff
Initial revision
authorChris Allegretta <chrisa@asty.org>
Tue, 6 Jun 2000 05:53:49 +0000 (05:53 +0000)
committerChris Allegretta <chrisa@asty.org>
Tue, 6 Jun 2000 05:53:49 +0000 (05:53 +0000)
git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@2 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

66 files changed:
ABOUT-NLS [new file with mode: 0644]
AUTHORS [new file with mode: 0644]
BUGS [new file with mode: 0644]
COPYING [new file with mode: 0644]
ChangeLog [new file with mode: 0644]
INSTALL [new file with mode: 0644]
Makefile.am [new file with mode: 0644]
Makefile.in [new file with mode: 0644]
NEWS [new file with mode: 0644]
README [new file with mode: 0644]
TODO [new file with mode: 0644]
acconfig.h [new file with mode: 0644]
aclocal.m4 [new file with mode: 0644]
config.h.in [new file with mode: 0644]
configure [new file with mode: 0755]
configure.in [new file with mode: 0644]
cut.c [new file with mode: 0644]
global.c [new file with mode: 0644]
install-sh [new file with mode: 0755]
intl/ChangeLog [new file with mode: 0644]
intl/Makefile.in [new file with mode: 0644]
intl/VERSION [new file with mode: 0644]
intl/bindtextdom.c [new file with mode: 0644]
intl/cat-compat.c [new file with mode: 0644]
intl/dcgettext.c [new file with mode: 0644]
intl/dgettext.c [new file with mode: 0644]
intl/explodename.c [new file with mode: 0644]
intl/finddomain.c [new file with mode: 0644]
intl/gettext.c [new file with mode: 0644]
intl/gettext.h [new file with mode: 0644]
intl/gettextP.h [new file with mode: 0644]
intl/hash-string.h [new file with mode: 0644]
intl/intl-compat.c [new file with mode: 0644]
intl/l10nflist.c [new file with mode: 0644]
intl/libgettext.h [new file with mode: 0644]
intl/linux-msg.sed [new file with mode: 0644]
intl/loadinfo.h [new file with mode: 0644]
intl/loadmsgcat.c [new file with mode: 0644]
intl/localealias.c [new file with mode: 0644]
intl/po2tbl.sed.in [new file with mode: 0644]
intl/textdomain.c [new file with mode: 0644]
intl/xopen-msg.sed [new file with mode: 0644]
missing [new file with mode: 0755]
mkinstalldirs [new file with mode: 0755]
nano.1 [new file with mode: 0644]
nano.1.html [new file with mode: 0644]
nano.c [new file with mode: 0644]
nano.h [new file with mode: 0644]
po/ChangeLog [new file with mode: 0644]
po/Makefile.in.in [new file with mode: 0644]
po/POTFILES.in [new file with mode: 0644]
po/cat-id-tbl.c [new file with mode: 0644]
po/de.gmo [new file with mode: 0644]
po/de.po [new file with mode: 0644]
po/es.gmo [new file with mode: 0644]
po/es.po [new file with mode: 0644]
po/fr.gmo [new file with mode: 0644]
po/fr.po [new file with mode: 0644]
po/it.gmo [new file with mode: 0644]
po/it.po [new file with mode: 0644]
po/nano.pot [new file with mode: 0644]
po/stamp-cat-id [new file with mode: 0644]
proto.h [new file with mode: 0644]
stamp-h.in [new file with mode: 0644]
utils.c [new file with mode: 0644]
winio.c [new file with mode: 0644]

diff --git a/ABOUT-NLS b/ABOUT-NLS
new file mode 100644 (file)
index 0000000..28d38c7
--- /dev/null
+++ b/ABOUT-NLS
@@ -0,0 +1,226 @@
+Notes on the Free Translation Project
+*************************************
+
+   Free software is going international!  The Free Translation Project
+is a way to get maintainers of free software, translators, and users all
+together, so that will gradually become able to speak many languages.
+A few packages already provide translations for their messages.
+
+   If you found this `ABOUT-NLS' file inside a distribution, you may
+assume that the distributed package does use GNU `gettext' internally,
+itself available at your nearest GNU archive site.  But you do *not*
+need to install GNU `gettext' prior to configuring, installing or using
+this package with messages translated.
+
+   Installers will find here some useful hints.  These notes also
+explain how users should proceed for getting the programs to use the
+available translations.  They tell how people wanting to contribute and
+work at translations should contact the appropriate team.
+
+   When reporting bugs in the `intl/' directory or bugs which may be
+related to internationalization, you should tell about the version of
+`gettext' which is used.  The information can be found in the
+`intl/VERSION' file, in internationalized packages.
+
+One advise in advance
+=====================
+
+   If you want to exploit the full power of internationalization, you
+should configure it using
+
+     ./configure --with-included-gettext
+
+to force usage of internationalizing routines provided within this
+package, despite the existence of internationalizing capabilities in the
+operating system where this package is being installed.  So far, only
+the `gettext' implementation in the GNU C library version 2 provides as
+many features (such as locale alias or message inheritance) as the
+implementation here.  It is also not possible to offer this additional
+functionality on top of a `catgets' implementation.  Future versions of
+GNU `gettext' will very likely convey even more functionality.  So it
+might be a good idea to change to GNU `gettext' as soon as possible.
+
+   So you need not provide this option if you are using GNU libc 2 or
+you have installed a recent copy of the GNU gettext package with the
+included `libintl'.
+
+INSTALL Matters
+===============
+
+   Some packages are "localizable" when properly installed; the
+programs they contain can be made to speak your own native language.
+Most such packages use GNU `gettext'.  Other packages have their own
+ways to internationalization, predating GNU `gettext'.
+
+   By default, this package will be installed to allow translation of
+messages.  It will automatically detect whether the system provides
+usable `catgets' (if using this is selected by the installer) or
+`gettext' functions.  If neither is available, the GNU `gettext' own
+library will be used.  This library is wholly contained within this
+package, usually in the `intl/' subdirectory, so prior installation of
+the GNU `gettext' package is *not* required.  Installers may use
+special options at configuration time for changing the default
+behaviour.  The commands:
+
+     ./configure --with-included-gettext
+     ./configure --with-catgets
+     ./configure --disable-nls
+
+will respectively bypass any pre-existing `catgets' or `gettext' to use
+the internationalizing routines provided within this package, enable
+the use of the `catgets' functions (if found on the locale system), or
+else, *totally* disable translation of messages.
+
+   When you already have GNU `gettext' installed on your system and run
+configure without an option for your new package, `configure' will
+probably detect the previously built and installed `libintl.a' file and
+will decide to use this.  This might be not what is desirable.  You
+should use the more recent version of the GNU `gettext' library.  I.e.
+if the file `intl/VERSION' shows that the library which comes with this
+package is more recent, you should use
+
+     ./configure --with-included-gettext
+
+to prevent auto-detection.
+
+   By default the configuration process will not test for the `catgets'
+function and therefore they will not be used.  The reasons are already
+given above: the emulation on top of `catgets' cannot provide all the
+extensions provided by the GNU `gettext' library.  If you nevertheless
+want to use the `catgets' functions use
+
+     ./configure --with-catgets
+
+to enable the test for `catgets' (this causes no harm if `catgets' is
+not available on your system).  If you really select this option we
+would like to hear about the reasons because we cannot think of any
+good one ourself.
+
+   Internationalized packages have usually many `po/LL.po' files, where
+LL gives an ISO 639 two-letter code identifying the language.  Unless
+translations have been forbidden at `configure' time by using the
+`--disable-nls' switch, all available translations are installed
+together with the package.  However, the environment variable `LINGUAS'
+may be set, prior to configuration, to limit the installed set.
+`LINGUAS' should then contain a space separated list of two-letter
+codes, stating which languages are allowed.
+
+Using This Package
+==================
+
+   As a user, if your language has been installed for this package, you
+only have to set the `LANG' environment variable to the appropriate
+ISO 639 `LL' two-letter code prior to using the programs in the
+package.  For example, let's suppose that you speak German.  At the
+shell prompt, merely execute `setenv LANG de' (in `csh'),
+`export LANG; LANG=de' (in `sh') or `export LANG=de' (in `bash').  This
+can be done from your `.login' or `.profile' file, once and for all.
+
+   An operating system might already offer message localization for
+many of its programs, while other programs have been installed locally
+with the full capabilities of GNU `gettext'.  Just using `gettext'
+extended syntax for `LANG' would break proper localization of already
+available operating system programs.  In this case, users should set
+both `LANGUAGE' and `LANG' variables in their environment, as programs
+using GNU `gettext' give preference to `LANGUAGE'.  For example, some
+Swedish users would rather read translations in German than English for
+when Swedish is not available.  This is easily accomplished by setting
+`LANGUAGE' to `sv:de' while leaving `LANG' to `sv'.
+
+Translating Teams
+=================
+
+   For the Free Translation Project to be a success, we need interested
+people who like their own language and write it well, and who are also
+able to synergize with other translators speaking the same language.
+Each translation team has its own mailing list, courtesy of Linux
+International.  You may reach your translation team at the address
+`LL@li.org', replacing LL by the two-letter ISO 639 code for your
+language.  Language codes are *not* the same as the country codes given
+in ISO 3166.  The following translation teams exist, as of December
+1997:
+
+     Chinese `zh', Czech `cs', Danish `da', Dutch `nl', English `en',
+     Esperanto `eo', Finnish `fi', French `fr', German `de', Hungarian
+     `hu', Irish `ga', Italian `it', Indonesian `id', Japanese `ja',
+     Korean `ko', Latin `la', Norwegian `no', Persian `fa', Polish
+     `pl', Portuguese `pt', Russian `ru', Slovenian `sl', Spanish `es',
+     Swedish `sv', and Turkish `tr'.
+
+For example, you may reach the Chinese translation team by writing to
+`zh@li.org'.
+
+   If you'd like to volunteer to *work* at translating messages, you
+should become a member of the translating team for your own language.
+The subscribing address is *not* the same as the list itself, it has
+`-request' appended.  For example, speakers of Swedish can send a
+message to `sv-request@li.org', having this message body:
+
+     subscribe
+
+   Keep in mind that team members are expected to participate
+*actively* in translations, or at solving translational difficulties,
+rather than merely lurking around.  If your team does not exist yet and
+you want to start one, or if you are unsure about what to do or how to
+get started, please write to `translation@iro.umontreal.ca' to reach the
+coordinator for all translator teams.
+
+   The English team is special.  It works at improving and uniformizing
+the terminology in use.  Proven linguistic skill are praised more than
+programming skill, here.
+
+Available Packages
+==================
+
+   Languages are not equally supported in all packages.  The following
+matrix shows the current state of internationalization, as of December
+1997.  The matrix shows, in regard of each package, for which languages
+PO files have been submitted to translation coordination.
+
+     Ready PO files    cs da de en es fi fr it ja ko nl no pl pt ru sl sv
+                     .----------------------------------------------------.
+     bash            |       []          []          []                   |  3
+     bison           |       []          []          []                   |  3
+     clisp           |       [] [] []    []                               |  4
+     cpio            |       []    []    []       [] []    []             |  6
+     diffutils       |       []    []    []                []          [] |  5
+     enscript        |       []    [] [] []          []             []    |  6
+     fileutils       | []    []    []    []       [] []    [] []    [] [] | 10
+     findutils       |       []    []    [] []    [] []    []    []    [] |  9
+     flex            |             []    []       []                   [] |  4
+     gcal            |       []          []          []    []          [] |  5
+     gettext         |    [] []    []    []       [] [] [] [] []    [] [] | 12
+     grep            |       []    []    []       [] [] [] []    [] [] [] | 10
+     hello           |    [] []    []    []       [] [] [] [] []    [] [] | 11
+     id-utils        |       []          []                []             |  3
+     indent          |    [] []                   []       []    []       |  5
+     libc            |       []    []    []       [] []    []          [] |  7
+     m4              |       []          []    []    []          []    [] |  6
+     make            |       []    []    []       [] []    []             |  6
+     music           |                   []                []             |  2
+     ptx             |       []    []    []          [] [] [] []       [] |  8
+     recode          |    [] []    []    []          []    [] []    [] [] |  9
+     sh-utils        |       []    []    []          [] [] [] []       [] |  8
+     sharutils       | []    []    []    []          []                [] |  6
+     tar             | []    []          [] []    [] [] [] [] []    [] [] | 11
+     texinfo         | []    []          []                               |  3
+     textutils       | []    []    []    []       [] [] [] []          [] |  9
+     wdiff           | []    []    []    []          [] [] []          [] |  8
+                     `----------------------------------------------------'
+       17 languages    cs da de en es fi fr it ja ko nl no pl pt ru sl sv
+       27 packages      6  4 25  1 18  1 26  2  1 12 20  9 19  7  4  7 17  179
+
+   Some counters in the preceding matrix are higher than the number of
+visible blocks let us expect.  This is because a few extra PO files are
+used for implementing regional variants of languages, or language
+dialects.
+
+   For a PO file in the matrix above to be effective, the package to
+which it applies should also have been internationalized and
+distributed as such by its maintainer.  There might be an observable
+lag between the mere existence a PO file and its wide availability in a
+distribution.
+
+   If December 1997 seems to be old, you may fetch a more recent copy
+of this `ABOUT-NLS' file on most GNU archive sites.
+
diff --git a/AUTHORS b/AUTHORS
new file mode 100644 (file)
index 0000000..865135d
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,15 @@
+This file lists people who have made significant contribution to the nano
+editor.  Please see the ChangeLog for specific changes by author.
+-------------------------------------------------------------------------
+
+Chris Allegretta <chrisa@asty.org>
+       * Main program author and maintainer
+
+Jordi Mallach <jordi@sindominio.net>
+       * Debian package maintainer, fellow bug squasher.
+       * Internationalization support head, es.po maintainer.
+
+Adam Rogoyski <rogoyski@cs.utexas.edu>
+       * New write_file() function, read_file() optimization, mouse
+         support, resize support, nohelp (-x) option, justify function,
+         follow symlink option and bugfixes, and much more.
diff --git a/BUGS b/BUGS
new file mode 100644 (file)
index 0000000..1a9d3c0
--- /dev/null
+++ b/BUGS
@@ -0,0 +1,36 @@
+- Marked cutting sometimes leaves a newline in the file unintelligently,
+  such as when all of a line is selected but the mark doesn't proceed to
+  the new line. (8) 
+  { I know I posted this, but is it really a bug, Pico 3.5 seems to behave
+    in the same way. I must be scatterbrained or something.
+    - Rob Siemborski }
+
+- Certains are not lined up properly when there are tabs in them at 
+  certain col values. (9) [FIXED]
+- edit_refresh() and update_line() do not handle selecting text when the
+  cursor is beyond COLS (10)
+- no way to do a replace with the empty string. (11)
+- Spelling support is not elegant like pico's integration of the 'spell'
+  program.  Nano only uses ispell (for now) (12)
+- Moving to the end of a line when close to a multiple of COLS and at
+  least COLS * 2 does not make the screen jump early like it would for
+  if we were around COLS (bugs in edit_refresh, update_line) (13)
+  [FIXED, mostly]
+- When at the very bottom of the edit window, do_wrap goes berzerk and
+  puts the curor somewhere bad, subsequent keystrokes crash the program
+  (14) [FIXED, mostly]
+- Doing a replacement of a substring of the replace string (e.g. replacing
+  "ed" with "fred" causes an infinite loop. (15) [FIXED]
+- Cutting a file with marked text and both marker ends on the same line
+  causes a random segfault (16)
+- Cutting more than one line resets the KEEP_CUTBUFFER flag in 0.9.3
+  Error is in bitwise assignment (nano.h). (17) [FIXED]
+- The wrapping code does not work right for lines like the following:
+ *                                                                     *
+  Error is in do_wrap, must be rewritten (18).
+- Wrapping a line with autoindent mode sometimes causes a segfault (19).
+- Nano fails to follow symlinks, even though -l isn't being used (20).
+  [Bug in global flag init, FIXED]
+- When using --help or --version, the SIGINT character gets lost. (21) [FIXED]
+- When inserting files, the display sometimes fails to display properly
+  until a pageup/down occurs (22).
diff --git a/COPYING b/COPYING
new file mode 100644 (file)
index 0000000..60549be
--- /dev/null
+++ b/COPYING
@@ -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) 19yy  <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) 19yy 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/ChangeLog b/ChangeLog
new file mode 100644 (file)
index 0000000..784cd21
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,667 @@
+nano-0.9.10 - 06/04/2000
+- es.po:
+       - Translation updates (Jordi).
+- AUTHORS, nano.1.html, TODO, README:
+       - Documentation and email address updates (Jordi).
+- nano.c:
+  main():
+       - Moved Adam's termio code down to after getopt() and before initscr()
+         to stop people losing their SIGINT character when using args that
+         exit nano before it runs (--version, --help, etc).
+
+nano-0.9.9 - 05/31/2000
+- Makeile.am:
+       - Added proper lines for defining LOCALEDIR.
+- configure.in:
+       - Spelling fixes (Jordi Mallach)
+       - Removed CFLAGS changes for gcc, reduces portability according to
+         some, and it certainly doesn't seem to decrease exe size.
+- es.po:
+       - Spanish ranslation updates (Jordi Mallach)
+- POTFILES.in:
+       - Added global.c file, was screwing up translations (i.e. they
+         weren't getting done).
+- cut.c:
+  add_to_cutbuffer():
+       - Added totsize increment.
+       - Cut fixes and optimizations (Rob Siemborski).
+  do_uncut_text():
+       - Added totsize increment in several places.
+- nano.c:
+  headers:
+       - Removed LOCALEDIR define.
+  do_justify():
+       - Added edit_refresh() call (bug discovered by Adam).
+  page_down_center():
+       - Added call to edit_update(current) for last case.  Removed 
+         increment of current_y since it's now just wasteful.
+  do_enter():
+       - Added totsize increment.
+  renumber(), renumber_all():
+       - Removed totsize-- and totsize init in renumber_all.
+  do_mouse():
+       - Added edit_refresh() call to show hilight updates.  Removed
+         unnecessary wrefresh(edit).
+  main():
+       - Moved up locale calls so that translated --help messages would
+         actually get translated.
+  do_backspace(), do_delete():
+       - Added decrement of totsize.
+  init_help_msg():
+       - New function, initializes help text if NANO_SMALL isn't set (fixes
+         broken i18n).
+  read_file():
+       - malloc call changed to nmalloc (Rob Siemborski).
+- winio.c:
+  total_refresh():
+       - Completely rewrote function, not quite so braindamaged now.
+
+nano-0.9.8 - 05/18/2000
+- nano.c:
+  main():
+       - Added awesome code that disables the CINTR and CQUIT 
+         character (Adam Rogoyski).  Removed raw()/noraw() calls so that
+         nano gets input in 'normal' mode, which is the Right Way(tm) to
+         do it. ^S, ^Z and ^Q now work properly as a result, as well as
+         ^C.  New variable term, global bariable oldterm to save previous
+         term settings, and changes to finish() and die().
+       - Added extra #ifdefs in getopt code, so that above code and
+         flag init is run even if GETOPT_LONG is not #defined.
+       - Added memset line before sigactions. (Adam Rogoyski)
+  do_suspend():
+         Removed function, see above for why.
+- winio.c:
+  update_line(), center_cursor():
+       - Removed wrefresh(edit) from bottom of functions.  wrefresh
+         should now only be called once, at the bottom of the main()
+         loop.
+- global.c:
+   shortcut_init():
+       - Removed suspend sc_init call and suspend message because suspend is no
+         longer needed in the shortcut list to work properly.
+    
+nano-0.9.7 - 05/14/2000
+- nano.c:
+  do_home(), do_end(): 
+       - Added calls to update_line for the current line, fixes
+         lack of update (bug discovered by Alberto García).
+  main():
+       - Added SET(FOLLOW_SYMLINKS) before getopt call, fixes not 
+         following symlinks even when -l isn't set, and "no changes"
+         error when nano is called from crontab -e (Adam Rogoyski).
+- cut.c:
+  do_cut_text():
+       - Added edit_update_top to cut when mark is set, fixes lack of
+         display update (bug discovered by Ken Tyler).
+
+nano-0.9.6 - 05/08/2000
+- New Italian translation (it.po), by Daniele Medri.
+- nano.c:
+  page_up(), page_down():
+       - Added reset of placewewant to 0, as it should be.
+  do_up(), do_down():
+       - Added call to update_line() for line we move from and line we
+         move to, in order to keep the highlighting correct.
+  do_wrap():
+       - Added var chop, new code to wrap lines more like Pico, mostly.
+         THIS STILL DEFINITELY NEEDS TO BE REWRITTEN!
+- winio.c:
+  do_help():
+       - Added edit_refresh() before exit.
+  update_cursor():
+       - Removed cursor updating which really wasn't needed anyway.
+  edit_update():
+       - Removed yucky code that didn't work, this function now just
+         computes edittop and editbot and calls edit_refresh() to do the
+         rest, which removes a lot of dupliicate code..  
+  
+nano-0.9.5 - 05/01/2000
+- Removed bytes from file struct because it was computationally wasteful.
+- cut.c:
+  do_uncut_text():
+       - Added call to edit_refresh().
+- nano.c:
+  do_backspace():
+       - Added reset of editbot when deleting the last line of the file
+         (bug discovered by Adam).
+  do_char():
+       - Removed call to reset_cursor().
+  do_delete():
+       - Added similar check as to do_backspace().
+  do_enter():
+       - Added call to edit_refresh().
+  do_left(), right():
+       - Added call to update_line(), still redundant but better...
+  do_up(), do_down():
+       - Added refresh calls both for current line and line to which
+         we are moving.
+  main():
+       - Removed inefficient call to edit_refresh() after every keystroke.
+         It is now up each function to leave the screen in a good state.
+- winio.c:
+  do_cursorpos()
+       - Rewritten to not use bytes from filestruct by an incremental sum.
+  update_line(), reset_cursor():
+       - Optimized calls to xplustabs() through a single variable.
+       - update_line() now takes a new arg, an index into the string
+         for where to update the line from.  Needed for new update
+         code.
+- configure.in:
+       - Better checks for slang, allows argument to --with-slang.
+         (Albert Chin-A-Young)
+       - Removed -Iintl from CFLAGS in gcc check.
+- Makefile.am:
+       - Addition of -Iintl for gettext (Albert Chin-A-Young)
+
+nano-0.9.4 - 04/25/2000
+ - Fixed calls to no_help and changed them to the more consistent
+   ISSET(NO_HELP).  Fixed return val of no_help to be what it should (2,
+   not 1.  Code to temporarily disable NO_HELP when in the
+   help system. (Adam Rogoyski)
+- cut.c:
+  do_marked_cut(), do_cut(), do_uncut():
+       - Commented out unnecessary bits when NANO_SMALL is being used.
+- winio.c:
+  xpt(), strlenpt(), actual_x():
+       - Added check for value of data[i] & 0x80, if so do not make
+         character 2 chars wide (orig. by Chris, 0x80 check by Adam).
+  edit_refresh():
+       - New check for temp == NULL (bad thing), if so go back to the
+         previous line.  New filestruct var hold points to prev line.
+         Fixes segfault when paging down to the end of a file.
+- nano.c:
+  write_file():
+       - Added check for if file exists and is not equal to the current
+         filename, prompt for overwrite (Adam Rogoyski).
+  do_down():
+       - Removed check for current->next == NULL, now checks return value
+         of do_down before setting current_x = 0 (discovered by Adam).
+  do_justify():
+       - Fixed segfault when reaching the last line (tried to assign
+         currrent->next->data when current->next == NULL) (discovered
+         by Adam).
+- utils.c:
+       - Removed extra macro defs that are now in nano.h.
+- nano.h:
+       - Changed macro SET() to use |= instead of ^=.  Fixes bug in
+         cut code when cutting more than one line, and cutbuffer gets
+         blown away when it shouldnt.  
+
+nano-0.9.3 - 04/29/2000
+- cut.c:
+  do_marked_cut():
+       - Fixed off by one error in cut code for marked text.
+  do_cut_text():
+       - Removed check for being on the last line, part of
+         magic line code.
+  add_to_cutbuffer():
+       - Moved tmp->prev = inptr line to part where cutbuffer != NULL.
+       - Added inptr->prev = NULL for case where cutbuffer == NULL.
+- nano.c:
+  do_backspace(), do_char():  
+       - Removed "magic line" code.  It was basically causing more bugs
+         than it was helping for the sake of compatibillity.  This fixes
+         at least one known segfault condition.
+  do_enter():
+       - Added setting editbot to new node if the new node is the last
+         node in the file.
+  write_file():
+       - Changed writing file bahavior.  Now, if last line of the file
+         has any data on it, we write a newline on it, else we dont.
+- winio.c:
+  add_marked_sameline():
+       - New code that checks for whether the begin and end of the marker
+         are on different lines.  Missing previously.
+  edit_add():
+       - added some more checks for text length.  Cleaned up some mvwaddnstrs that
+         could be written more simply as waddnstrs.
+  edit_refresh():
+       - Removed check for temp == filebot, it is now treated like any other line.
+         Fixes a bug where selected text on the last line shows normally.
+  xpt():
+       - Removed an extra computation for tabs variable that was incorrect.
+  xplustabs():
+       - Since xpt now actualy works, this func is now just a wrapper for
+         xpt(current, current_x)
+- nano.1, nano.1.html:
+       - Added -l option to man pages.
+- configure.in:
+       - New option --enable-tiny, #defines NANO_SMALL in config.h.  
+         Disables call to gettext in functions and other i18n stuff in 
+         nano.c, the detailed help mode, the resize functions, and the 
+         justify code which no one ever uses.
+       - New option --with-slang.  Enables slang libraries instead of
+         ncurses, requires slcurses.h for wrapper functions. (Based
+         on patches for 0.8.7 by Glenn McGrath).
+
+nano-0.9.2 - 04/15/2000
+- This release just fixes the serious segfault problem if nano is 
+  invoked any way other than using the absolute path.  The bug was
+  in the new code for checking whether nano is invoked as pico.
+
+nano-0.9.1 - 04/14/2000
+- Added pico compatibility for ^T when in search or switch to switch
+  to the opposite function.  Added one to REPLACE_LIST_LEN and 
+  WHEREIS_LIST_LEN in nano.h, new args to sc_init_one in global.c and
+  new strings that will have to be gettex()ed.  New argument 'replacing'
+  to search_init().  Handlers in do_replace and do_search().
+- New write code, now follows symbolic links instead of replacing them
+  with the new file.  New option (-l, --nofollow) to enable the old
+  (incorrect, but secure) behavior (Adam Rogoyski).
+- nano.c:
+  do_wrap():   
+       - Fixed another bug relating to wrapping, and which would cause
+         a segfault *sigh*.
+  do_replace(): 
+       - Incremented current_x by the length of the replacement
+         text inside the main repalce loop.  Fixes bug #15.
+  add_marked_sameline():
+       - New function, handles marked text when start & end of marker is
+         on one line, also supports most marked text when cursor > COLS.
+  main():
+       - Code to check if nano is invoked as 'pico', and if so
+         automatically set pico_msgs (Robert Jones).
+
+nano-0.9.0 - 04/07/2000
+- nano.1, nano.1.html:         Updated man page with my email address and homepage.
+- winio.c:
+  reset_cursor(), update_line():       
+       - Changed update algorithm for x value to (COLS - 7) multiple when x
+         value > (COLS - 2).
+- edit_refresh():
+       - Removed inner loop code, now calls update_line() for each line
+         in question, MUCH nicer.
+- xplustabs(), xpt():
+       - Removed redundant increment of tabs when collumn no % 8 == 0.
+       - Added check for data[i] < 32, most of such bits are 2 chars wide.
+- update_line():
+       - Fixed a stupid call to strlenpt with col when we should have
+         been using actual_col.  Ugh.
+
+nano-0.8.9 - 03/22/2000
+- nano.c:
+  empty_line(), no_spaces(), justify_format(), do_justify():
+               Actually added these (screwup applying patch).
+  do_justify():        Added call to set_modified().
+
+nano-0.8.8 - 03/12/2000
+- Preliminary internationalization support.  Many many functions modified
+  to use gettext (via _() macro).  es.po file included. (Jordi Mallach)
+  New dirs po/ and intl/, changes to configure.in and Automake.am to
+  support i18n.
+- nano.c:
+  includes:    Ddded sys/param.h and limits.h. (Adam Rogoyski).
+  statics:     Changed some things that were not necessarily static 
+               (Adam Rogoyski).
+  nrealloc():  New function, similar to nmalloc().  Changed calls from
+               realloc() to nrealloc (Adam Rogoyski).
+  empty_line(), no_spaces(), justify_format(), do_justify():
+               New functions for justify function (Adam Rogoyski).
+- winio.c:
+  blank_edit():        Added wrefresh call to edit so that screen updates (like
+               on ^L) actually work.
+  xplustabs(), xpt(), strlenpt(): Fixed off-by-one buglets (Adam Rogoyski).
+
+nano-0.8.7 - 03/01/2000
+- main.c:
+  do_wrap():   Better fix for segfaults, and fix for lisnes being wrapped 
+               to a single character on one line when no good place to 
+               break the line exists, and for wrapping lines longer than COLS.
+- nano.1.html:
+               Html version of man page, now included in dist.  For
+               the benefit of nano packages in Linux distributions.
+
+nano-0.8.6 - 02/24/2000
+- gobal.c:
+  shortcut_init():
+               Added shortcuts for goto_line and do_replace when using
+               pico_msgs.  Oops.
+- nano.c:
+  statics:     Changed fill back to 0 from 71 by default (Adam Rogoyski).
+  do_wrap():   Added check for backing up past tabs, which we shouldnt do.
+               Removed check for backing up past spaces first.
+  main():      Added for loop to check for alt keys instead of hard list.
+  do_enter():  Fix for bug #14, added call to reset_cursor and messed
+               up do_char quite a bit.
+  version():   Added time and date stamp for compile on version message.
+               Added mail and web page info.
+- README:      Updated mailing list info.
+
+nano-0.8.5 - 02/18/2000
+- nano.c:
+  main():      Finally fixed tilde being input on page up/down keys in
+               certain terminal types.  Fix was input 26->91->5[34] check
+               for 126, if so make the kbinput PAGE UP/DOWN, else unget
+               the keystroke and continue.  Added #include <ioctl.h> for
+               ioctl call.
+  handle_hup():
+               Handler for hangup signal.  Belated include of patch from
+               Tim Sherwood.
+- winio.c:
+  edit_refresh():
+               Temporary fix for selecting text when temp == current.
+               edit_refresh() is now unmanagably complex, and must be
+               revamped.
+  check_statblank():
+               Added check for constupdate, makes things less choppy
+               (Adam Rogoyski)
+
+nano-0.8.4 - 02/11/2000
+- Moved global variables that were only (or mostly) used in one file into
+  its proper file as a static.  Affects cut.c, nano.c, global.c (Andy Kahn).
+- global.c:    
+  shortcut_init():
+               Removed redundant NANO_CONTROL_H from backspace shortcut,
+               added char 127 which should have been there.
+- nano.c:
+  main():      Fix for loops looping until MAIN_LEN, added -1 to stop
+               segfaults (Adam Rogoyski).
+- Makefile.am: Added all source filenames (Adam Rogoyski).
+- nano.1:      Fixed mail addressed and added mailing list address.
+- README:      Updated my email address and the nano web page.
+
+nano-0.8.3 - 02/08/2000
+- New pico mode (-p, --pico), toggles (more) compatibility with the
+  Pico messages displayed in the shortcut list.  Note that there are still
+  small differences in this mode.
+- nano.h:      New shortcut struct format, for the benefit of i18n and
+               our help menu.  Removed shortcut message macros, they are
+               now all in shortcut_init in global.c.
+- nano.c:
+  do_wrap():   Removed resetting of current_x when we are in fact
+               wrapping to the next line, fixes a bug in -i mode.
+  do_enter():
+               Rewrote the autoindent mode code to be a lot less pretty,
+               but a lot more magical.
+  main():
+               Removed case for ignoring char 126 (~).  That's kind of
+               important, we'll have to fix handling that sequence when
+               pageing up/down on a terminal some other way... Revamped
+               main switch loop in much snazzier fashion based on the
+               shortcut list.
+- winio.c:
+               New function display_main_list.  Affects all functions
+               that used to call bottombars() with main_list.  Added
+               because we now only call bottombars with the macro
+               MAIN_VISIBLE instead of MAIN_LIST_LEN, because of the
+               changes to the main_list shortcut list (see global.c below).
+               New function do_help, our preliminary dynamic help system.
+- Many many funcs:
+               Changed from int to void to allow one uniform type to call
+               from the shortcut struct.  Also a few functions that do
+               not simple have void argument have new functions called
+               funcname_void(void) to be called from the shortcut list.
+               do_cut_text and do_uncut_text were changed to void
+               arguments because they were never called with a filestruct
+               other than *current anyway.
+- global.c:
+               Shortcut list main_list was expanded to cover all
+               shortcuts that could be caught in the main loop.
+               Consequently there is a new macro MAIN_VISIBLE which tells
+               how many items in the main list to actually show.
+
+nano-0.8.2 - 02/02/2000
+- Added initial mouse (-m, --mouse) support.  New global variable
+  use_mouse. (Adam Rogoyski)
+
+- nano.c:      Set intial value of fill to COLS - 8 rather than just 72
+               regardless. (Adam Rogoyski).
+  do_delete(): 
+               Deleted call to do_backspace() when on the end of a line,
+               because it won't update the line properly.
+  do_backspace():
+               Removed unnecessary pointer manipulation that was being
+               handled by unlink_node().
+  open_file():
+               Added check for trying to open a directory (currently we
+               segfault on this).  Bug pointed out by Chad Ziccardi.
+
+nano-0.8.1 - 01/28/2000
+- Implemented Pico's -r (fill) mode, command line flag -r or --fill.  New
+  global variable fill, affects check_wrap(), do_wrap(), main(), usage(),
+  global.c and proto.h.
+- nano.c:
+write_file():          Added (incredibly) necessary check for EPERM when
+                       link() fails.  This allows us to actually save
+                       files via rename() on filesystems that dont
+                       support hard links (AIEEEEEE).
+do_goto():
+                       Fixed a stupid mistake where we were calling
+                       bottombars() with replace_list instead of goto_list.
+- nano.h:
+                       New char *help in shortcut structure for help
+                       feature. Added NANO_*_MSG and NANO_*_HELP #deifnes
+                       for help function and i18n.
+- global.c:
+                       New functions shortcut_init (called in nano.c) and
+                       sc_init_one() to initialize the shortcuts without
+                       using {}s (for i18n).
+
+nano-0.8.0 - 01/25/2000
+- View flag (-v, --view) implemented.  Global variable view_mode, affects
+  main loop of nano.c and new_file(). (me)
+- nano.c:
+                       split checks for TERMIOS_H and TERMIO_H up so we
+                       can (theoretically) include them both, which is good.
+handle_sigwinch():
+                       Added check for ncurses.h.  (Andy Kahn)
+do_spell():
+                       We now only try ispell because we don't as of yet
+                       handle the 'spell' program the right way, now that
+                       I finally know what the right way is =-).  Added
+                       call to edit_update(fileage) to stop segfaults.
+global_init():
+                       Added initialization of edit* filestruct pointers
+                       to stop segfaults on spell check.
+usage():
+                       Check for getopt_long, and if no leave out the
+                       GNU options everyone seems to love so much (Andy Kahn)
+main():
+                       Added checks for getopt_long (Andy Kahn)
+                       We ignore character 126 because it gets put into
+                       the buffer when we page up/down on a vt terminal.
+write_file():
+                       Fixes for umask (Adam Rogoyski).  Renamed tmpfile
+                       variable to tmp.  Documented the tmp opttion
+                       better in the function comments.  Fixed my 
+                       stupidly commented out check for tmp on setting
+                       umask which I really like =>
+- nano.h:
+                       Made desc variable in shortcut struct a pointer
+                       instead of a fixed-length string.
+- utils.c:
+                       Fixed check for config.h before nano.h.
+- configure.in:
+                       New checks for getopt_long, getopt.h, removed
+                       CFLAGS and LDFLAGS changes.  Gonna have to run
+                       strip manually now =-) (Andy Kahn)
+                       Added check for HAVE_WRESIZE, new file acconfig.h (me).
+
+nano-0.7.9 - 01/24/2000
+- New autoindent feature.  Command flag 'i' or '--autoindent'.  New
+  function do_char() to clean up character output, global
+  variable autoindent in global.c. (Graham Mainwaring)
+- New flag 't' or '--tempfile', like Pico's -t mode, automatically saves
+  files on exit without prompting.  Affects do_writeout().  Also
+  do_writeout() now takes a parameter for if exiting.
+  Global variable temp_opt in global.c (Graham Mainwaring)
+- Preliminary spell program support.  Added command flag '-s' or
+  '--speller' for alternative speller command.  Added function do_spell()
+  and exit_spell() to nano.c.  New global variable alt_speller.
+- nano.c:
+  main():      We now ignore input of decimal 410 because these get entered 
+               when we resize the screen.  Sorted options in getopt()
+               switch statement.
+  usage():     Sorted options and changed tabs to make room for -s option.
+  write_file():        Now takes a second parameter 'tmpfile', uses mask 0600 and
+               doesn't print the number of lines written on the statusbar.
+  global_init():
+               Added more initializations to globals to support do_spell().
+
+nano-0.7.8 - 01/23/2000
+- Stubbed justify function.  Affects main() in nano.c and nano.h defines.
+- Added Fkey equivalents for Pico compatibilty.  Affects nano.h defines
+  and main() in nano.c
+- Removed redundant reset_cursor() calls from the blank() routines.
+- nano.c:
+  main():      Fixed typo in main while loop for NANO_ALT_REPLACE_KEY.
+               Removed check for isprint() characters in main while loop
+               for people with odd character sets *shrug*.  Added some X
+               window F-key combos.
+  read_line(): New function, consolidates of most of the special
+               sections of the file reading code. (Rob Siemborski)
+  do_replace(): Many scattered fixes. (Rob Siemborski)
+  write_file():        Added check for empty filename.
+- winio.c:
+  nanogetstr():        Fixes for deleting at places other than the end of the
+               buffer, cut support. (Adam Rogoyski)
+  blank_edit():        New function, blanks edit buffer.  Added call to it in 
+               total_refresh().
+- configure:   Checks for glib if snprintf of vsnprintf aren't available
+               (Andy Kahn). Changed warning message when no termcap lib
+               is found.
+
+nano-0.7.7 - 01/19/2000
+- Option '-v' for version moved to '-V', because -v is Pico's "read only"
+  mode (affects getopt() in main() and usage() function in nano.c
+- New flag -c, always show cursor position.  Affects main() in nano.c and
+  statusbar() in winio.c
+- Option '-x' doesn't show help window at the bottom of the editor.
+  New variable no_help in nano.h and proto.h, affects main(), usage(),
+  and global_init() in nano.c, blank_bottombars(), clear_bottomwin(),
+  bottombars(), and do_yesno()  in winio.c  (I had to apply this patch by
+  hand =P) (Adam Rogoyski)
+- nano.c:
+  handle_sigwinch():   New function (Adam Rogoyski), handles resizing.
+  page_up(), page_down():      
+       - New functions.  We now set the cursor at the top right corner,
+         not at the center line, and page up and down a full screen
+         rather than a half screen. Original functions renamed to
+         page_up_center() and page_down_center().
+  main(): 
+       - Added check for keystroke key sequence 407 or NANO_CONTROL_Z
+         in main while loop because suspend mode was broken.  This should
+         fix it, at least for now.
+       - Added long option support (By popular harassment ;-) - Added
+         #include for getopt.h, changed getopt() to getopt_long().
+         Options added so far: --version (-V), --nowrap (-w), --suspend
+         (-z), --help (-h), --nohelp (-x).
+       - Rewrote signal statements (Adam Rogoyski)
+
+nano 0.7.6 - 01/15/2000
+- New ChangeLog format
+- nano.c: 
+  main():      Bound CONTROL_H to backspace (oops)
+               Added more Alt-[-key combinations, for page up & down.
+  read_bytes():        New function (Adam Rogoyski)
+  read_file(): Optimizations - malloc()s *buf a little at a time rather
+               than one huge buffer, and replaced the strcat at the end
+               with an index variable.  Added call to read_bytes().
+  do_next_word(): New function, binding is control-space (0) (me)
+
+- winio.c: 
+  bottombars():        Fixed non-expanding shortcut keys at bottom of screen.
+               (formula is extra space needed = COLS / 6 - 13).
+  actual_x() & strlenpt():     
+               Added bug#9 fix - when tabs % 8 == 0, we should only
+               increment tabs by 1.
+  titlebar():  Fixed overrun in titlebar on very long filenames.
+
+0.7.5  Pico 'last line' feature added (Rob Siemborski & me).  Eliminated
+       writing a newline at EOF. do_cursorpos and do_replace are now not
+       directly bound to signals but picked up as their control sequences
+       in raw mode. Bug fix in do_backspace. Fixed bug #9 (woohoo!)
+0.7.4  Optimized (obfuscated?) edit_refresh. Malloc() calls checked for
+       available memory, align bug fixed (Big Gaute).
+
+--- As of version 0.7.4 TIP is renamed to nano.
+
+0.7.3  Fixed a double blank_statusbar() when jumping to first and last
+       lines.  Took out unnecessary updates in load_file. Bug fix in
+       do_left. Missing updates to totlines, fixed bug #7 (last line not
+       having a newline at the end doesnt get read, bugfix in do_replace
+       with replace all, more/better comments (Robert Siemborski)
+0.7.2  Our first patch accepted into the source! configure fixes 
+       and optimizations (Erik Anderson).  Added missing stdarg.h to winio.c. 
+       Bug fix in update_line for editing long lines. Fixed arguments
+       being put into the filename when none is specified. Preliminary
+       +line command argument function.
+0.7.1  configure tweak for better FreeBSD support. Removed refresh() from
+       edit_refresh to stop cursor "jumping" during screen updates.  This
+       will probably cause a bug or two. Replace is now Alt-R (@R) and 
+       Goto line is Alt-G (@G), but they have control key aliases of ^\ and 
+       ^_ respectively.  Made Control-F,B,N,P work like they do in Pico.
+       Control-G will become the Help key, but for now is stubbed out.
+0.7.0  Fixed missing stdlib.h from cut.c. Fixed a few message bugs in
+       findnextstr. Bound Control-D to Delete. Refixed segfault on zero
+       length file. Added Esc-[-A,B,C,D cursor key sequences.
+0.6.9  Preliminary cursor position function. Split up tip.c more, made
+       new files cut.c and winio.c. Fixed a bug in cut_marked_segment
+       that was leaving out a character.
+0.6.8  By request, optchr in main() is now an int.  Removed unneeded
+       globals. Bound functions for next/prev page, and wrote functions
+       do_home and do_end.
+0.6.7  Bugfix in do_uncut_text for totlines. Broke up open_file and
+       created read_file.  Implemented Insert File. Fixes in tipgetstr
+       for erroneous keystrokes. Added leave_cursor arg to do_yesno().
+0.6.6  Fixes in do_search(), do_replace(), do_writeout, and do_exit() for 
+       aborted searches and more Pico-compatible messages. statusq() now
+       returns -2 on a blank entry instead of -1. Bug fix in actual_x().
+0.6.5  More BSD compatibility.  Fixed two bugs in do_uncut_text
+       regarding buffers with filebot in them.  Fixins in do_backspace
+       and do_enter. Removed unused variables. Removed strip_newline.
+0.6.4  Took out the awful newlines from each string buffers.  This will
+       certainly cause more bugs. Fixes in do_exit(). Better empty file
+       handling (I hope).
+0.6.3  Implemented ^E.  Removed now unneeded wrapline from filestruct.
+       do_enter() rewritten.
+0.6.2  Better default file permissions. Complete rewrite of do_wrap().
+       Better handling of editing with cursor near COLS - 1.
+0.6.1  Starting to implement wrapping toggle. Fix for unhandled control
+       codes being entered into the buffer. Bug fix in actual_x; more
+       > COLS - 1 functionality, especially on lines with TABs.  Fixed being 
+       locked into cutbuffer when cutting more than one marked screen of text.
+0.6.0  We have TABs!!!  To do this, placewewant is now set to the actual
+       width on the screen we want to be, not an index of current->data.
+       New functions xplustabs and actual_x convert the actual place
+       the cursor should be on the screen to and from the place in the
+       string.
+0.5.5  Changed do_right to test do_down before setting current_x to 0,
+       eliminiating the "looping" on the last line when holding the right
+       arrow.  Preliminary support for longer than COLS - 1 lines.
+       Wrote do_delete.
+0.5.4  Fixed a big in total_update that wasn't repainting the screen properly.
+       tipgetstr is much more messy but text is now more editable ;)
+       Fixed crash on entering a new file, hopefully. Awful stub for tab
+       handling, only in do_right() to save me some sanity.
+0.5.3  Added check for malloc.h.  Implementing uncut from marker slowly.
+       Fixed a few bugs in do_uncut when not uncutting from marked text.
+        I would not trust your data with the mark code right now, but then
+        we're not at version 1.0 yet so dont trust anything ;)
+0.5.2  Added reset_cursor() before end of update_line so cursor doesnt
+       jump after each keystroke entered. Select text stubbed. Fixed
+       a bug in total_refresh().  Setting a mark will hilight properly,
+       but does not actually affect what gets put in the cutbuffer (yet).
+0.5.1  Writing a file out causes modified to be set back to 0.  Good.
+       Set_modified function written.  Cut and uncut text now set
+       modified when called.
+0.5.0  Half way there!  Implemented write out, save function seems
+       stable.  Changed statusbar blank routing to not refresh, a separte
+       program calls it and then refreshes.  Made the program not clear
+       the srceen on exit, just the bottom two lines (like Pico).
+0.4.2  Implemented replace all in replace function.  Crude exit function
+       (asks yes or no if modified but does not write to file).
+0.4.1  Implementing search & replace.  Fixed crash on deleting at top of
+       edit buffer.  Implemented "timeout" of statusbar messages.
+       Implemented ^A and ^E (beginning and end of line).
+0.4.0  Split code into global.c and proto.h to allow for better multiple
+       file handling.  Added #defines for the majority of the shortcut
+       kets in tip.h for easy modification. 
+0.3.1  Write edit_refresh which doesn't move the screen around, just
+       updates what's there already.  do_wrap() and do_enter() added.
+0.3.0  Preliminary cutbuffer (cut and uncut) support.
+0.2.7   Check for Modification added.  do_search() works.
+0.2.5  Rewrite of file data struct.
+0.2    Read in data to buffer, bound keystrokes to stub functions, 
+       initial cursor movement on screen.  Initial autoconf support.
+0.1    Initial program setup w/ncurses
diff --git a/INSTALL b/INSTALL
new file mode 100644 (file)
index 0000000..b42a17a
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,182 @@
+Basic Installation
+==================
+
+   These are generic installation instructions.
+
+   The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation.  It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions.  Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, a file
+`config.cache' that saves the results of its tests to speed up
+reconfiguring, and a file `config.log' containing compiler output
+(useful mainly for debugging `configure').
+
+   If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release.  If at some point `config.cache'
+contains results you don't want to keep, you may remove or edit it.
+
+   The file `configure.in' is used to create `configure' by a program
+called `autoconf'.  You only need `configure.in' if you want to change
+it or regenerate `configure' using a newer version of `autoconf'.
+
+The simplest way to compile this package is:
+
+  1. `cd' to the directory containing the package's source code and type
+     `./configure' to configure the package for your system.  If you're
+     using `csh' on an old version of System V, you might need to type
+     `sh ./configure' instead to prevent `csh' from trying to execute
+     `configure' itself.
+
+     Running `configure' takes awhile.  While running, it prints some
+     messages telling which features it is checking for.
+
+  2. Type `make' to compile the package.
+
+  3. Optionally, type `make check' to run any self-tests that come with
+     the package.
+
+  4. Type `make install' to install the programs and any data files and
+     documentation.
+
+  5. You can remove the program binaries and object files from the
+     source code directory by typing `make clean'.  To also remove the
+     files that `configure' created (so you can compile the package for
+     a different kind of computer), type `make distclean'.  There is
+     also a `make maintainer-clean' target, but that is intended mainly
+     for the package's developers.  If you use it, you may have to get
+     all sorts of other programs in order to regenerate files that came
+     with the distribution.
+
+Compilers and Options
+=====================
+
+   Some systems require unusual options for compilation or linking that
+the `configure' script does not know about.  You can give `configure'
+initial values for variables by setting them in the environment.  Using
+a Bourne-compatible shell, you can do that on the command line like
+this:
+     CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
+
+Or on systems that have the `env' program, you can do it like this:
+     env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
+
+Compiling For Multiple Architectures
+====================================
+
+   You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory.  To do this, you must use a version of `make' that
+supports the `VPATH' variable, such as GNU `make'.  `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script.  `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+   If you have to use a `make' that does not supports the `VPATH'
+variable, you have to compile the package for one architecture at a time
+in the source code directory.  After you have installed the package for
+one architecture, use `make distclean' before reconfiguring for another
+architecture.
+
+Installation Names
+==================
+
+   By default, `make install' will install the package's files in
+`/usr/local/bin', `/usr/local/man', etc.  You can specify an
+installation prefix other than `/usr/local' by giving `configure' the
+option `--prefix=PATH'.
+
+   You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.  If you
+give `configure' the option `--exec-prefix=PATH', the package will use
+PATH as the prefix for installing programs and libraries.
+Documentation and other data files will still use the regular prefix.
+
+   In addition, if you use an unusual directory layout you can give
+options like `--bindir=PATH' to specify different values for particular
+kinds of files.  Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.
+
+   If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+   Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System).  The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+   For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Specifying the System Type
+==========================
+
+   There may be some features `configure' can not figure out
+automatically, but needs to determine by the type of host the package
+will run on.  Usually `configure' can figure that out, but if it prints
+a message saying it can not guess the host type, give it the
+`--host=TYPE' option.  TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name with three fields:
+     CPU-COMPANY-SYSTEM
+
+See the file `config.sub' for the possible values of each field.  If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the host type.
+
+   If you are building compiler tools for cross-compiling, you can also
+use the `--target=TYPE' option to select the type of system they will
+produce code for and the `--build=TYPE' option to select the type of
+system on which you are compiling the package.
+
+Sharing Defaults
+================
+
+   If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists.  Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Operation Controls
+==================
+
+   `configure' recognizes the following options to control how it
+operates.
+
+`--cache-file=FILE'
+     Use and save the results of the tests in FILE instead of
+     `./config.cache'.  Set FILE to `/dev/null' to disable caching, for
+     debugging `configure'.
+
+`--help'
+     Print a summary of the options to `configure', and exit.
+
+`--quiet'
+`--silent'
+`-q'
+     Do not print messages saying which checks are being made.  To
+     suppress all normal output, redirect it to `/dev/null' (any error
+     messages will still be shown).
+
+`--srcdir=DIR'
+     Look for the package's source code in directory DIR.  Usually
+     `configure' can determine that directory automatically.
+
+`--version'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
+
+`configure' also accepts some other, not widely useful, options.
diff --git a/Makefile.am b/Makefile.am
new file mode 100644 (file)
index 0000000..1e5f7d5
--- /dev/null
@@ -0,0 +1,19 @@
+bin_PROGRAMS =         nano
+nano_SOURCES = cut.c \
+               global.c \
+               nano.c \
+               nano.h \
+               proto.h \
+               utils.c \
+               winio.c 
+
+man_MANS = nano.1
+nano_LDADD = @INTLLIBS@
+
+EXTRA_DIST =   AUTHORS BUGS COPYING ChangeLog INSTALL NEWS README \
+               TODO install-sh missing mkinstalldirs nano.1 nano.1.html
+
+SUBDIRS = po intl
+
+localedir = $(datadir)/locale
+INCLUDES = -Iintl -DLOCALEDIR=\"$(localedir)\" -I@includedir@
diff --git a/Makefile.in b/Makefile.in
new file mode 100644 (file)
index 0000000..1f9429e
--- /dev/null
@@ -0,0 +1,505 @@
+# Makefile.in generated automatically by automake 1.4 from Makefile.am
+
+# Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+SHELL = @SHELL@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+
+bindir = @bindir@
+sbindir = @sbindir@
+libexecdir = @libexecdir@
+datadir = @datadir@
+sysconfdir = @sysconfdir@
+sharedstatedir = @sharedstatedir@
+localstatedir = @localstatedir@
+libdir = @libdir@
+infodir = @infodir@
+mandir = @mandir@
+includedir = @includedir@
+oldincludedir = /usr/include
+
+DESTDIR =
+
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+
+top_builddir = .
+
+ACLOCAL = @ACLOCAL@
+AUTOCONF = @AUTOCONF@
+AUTOMAKE = @AUTOMAKE@
+AUTOHEADER = @AUTOHEADER@
+
+INSTALL = @INSTALL@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS)
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+transform = @program_transform_name@
+
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CURSES_LIB = @CURSES_LIB@
+DATADIRNAME = @DATADIRNAME@
+GENCAT = @GENCAT@
+GLIB_CFLAGS = @GLIB_CFLAGS@
+GLIB_CONFIG = @GLIB_CONFIG@
+GLIB_LIBS = @GLIB_LIBS@
+GMOFILES = @GMOFILES@
+GMSGFMT = @GMSGFMT@
+GT_NO = @GT_NO@
+GT_YES = @GT_YES@
+INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@
+INSTOBJEXT = @INSTOBJEXT@
+INTLDEPS = @INTLDEPS@
+INTLLIBS = @INTLLIBS@
+INTLOBJS = @INTLOBJS@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+PACKAGE = @PACKAGE@
+POFILES = @POFILES@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+l = @l@
+
+bin_PROGRAMS = nano
+nano_SOURCES = cut.c           global.c                nano.c          nano.h          proto.h                 utils.c                 winio.c 
+
+
+man_MANS = nano.1
+nano_LDADD = @INTLLIBS@
+
+EXTRA_DIST = AUTHORS BUGS COPYING ChangeLog INSTALL NEWS README                TODO install-sh missing mkinstalldirs nano.1 nano.1.html
+
+
+SUBDIRS = po intl
+
+localedir = $(datadir)/locale
+INCLUDES = -Iintl -DLOCALEDIR=\"$(localedir)\" -I@includedir@
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES = 
+PROGRAMS =  $(bin_PROGRAMS)
+
+
+DEFS = @DEFS@ -I. -I$(srcdir) -I.
+CPPFLAGS = @CPPFLAGS@
+LDFLAGS = @LDFLAGS@
+LIBS = @LIBS@
+nano_OBJECTS =  cut.o global.o nano.o utils.o winio.o
+nano_DEPENDENCIES = 
+nano_LDFLAGS = 
+CFLAGS = @CFLAGS@
+COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@
+man1dir = $(mandir)/man1
+MANS = $(man_MANS)
+
+NROFF = nroff
+DIST_COMMON =  README ./stamp-h.in ABOUT-NLS AUTHORS COPYING ChangeLog \
+INSTALL Makefile.am Makefile.in NEWS TODO acconfig.h aclocal.m4 \
+config.h.in configure configure.in install-sh missing mkinstalldirs
+
+
+DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
+
+TAR = tar
+GZIP_ENV = --best
+SOURCES = $(nano_SOURCES)
+OBJECTS = $(nano_OBJECTS)
+
+all: all-redirect
+.SUFFIXES:
+.SUFFIXES: .S .c .o .s
+$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) 
+       cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps Makefile
+
+Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status
+       cd $(top_builddir) \
+         && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+$(ACLOCAL_M4):  configure.in 
+       cd $(srcdir) && $(ACLOCAL)
+
+config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       $(SHELL) ./config.status --recheck
+$(srcdir)/configure: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
+       cd $(srcdir) && $(AUTOCONF)
+
+config.h: stamp-h
+       @if test ! -f $@; then \
+               rm -f stamp-h; \
+               $(MAKE) stamp-h; \
+       else :; fi
+stamp-h: $(srcdir)/config.h.in $(top_builddir)/config.status
+       cd $(top_builddir) \
+         && CONFIG_FILES= CONFIG_HEADERS=config.h:config.h.in \
+            $(SHELL) ./config.status
+       @echo timestamp > stamp-h 2> /dev/null
+$(srcdir)/config.h.in: $(srcdir)/stamp-h.in
+       @if test ! -f $@; then \
+               rm -f $(srcdir)/stamp-h.in; \
+               $(MAKE) $(srcdir)/stamp-h.in; \
+       else :; fi
+$(srcdir)/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h
+       cd $(top_srcdir) && $(AUTOHEADER)
+       @echo timestamp > $(srcdir)/stamp-h.in 2> /dev/null
+
+mostlyclean-hdr:
+
+clean-hdr:
+
+distclean-hdr:
+       -rm -f config.h
+
+maintainer-clean-hdr:
+
+mostlyclean-binPROGRAMS:
+
+clean-binPROGRAMS:
+       -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+
+distclean-binPROGRAMS:
+
+maintainer-clean-binPROGRAMS:
+
+install-binPROGRAMS: $(bin_PROGRAMS)
+       @$(NORMAL_INSTALL)
+       $(mkinstalldirs) $(DESTDIR)$(bindir)
+       @list='$(bin_PROGRAMS)'; for p in $$list; do \
+         if test -f $$p; then \
+           echo "  $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \
+            $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+         else :; fi; \
+       done
+
+uninstall-binPROGRAMS:
+       @$(NORMAL_UNINSTALL)
+       list='$(bin_PROGRAMS)'; for p in $$list; do \
+         rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \
+       done
+
+.c.o:
+       $(COMPILE) -c $<
+
+.s.o:
+       $(COMPILE) -c $<
+
+.S.o:
+       $(COMPILE) -c $<
+
+mostlyclean-compile:
+       -rm -f *.o core *.core
+
+clean-compile:
+
+distclean-compile:
+       -rm -f *.tab.c
+
+maintainer-clean-compile:
+
+nano: $(nano_OBJECTS) $(nano_DEPENDENCIES)
+       @rm -f nano
+       $(LINK) $(nano_LDFLAGS) $(nano_OBJECTS) $(nano_LDADD) $(LIBS)
+
+install-man1:
+       $(mkinstalldirs) $(DESTDIR)$(man1dir)
+       @list='$(man1_MANS)'; \
+       l2='$(man_MANS)'; for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
+         else file=$$i; fi; \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst"; \
+         $(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \
+       done
+
+uninstall-man1:
+       @list='$(man1_MANS)'; \
+       l2='$(man_MANS)'; for i in $$l2; do \
+         case "$$i" in \
+           *.1*) list="$$list $$i" ;; \
+         esac; \
+       done; \
+       for i in $$list; do \
+         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+         echo " rm -f $(DESTDIR)$(man1dir)/$$inst"; \
+         rm -f $(DESTDIR)$(man1dir)/$$inst; \
+       done
+install-man: $(MANS)
+       @$(NORMAL_INSTALL)
+       $(MAKE) $(AM_MAKEFLAGS) install-man1
+uninstall-man:
+       @$(NORMAL_UNINSTALL)
+       $(MAKE) $(AM_MAKEFLAGS) uninstall-man1
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+
+@SET_MAKE@
+
+all-recursive install-data-recursive install-exec-recursive \
+installdirs-recursive install-recursive uninstall-recursive  \
+check-recursive installcheck-recursive info-recursive dvi-recursive:
+       @set fnord $(MAKEFLAGS); amf=$$2; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+          || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+       @set fnord $(MAKEFLAGS); amf=$$2; \
+       dot_seen=no; \
+       rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \
+         rev="$$subdir $$rev"; \
+         test "$$subdir" = "." && dot_seen=yes; \
+       done; \
+       test "$$dot_seen" = "no" && rev=". $$rev"; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+          || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+
+tags: TAGS
+
+ID: $(HEADERS) $(SOURCES) $(LISP)
+       list='$(SOURCES) $(HEADERS)'; \
+       unique=`for i in $$list; do echo $$i; done | \
+         awk '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       here=`pwd` && cd $(srcdir) \
+         && mkid -f$$here/ID $$unique $(LISP)
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+   if test "$$subdir" = .; then :; else \
+           test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
+   fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS)'; \
+       unique=`for i in $$list; do echo $$i; done | \
+         awk '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \
+         || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP) -o $$here/TAGS)
+
+mostlyclean-tags:
+
+clean-tags:
+
+distclean-tags:
+       -rm -f TAGS ID
+
+maintainer-clean-tags:
+
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+
+# This target untars the dist file and tries a VPATH configuration.  Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+       -rm -rf $(distdir)
+       GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz
+       mkdir $(distdir)/=build
+       mkdir $(distdir)/=inst
+       dc_install_base=`cd $(distdir)/=inst && pwd`; \
+       cd $(distdir)/=build \
+         && ../configure --with-included-gettext --srcdir=.. --prefix=$$dc_install_base \
+         && $(MAKE) $(AM_MAKEFLAGS) \
+         && $(MAKE) $(AM_MAKEFLAGS) dvi \
+         && $(MAKE) $(AM_MAKEFLAGS) check \
+         && $(MAKE) $(AM_MAKEFLAGS) install \
+         && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+         && $(MAKE) $(AM_MAKEFLAGS) dist
+       -rm -rf $(distdir)
+       @banner="$(distdir).tar.gz is ready for distribution"; \
+       dashes=`echo "$$banner" | sed s/./=/g`; \
+       echo "$$dashes"; \
+       echo "$$banner"; \
+       echo "$$dashes"
+dist: distdir
+       -chmod -R a+r $(distdir)
+       GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
+       -rm -rf $(distdir)
+dist-all: distdir
+       -chmod -R a+r $(distdir)
+       GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir)
+       -rm -rf $(distdir)
+distdir: $(DISTFILES)
+       -rm -rf $(distdir)
+       mkdir $(distdir)
+       -chmod 777 $(distdir)
+       @for file in $(DISTFILES); do \
+         d=$(srcdir); \
+         if test -d $$d/$$file; then \
+           cp -pr $$/$$file $(distdir)/$$file; \
+         else \
+           test -f $(distdir)/$$file \
+           || ln $$d/$$file $(distdir)/$$file 2> /dev/null \
+           || cp -p $$d/$$file $(distdir)/$$file || :; \
+         fi; \
+       done
+       for subdir in $(SUBDIRS); do \
+         if test "$$subdir" = .; then :; else \
+           test -d $(distdir)/$$subdir \
+           || mkdir $(distdir)/$$subdir \
+           || exit 1; \
+           chmod 777 $(distdir)/$$subdir; \
+           (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \
+             || exit 1; \
+         fi; \
+       done
+info-am:
+info: info-recursive
+dvi-am:
+dvi: dvi-recursive
+check-am: all-am
+check: check-recursive
+installcheck-am:
+installcheck: installcheck-recursive
+all-recursive-am: config.h
+       $(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+install-exec-am: install-binPROGRAMS
+install-exec: install-exec-recursive
+
+install-data-am: install-man
+install-data: install-data-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+install: install-recursive
+uninstall-am: uninstall-binPROGRAMS uninstall-man
+uninstall: uninstall-recursive
+all-am: Makefile $(PROGRAMS) $(MANS) config.h
+all-redirect: all-recursive-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install
+installdirs: installdirs-recursive
+installdirs-am:
+       $(mkinstalldirs)  $(DESTDIR)$(bindir) $(DESTDIR)$(mandir)/man1
+
+
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -rm -f Makefile $(CONFIG_CLEAN_FILES)
+       -rm -f config.cache config.log stamp-h stamp-h[0-9]*
+
+maintainer-clean-generic:
+mostlyclean-am:  mostlyclean-hdr mostlyclean-binPROGRAMS \
+               mostlyclean-compile mostlyclean-tags \
+               mostlyclean-generic
+
+mostlyclean: mostlyclean-recursive
+
+clean-am:  clean-hdr clean-binPROGRAMS clean-compile clean-tags \
+               clean-generic mostlyclean-am
+
+clean: clean-recursive
+
+distclean-am:  distclean-hdr distclean-binPROGRAMS distclean-compile \
+               distclean-tags distclean-generic clean-am
+
+distclean: distclean-recursive
+       -rm -f config.status
+
+maintainer-clean-am:  maintainer-clean-hdr maintainer-clean-binPROGRAMS \
+               maintainer-clean-compile maintainer-clean-tags \
+               maintainer-clean-generic distclean-am
+       @echo "This command is intended for maintainers to use;"
+       @echo "it deletes files that may require special tools to rebuild."
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f config.status
+
+.PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \
+mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \
+maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \
+mostlyclean-compile distclean-compile clean-compile \
+maintainer-clean-compile install-man1 uninstall-man1 install-man \
+uninstall-man install-data-recursive uninstall-data-recursive \
+install-exec-recursive uninstall-exec-recursive installdirs-recursive \
+uninstalldirs-recursive all-recursive check-recursive \
+installcheck-recursive info-recursive dvi-recursive \
+mostlyclean-recursive distclean-recursive clean-recursive \
+maintainer-clean-recursive tags tags-recursive mostlyclean-tags \
+distclean-tags clean-tags maintainer-clean-tags distdir info-am info \
+dvi-am dvi check check-am installcheck-am installcheck all-recursive-am \
+install-exec-am install-exec install-data-am install-data install-am \
+install uninstall-am uninstall all-redirect all-am all installdirs-am \
+installdirs mostlyclean-generic distclean-generic clean-generic \
+maintainer-clean-generic clean mostlyclean distclean maintainer-clean
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/NEWS b/NEWS
new file mode 100644 (file)
index 0000000..1b03cea
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,194 @@
+05/31/2000 - Nano 0.9.9 introduces much better working i18n support,
+               more portability, and a ton of bugfixes.  While
+               nano is not likely anywhere near 1.0 in terms of
+               code quality, it gets a quantum leap closer with this
+               release.
+
+05/18/2000 - Nano 0.9.8 (the 'what broke now?' release) should fix
+               the resize crash people have been experiencing.  It also
+               offers a new input method that should allow nano to do
+               things the right way (like ^S, ^Q, custom suspend keys)
+               and hopefully wont break with non-US keyboards.  There
+               are also the obligatory display fixes and speedups.  Have
+               fun with it.
+
+05/14/2000 - Nano 0.9.7 (the Mother's Day release) continues in the long
+               line of display fixes, and also fixes the broken symlink
+               behavior (i.e. symlinks weren't being followed by
+               default).  Hopefully all major bugs can be worked out soon
+               and we can have a 1.0 release before the end of the year,
+               but who knows.
+05/08/2000 - Nano 0.9.6 cleans up a lot of the display bugs that 0.9.5
+               uncovered.  There are improvements (and some remaining
+               segfaults) in the wrapping code, and even more
+               display optimizations.  I would still say 0.9.4 or 0.9.2
+               are the most stable versions of nano to date, but this one
+               may not be too bad =-)
+
+05/01/2000 - Nano 0.9.5 attempts to speed up the display of text
+               to be at least somewhat reasonable.  Much
+               code profiling has been done to reduce the 
+               rediculous number of redundant display updates.  This
+               will probably expose a lot of bugs that can then be
+               fixed, so this release is probably not for the faint
+               of heart.  For anyone curious, I would call nano 0.9.2
+               the most stable version recently, so use that if you're
+               not particularly concerned with being on the bleeding
+               edge.
+
+04/25/2000 - Nano 0.9.4 fixes some problems in 0.9.3 with the last
+               line code and related segfaults.  It also now has
+               much better handling for 8-bit characters.  The
+               --enable-tiny code also produces a smaller executable.
+
+04/19/2000 - Nano 0.9.3 is officially the "Micro$oft" release.  It
+               underscores the recent problem of bugfixes introducing
+               more bugs than they fix.  The most important change
+               to this version of nano is the removal of the "magic
+               line".  You will no longer see a blank line at the end of
+               the file. If you want a new line at the end of your file,
+               you'll have to hit enter to get one.  
+
+               NOTE: THIS BREAKS COMPATIBILITY WITH PICO.  Unfortunately,
+               this feature has been causing many many problems with nano
+               so it is being removed for the time being, and perhaps
+               indefinitely.
+
+               Other new stuff includes a --emable-tiny option to make
+               nano ultra small (disabling i18n, detailed help and the
+               marker and mouse code), and --with-slang to use the 
+               slang libraries instead of ncurses.
+
+04/15/2000 - Nano 0.9.2 just fixes the serious segfault problem if 
+               nano is invoked any way other than using the absolute 
+               path.  The bug was in the new code for checking whether 
+               nano is invoked as pico.
+
+04/14/2000 - 0.9.1 has some more Pico compatibility built-in.  The
+               option to switch to/from Search and Search/Replace
+               (^T) is now available, and nano now displays the 
+               more Pico-like shortcut list when invoked as 'pico'
+               (i.e. if pico is a symlink to nano).  There is an
+               important change to the handling of symbolic links
+               as well.  Now, nano does the "correct" thing and
+               automatically writes to the object of the symlink,
+               rather than replace the symlink with the updated file.
+               This behavior is still available with the --nofollow
+               or -l flags.  
+                   Other new things include a fix for the infamous
+               "recursive replace" bug, and more bugfixes in the wrapping 
+               code.  
+
+04/07/2000 - Nano 0.9.0 has some updates, new language support and
+               a much better refresh setup (It's still not great, but...)
+               There should also be more stabillity editing long lines,
+               as there was a stupid mistake in the update_line
+               call.  Silly me =)
+
+03/22/2000 - Nano 0.8.9 is basically just a bugfix release of 0.8.8
+               to reflect the current stagnant status of the project.
+               Most things work, the rest doesn't doesn't work because
+               (a) I can't fix it or I would have already done so, and
+               (b) the amount of patches I'm receiving right now is quite
+               negligible.  Forrunately this release marks the first
+               release since I have acquired ownership of the nano pages
+               on SourceForge.  Here's hoping SF will get us some more
+               visibilitiy, translators and patches.
+
+03/12/2000 - After a hiatus, I have finally moved (not unpacked though)
+               to my new home into albany. Thus I should now have more
+               time to work on nano.  Nano 0.8.8, the "dear god what
+               broke this time?" release, incorporates patches for both
+               i18n and many bugfixes.  It is VERY likely something broke 
+               this version, and it's likely I didn't even apply the i18n
+               stuff properly, so *it* may not even work.  
+
+               I would like to announce that I'm going to need
+               translations soonish, so if you are fluent in other
+               languages than english (or even better, if your native
+               language is not english) and you would like to submit a
+               translation file to me, please feel free to do so.  If you
+               do, I will list your name and email in the AUTHORS file as
+               the maintainer of the .po file, and from then on it is
+               yours to take care of and keep up to date.
+
+03/01/2000 - Well, to continue my trend of going back on my previous
+               release's comments, nano 0.8.7 is released.  The crashing
+               behavior was still occuring, and this most recent fix also
+               fixes some other wrapping problems, so here you go.
+               There may be another relase soon, there may not be, is
+               that vague enough? =)
+
+02/25/2000 - More minor bugfixes in 0.8.6, the bizarre behavior at the end
+               of a page has ceased, thankfully.  I'm also moving next
+               weekend, so don't be shocked if you don't see a new
+               version of nano next week =-)
+
+02/11/2000 - Okay, here we go again.  Aside from a few minor fixes and
+               some under-the-hood changes, you won't notice much
+               different in this version of nano.  I haven't gotten much
+               feedback on the help feature, is it simply amazing or does
+               no one care?  Write and let me know! =)
+
+02/08/2000 - Nano 0.8.3 marks the first time in a long time that there has
+               been more than three days since the last release.  New
+               features include an initial help mode (YAY!), hopefully
+               much more support for i18n out of the box, and a flag
+               for more Pico compatibility in the shortcut lists
+               displayed. This release also marks the new nano
+               distribution site, http://www.asty.org/nano and email
+               address nano@asty.org for bugs, etc.
+
+02/02/2000 - Okay, I hate to go back on what I said in the last release,
+               but I may be changing jobs very soon.  I will release
+               version 0.8.2 as is (no i18n, no help menu (yet).  I
+               expect things to settle down by the end of next week, and
+               then I can try to start on the i18n support and help menu,
+               look for these new features in version 0.8.5 to 0.9.0.
+
+01/28/2000 - Nano 0.8.1 marks our first official step toward
+               internationaliation (i18n) and the help system (^G).  I
+               will be merging in Jordi's patches for initial i18n in the
+               next version, and will implement the help system with
+               i18n built into it shortly after that.  Please don't
+               hesitate to send bug reports, as long as you're sure the
+               fault lies with nano =-).
+
+01/25/2000 - Nano 0.8.0 is officially the 'let's try and be at least a
+               little portable, mmmmkay?' release.  There are many
+               portability checks and fixes, many thanks to Andy Kahn for
+               his patches.  I removed the broken do_spell behavior with
+               the 'spell' program, for now we only try to call 'ispell'
+               until I write a better method to handle the output of the
+               normal 'spell' command.
+
+01/24/2000 - Nano 0.7.9 features many new features. Among them are a
+               new autoindent feature (-i, --autoondent), tempfile
+               flag like Pico's -t flag (-t, --tempfile), and preliminary
+               spelling program support.  The spelling function tries
+               to run 'spell' and then 'ispell' in that order, but you
+               can specify another spelling program with -s or --speller.
+
+01/17/00 - Nano 0.7.7 is officially the 'way too much stuff changed this
+               release' release.  It's the busy time at work for me, so
+               please don't get offended if your patch doesn't get
+               included in the next immediate version of nano.  I'm sure
+               all the changes in this release will cause a few bugs, so
+               0.7.8 will primarily be about fixing those bugs.
+
+               Things added this release include resizeability (kinda),
+               new -x and -c flags (see nano -h for help), long command
+               line flag support, and the usual array of bugfixes.
+
+01/15/00 - Nano 0.7.6 is officially the 'lightning' release.  It now loads
+               large files much faster than previous versions, and is
+               even much faster than Pico or vi in some rather
+               rudimentary tests. Many thanks to Adam Rogoyski for the
+               read_byte patch!
+
+01/09/00 - As of this version (0.7.4), TIP has officially been renamed
+               to nano.  The new homepage is at
+               http://faculty.plattsburgh.edu/astyanax/nano.  Please
+               update your bookmarks, tell your friends, and all that
+               jazz.
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..0ba0fa0
--- /dev/null
+++ b/README
@@ -0,0 +1,82 @@
+
+       The nano editor (Nano's ANOther editor) by Chris Allegretta
+                                      
+Manifesto
+
+     Nano is the editor formerly known as TIP (TIP Isn't Pico).
+     The nano project was started because of three main problems with the
+     wonderfully easy-to-use and friendly Pico text editor:
+     
+     - It's license is not the GNU GPL, and hence some Linux
+     distributions, including Debian (my favorite) don't always
+     include it/don't include binaries.  This is not necessarily a
+     problem, but an issue nonetheless.
+     
+     - Until recently, it had no ability to go to a line # from within
+     the editor. There was the +number command line option, but who wants
+     to exit a file to go to a specific line number? When I want to go to
+     a line, since I have to exit anyway, I just call up vi temporarily.
+     
+     - No search and replace feature. Well, apparently there is a flag
+     that lets you do a search and replace (-b in newer versions) but,
+     well, I still dont like it.
+     
+     nano aims to solve these problems by emulating the functionality of
+     Pico as closely as possible while adressing the problems above and
+     perhaps providing other extra functionality.
+     
+How to compile and install nano
+
+     Download the nano source code, then:
+     tar zxvf nano-x.y.z.tar.gz
+     cd nano-x.y.z
+     ./configure
+     make
+     make install
+     
+     It's that simple. Use --prefix to override the default installation
+     directory of /usr/local.
+     
+Web Page
+
+       http://www.asty.org/nano
+     
+Mailing List and Bug Reports
+
+       SourceForge hosts all the nano-related mailing-lists.
+       + nano-announce@lists.sourceforge.net is a very low traffic list
+         used to announce new Nano versions or other important information
+         about the project.
+       + nano-devel@lists.sourceforge.net is the list used by the people
+         that make Nano and a general development discussion list, with
+         moderate traffic.
+       To subscribe, send email to nano-<name>-request@lists.sourceforge.net
+       with a subject of "subscribe", where <name> is the list you want to
+       subscribe to.
+       For general bug reports, send a description of the problem to
+       nano@asty.org or directly to the development list.
+
+Current Status
+
+     nano is currently at version 0.9.x, and it will probably remain there
+     for awhile. This reflects the adage that the last 10% of a project
+     takes 90% of the time. Version 1.0 will be released when there are
+     no unresolved bugs, and not before. I am also currently looking for
+     patches for all things listed in the TODO file. If you have a
+     comment or suggestion, please let me know, all help is appreciated.
+
+     Warning:  This program can and possibly will corrupt your data in
+     its current form!  It is beta software, so treat it as such!  
+     Thank you.
+     
+     Note that the primary aim of nano is to emulate Pico while adding a
+     few key "missing" features. I do NOT want just a GPL'ed Pico clone,
+     nor do I want something that strays too far from the Pico design
+     (simple and straightforward). If you don't like this, feel free to
+     fork my code at any time, but please call your editor something
+     else, believe it or not I struggled awhile before coming up with
+     the name nano (and before that TIP), and it would be much easier for
+     everyone if there weren't five versions of the same program. As you
+     can guess, I'm not much of an emacs fan ;)
+     
+   Chris Allegretta (chrisa@asty.org)
diff --git a/TODO b/TODO
new file mode 100644 (file)
index 0000000..84bbc23
--- /dev/null
+++ b/TODO
@@ -0,0 +1,14 @@
+TODO file (? means the feature may be implemented, but not definitely)
+-----------------------------------------------------------------------------
+
+- Implement Spelling [DONE, mostly...]
+- Implement Help [DONE]
+- Internationalization [In progress, translators welcome!]
+- Allow nano to be resized in X. [DONE]
+- Color syntax highlighting? (certainly seems like there's a demand for it.)
+- On page up/down, put the cursor on the first line (like Pico), not the
+  center line [DONE]
+- Undo/Redo key?
+- single line scroll up/down?
+- Rewrite edit_refresh, if at all possible [In progress]
+- Implement justify function [DONE]
diff --git a/acconfig.h b/acconfig.h
new file mode 100644 (file)
index 0000000..ce9f23c
--- /dev/null
@@ -0,0 +1,23 @@
+/* Define this if you have the wresize function in your ncurses-type library */
+#undef HAVE_WRESIZE
+
+/* Define this if you have NLS */
+#undef ENABLE_NLS
+
+/* Define this is you have the catgets command */
+#undef HAVE_CATGETS
+
+/* Define this is you have GNU gettext */
+#undef HAVE_GETTEXT
+
+/* Define this for HAVE_LC_MESSAGES */
+#undef HAVE_LC_MESSAGES
+
+/* Define this if you have the stpcpy function (cool) */
+#undef HAVE_STPCPY
+
+/* Define this to make the nano executable as small as possible */
+#undef NANO_SMALL
+
+/* Define to use the slang wrappers for curses instead of native curses */
+#undef USE_SLANG
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644 (file)
index 0000000..efced84
--- /dev/null
@@ -0,0 +1,708 @@
+dnl aclocal.m4 generated automatically by aclocal 1.4
+
+dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+dnl PARTICULAR PURPOSE.
+
+# Do all the work for Automake.  This macro actually does too much --
+# some checks are only needed if your package does certain things.
+# But this isn't really a big deal.
+
+# serial 1
+
+dnl Usage:
+dnl AM_INIT_AUTOMAKE(package,version, [no-define])
+
+AC_DEFUN(AM_INIT_AUTOMAKE,
+[AC_REQUIRE([AC_PROG_INSTALL])
+PACKAGE=[$1]
+AC_SUBST(PACKAGE)
+VERSION=[$2]
+AC_SUBST(VERSION)
+dnl test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
+  AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+fi
+ifelse([$3],,
+AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
+AC_REQUIRE([AM_SANITY_CHECK])
+AC_REQUIRE([AC_ARG_PROGRAM])
+dnl FIXME This is truly gross.
+missing_dir=`cd $ac_aux_dir && pwd`
+AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
+AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
+AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
+AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
+AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
+AC_REQUIRE([AC_PROG_MAKE_SET])])
+
+#
+# Check to make sure that the build environment is sane.
+#
+
+AC_DEFUN(AM_SANITY_CHECK,
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftestfile
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
+   if test "[$]*" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftestfile`
+   fi
+   if test "[$]*" != "X $srcdir/configure conftestfile" \
+      && test "[$]*" != "X conftestfile $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+alias in your environment])
+   fi
+
+   test "[$]2" = conftestfile
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+rm -f conftest*
+AC_MSG_RESULT(yes)])
+
+dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
+dnl The program must properly implement --version.
+AC_DEFUN(AM_MISSING_PROG,
+[AC_MSG_CHECKING(for working $2)
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf.  Sigh.
+if ($2 --version) < /dev/null > /dev/null 2>&1; then
+   $1=$2
+   AC_MSG_RESULT(found)
+else
+   $1="$3/missing $2"
+   AC_MSG_RESULT(missing)
+fi
+AC_SUBST($1)])
+
+# Like AC_CONFIG_HEADER, but automatically create stamp file.
+
+AC_DEFUN(AM_CONFIG_HEADER,
+[AC_PREREQ([2.12])
+AC_CONFIG_HEADER([$1])
+dnl When config.status generates a header, we must update the stamp-h file.
+dnl This file resides in the same directory as the config header
+dnl that is generated.  We must strip everything past the first ":",
+dnl and everything past the last "/".
+AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl
+ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>,
+<<test -z "<<$>>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>,
+<<am_indx=1
+for am_file in <<$1>>; do
+  case " <<$>>CONFIG_HEADERS " in
+  *" <<$>>am_file "*<<)>>
+    echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx
+    ;;
+  esac
+  am_indx=`expr "<<$>>am_indx" + 1`
+done<<>>dnl>>)
+changequote([,]))])
+
+# Configure paths for GLIB
+# Owen Taylor     97-11-3
+
+dnl AM_PATH_GLIB([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]])
+dnl Test for GLIB, and define GLIB_CFLAGS and GLIB_LIBS, if "gmodule" or 
+dnl gthread is specified in MODULES, pass to glib-config
+dnl
+AC_DEFUN(AM_PATH_GLIB,
+[dnl 
+dnl Get the cflags and libraries from the glib-config script
+dnl
+AC_ARG_WITH(glib-prefix,[  --with-glib-prefix=PFX   Prefix where GLIB is installed (optional)],
+            glib_config_prefix="$withval", glib_config_prefix="")
+AC_ARG_WITH(glib-exec-prefix,[  --with-glib-exec-prefix=PFX Exec prefix where GLIB is installed (optional)],
+            glib_config_exec_prefix="$withval", glib_config_exec_prefix="")
+AC_ARG_ENABLE(glibtest, [  --disable-glibtest       Do not try to compile and run a test GLIB program],
+                   , enable_glibtest=yes)
+
+  if test x$glib_config_exec_prefix != x ; then
+     glib_config_args="$glib_config_args --exec-prefix=$glib_config_exec_prefix"
+     if test x${GLIB_CONFIG+set} != xset ; then
+        GLIB_CONFIG=$glib_config_exec_prefix/bin/glib-config
+     fi
+  fi
+  if test x$glib_config_prefix != x ; then
+     glib_config_args="$glib_config_args --prefix=$glib_config_prefix"
+     if test x${GLIB_CONFIG+set} != xset ; then
+        GLIB_CONFIG=$glib_config_prefix/bin/glib-config
+     fi
+  fi
+
+  for module in . $4
+  do
+      case "$module" in
+         gmodule) 
+             glib_config_args="$glib_config_args gmodule"
+         ;;
+         gthread) 
+             glib_config_args="$glib_config_args gthread"
+         ;;
+      esac
+  done
+
+  AC_PATH_PROG(GLIB_CONFIG, glib-config, no)
+  min_glib_version=ifelse([$1], ,0.99.7,$1)
+  AC_MSG_CHECKING(for GLIB - version >= $min_glib_version)
+  no_glib=""
+  if test "$GLIB_CONFIG" = "no" ; then
+    no_glib=yes
+  else
+    GLIB_CFLAGS=`$GLIB_CONFIG $glib_config_args --cflags`
+    GLIB_LIBS=`$GLIB_CONFIG $glib_config_args --libs`
+    glib_config_major_version=`$GLIB_CONFIG $glib_config_args --version | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+    glib_config_minor_version=`$GLIB_CONFIG $glib_config_args --version | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+    glib_config_micro_version=`$GLIB_CONFIG $glib_config_args --version | \
+           sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+    if test "x$enable_glibtest" = "xyes" ; then
+      ac_save_CFLAGS="$CFLAGS"
+      ac_save_LIBS="$LIBS"
+      CFLAGS="$CFLAGS $GLIB_CFLAGS"
+      LIBS="$GLIB_LIBS $LIBS"
+dnl
+dnl Now check if the installed GLIB is sufficiently new. (Also sanity
+dnl checks the results of glib-config to some extent
+dnl
+      rm -f conf.glibtest
+      AC_TRY_RUN([
+#include <glib.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+int 
+main ()
+{
+  int major, minor, micro;
+  char *tmp_version;
+
+  system ("touch conf.glibtest");
+
+  /* HP/UX 9 (%@#!) writes to sscanf strings */
+  tmp_version = g_strdup("$min_glib_version");
+  if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
+     printf("%s, bad version string\n", "$min_glib_version");
+     exit(1);
+   }
+
+  if ((glib_major_version != $glib_config_major_version) ||
+      (glib_minor_version != $glib_config_minor_version) ||
+      (glib_micro_version != $glib_config_micro_version))
+    {
+      printf("\n*** 'glib-config --version' returned %d.%d.%d, but GLIB (%d.%d.%d)\n", 
+             $glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version,
+             glib_major_version, glib_minor_version, glib_micro_version);
+      printf ("*** was found! If glib-config was correct, then it is best\n");
+      printf ("*** to remove the old version of GLIB. You may also be able to fix the error\n");
+      printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
+      printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
+      printf("*** required on your system.\n");
+      printf("*** If glib-config was wrong, set the environment variable GLIB_CONFIG\n");
+      printf("*** to point to the correct copy of glib-config, and remove the file config.cache\n");
+      printf("*** before re-running configure\n");
+    } 
+  else if ((glib_major_version != GLIB_MAJOR_VERSION) ||
+          (glib_minor_version != GLIB_MINOR_VERSION) ||
+           (glib_micro_version != GLIB_MICRO_VERSION))
+    {
+      printf("*** GLIB header files (version %d.%d.%d) do not match\n",
+            GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION);
+      printf("*** library (version %d.%d.%d)\n",
+            glib_major_version, glib_minor_version, glib_micro_version);
+    }
+  else
+    {
+      if ((glib_major_version > major) ||
+        ((glib_major_version == major) && (glib_minor_version > minor)) ||
+        ((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro)))
+      {
+        return 0;
+       }
+     else
+      {
+        printf("\n*** An old version of GLIB (%d.%d.%d) was found.\n",
+               glib_major_version, glib_minor_version, glib_micro_version);
+        printf("*** You need a version of GLIB newer than %d.%d.%d. The latest version of\n",
+              major, minor, micro);
+        printf("*** GLIB is always available from ftp://ftp.gtk.org.\n");
+        printf("***\n");
+        printf("*** If you have already installed a sufficiently new version, this error\n");
+        printf("*** probably means that the wrong copy of the glib-config shell script is\n");
+        printf("*** being found. The easiest way to fix this is to remove the old version\n");
+        printf("*** of GLIB, but you can also set the GLIB_CONFIG environment to point to the\n");
+        printf("*** correct copy of glib-config. (In this case, you will have to\n");
+        printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
+        printf("*** so that the correct libraries are found at run-time))\n");
+      }
+    }
+  return 1;
+}
+],, no_glib=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+     fi
+  fi
+  if test "x$no_glib" = x ; then
+     AC_MSG_RESULT(yes)
+     ifelse([$2], , :, [$2])     
+  else
+     AC_MSG_RESULT(no)
+     if test "$GLIB_CONFIG" = "no" ; then
+       echo "*** The glib-config script installed by GLIB could not be found"
+       echo "*** If GLIB was installed in PREFIX, make sure PREFIX/bin is in"
+       echo "*** your path, or set the GLIB_CONFIG environment variable to the"
+       echo "*** full path to glib-config."
+     else
+       if test -f conf.glibtest ; then
+        :
+       else
+          echo "*** Could not run GLIB test program, checking why..."
+          CFLAGS="$CFLAGS $GLIB_CFLAGS"
+          LIBS="$LIBS $GLIB_LIBS"
+          AC_TRY_LINK([
+#include <glib.h>
+#include <stdio.h>
+],      [ return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); ],
+        [ echo "*** The test program compiled, but did not run. This usually means"
+          echo "*** that the run-time linker is not finding GLIB or finding the wrong"
+          echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your"
+          echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+          echo "*** to the installed location  Also, make sure you have run ldconfig if that"
+          echo "*** is required on your system"
+         echo "***"
+          echo "*** If you have an old version installed, it is best to remove it, although"
+          echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"
+          echo "***"
+          echo "*** If you have a RedHat 5.0 system, you should remove the GTK package that"
+          echo "*** came with the system with the command"
+          echo "***"
+          echo "***    rpm --erase --nodeps gtk gtk-devel" ],
+        [ echo "*** The test program failed to compile or link. See the file config.log for the"
+          echo "*** exact error that occured. This usually means GLIB was incorrectly installed"
+          echo "*** or that you have moved GLIB since it was installed. In the latter case, you"
+          echo "*** may want to edit the glib-config script: $GLIB_CONFIG" ])
+          CFLAGS="$ac_save_CFLAGS"
+          LIBS="$ac_save_LIBS"
+       fi
+     fi
+     GLIB_CFLAGS=""
+     GLIB_LIBS=""
+     ifelse([$3], , :, [$3])
+  fi
+  AC_SUBST(GLIB_CFLAGS)
+  AC_SUBST(GLIB_LIBS)
+  rm -f conf.glibtest
+])
+
+# Macro to add for using GNU gettext.
+# Ulrich Drepper <drepper@cygnus.com>, 1995.
+#
+# This file can be copied and used freely without restrictions.  It can
+# be used in projects which are not available under the GNU Public License
+# but which still want to provide support for the GNU gettext functionality.
+# Please note that the actual code is *not* freely available.
+
+# serial 5
+
+AC_DEFUN(AM_WITH_NLS,
+  [AC_MSG_CHECKING([whether NLS is requested])
+    dnl Default is enabled NLS
+    AC_ARG_ENABLE(nls,
+      [  --disable-nls           do not use Native Language Support],
+      USE_NLS=$enableval, USE_NLS=yes)
+    AC_MSG_RESULT($USE_NLS)
+    AC_SUBST(USE_NLS)
+
+    USE_INCLUDED_LIBINTL=no
+
+    dnl If we use NLS figure out what method
+    if test "$USE_NLS" = "yes"; then
+      AC_DEFINE(ENABLE_NLS)
+      AC_MSG_CHECKING([whether included gettext is requested])
+      AC_ARG_WITH(included-gettext,
+        [  --with-included-gettext use the GNU gettext library included here],
+        nls_cv_force_use_gnu_gettext=$withval,
+        nls_cv_force_use_gnu_gettext=no)
+      AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
+
+      nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
+      if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
+        dnl User does not insist on using GNU NLS library.  Figure out what
+        dnl to use.  If gettext or catgets are available (in this order) we
+        dnl use this.  Else we have to fall back to GNU NLS library.
+       dnl catgets is only used if permitted by option --with-catgets.
+       nls_cv_header_intl=
+       nls_cv_header_libgt=
+       CATOBJEXT=NONE
+
+       AC_CHECK_HEADER(libintl.h,
+         [AC_CACHE_CHECK([for gettext in libc], gt_cv_func_gettext_libc,
+           [AC_TRY_LINK([#include <libintl.h>], [return (int) gettext ("")],
+              gt_cv_func_gettext_libc=yes, gt_cv_func_gettext_libc=no)])
+
+          if test "$gt_cv_func_gettext_libc" != "yes"; then
+            AC_CHECK_LIB(intl, bindtextdomain,
+              [AC_CACHE_CHECK([for gettext in libintl],
+                gt_cv_func_gettext_libintl,
+                [AC_CHECK_LIB(intl, gettext,
+                 gt_cv_func_gettext_libintl=yes,
+                 gt_cv_func_gettext_libintl=no)],
+                gt_cv_func_gettext_libintl=no)])
+          fi
+
+          if test "$gt_cv_func_gettext_libc" = "yes" \
+             || test "$gt_cv_func_gettext_libintl" = "yes"; then
+             AC_DEFINE(HAVE_GETTEXT)
+             AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+               [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl
+             if test "$MSGFMT" != "no"; then
+               AC_CHECK_FUNCS(dcgettext)
+               AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+               AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+                 [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
+               AC_TRY_LINK(, [extern int _nl_msg_cat_cntr;
+                              return _nl_msg_cat_cntr],
+                 [CATOBJEXT=.gmo
+                  DATADIRNAME=share],
+                 [CATOBJEXT=.mo
+                  DATADIRNAME=lib])
+               INSTOBJEXT=.mo
+             fi
+           fi
+       ])
+
+        if test "$CATOBJEXT" = "NONE"; then
+         AC_MSG_CHECKING([whether catgets can be used])
+         AC_ARG_WITH(catgets,
+           [  --with-catgets          use catgets functions if available],
+           nls_cv_use_catgets=$withval, nls_cv_use_catgets=no)
+         AC_MSG_RESULT($nls_cv_use_catgets)
+
+         if test "$nls_cv_use_catgets" = "yes"; then
+           dnl No gettext in C library.  Try catgets next.
+           AC_CHECK_LIB(i, main)
+           AC_CHECK_FUNC(catgets,
+             [AC_DEFINE(HAVE_CATGETS)
+              INTLOBJS="\$(CATOBJS)"
+              AC_PATH_PROG(GENCAT, gencat, no)dnl
+              if test "$GENCAT" != "no"; then
+                AC_PATH_PROG(GMSGFMT, gmsgfmt, no)
+                if test "$GMSGFMT" = "no"; then
+                  AM_PATH_PROG_WITH_TEST(GMSGFMT, msgfmt,
+                   [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)
+                fi
+                AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+                  [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
+                USE_INCLUDED_LIBINTL=yes
+                CATOBJEXT=.cat
+                INSTOBJEXT=.cat
+                DATADIRNAME=lib
+                INTLDEPS='$(top_builddir)/intl/libintl.a'
+                INTLLIBS=$INTLDEPS
+                LIBS=`echo $LIBS | sed -e 's/-lintl//'`
+                nls_cv_header_intl=intl/libintl.h
+                nls_cv_header_libgt=intl/libgettext.h
+              fi])
+         fi
+        fi
+
+        if test "$CATOBJEXT" = "NONE"; then
+         dnl Neither gettext nor catgets in included in the C library.
+         dnl Fall back on GNU gettext library.
+         nls_cv_use_gnu_gettext=yes
+        fi
+      fi
+
+      if test "$nls_cv_use_gnu_gettext" = "yes"; then
+        dnl Mark actions used to generate GNU NLS library.
+        INTLOBJS="\$(GETTOBJS)"
+        AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+         [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], msgfmt)
+        AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+        AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+         [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :)
+        AC_SUBST(MSGFMT)
+       USE_INCLUDED_LIBINTL=yes
+        CATOBJEXT=.gmo
+        INSTOBJEXT=.mo
+        DATADIRNAME=share
+       INTLDEPS='$(top_builddir)/intl/libintl.a'
+       INTLLIBS=$INTLDEPS
+       LIBS=`echo $LIBS | sed -e 's/-lintl//'`
+        nls_cv_header_intl=intl/libintl.h
+        nls_cv_header_libgt=intl/libgettext.h
+      fi
+
+      dnl Test whether we really found GNU xgettext.
+      if test "$XGETTEXT" != ":"; then
+       dnl If it is no GNU xgettext we define it as : so that the
+       dnl Makefiles still can work.
+       if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
+         : ;
+       else
+         AC_MSG_RESULT(
+           [found xgettext program is not GNU xgettext; ignore it])
+         XGETTEXT=":"
+       fi
+      fi
+
+      # We need to process the po/ directory.
+      POSUB=po
+    else
+      DATADIRNAME=share
+      nls_cv_header_intl=intl/libintl.h
+      nls_cv_header_libgt=intl/libgettext.h
+    fi
+    AC_LINK_FILES($nls_cv_header_libgt, $nls_cv_header_intl)
+    AC_OUTPUT_COMMANDS(
+     [case "$CONFIG_FILES" in *po/Makefile.in*)
+        sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile
+      esac])
+
+
+    # If this is used in GNU gettext we have to set USE_NLS to `yes'
+    # because some of the sources are only built for this goal.
+    if test "$PACKAGE" = gettext; then
+      USE_NLS=yes
+      USE_INCLUDED_LIBINTL=yes
+    fi
+
+    dnl These rules are solely for the distribution goal.  While doing this
+    dnl we only have to keep exactly one list of the available catalogs
+    dnl in configure.in.
+    for lang in $ALL_LINGUAS; do
+      GMOFILES="$GMOFILES $lang.gmo"
+      POFILES="$POFILES $lang.po"
+    done
+
+    dnl Make all variables we use known to autoconf.
+    AC_SUBST(USE_INCLUDED_LIBINTL)
+    AC_SUBST(CATALOGS)
+    AC_SUBST(CATOBJEXT)
+    AC_SUBST(DATADIRNAME)
+    AC_SUBST(GMOFILES)
+    AC_SUBST(INSTOBJEXT)
+    AC_SUBST(INTLDEPS)
+    AC_SUBST(INTLLIBS)
+    AC_SUBST(INTLOBJS)
+    AC_SUBST(POFILES)
+    AC_SUBST(POSUB)
+  ])
+
+AC_DEFUN(AM_GNU_GETTEXT,
+  [AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+   AC_REQUIRE([AC_PROG_CC])dnl
+   AC_REQUIRE([AC_PROG_RANLIB])dnl
+   AC_REQUIRE([AC_ISC_POSIX])dnl
+   AC_REQUIRE([AC_HEADER_STDC])dnl
+   AC_REQUIRE([AC_C_CONST])dnl
+   AC_REQUIRE([AC_C_INLINE])dnl
+   AC_REQUIRE([AC_TYPE_OFF_T])dnl
+   AC_REQUIRE([AC_TYPE_SIZE_T])dnl
+   AC_REQUIRE([AC_FUNC_ALLOCA])dnl
+   AC_REQUIRE([AC_FUNC_MMAP])dnl
+
+   AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h string.h \
+unistd.h sys/param.h])
+   AC_CHECK_FUNCS([getcwd munmap putenv setenv setlocale strchr strcasecmp \
+strdup __argz_count __argz_stringify __argz_next])
+
+   if test "${ac_cv_func_stpcpy+set}" != "set"; then
+     AC_CHECK_FUNCS(stpcpy)
+   fi
+   if test "${ac_cv_func_stpcpy}" = "yes"; then
+     AC_DEFINE(HAVE_STPCPY)
+   fi
+
+   AM_LC_MESSAGES
+   AM_WITH_NLS
+
+   if test "x$CATOBJEXT" != "x"; then
+     if test "x$ALL_LINGUAS" = "x"; then
+       LINGUAS=
+     else
+       AC_MSG_CHECKING(for catalogs to be installed)
+       NEW_LINGUAS=
+       for lang in ${LINGUAS=$ALL_LINGUAS}; do
+         case "$ALL_LINGUAS" in
+          *$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;;
+         esac
+       done
+       LINGUAS=$NEW_LINGUAS
+       AC_MSG_RESULT($LINGUAS)
+     fi
+
+     dnl Construct list of names of catalog files to be constructed.
+     if test -n "$LINGUAS"; then
+       for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
+     fi
+   fi
+
+   dnl The reference to <locale.h> in the installed <libintl.h> file
+   dnl must be resolved because we cannot expect the users of this
+   dnl to define HAVE_LOCALE_H.
+   if test $ac_cv_header_locale_h = yes; then
+     INCLUDE_LOCALE_H="#include <locale.h>"
+   else
+     INCLUDE_LOCALE_H="\
+/* The system does not provide the header <locale.h>.  Take care yourself.  */"
+   fi
+   AC_SUBST(INCLUDE_LOCALE_H)
+
+   dnl Determine which catalog format we have (if any is needed)
+   dnl For now we know about two different formats:
+   dnl   Linux libc-5 and the normal X/Open format
+   test -d intl || mkdir intl
+   if test "$CATOBJEXT" = ".cat"; then
+     AC_CHECK_HEADER(linux/version.h, msgformat=linux, msgformat=xopen)
+
+     dnl Transform the SED scripts while copying because some dumb SEDs
+     dnl cannot handle comments.
+     sed -e '/^#/d' $srcdir/intl/$msgformat-msg.sed > intl/po2msg.sed
+   fi
+   dnl po2tbl.sed is always needed.
+   sed -e '/^#.*[^\\]$/d' -e '/^#$/d' \
+     $srcdir/intl/po2tbl.sed.in > intl/po2tbl.sed
+
+   dnl In the intl/Makefile.in we have a special dependency which makes
+   dnl only sense for gettext.  We comment this out for non-gettext
+   dnl packages.
+   if test "$PACKAGE" = "gettext"; then
+     GT_NO="#NO#"
+     GT_YES=
+   else
+     GT_NO=
+     GT_YES="#YES#"
+   fi
+   AC_SUBST(GT_NO)
+   AC_SUBST(GT_YES)
+
+   dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
+   dnl find the mkinstalldirs script in another subdir but ($top_srcdir).
+   dnl Try to locate is.
+   MKINSTALLDIRS=
+   if test -n "$ac_aux_dir"; then
+     MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
+   fi
+   if test -z "$MKINSTALLDIRS"; then
+     MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
+   fi
+   AC_SUBST(MKINSTALLDIRS)
+
+   dnl *** For now the libtool support in intl/Makefile is not for real.
+   l=
+   AC_SUBST(l)
+
+   dnl Generate list of files to be processed by xgettext which will
+   dnl be included in po/Makefile.
+   test -d po || mkdir po
+   if test "x$srcdir" != "x."; then
+     if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then
+       posrcprefix="$srcdir/"
+     else
+       posrcprefix="../$srcdir/"
+     fi
+   else
+     posrcprefix="../"
+   fi
+   rm -f po/POTFILES
+   sed -e "/^#/d" -e "/^\$/d" -e "s,.*,        $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
+       < $srcdir/po/POTFILES.in > po/POTFILES
+  ])
+
+# Search path for a program which passes the given test.
+# Ulrich Drepper <drepper@cygnus.com>, 1996.
+#
+# This file can be copied and used freely without restrictions.  It can
+# be used in projects which are not available under the GNU Public License
+# but which still want to provide support for the GNU gettext functionality.
+# Please note that the actual code is *not* freely available.
+
+# serial 1
+
+dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
+dnl   TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
+AC_DEFUN(AM_PATH_PROG_WITH_TEST,
+[# Extract the first word of "$2", so it can be a program name with args.
+set dummy $2; ac_word=[$]2
+AC_MSG_CHECKING([for $ac_word])
+AC_CACHE_VAL(ac_cv_path_$1,
+[case "[$]$1" in
+  /*)
+  ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in ifelse([$5], , $PATH, [$5]); do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if [$3]; then
+       ac_cv_path_$1="$ac_dir/$ac_word"
+       break
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+dnl If no 4th arg is given, leave the cache variable unset,
+dnl so AC_PATH_PROGS will keep looking.
+ifelse([$4], , , [  test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
+])dnl
+  ;;
+esac])dnl
+$1="$ac_cv_path_$1"
+if test -n "[$]$1"; then
+  AC_MSG_RESULT([$]$1)
+else
+  AC_MSG_RESULT(no)
+fi
+AC_SUBST($1)dnl
+])
+
+# Check whether LC_MESSAGES is available in <locale.h>.
+# Ulrich Drepper <drepper@cygnus.com>, 1995.
+#
+# This file can be copied and used freely without restrictions.  It can
+# be used in projects which are not available under the GNU Public License
+# but which still want to provide support for the GNU gettext functionality.
+# Please note that the actual code is *not* freely available.
+
+# serial 1
+
+AC_DEFUN(AM_LC_MESSAGES,
+  [if test $ac_cv_header_locale_h = yes; then
+    AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
+      [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
+       am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
+    if test $am_cv_val_LC_MESSAGES = yes; then
+      AC_DEFINE(HAVE_LC_MESSAGES)
+    fi
+  fi])
+
diff --git a/config.h.in b/config.h.in
new file mode 100644 (file)
index 0000000..a6cdb36
--- /dev/null
@@ -0,0 +1,180 @@
+/* config.h.in.  Generated automatically from configure.in by autoheader.  */
+
+/* Define if using alloca.c.  */
+#undef C_ALLOCA
+
+/* Define to empty if the keyword does not work.  */
+#undef const
+
+/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems.
+   This function is required for alloca.c support on those systems.  */
+#undef CRAY_STACKSEG_END
+
+/* Define if you have alloca, as a function or macro.  */
+#undef HAVE_ALLOCA
+
+/* Define if you have <alloca.h> and it should be used (not on Ultrix).  */
+#undef HAVE_ALLOCA_H
+
+/* Define if you don't have vprintf but do have _doprnt.  */
+#undef HAVE_DOPRNT
+
+/* Define if you have a working `mmap' system call.  */
+#undef HAVE_MMAP
+
+/* Define if you have the vprintf function.  */
+#undef HAVE_VPRINTF
+
+/* Define as __inline if that's what the C compiler calls it.  */
+#undef inline
+
+/* Define to `long' if <sys/types.h> doesn't define.  */
+#undef off_t
+
+/* Define if you need to in order for stat and other things to work.  */
+#undef _POSIX_SOURCE
+
+/* Define as the return type of signal handlers (int or void).  */
+#undef RETSIGTYPE
+
+/* Define to `unsigned' if <sys/types.h> doesn't define.  */
+#undef size_t
+
+/* If using the C implementation of alloca, define if you know the
+   direction of stack growth for your system; otherwise it will be
+   automatically deduced at run-time.
+ STACK_DIRECTION > 0 => grows toward higher addresses
+ STACK_DIRECTION < 0 => grows toward lower addresses
+ STACK_DIRECTION = 0 => direction of growth unknown
+ */
+#undef STACK_DIRECTION
+
+/* Define if you have the ANSI C header files.  */
+#undef STDC_HEADERS
+
+/* Define this if you have the wresize function in your ncurses-type library */
+#undef HAVE_WRESIZE
+
+/* Define this if you have NLS */
+#undef ENABLE_NLS
+
+/* Define this is you have the catgets command */
+#undef HAVE_CATGETS
+
+/* Define this is you have GNU gettext */
+#undef HAVE_GETTEXT
+
+/* Define this for HAVE_LC_MESSAGES */
+#undef HAVE_LC_MESSAGES
+
+/* Define this if you have the stpcpy function (cool) */
+#undef HAVE_STPCPY
+
+/* Define this to make the nano executable as small as possible */
+#undef NANO_SMALL
+
+/* Define to use the slang wrappers for curses instead of native curses */
+#undef USE_SLANG
+
+/* Define if you have the __argz_count function.  */
+#undef HAVE___ARGZ_COUNT
+
+/* Define if you have the __argz_next function.  */
+#undef HAVE___ARGZ_NEXT
+
+/* Define if you have the __argz_stringify function.  */
+#undef HAVE___ARGZ_STRINGIFY
+
+/* Define if you have the dcgettext function.  */
+#undef HAVE_DCGETTEXT
+
+/* Define if you have the getcwd function.  */
+#undef HAVE_GETCWD
+
+/* Define if you have the getopt_long function.  */
+#undef HAVE_GETOPT_LONG
+
+/* Define if you have the getpagesize function.  */
+#undef HAVE_GETPAGESIZE
+
+/* Define if you have the munmap function.  */
+#undef HAVE_MUNMAP
+
+/* Define if you have the putenv function.  */
+#undef HAVE_PUTENV
+
+/* Define if you have the setenv function.  */
+#undef HAVE_SETENV
+
+/* Define if you have the setlocale function.  */
+#undef HAVE_SETLOCALE
+
+/* Define if you have the snprintf function.  */
+#undef HAVE_SNPRINTF
+
+/* Define if you have the stpcpy function.  */
+#undef HAVE_STPCPY
+
+/* Define if you have the strcasecmp function.  */
+#undef HAVE_STRCASECMP
+
+/* Define if you have the strchr function.  */
+#undef HAVE_STRCHR
+
+/* Define if you have the strdup function.  */
+#undef HAVE_STRDUP
+
+/* Define if you have the vsnprintf function.  */
+#undef HAVE_VSNPRINTF
+
+/* Define if you have the <argz.h> header file.  */
+#undef HAVE_ARGZ_H
+
+/* Define if you have the <curses.h> header file.  */
+#undef HAVE_CURSES_H
+
+/* Define if you have the <fcntl.h> header file.  */
+#undef HAVE_FCNTL_H
+
+/* Define if you have the <getopt.h> header file.  */
+#undef HAVE_GETOPT_H
+
+/* Define if you have the <limits.h> header file.  */
+#undef HAVE_LIMITS_H
+
+/* Define if you have the <locale.h> header file.  */
+#undef HAVE_LOCALE_H
+
+/* Define if you have the <malloc.h> header file.  */
+#undef HAVE_MALLOC_H
+
+/* Define if you have the <ncurses.h> header file.  */
+#undef HAVE_NCURSES_H
+
+/* Define if you have the <nl_types.h> header file.  */
+#undef HAVE_NL_TYPES_H
+
+/* Define if you have the <string.h> header file.  */
+#undef HAVE_STRING_H
+
+/* Define if you have the <sys/param.h> header file.  */
+#undef HAVE_SYS_PARAM_H
+
+/* Define if you have the <termio.h> header file.  */
+#undef HAVE_TERMIO_H
+
+/* Define if you have the <termios.h> header file.  */
+#undef HAVE_TERMIOS_H
+
+/* Define if you have the <unistd.h> header file.  */
+#undef HAVE_UNISTD_H
+
+/* Define if you have the i library (-li).  */
+#undef HAVE_LIBI
+
+/* Name of package */
+#undef PACKAGE
+
+/* Version number of package */
+#undef VERSION
+
diff --git a/configure b/configure
new file mode 100755 (executable)
index 0000000..0858349
--- /dev/null
+++ b/configure
@@ -0,0 +1,4537 @@
+#! /bin/sh
+
+# Guess values for system-dependent variables and create Makefiles.
+# Generated automatically using autoconf version 2.13 
+# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+# Defaults:
+ac_help=
+ac_default_prefix=/usr/local
+# Any additions from configure.in:
+ac_help="$ac_help
+  --enable-tiny           Disables features for the sake of size
+                          (currently disables detailed help and i18n)"
+ac_help="$ac_help
+  --with-slang[=DIR]      Use the slang library instead of curses"
+ac_help="$ac_help
+  --with-glib-prefix=PFX   Prefix where GLIB is installed (optional)"
+ac_help="$ac_help
+  --with-glib-exec-prefix=PFX Exec prefix where GLIB is installed (optional)"
+ac_help="$ac_help
+  --disable-glibtest       Do not try to compile and run a test GLIB program"
+ac_help="$ac_help
+  --enable-debug          Enable debugging (def disabled)"
+ac_help="$ac_help
+  --disable-nls           do not use Native Language Support"
+ac_help="$ac_help
+  --with-included-gettext use the GNU gettext library included here"
+ac_help="$ac_help
+  --with-catgets          use catgets functions if available"
+
+# Initialize some variables set by options.
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+build=NONE
+cache_file=./config.cache
+exec_prefix=NONE
+host=NONE
+no_create=
+nonopt=NONE
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+target=NONE
+verbose=
+x_includes=NONE
+x_libraries=NONE
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+# Initialize some other variables.
+subdirs=
+MFLAGS= MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+# Maximum number of lines to put in a shell here document.
+ac_max_here_lines=12
+
+ac_prev=
+for ac_option
+do
+
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval "$ac_prev=\$ac_option"
+    ac_prev=
+    continue
+  fi
+
+  case "$ac_option" in
+  -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+  *) ac_optarg= ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case "$ac_option" in
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir="$ac_optarg" ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build="$ac_optarg" ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file="$ac_optarg" ;;
+
+  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+  | --da=*)
+    datadir="$ac_optarg" ;;
+
+  -disable-* | --disable-*)
+    ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
+      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+    fi
+    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+    eval "enable_${ac_feature}=no" ;;
+
+  -enable-* | --enable-*)
+    ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
+      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+    fi
+    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+    case "$ac_option" in
+      *=*) ;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "enable_${ac_feature}='$ac_optarg'" ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix="$ac_optarg" ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he)
+    # Omit some internal or obsolete options to make the list less imposing.
+    # This message is too long to be a string in the A/UX 3.1 sh.
+    cat << EOF
+Usage: configure [options] [host]
+Options: [defaults in brackets after descriptions]
+Configuration:
+  --cache-file=FILE       cache test results in FILE
+  --help                  print this message
+  --no-create             do not create output files
+  --quiet, --silent       do not print \`checking...' messages
+  --version               print the version of autoconf that created configure
+Directory and file names:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [same as prefix]
+  --bindir=DIR            user executables in DIR [EPREFIX/bin]
+  --sbindir=DIR           system admin executables in DIR [EPREFIX/sbin]
+  --libexecdir=DIR        program executables in DIR [EPREFIX/libexec]
+  --datadir=DIR           read-only architecture-independent data in DIR
+                          [PREFIX/share]
+  --sysconfdir=DIR        read-only single-machine data in DIR [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data in DIR
+                          [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data in DIR [PREFIX/var]
+  --libdir=DIR            object code libraries in DIR [EPREFIX/lib]
+  --includedir=DIR        C header files in DIR [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc in DIR [/usr/include]
+  --infodir=DIR           info documentation in DIR [PREFIX/info]
+  --mandir=DIR            man documentation in DIR [PREFIX/man]
+  --srcdir=DIR            find the sources in DIR [configure dir or ..]
+  --program-prefix=PREFIX prepend PREFIX to installed program names
+  --program-suffix=SUFFIX append SUFFIX to installed program names
+  --program-transform-name=PROGRAM
+                          run sed PROGRAM on installed program names
+EOF
+    cat << EOF
+Host type:
+  --build=BUILD           configure for building on BUILD [BUILD=HOST]
+  --host=HOST             configure for HOST [guessed]
+  --target=TARGET         configure for TARGET [TARGET=HOST]
+Features and packages:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --x-includes=DIR        X include files are in DIR
+  --x-libraries=DIR       X library files are in DIR
+EOF
+    if test -n "$ac_help"; then
+      echo "--enable and --with options recognized:$ac_help"
+    fi
+    exit 0 ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host="$ac_optarg" ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir="$ac_optarg" ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir="$ac_optarg" ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir="$ac_optarg" ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir="$ac_optarg" ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst \
+  | --locals | --local | --loca | --loc | --lo)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+    localstatedir="$ac_optarg" ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir="$ac_optarg" ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir="$ac_optarg" ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix="$ac_optarg" ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix="$ac_optarg" ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix="$ac_optarg" ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name="$ac_optarg" ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir="$ac_optarg" ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir="$ac_optarg" ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site="$ac_optarg" ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir="$ac_optarg" ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir="$ac_optarg" ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target="$ac_optarg" ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers)
+    echo "configure generated by autoconf version 2.13"
+    exit 0 ;;
+
+  -with-* | --with-*)
+    ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
+      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+    fi
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    case "$ac_option" in
+      *=*) ;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "with_${ac_package}='$ac_optarg'" ;;
+
+  -without-* | --without-*)
+    ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
+      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+    fi
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    eval "with_${ac_package}=no" ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes="$ac_optarg" ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries="$ac_optarg" ;;
+
+  -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
+    ;;
+
+  *)
+    if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
+      echo "configure: warning: $ac_option: invalid host type" 1>&2
+    fi
+    if test "x$nonopt" != xNONE; then
+      { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
+    fi
+    nonopt="$ac_option"
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
+fi
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+# File descriptor usage:
+# 0 standard input
+# 1 file creation
+# 2 errors and warnings
+# 3 some systems may open it to /dev/tty
+# 4 used on the Kubota Titan
+# 6 checking for... messages and results
+# 5 compiler messages saved in config.log
+if test "$silent" = yes; then
+  exec 6>/dev/null
+else
+  exec 6>&1
+fi
+exec 5>./config.log
+
+echo "\
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+" 1>&5
+
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell metacharacters.
+ac_configure_args=
+for ac_arg
+do
+  case "$ac_arg" in
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c) ;;
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+  *" "*|*"     "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
+  ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+  *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+  esac
+done
+
+# NLS nuisances.
+# Only set these to C if already set.  These must not be set unconditionally
+# because not all systems understand e.g. LANG=C (notably SCO).
+# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
+# Non-C LC_CTYPE values break the ctype check.
+if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
+if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
+if test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo > confdefs.h
+
+# A filename unique to this package, relative to the directory that
+# configure is in, which we can look for to find out if srcdir is correct.
+ac_unique_file=nano.c
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then its parent.
+  ac_prog=$0
+  ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
+  test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+  srcdir=$ac_confdir
+  if test ! -r $srcdir/$ac_unique_file; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+  if test "$ac_srcdir_defaulted" = yes; then
+    { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
+  else
+    { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
+  fi
+fi
+srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+  if test "x$prefix" != xNONE; then
+    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+  else
+    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+  fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+  if test -r "$ac_site_file"; then
+    echo "loading site script $ac_site_file"
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  echo "loading cache $cache_file"
+  . $cache_file
+else
+  echo "creating cache $cache_file"
+  > $cache_file
+fi
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+ac_exeext=
+ac_objext=o
+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+  # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
+  if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+    ac_n= ac_c='
+' ac_t='       '
+  else
+    ac_n=-n ac_c= ac_t=
+  fi
+else
+  ac_n= ac_c='\c' ac_t=
+fi
+
+
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+  if test -f $ac_dir/install-sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f $ac_dir/install.sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
+fi
+ac_config_guess=$ac_aux_dir/config.guess
+ac_config_sub=$ac_aux_dir/config.sub
+ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# ./install, which can be erroneously created by make from ./install.sh.
+echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
+echo "configure:575: checking for a BSD compatible install" >&5
+if test -z "$INSTALL"; then
+if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+    IFS="${IFS=        }"; ac_save_IFS="$IFS"; IFS=":"
+  for ac_dir in $PATH; do
+    # Account for people who put trailing slashes in PATH elements.
+    case "$ac_dir/" in
+    /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
+    *)
+      # OSF1 and SCO ODT 3.0 have their own names for install.
+      # Don't use installbsd from OSF since it installs stuff as root
+      # by default.
+      for ac_prog in ginstall scoinst install; do
+        if test -f $ac_dir/$ac_prog; then
+         if test $ac_prog = install &&
+            grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+           # AIX install.  It has an incompatible calling convention.
+           :
+         else
+           ac_cv_path_install="$ac_dir/$ac_prog -c"
+           break 2
+         fi
+       fi
+      done
+      ;;
+    esac
+  done
+  IFS="$ac_save_IFS"
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL="$ac_cv_path_install"
+  else
+    # As a last resort, use the slow shell script.  We don't cache a
+    # path for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the path is relative.
+    INSTALL="$ac_install_sh"
+  fi
+fi
+echo "$ac_t""$INSTALL" 1>&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
+echo "configure:628: checking whether build environment is sane" >&5
+# Just in case
+sleep 1
+echo timestamp > conftestfile
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null`
+   if test "$*" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftestfile`
+   fi
+   if test "$*" != "X $srcdir/configure conftestfile" \
+      && test "$*" != "X conftestfile $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      { echo "configure: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" 1>&2; exit 1; }
+   fi
+
+   test "$2" = conftestfile
+   )
+then
+   # Ok.
+   :
+else
+   { echo "configure: error: newly created file is older than distributed files!
+Check your system clock" 1>&2; exit 1; }
+fi
+rm -f conftest*
+echo "$ac_t""yes" 1>&6
+if test "$program_transform_name" = s,x,x,; then
+  program_transform_name=
+else
+  # Double any \ or $.  echo might interpret backslashes.
+  cat <<\EOF_SED > conftestsed
+s,\\,\\\\,g; s,\$,$$,g
+EOF_SED
+  program_transform_name="`echo $program_transform_name|sed -f conftestsed`"
+  rm -f conftestsed
+fi
+test "$program_prefix" != NONE &&
+  program_transform_name="s,^,${program_prefix},; $program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s,\$\$,${program_suffix},; $program_transform_name"
+
+# sed with no file args requires a program.
+test "$program_transform_name" = "" && program_transform_name="s,x,x,"
+
+echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
+echo "configure:685: checking whether ${MAKE-make} sets \${MAKE}" >&5
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftestmake <<\EOF
+all:
+       @echo 'ac_maketemp="${MAKE}"'
+EOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+  eval ac_cv_prog_make_${ac_make}_set=yes
+else
+  eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftestmake
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  SET_MAKE=
+else
+  echo "$ac_t""no" 1>&6
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+
+PACKAGE=nano
+
+VERSION=0.9.10
+
+if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
+  { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; }
+fi
+cat >> confdefs.h <<EOF
+#define PACKAGE "$PACKAGE"
+EOF
+
+cat >> confdefs.h <<EOF
+#define VERSION "$VERSION"
+EOF
+
+
+
+missing_dir=`cd $ac_aux_dir && pwd`
+echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
+echo "configure:731: checking for working aclocal" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf.  Sigh.
+if (aclocal --version) < /dev/null > /dev/null 2>&1; then
+   ACLOCAL=aclocal
+   echo "$ac_t""found" 1>&6
+else
+   ACLOCAL="$missing_dir/missing aclocal"
+   echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
+echo "configure:744: checking for working autoconf" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf.  Sigh.
+if (autoconf --version) < /dev/null > /dev/null 2>&1; then
+   AUTOCONF=autoconf
+   echo "$ac_t""found" 1>&6
+else
+   AUTOCONF="$missing_dir/missing autoconf"
+   echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working automake""... $ac_c" 1>&6
+echo "configure:757: checking for working automake" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf.  Sigh.
+if (automake --version) < /dev/null > /dev/null 2>&1; then
+   AUTOMAKE=automake
+   echo "$ac_t""found" 1>&6
+else
+   AUTOMAKE="$missing_dir/missing automake"
+   echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
+echo "configure:770: checking for working autoheader" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf.  Sigh.
+if (autoheader --version) < /dev/null > /dev/null 2>&1; then
+   AUTOHEADER=autoheader
+   echo "$ac_t""found" 1>&6
+else
+   AUTOHEADER="$missing_dir/missing autoheader"
+   echo "$ac_t""missing" 1>&6
+fi
+
+echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
+echo "configure:783: checking for working makeinfo" >&5
+# Run test in a subshell; some versions of sh will print an error if
+# an executable is not found, even if stderr is redirected.
+# Redirect stdin to placate older versions of autoconf.  Sigh.
+if (makeinfo --version) < /dev/null > /dev/null 2>&1; then
+   MAKEINFO=makeinfo
+   echo "$ac_t""found" 1>&6
+else
+   MAKEINFO="$missing_dir/missing makeinfo"
+   echo "$ac_t""missing" 1>&6
+fi
+
+
+
+
+
+ALL_LINGUAS="es de fr it"
+
+# Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:804: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_CC="gcc"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+  echo "$ac_t""$CC" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:834: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_prog_rejected=no
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
+        ac_prog_rejected=yes
+       continue
+      fi
+      ac_cv_prog_CC="cc"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# -gt 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    set dummy "$ac_dir/$ac_word" "$@"
+    shift
+    ac_cv_prog_CC="$@"
+  fi
+fi
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+  echo "$ac_t""$CC" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+  if test -z "$CC"; then
+    case "`uname -s`" in
+    *win32* | *WIN32*)
+      # Extract the first word of "cl", so it can be a program name with args.
+set dummy cl; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:885: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_CC="cl"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+  echo "$ac_t""$CC" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+ ;;
+    esac
+  fi
+  test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
+echo "configure:917: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+cat > conftest.$ac_ext << EOF
+
+#line 928 "configure"
+#include "confdefs.h"
+
+main(){return(0);}
+EOF
+if { (eval echo configure:933: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  ac_cv_prog_cc_works=yes
+  # If we can't run a trivial program, we are probably using a cross compiler.
+  if (./conftest; exit) 2>/dev/null; then
+    ac_cv_prog_cc_cross=no
+  else
+    ac_cv_prog_cc_cross=yes
+  fi
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  ac_cv_prog_cc_works=no
+fi
+rm -fr conftest*
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
+if test $ac_cv_prog_cc_works = no; then
+  { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
+fi
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
+echo "configure:959: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
+echo "configure:964: checking whether we are using GNU C" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.c <<EOF
+#ifdef __GNUC__
+  yes;
+#endif
+EOF
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:973: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+  ac_cv_prog_gcc=yes
+else
+  ac_cv_prog_gcc=no
+fi
+fi
+
+echo "$ac_t""$ac_cv_prog_gcc" 1>&6
+
+if test $ac_cv_prog_gcc = yes; then
+  GCC=yes
+else
+  GCC=
+fi
+
+ac_test_CFLAGS="${CFLAGS+set}"
+ac_save_CFLAGS="$CFLAGS"
+CFLAGS=
+echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
+echo "configure:992: checking whether ${CC-cc} accepts -g" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  echo 'void f(){}' > conftest.c
+if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
+  ac_cv_prog_cc_g=yes
+else
+  ac_cv_prog_cc_g=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS="$ac_save_CFLAGS"
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+
+echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6
+echo "configure:1024: checking for POSIXized ISC" >&5
+if test -d /etc/conf/kconfig.d &&
+  grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1
+then
+  echo "$ac_t""yes" 1>&6
+  ISC=yes # If later tests want to check for ISC.
+  cat >> confdefs.h <<\EOF
+#define _POSIX_SOURCE 1
+EOF
+
+  if test "$GCC" = yes; then
+    CC="$CC -posix"
+  else
+    CC="$CC -Xp"
+  fi
+else
+  echo "$ac_t""no" 1>&6
+  ISC=
+fi
+
+
+echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
+echo "configure:1046: checking how to run the C preprocessor" >&5
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+    # This must be in double quotes, not single quotes, because CPP may get
+  # substituted into the Makefile and "${CC-cc}" will confuse make.
+  CPP="${CC-cc} -E"
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp.
+  cat > conftest.$ac_ext <<EOF
+#line 1061 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1067: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  :
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  CPP="${CC-cc} -E -traditional-cpp"
+  cat > conftest.$ac_ext <<EOF
+#line 1078 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1084: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  :
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  CPP="${CC-cc} -nologo -E"
+  cat > conftest.$ac_ext <<EOF
+#line 1095 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1101: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  :
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  CPP=/lib/cpp
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+  ac_cv_prog_CPP="$CPP"
+fi
+  CPP="$ac_cv_prog_CPP"
+else
+  ac_cv_prog_CPP="$CPP"
+fi
+echo "$ac_t""$CPP" 1>&6
+
+echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
+echo "configure:1126: checking for ANSI C header files" >&5
+if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1131 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1139: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  ac_cv_header_stdc=yes
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+cat > conftest.$ac_ext <<EOF
+#line 1156 "configure"
+#include "confdefs.h"
+#include <string.h>
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "memchr" >/dev/null 2>&1; then
+  :
+else
+  rm -rf conftest*
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+cat > conftest.$ac_ext <<EOF
+#line 1174 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "free" >/dev/null 2>&1; then
+  :
+else
+  rm -rf conftest*
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+if test "$cross_compiling" = yes; then
+  :
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1195 "configure"
+#include "confdefs.h"
+#include <ctype.h>
+#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int main () { int i; for (i = 0; i < 256; i++)
+if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
+exit (0); }
+
+EOF
+if { (eval echo configure:1206: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+  :
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  ac_cv_header_stdc=no
+fi
+rm -fr conftest*
+fi
+
+fi
+fi
+
+echo "$ac_t""$ac_cv_header_stdc" 1>&6
+if test $ac_cv_header_stdc = yes; then
+  cat >> confdefs.h <<\EOF
+#define STDC_HEADERS 1
+EOF
+
+fi
+
+for ac_hdr in fcntl.h unistd.h malloc.h termios.h termio.h limits.h getopt.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:1233: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1238 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1243: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+
+# Check whether --enable-tiny or --disable-tiny was given.
+if test "${enable_tiny+set}" = set; then
+  enableval="$enable_tiny"
+  if test x$enableval = xyes; then
+    cat >> confdefs.h <<\EOF
+#define NANO_SMALL 1
+EOF
+ tiny_support=yes
+ fi
+fi
+
+
+echo $ac_n "checking whether to use slang""... $ac_c" 1>&6
+echo "configure:1283: checking whether to use slang" >&5
+CURSES_LIB_NAME=""
+# Check whether --with-slang or --without-slang was given.
+if test "${with_slang+set}" = set; then
+  withval="$with_slang"
+      case "$with_slang" in
+    yes)
+       echo "$ac_t""yes" 1>&6
+
+       ac_safe=`echo "slcurses.h" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for slcurses.h""... $ac_c" 1>&6
+echo "configure:1294: checking for slcurses.h" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1299 "configure"
+#include "confdefs.h"
+#include <slcurses.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1304: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  echo $ac_n "checking for SLcurses_newwin in -lslang""... $ac_c" 1>&6
+echo "configure:1321: checking for SLcurses_newwin in -lslang" >&5
+ac_lib_var=`echo slang'_'SLcurses_newwin | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lslang  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1329 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char SLcurses_newwin();
+
+int main() {
+SLcurses_newwin()
+; return 0; }
+EOF
+if { (eval echo configure:1340: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  cat >> confdefs.h <<\EOF
+#define USE_SLANG 1
+EOF
+ slang_support=yes
+               CURSES_LIB="-lslang" CURSES_LIB_NAME=slang
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+else
+  echo "$ac_t""no" 1>&6
+{ echo "configure: error: 
+*** The header file slcurses.h was not found. If you wish to use
+*** slang support this header file is required. Please either
+*** install a version of slang that includes the slcurses.h file or
+*** do not call the configure script with --with-slang
+" 1>&2; exit 1; }
+fi
+
+       ;;
+    no)
+       echo "$ac_t""no" 1>&6
+       ;;
+    *)
+       echo "$ac_t""yes" 1>&6
+
+       # Needed for AC_CHECK_HEADERS and AC_CHECK_LIB to look at
+       # alternate readline path
+       _ldflags=${LDFLAGS}
+       _cppflags=${CPPFLAGS}
+
+       # Add additional search path
+       LDFLAGS="-L$with_slang/lib $LDFLAGS"
+       CPPFLAGS="-I$with_slang/include $CPPFLAGS"
+
+       ac_safe=`echo "slcurses.h" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for slcurses.h""... $ac_c" 1>&6
+echo "configure:1392: checking for slcurses.h" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1397 "configure"
+#include "confdefs.h"
+#include <slcurses.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1402: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  echo $ac_n "checking for SLcurses_newwin in -lslang""... $ac_c" 1>&6
+echo "configure:1419: checking for SLcurses_newwin in -lslang" >&5
+ac_lib_var=`echo slang'_'SLcurses_newwin | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lslang  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1427 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char SLcurses_newwin();
+
+int main() {
+SLcurses_newwin()
+; return 0; }
+EOF
+if { (eval echo configure:1438: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  cat >> confdefs.h <<\EOF
+#define USE_SLANG 1
+EOF
+ slang_support=yes
+               CURSES_LIB="-L${with_slang}/lib -lslang"
+               CURSES_LIB_NAME=slang
+else
+  echo "$ac_t""no" 1>&6
+{ echo "configure: error: 
+*** The slang library was not found or the version you have installed
+*** is incorrect.
+" 1>&2; exit 1; }
+fi
+
+else
+  echo "$ac_t""no" 1>&6
+{ echo "configure: error: 
+*** The header file slcurses.h was not found. If you wish to use
+*** slang support this header file is required. Please either
+*** install a version of slang that includes the slcurses.h file or
+*** do not call the configure script with --with-slang
+" 1>&2; exit 1; }
+fi
+
+
+       LDFLAGS=${_ldflags}
+       ;;
+    esac
+fi
+
+
+for ac_func in snprintf vsnprintf
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:1487: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1492 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:1515: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+if test "x$ac_cv_func_snprintf" = "xno" -o "xac_cv_func_vsnprintf" = "xno"
+then
+       # Check whether --with-glib-prefix or --without-glib-prefix was given.
+if test "${with_glib_prefix+set}" = set; then
+  withval="$with_glib_prefix"
+  glib_config_prefix="$withval"
+else
+  glib_config_prefix=""
+fi
+
+# Check whether --with-glib-exec-prefix or --without-glib-exec-prefix was given.
+if test "${with_glib_exec_prefix+set}" = set; then
+  withval="$with_glib_exec_prefix"
+  glib_config_exec_prefix="$withval"
+else
+  glib_config_exec_prefix=""
+fi
+
+# Check whether --enable-glibtest or --disable-glibtest was given.
+if test "${enable_glibtest+set}" = set; then
+  enableval="$enable_glibtest"
+  :
+else
+  enable_glibtest=yes
+fi
+
+
+  if test x$glib_config_exec_prefix != x ; then
+     glib_config_args="$glib_config_args --exec-prefix=$glib_config_exec_prefix"
+     if test x${GLIB_CONFIG+set} != xset ; then
+        GLIB_CONFIG=$glib_config_exec_prefix/bin/glib-config
+     fi
+  fi
+  if test x$glib_config_prefix != x ; then
+     glib_config_args="$glib_config_args --prefix=$glib_config_prefix"
+     if test x${GLIB_CONFIG+set} != xset ; then
+        GLIB_CONFIG=$glib_config_prefix/bin/glib-config
+     fi
+  fi
+
+  for module in . glib
+  do
+      case "$module" in
+         gmodule) 
+             glib_config_args="$glib_config_args gmodule"
+         ;;
+         gthread) 
+             glib_config_args="$glib_config_args gthread"
+         ;;
+      esac
+  done
+
+  # Extract the first word of "glib-config", so it can be a program name with args.
+set dummy glib-config; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1594: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_GLIB_CONFIG'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$GLIB_CONFIG" in
+  /*)
+  ac_cv_path_GLIB_CONFIG="$GLIB_CONFIG" # Let the user override the test with a path.
+  ;;
+  ?:/*)                         
+  ac_cv_path_GLIB_CONFIG="$GLIB_CONFIG" # Let the user override the test with a dos path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do 
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_GLIB_CONFIG="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_GLIB_CONFIG" && ac_cv_path_GLIB_CONFIG="no"
+  ;;
+esac
+fi
+GLIB_CONFIG="$ac_cv_path_GLIB_CONFIG"
+if test -n "$GLIB_CONFIG"; then
+  echo "$ac_t""$GLIB_CONFIG" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+  min_glib_version=1.2.4
+  echo $ac_n "checking for GLIB - version >= $min_glib_version""... $ac_c" 1>&6
+echo "configure:1629: checking for GLIB - version >= $min_glib_version" >&5
+  no_glib=""
+  if test "$GLIB_CONFIG" = "no" ; then
+    no_glib=yes
+  else
+    GLIB_CFLAGS=`$GLIB_CONFIG $glib_config_args --cflags`
+    GLIB_LIBS=`$GLIB_CONFIG $glib_config_args --libs`
+    glib_config_major_version=`$GLIB_CONFIG $glib_config_args --version | \
+           sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'`
+    glib_config_minor_version=`$GLIB_CONFIG $glib_config_args --version | \
+           sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'`
+    glib_config_micro_version=`$GLIB_CONFIG $glib_config_args --version | \
+           sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'`
+    if test "x$enable_glibtest" = "xyes" ; then
+      ac_save_CFLAGS="$CFLAGS"
+      ac_save_LIBS="$LIBS"
+      CFLAGS="$CFLAGS $GLIB_CFLAGS"
+      LIBS="$GLIB_LIBS $LIBS"
+      rm -f conf.glibtest
+      if test "$cross_compiling" = yes; then
+  echo $ac_n "cross compiling; assumed OK... $ac_c"
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1652 "configure"
+#include "confdefs.h"
+
+#include <glib.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+int 
+main ()
+{
+  int major, minor, micro;
+  char *tmp_version;
+
+  system ("touch conf.glibtest");
+
+  /* HP/UX 9 (%@#!) writes to sscanf strings */
+  tmp_version = g_strdup("$min_glib_version");
+  if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
+     printf("%s, bad version string\n", "$min_glib_version");
+     exit(1);
+   }
+
+  if ((glib_major_version != $glib_config_major_version) ||
+      (glib_minor_version != $glib_config_minor_version) ||
+      (glib_micro_version != $glib_config_micro_version))
+    {
+      printf("\n*** 'glib-config --version' returned %d.%d.%d, but GLIB (%d.%d.%d)\n", 
+             $glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version,
+             glib_major_version, glib_minor_version, glib_micro_version);
+      printf ("*** was found! If glib-config was correct, then it is best\n");
+      printf ("*** to remove the old version of GLIB. You may also be able to fix the error\n");
+      printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n");
+      printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n");
+      printf("*** required on your system.\n");
+      printf("*** If glib-config was wrong, set the environment variable GLIB_CONFIG\n");
+      printf("*** to point to the correct copy of glib-config, and remove the file config.cache\n");
+      printf("*** before re-running configure\n");
+    } 
+  else if ((glib_major_version != GLIB_MAJOR_VERSION) ||
+          (glib_minor_version != GLIB_MINOR_VERSION) ||
+           (glib_micro_version != GLIB_MICRO_VERSION))
+    {
+      printf("*** GLIB header files (version %d.%d.%d) do not match\n",
+            GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION);
+      printf("*** library (version %d.%d.%d)\n",
+            glib_major_version, glib_minor_version, glib_micro_version);
+    }
+  else
+    {
+      if ((glib_major_version > major) ||
+        ((glib_major_version == major) && (glib_minor_version > minor)) ||
+        ((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro)))
+      {
+        return 0;
+       }
+     else
+      {
+        printf("\n*** An old version of GLIB (%d.%d.%d) was found.\n",
+               glib_major_version, glib_minor_version, glib_micro_version);
+        printf("*** You need a version of GLIB newer than %d.%d.%d. The latest version of\n",
+              major, minor, micro);
+        printf("*** GLIB is always available from ftp://ftp.gtk.org.\n");
+        printf("***\n");
+        printf("*** If you have already installed a sufficiently new version, this error\n");
+        printf("*** probably means that the wrong copy of the glib-config shell script is\n");
+        printf("*** being found. The easiest way to fix this is to remove the old version\n");
+        printf("*** of GLIB, but you can also set the GLIB_CONFIG environment to point to the\n");
+        printf("*** correct copy of glib-config. (In this case, you will have to\n");
+        printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n");
+        printf("*** so that the correct libraries are found at run-time))\n");
+      }
+    }
+  return 1;
+}
+
+EOF
+if { (eval echo configure:1728: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+  :
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  no_glib=yes
+fi
+rm -fr conftest*
+fi
+
+       CFLAGS="$ac_save_CFLAGS"
+       LIBS="$ac_save_LIBS"
+     fi
+  fi
+  if test "x$no_glib" = x ; then
+     echo "$ac_t""yes" 1>&6
+     :     
+  else
+     echo "$ac_t""no" 1>&6
+     if test "$GLIB_CONFIG" = "no" ; then
+       echo "*** The glib-config script installed by GLIB could not be found"
+       echo "*** If GLIB was installed in PREFIX, make sure PREFIX/bin is in"
+       echo "*** your path, or set the GLIB_CONFIG environment variable to the"
+       echo "*** full path to glib-config."
+     else
+       if test -f conf.glibtest ; then
+        :
+       else
+          echo "*** Could not run GLIB test program, checking why..."
+          CFLAGS="$CFLAGS $GLIB_CFLAGS"
+          LIBS="$LIBS $GLIB_LIBS"
+          cat > conftest.$ac_ext <<EOF
+#line 1762 "configure"
+#include "confdefs.h"
+
+#include <glib.h>
+#include <stdio.h>
+
+int main() {
+ return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); 
+; return 0; }
+EOF
+if { (eval echo configure:1772: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+   echo "*** The test program compiled, but did not run. This usually means"
+          echo "*** that the run-time linker is not finding GLIB or finding the wrong"
+          echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your"
+          echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
+          echo "*** to the installed location  Also, make sure you have run ldconfig if that"
+          echo "*** is required on your system"
+         echo "***"
+          echo "*** If you have an old version installed, it is best to remove it, although"
+          echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"
+          echo "***"
+          echo "*** If you have a RedHat 5.0 system, you should remove the GTK package that"
+          echo "*** came with the system with the command"
+          echo "***"
+          echo "***    rpm --erase --nodeps gtk gtk-devel" 
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+   echo "*** The test program failed to compile or link. See the file config.log for the"
+          echo "*** exact error that occured. This usually means GLIB was incorrectly installed"
+          echo "*** or that you have moved GLIB since it was installed. In the latter case, you"
+          echo "*** may want to edit the glib-config script: $GLIB_CONFIG" 
+fi
+rm -f conftest*
+          CFLAGS="$ac_save_CFLAGS"
+          LIBS="$ac_save_LIBS"
+       fi
+     fi
+     GLIB_CFLAGS=""
+     GLIB_LIBS=""
+     { echo "configure: error: 
+*** snprintf() and/or vsnprintf() not found.  GLIB not found either.
+*** You need both snprintf() and vsnprintf().  Alternatively you can
+*** install the GLIB library which can be found at ftp://ftp.gtk.org/." 1>&2; exit 1; }
+  fi
+  
+  
+  rm -f conf.glibtest
+
+       glib_cflags=`$GLIB_CONFIG --cflags glib`
+       glib_libs=`$GLIB_CONFIG --libs glib`
+fi
+
+
+echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
+echo "configure:1819: checking return type of signal handlers" >&5
+if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1824 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <signal.h>
+#ifdef signal
+#undef signal
+#endif
+#ifdef __cplusplus
+extern "C" void (*signal (int, void (*)(int)))(int);
+#else
+void (*signal ()) ();
+#endif
+
+int main() {
+int i;
+; return 0; }
+EOF
+if { (eval echo configure:1841: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  ac_cv_type_signal=void
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_type_signal=int
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_type_signal" 1>&6
+cat >> confdefs.h <<EOF
+#define RETSIGTYPE $ac_cv_type_signal
+EOF
+
+
+echo $ac_n "checking for vprintf""... $ac_c" 1>&6
+echo "configure:1860: checking for vprintf" >&5
+if eval "test \"`echo '$''{'ac_cv_func_vprintf'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1865 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char vprintf(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char vprintf();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_vprintf) || defined (__stub___vprintf)
+choke me
+#else
+vprintf();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:1888: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_vprintf=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_vprintf=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'vprintf`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  cat >> confdefs.h <<\EOF
+#define HAVE_VPRINTF 1
+EOF
+
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+if test "$ac_cv_func_vprintf" != yes; then
+echo $ac_n "checking for _doprnt""... $ac_c" 1>&6
+echo "configure:1912: checking for _doprnt" >&5
+if eval "test \"`echo '$''{'ac_cv_func__doprnt'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1917 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char _doprnt(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char _doprnt();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub__doprnt) || defined (__stub____doprnt)
+choke me
+#else
+_doprnt();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:1940: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func__doprnt=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func__doprnt=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'_doprnt`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  cat >> confdefs.h <<\EOF
+#define HAVE_DOPRNT 1
+EOF
+
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+fi
+
+for ac_func in getopt_long
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:1967: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 1972 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:1995: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+
+
+
+if eval "test x$CURSES_LIB_NAME = x"
+then
+    for ac_hdr in curses.h ncurses.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:2028: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2033 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:2038: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+    echo $ac_n "checking for tgetent in -lncurses""... $ac_c" 1>&6
+echo "configure:2065: checking for tgetent in -lncurses" >&5
+ac_lib_var=`echo ncurses'_'tgetent | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lncurses  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2073 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char tgetent();
+
+int main() {
+tgetent()
+; return 0; }
+EOF
+if { (eval echo configure:2084: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  CURSES_LIB="-lncurses" CURSES_LIB_NAME=ncurses
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+fi
+
+if eval "test x$CURSES_LIB_NAME = x"
+then
+    echo $ac_n "checking for tgetent in -lcurses""... $ac_c" 1>&6
+echo "configure:2109: checking for tgetent in -lcurses" >&5
+ac_lib_var=`echo curses'_'tgetent | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lcurses  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2117 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char tgetent();
+
+int main() {
+tgetent()
+; return 0; }
+EOF
+if { (eval echo configure:2128: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  CURSES_LIB="-lcurses" CURSES_LIB_NAME=curses
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+fi
+
+if eval "test x$CURSES_LIB_NAME = x"
+then
+    echo $ac_n "checking for tgetent in -ltermcap""... $ac_c" 1>&6
+echo "configure:2153: checking for tgetent in -ltermcap" >&5
+ac_lib_var=`echo termcap'_'tgetent | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-ltermcap  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2161 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char tgetent();
+
+int main() {
+tgetent()
+; return 0; }
+EOF
+if { (eval echo configure:2172: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  CURSES_LIB="-ltermcap" CURSES_LIB_NAME=termcap
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+fi
+
+if eval "test x$CURSES_LIB_NAME = x"
+then
+    echo "configure: warning: 
+*** No termcap lib available, consider getting the official ncurses
+*** distribution from ftp://ftp.gnu.org/pub/gnu/ncurses if you get
+*** errors compiling nano." 1>&2
+else
+    echo "$ac_t"""Using $CURSES_LIB_NAME as the termcap library"" 1>&6
+fi
+
+
+echo $ac_n "checking for wresize in -l$CURSES_LIB_NAME""... $ac_c" 1>&6
+echo "configure:2206: checking for wresize in -l$CURSES_LIB_NAME" >&5
+ac_lib_var=`echo $CURSES_LIB_NAME'_'wresize | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-l$CURSES_LIB_NAME  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2214 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char wresize();
+
+int main() {
+wresize()
+; return 0; }
+EOF
+if { (eval echo configure:2225: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  cat >> confdefs.h <<\EOF
+#define HAVE_WRESIZE 1
+EOF
+
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+
+
+LIBS="$LIBS $CURSES_LIB"
+# Check whether --enable-debug or --disable-debug was given.
+if test "${enable_debug+set}" = set; then
+  enableval="$enable_debug"
+  :
+fi
+
+
+
+
+if test "x$glib_cflags" != "x"
+then
+       CFLAGS="$CFLAGS $glib_cflags"
+fi
+if test "x$glib_libs" != "x"
+then
+       LDFLAGS="$LDFLAGS $glib_libs"
+fi
+
+# Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:2272: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_RANLIB="ranlib"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
+fi
+fi
+RANLIB="$ac_cv_prog_RANLIB"
+if test -n "$RANLIB"; then
+  echo "$ac_t""$RANLIB" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+echo $ac_n "checking for working const""... $ac_c" 1>&6
+echo "configure:2300: checking for working const" >&5
+if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2305 "configure"
+#include "confdefs.h"
+
+int main() {
+
+/* Ultrix mips cc rejects this.  */
+typedef int charset[2]; const charset x;
+/* SunOS 4.1.1 cc rejects this.  */
+char const *const *ccp;
+char **p;
+/* NEC SVR4.0.2 mips cc rejects this.  */
+struct point {int x, y;};
+static struct point const zero = {0,0};
+/* AIX XL C 1.02.0.0 rejects this.
+   It does not let you subtract one const X* pointer from another in an arm
+   of an if-expression whose if-part is not a constant expression */
+const char *g = "string";
+ccp = &g + (g ? g-g : 0);
+/* HPUX 7.0 cc rejects these. */
+++ccp;
+p = (char**) ccp;
+ccp = (char const *const *) p;
+{ /* SCO 3.2v4 cc rejects this.  */
+  char *t;
+  char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+  *t++ = 0;
+}
+{ /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
+  int x[] = {25, 17};
+  const int *foo = &x[0];
+  ++foo;
+}
+{ /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+  typedef const int *iptr;
+  iptr p = 0;
+  ++p;
+}
+{ /* AIX XL C 1.02.0.0 rejects this saying
+     "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+  struct s { int j; const int *ap[3]; };
+  struct s *b; b->j = 5;
+}
+{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+  const int foo = 10;
+}
+
+; return 0; }
+EOF
+if { (eval echo configure:2354: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  ac_cv_c_const=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_c_const=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_c_const" 1>&6
+if test $ac_cv_c_const = no; then
+  cat >> confdefs.h <<\EOF
+#define const 
+EOF
+
+fi
+
+echo $ac_n "checking for inline""... $ac_c" 1>&6
+echo "configure:2375: checking for inline" >&5
+if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+  cat > conftest.$ac_ext <<EOF
+#line 2382 "configure"
+#include "confdefs.h"
+
+int main() {
+} $ac_kw foo() {
+; return 0; }
+EOF
+if { (eval echo configure:2389: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  ac_cv_c_inline=$ac_kw; break
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+fi
+rm -f conftest*
+done
+
+fi
+
+echo "$ac_t""$ac_cv_c_inline" 1>&6
+case "$ac_cv_c_inline" in
+  inline | yes) ;;
+  no) cat >> confdefs.h <<\EOF
+#define inline 
+EOF
+ ;;
+  *)  cat >> confdefs.h <<EOF
+#define inline $ac_cv_c_inline
+EOF
+ ;;
+esac
+
+echo $ac_n "checking for off_t""... $ac_c" 1>&6
+echo "configure:2415: checking for off_t" >&5
+if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2420 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#if STDC_HEADERS
+#include <stdlib.h>
+#include <stddef.h>
+#endif
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "(^|[^a-zA-Z_0-9])off_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
+  rm -rf conftest*
+  ac_cv_type_off_t=yes
+else
+  rm -rf conftest*
+  ac_cv_type_off_t=no
+fi
+rm -f conftest*
+
+fi
+echo "$ac_t""$ac_cv_type_off_t" 1>&6
+if test $ac_cv_type_off_t = no; then
+  cat >> confdefs.h <<\EOF
+#define off_t long
+EOF
+
+fi
+
+echo $ac_n "checking for size_t""... $ac_c" 1>&6
+echo "configure:2448: checking for size_t" >&5
+if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2453 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#if STDC_HEADERS
+#include <stdlib.h>
+#include <stddef.h>
+#endif
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "(^|[^a-zA-Z_0-9])size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
+  rm -rf conftest*
+  ac_cv_type_size_t=yes
+else
+  rm -rf conftest*
+  ac_cv_type_size_t=no
+fi
+rm -f conftest*
+
+fi
+echo "$ac_t""$ac_cv_type_size_t" 1>&6
+if test $ac_cv_type_size_t = no; then
+  cat >> confdefs.h <<\EOF
+#define size_t unsigned
+EOF
+
+fi
+
+# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
+# for constant arguments.  Useless!
+echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
+echo "configure:2483: checking for working alloca.h" >&5
+if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2488 "configure"
+#include "confdefs.h"
+#include <alloca.h>
+int main() {
+char *p = alloca(2 * sizeof(int));
+; return 0; }
+EOF
+if { (eval echo configure:2495: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  ac_cv_header_alloca_h=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_header_alloca_h=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_header_alloca_h" 1>&6
+if test $ac_cv_header_alloca_h = yes; then
+  cat >> confdefs.h <<\EOF
+#define HAVE_ALLOCA_H 1
+EOF
+
+fi
+
+echo $ac_n "checking for alloca""... $ac_c" 1>&6
+echo "configure:2516: checking for alloca" >&5
+if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2521 "configure"
+#include "confdefs.h"
+
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+#else
+# ifdef _MSC_VER
+#  include <malloc.h>
+#  define alloca _alloca
+# else
+#  if HAVE_ALLOCA_H
+#   include <alloca.h>
+#  else
+#   ifdef _AIX
+ #pragma alloca
+#   else
+#    ifndef alloca /* predefined by HP cc +Olibcalls */
+char *alloca ();
+#    endif
+#   endif
+#  endif
+# endif
+#endif
+
+int main() {
+char *p = (char *) alloca(1);
+; return 0; }
+EOF
+if { (eval echo configure:2549: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  ac_cv_func_alloca_works=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_func_alloca_works=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_func_alloca_works" 1>&6
+if test $ac_cv_func_alloca_works = yes; then
+  cat >> confdefs.h <<\EOF
+#define HAVE_ALLOCA 1
+EOF
+
+fi
+
+if test $ac_cv_func_alloca_works = no; then
+  # The SVR3 libPW and SVR4 libucb both contain incompatible functions
+  # that cause trouble.  Some versions do not even contain alloca or
+  # contain a buggy version.  If you still want to use their alloca,
+  # use ar to extract alloca.o from them instead of compiling alloca.c.
+  ALLOCA=alloca.${ac_objext}
+  cat >> confdefs.h <<\EOF
+#define C_ALLOCA 1
+EOF
+
+
+echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
+echo "configure:2581: checking whether alloca needs Cray hooks" >&5
+if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2586 "configure"
+#include "confdefs.h"
+#if defined(CRAY) && ! defined(CRAY2)
+webecray
+#else
+wenotbecray
+#endif
+
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "webecray" >/dev/null 2>&1; then
+  rm -rf conftest*
+  ac_cv_os_cray=yes
+else
+  rm -rf conftest*
+  ac_cv_os_cray=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$ac_cv_os_cray" 1>&6
+if test $ac_cv_os_cray = yes; then
+for ac_func in _getb67 GETB67 getb67; do
+  echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:2611: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2616 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:2639: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  cat >> confdefs.h <<EOF
+#define CRAY_STACKSEG_END $ac_func
+EOF
+
+  break
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+done
+fi
+
+echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
+echo "configure:2666: checking stack direction for C alloca" >&5
+if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test "$cross_compiling" = yes; then
+  ac_cv_c_stack_direction=0
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2674 "configure"
+#include "confdefs.h"
+find_stack_direction ()
+{
+  static char *addr = 0;
+  auto char dummy;
+  if (addr == 0)
+    {
+      addr = &dummy;
+      return find_stack_direction ();
+    }
+  else
+    return (&dummy > addr) ? 1 : -1;
+}
+main ()
+{
+  exit (find_stack_direction() < 0);
+}
+EOF
+if { (eval echo configure:2693: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+  ac_cv_c_stack_direction=1
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  ac_cv_c_stack_direction=-1
+fi
+rm -fr conftest*
+fi
+
+fi
+
+echo "$ac_t""$ac_cv_c_stack_direction" 1>&6
+cat >> confdefs.h <<EOF
+#define STACK_DIRECTION $ac_cv_c_stack_direction
+EOF
+
+fi
+
+for ac_hdr in unistd.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:2718: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2723 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:2728: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+for ac_func in getpagesize
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:2757: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2762 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:2785: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+echo $ac_n "checking for working mmap""... $ac_c" 1>&6
+echo "configure:2810: checking for working mmap" >&5
+if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test "$cross_compiling" = yes; then
+  ac_cv_func_mmap_fixed_mapped=no
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2818 "configure"
+#include "confdefs.h"
+
+/* Thanks to Mike Haertel and Jim Avera for this test.
+   Here is a matrix of mmap possibilities:
+       mmap private not fixed
+       mmap private fixed at somewhere currently unmapped
+       mmap private fixed at somewhere already mapped
+       mmap shared not fixed
+       mmap shared fixed at somewhere currently unmapped
+       mmap shared fixed at somewhere already mapped
+   For private mappings, we should verify that changes cannot be read()
+   back from the file, nor mmap's back from the file at a different
+   address.  (There have been systems where private was not correctly
+   implemented like the infamous i386 svr4.0, and systems where the
+   VM page cache was not coherent with the filesystem buffer cache
+   like early versions of FreeBSD and possibly contemporary NetBSD.)
+   For shared mappings, we should conversely verify that changes get
+   propogated back to all the places they're supposed to be.
+
+   Grep wants private fixed already mapped.
+   The main things grep needs to know about mmap are:
+   * does it exist and is it safe to write into the mmap'd area
+   * how to use it (BSD variants)  */
+#include <sys/types.h>
+#include <fcntl.h>
+#include <sys/mman.h>
+
+/* This mess was copied from the GNU getpagesize.h.  */
+#ifndef HAVE_GETPAGESIZE
+# ifdef HAVE_UNISTD_H
+#  include <unistd.h>
+# endif
+
+/* Assume that all systems that can run configure have sys/param.h.  */
+# ifndef HAVE_SYS_PARAM_H
+#  define HAVE_SYS_PARAM_H 1
+# endif
+
+# ifdef _SC_PAGESIZE
+#  define getpagesize() sysconf(_SC_PAGESIZE)
+# else /* no _SC_PAGESIZE */
+#  ifdef HAVE_SYS_PARAM_H
+#   include <sys/param.h>
+#   ifdef EXEC_PAGESIZE
+#    define getpagesize() EXEC_PAGESIZE
+#   else /* no EXEC_PAGESIZE */
+#    ifdef NBPG
+#     define getpagesize() NBPG * CLSIZE
+#     ifndef CLSIZE
+#      define CLSIZE 1
+#     endif /* no CLSIZE */
+#    else /* no NBPG */
+#     ifdef NBPC
+#      define getpagesize() NBPC
+#     else /* no NBPC */
+#      ifdef PAGESIZE
+#       define getpagesize() PAGESIZE
+#      endif /* PAGESIZE */
+#     endif /* no NBPC */
+#    endif /* no NBPG */
+#   endif /* no EXEC_PAGESIZE */
+#  else /* no HAVE_SYS_PARAM_H */
+#   define getpagesize() 8192  /* punt totally */
+#  endif /* no HAVE_SYS_PARAM_H */
+# endif /* no _SC_PAGESIZE */
+
+#endif /* no HAVE_GETPAGESIZE */
+
+#ifdef __cplusplus
+extern "C" { void *malloc(unsigned); }
+#else
+char *malloc();
+#endif
+
+int
+main()
+{
+       char *data, *data2, *data3;
+       int i, pagesize;
+       int fd;
+
+       pagesize = getpagesize();
+
+       /*
+        * First, make a file with some known garbage in it.
+        */
+       data = malloc(pagesize);
+       if (!data)
+               exit(1);
+       for (i = 0; i < pagesize; ++i)
+               *(data + i) = rand();
+       umask(0);
+       fd = creat("conftestmmap", 0600);
+       if (fd < 0)
+               exit(1);
+       if (write(fd, data, pagesize) != pagesize)
+               exit(1);
+       close(fd);
+
+       /*
+        * Next, try to mmap the file at a fixed address which
+        * already has something else allocated at it.  If we can,
+        * also make sure that we see the same garbage.
+        */
+       fd = open("conftestmmap", O_RDWR);
+       if (fd < 0)
+               exit(1);
+       data2 = malloc(2 * pagesize);
+       if (!data2)
+               exit(1);
+       data2 += (pagesize - ((int) data2 & (pagesize - 1))) & (pagesize - 1);
+       if (data2 != mmap(data2, pagesize, PROT_READ | PROT_WRITE,
+           MAP_PRIVATE | MAP_FIXED, fd, 0L))
+               exit(1);
+       for (i = 0; i < pagesize; ++i)
+               if (*(data + i) != *(data2 + i))
+                       exit(1);
+
+       /*
+        * Finally, make sure that changes to the mapped area
+        * do not percolate back to the file as seen by read().
+        * (This is a bug on some variants of i386 svr4.0.)
+        */
+       for (i = 0; i < pagesize; ++i)
+               *(data2 + i) = *(data2 + i) + 1;
+       data3 = malloc(pagesize);
+       if (!data3)
+               exit(1);
+       if (read(fd, data3, pagesize) != pagesize)
+               exit(1);
+       for (i = 0; i < pagesize; ++i)
+               if (*(data + i) != *(data3 + i))
+                       exit(1);
+       close(fd);
+       unlink("conftestmmap");
+       exit(0);
+}
+
+EOF
+if { (eval echo configure:2958: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+  ac_cv_func_mmap_fixed_mapped=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  ac_cv_func_mmap_fixed_mapped=no
+fi
+rm -fr conftest*
+fi
+
+fi
+
+echo "$ac_t""$ac_cv_func_mmap_fixed_mapped" 1>&6
+if test $ac_cv_func_mmap_fixed_mapped = yes; then
+  cat >> confdefs.h <<\EOF
+#define HAVE_MMAP 1
+EOF
+
+fi
+
+                              
+   for ac_hdr in argz.h limits.h locale.h nl_types.h malloc.h string.h \
+unistd.h sys/param.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:2986: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2991 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:2996: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+   for ac_func in getcwd munmap putenv setenv setlocale strchr strcasecmp \
+strdup __argz_count __argz_stringify __argz_next
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:3026: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 3031 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:3054: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+
+   if test "${ac_cv_func_stpcpy+set}" != "set"; then
+     for ac_func in stpcpy
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:3083: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 3088 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:3111: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+   fi
+   if test "${ac_cv_func_stpcpy}" = "yes"; then
+     cat >> confdefs.h <<\EOF
+#define HAVE_STPCPY 1
+EOF
+
+   fi
+
+   if test $ac_cv_header_locale_h = yes; then
+    echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6
+echo "configure:3145: checking for LC_MESSAGES" >&5
+if eval "test \"`echo '$''{'am_cv_val_LC_MESSAGES'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 3150 "configure"
+#include "confdefs.h"
+#include <locale.h>
+int main() {
+return LC_MESSAGES
+; return 0; }
+EOF
+if { (eval echo configure:3157: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  am_cv_val_LC_MESSAGES=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  am_cv_val_LC_MESSAGES=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$am_cv_val_LC_MESSAGES" 1>&6
+    if test $am_cv_val_LC_MESSAGES = yes; then
+      cat >> confdefs.h <<\EOF
+#define HAVE_LC_MESSAGES 1
+EOF
+
+    fi
+  fi
+   echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6
+echo "configure:3178: checking whether NLS is requested" >&5
+        # Check whether --enable-nls or --disable-nls was given.
+if test "${enable_nls+set}" = set; then
+  enableval="$enable_nls"
+  USE_NLS=$enableval
+else
+  USE_NLS=yes
+fi
+
+    echo "$ac_t""$USE_NLS" 1>&6
+    
+
+    USE_INCLUDED_LIBINTL=no
+
+        if test "$USE_NLS" = "yes"; then
+      cat >> confdefs.h <<\EOF
+#define ENABLE_NLS 1
+EOF
+
+      echo $ac_n "checking whether included gettext is requested""... $ac_c" 1>&6
+echo "configure:3198: checking whether included gettext is requested" >&5
+      # Check whether --with-included-gettext or --without-included-gettext was given.
+if test "${with_included_gettext+set}" = set; then
+  withval="$with_included_gettext"
+  nls_cv_force_use_gnu_gettext=$withval
+else
+  nls_cv_force_use_gnu_gettext=no
+fi
+
+      echo "$ac_t""$nls_cv_force_use_gnu_gettext" 1>&6
+
+      nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
+      if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
+                                       nls_cv_header_intl=
+       nls_cv_header_libgt=
+       CATOBJEXT=NONE
+
+       ac_safe=`echo "libintl.h" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for libintl.h""... $ac_c" 1>&6
+echo "configure:3217: checking for libintl.h" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 3222 "configure"
+#include "confdefs.h"
+#include <libintl.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:3227: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  echo $ac_n "checking for gettext in libc""... $ac_c" 1>&6
+echo "configure:3244: checking for gettext in libc" >&5
+if eval "test \"`echo '$''{'gt_cv_func_gettext_libc'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 3249 "configure"
+#include "confdefs.h"
+#include <libintl.h>
+int main() {
+return (int) gettext ("")
+; return 0; }
+EOF
+if { (eval echo configure:3256: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  gt_cv_func_gettext_libc=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  gt_cv_func_gettext_libc=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$gt_cv_func_gettext_libc" 1>&6
+
+          if test "$gt_cv_func_gettext_libc" != "yes"; then
+            echo $ac_n "checking for bindtextdomain in -lintl""... $ac_c" 1>&6
+echo "configure:3272: checking for bindtextdomain in -lintl" >&5
+ac_lib_var=`echo intl'_'bindtextdomain | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lintl  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 3280 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char bindtextdomain();
+
+int main() {
+bindtextdomain()
+; return 0; }
+EOF
+if { (eval echo configure:3291: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  echo $ac_n "checking for gettext in libintl""... $ac_c" 1>&6
+echo "configure:3307: checking for gettext in libintl" >&5
+if eval "test \"`echo '$''{'gt_cv_func_gettext_libintl'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  echo $ac_n "checking for gettext in -lintl""... $ac_c" 1>&6
+echo "configure:3312: checking for gettext in -lintl" >&5
+ac_lib_var=`echo intl'_'gettext | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lintl  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 3320 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char gettext();
+
+int main() {
+gettext()
+; return 0; }
+EOF
+if { (eval echo configure:3331: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  gt_cv_func_gettext_libintl=yes
+else
+  echo "$ac_t""no" 1>&6
+gt_cv_func_gettext_libintl=no
+fi
+
+fi
+
+echo "$ac_t""$gt_cv_func_gettext_libintl" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+          fi
+
+          if test "$gt_cv_func_gettext_libc" = "yes" \
+             || test "$gt_cv_func_gettext_libintl" = "yes"; then
+             cat >> confdefs.h <<\EOF
+#define HAVE_GETTEXT 1
+EOF
+
+             # Extract the first word of "msgfmt", so it can be a program name with args.
+set dummy msgfmt; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:3370: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$MSGFMT" in
+  /*)
+  ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then
+       ac_cv_path_MSGFMT="$ac_dir/$ac_word"
+       break
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="no"
+  ;;
+esac
+fi
+MSGFMT="$ac_cv_path_MSGFMT"
+if test -n "$MSGFMT"; then
+  echo "$ac_t""$MSGFMT" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+             if test "$MSGFMT" != "no"; then
+               for ac_func in dcgettext
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:3404: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 3409 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:3432: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+               # Extract the first word of "gmsgfmt", so it can be a program name with args.
+set dummy gmsgfmt; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:3459: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$GMSGFMT" in
+  /*)
+  ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
+  ;;
+  ?:/*)                         
+  ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a dos path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do 
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_GMSGFMT="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
+  ;;
+esac
+fi
+GMSGFMT="$ac_cv_path_GMSGFMT"
+if test -n "$GMSGFMT"; then
+  echo "$ac_t""$GMSGFMT" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+               # Extract the first word of "xgettext", so it can be a program name with args.
+set dummy xgettext; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:3495: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$XGETTEXT" in
+  /*)
+  ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then
+       ac_cv_path_XGETTEXT="$ac_dir/$ac_word"
+       break
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
+  ;;
+esac
+fi
+XGETTEXT="$ac_cv_path_XGETTEXT"
+if test -n "$XGETTEXT"; then
+  echo "$ac_t""$XGETTEXT" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+               cat > conftest.$ac_ext <<EOF
+#line 3527 "configure"
+#include "confdefs.h"
+
+int main() {
+extern int _nl_msg_cat_cntr;
+                              return _nl_msg_cat_cntr
+; return 0; }
+EOF
+if { (eval echo configure:3535: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  CATOBJEXT=.gmo
+                  DATADIRNAME=share
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  CATOBJEXT=.mo
+                  DATADIRNAME=lib
+fi
+rm -f conftest*
+               INSTOBJEXT=.mo
+             fi
+           fi
+       
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+
+        if test "$CATOBJEXT" = "NONE"; then
+         echo $ac_n "checking whether catgets can be used""... $ac_c" 1>&6
+echo "configure:3558: checking whether catgets can be used" >&5
+         # Check whether --with-catgets or --without-catgets was given.
+if test "${with_catgets+set}" = set; then
+  withval="$with_catgets"
+  nls_cv_use_catgets=$withval
+else
+  nls_cv_use_catgets=no
+fi
+
+         echo "$ac_t""$nls_cv_use_catgets" 1>&6
+
+         if test "$nls_cv_use_catgets" = "yes"; then
+                   echo $ac_n "checking for main in -li""... $ac_c" 1>&6
+echo "configure:3571: checking for main in -li" >&5
+ac_lib_var=`echo i'_'main | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-li  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 3579 "configure"
+#include "confdefs.h"
+
+int main() {
+main()
+; return 0; }
+EOF
+if { (eval echo configure:3586: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_lib=HAVE_LIB`echo i | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+  LIBS="-li $LIBS"
+
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+           echo $ac_n "checking for catgets""... $ac_c" 1>&6
+echo "configure:3614: checking for catgets" >&5
+if eval "test \"`echo '$''{'ac_cv_func_catgets'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 3619 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char catgets(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char catgets();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_catgets) || defined (__stub___catgets)
+choke me
+#else
+catgets();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:3642: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_catgets=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_catgets=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'catgets`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  cat >> confdefs.h <<\EOF
+#define HAVE_CATGETS 1
+EOF
+
+              INTLOBJS="\$(CATOBJS)"
+              # Extract the first word of "gencat", so it can be a program name with args.
+set dummy gencat; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:3664: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_GENCAT'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$GENCAT" in
+  /*)
+  ac_cv_path_GENCAT="$GENCAT" # Let the user override the test with a path.
+  ;;
+  ?:/*)                         
+  ac_cv_path_GENCAT="$GENCAT" # Let the user override the test with a dos path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do 
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_GENCAT="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_GENCAT" && ac_cv_path_GENCAT="no"
+  ;;
+esac
+fi
+GENCAT="$ac_cv_path_GENCAT"
+if test -n "$GENCAT"; then
+  echo "$ac_t""$GENCAT" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+              if test "$GENCAT" != "no"; then
+                # Extract the first word of "gmsgfmt", so it can be a program name with args.
+set dummy gmsgfmt; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:3700: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$GMSGFMT" in
+  /*)
+  ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
+  ;;
+  ?:/*)                         
+  ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a dos path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do 
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_GMSGFMT="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="no"
+  ;;
+esac
+fi
+GMSGFMT="$ac_cv_path_GMSGFMT"
+if test -n "$GMSGFMT"; then
+  echo "$ac_t""$GMSGFMT" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+                if test "$GMSGFMT" = "no"; then
+                  # Extract the first word of "msgfmt", so it can be a program name with args.
+set dummy msgfmt; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:3737: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$GMSGFMT" in
+  /*)
+  ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then
+       ac_cv_path_GMSGFMT="$ac_dir/$ac_word"
+       break
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="no"
+  ;;
+esac
+fi
+GMSGFMT="$ac_cv_path_GMSGFMT"
+if test -n "$GMSGFMT"; then
+  echo "$ac_t""$GMSGFMT" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+                fi
+                # Extract the first word of "xgettext", so it can be a program name with args.
+set dummy xgettext; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:3772: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$XGETTEXT" in
+  /*)
+  ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then
+       ac_cv_path_XGETTEXT="$ac_dir/$ac_word"
+       break
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
+  ;;
+esac
+fi
+XGETTEXT="$ac_cv_path_XGETTEXT"
+if test -n "$XGETTEXT"; then
+  echo "$ac_t""$XGETTEXT" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+                USE_INCLUDED_LIBINTL=yes
+                CATOBJEXT=.cat
+                INSTOBJEXT=.cat
+                DATADIRNAME=lib
+                INTLDEPS='$(top_builddir)/intl/libintl.a'
+                INTLLIBS=$INTLDEPS
+                LIBS=`echo $LIBS | sed -e 's/-lintl//'`
+                nls_cv_header_intl=intl/libintl.h
+                nls_cv_header_libgt=intl/libgettext.h
+              fi
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+         fi
+        fi
+
+        if test "$CATOBJEXT" = "NONE"; then
+                         nls_cv_use_gnu_gettext=yes
+        fi
+      fi
+
+      if test "$nls_cv_use_gnu_gettext" = "yes"; then
+                INTLOBJS="\$(GETTOBJS)"
+        # Extract the first word of "msgfmt", so it can be a program name with args.
+set dummy msgfmt; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:3830: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$MSGFMT" in
+  /*)
+  ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then
+       ac_cv_path_MSGFMT="$ac_dir/$ac_word"
+       break
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="msgfmt"
+  ;;
+esac
+fi
+MSGFMT="$ac_cv_path_MSGFMT"
+if test -n "$MSGFMT"; then
+  echo "$ac_t""$MSGFMT" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+        # Extract the first word of "gmsgfmt", so it can be a program name with args.
+set dummy gmsgfmt; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:3864: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$GMSGFMT" in
+  /*)
+  ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
+  ;;
+  ?:/*)                         
+  ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a dos path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do 
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_GMSGFMT="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
+  ;;
+esac
+fi
+GMSGFMT="$ac_cv_path_GMSGFMT"
+if test -n "$GMSGFMT"; then
+  echo "$ac_t""$GMSGFMT" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+        # Extract the first word of "xgettext", so it can be a program name with args.
+set dummy xgettext; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:3900: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$XGETTEXT" in
+  /*)
+  ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS=  }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then
+       ac_cv_path_XGETTEXT="$ac_dir/$ac_word"
+       break
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
+  ;;
+esac
+fi
+XGETTEXT="$ac_cv_path_XGETTEXT"
+if test -n "$XGETTEXT"; then
+  echo "$ac_t""$XGETTEXT" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+        
+       USE_INCLUDED_LIBINTL=yes
+        CATOBJEXT=.gmo
+        INSTOBJEXT=.mo
+        DATADIRNAME=share
+       INTLDEPS='$(top_builddir)/intl/libintl.a'
+       INTLLIBS=$INTLDEPS
+       LIBS=`echo $LIBS | sed -e 's/-lintl//'`
+        nls_cv_header_intl=intl/libintl.h
+        nls_cv_header_libgt=intl/libgettext.h
+      fi
+
+            if test "$XGETTEXT" != ":"; then
+                       if $XGETTEXT --omit-header /dev/null 2> /dev/null; then
+         : ;
+       else
+         echo "$ac_t""found xgettext program is not GNU xgettext; ignore it" 1>&6
+         XGETTEXT=":"
+       fi
+      fi
+
+      # We need to process the po/ directory.
+      POSUB=po
+    else
+      DATADIRNAME=share
+      nls_cv_header_intl=intl/libintl.h
+      nls_cv_header_libgt=intl/libgettext.h
+    fi
+    
+    
+
+
+    # If this is used in GNU gettext we have to set USE_NLS to `yes'
+    # because some of the sources are only built for this goal.
+    if test "$PACKAGE" = gettext; then
+      USE_NLS=yes
+      USE_INCLUDED_LIBINTL=yes
+    fi
+
+                for lang in $ALL_LINGUAS; do
+      GMOFILES="$GMOFILES $lang.gmo"
+      POFILES="$POFILES $lang.po"
+    done
+
+        
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+  
+
+   if test "x$CATOBJEXT" != "x"; then
+     if test "x$ALL_LINGUAS" = "x"; then
+       LINGUAS=
+     else
+       echo $ac_n "checking for catalogs to be installed""... $ac_c" 1>&6
+echo "configure:3993: checking for catalogs to be installed" >&5
+       NEW_LINGUAS=
+       for lang in ${LINGUAS=$ALL_LINGUAS}; do
+         case "$ALL_LINGUAS" in
+          *$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;;
+         esac
+       done
+       LINGUAS=$NEW_LINGUAS
+       echo "$ac_t""$LINGUAS" 1>&6
+     fi
+
+          if test -n "$LINGUAS"; then
+       for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done
+     fi
+   fi
+
+            if test $ac_cv_header_locale_h = yes; then
+     INCLUDE_LOCALE_H="#include <locale.h>"
+   else
+     INCLUDE_LOCALE_H="\
+/* The system does not provide the header <locale.h>.  Take care yourself.  */"
+   fi
+   
+
+            test -d intl || mkdir intl
+   if test "$CATOBJEXT" = ".cat"; then
+     ac_safe=`echo "linux/version.h" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for linux/version.h""... $ac_c" 1>&6
+echo "configure:4021: checking for linux/version.h" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 4026 "configure"
+#include "confdefs.h"
+#include <linux/version.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:4031: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  msgformat=linux
+else
+  echo "$ac_t""no" 1>&6
+msgformat=xopen
+fi
+
+
+               sed -e '/^#/d' $srcdir/intl/$msgformat-msg.sed > intl/po2msg.sed
+   fi
+      sed -e '/^#.*[^\\]$/d' -e '/^#$/d' \
+     $srcdir/intl/po2tbl.sed.in > intl/po2tbl.sed
+
+            if test "$PACKAGE" = "gettext"; then
+     GT_NO="#NO#"
+     GT_YES=
+   else
+     GT_NO=
+     GT_YES="#YES#"
+   fi
+   
+   
+
+            MKINSTALLDIRS=
+   if test -n "$ac_aux_dir"; then
+     MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
+   fi
+   if test -z "$MKINSTALLDIRS"; then
+     MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
+   fi
+   
+
+      l=
+   
+
+         test -d po || mkdir po
+   if test "x$srcdir" != "x."; then
+     if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then
+       posrcprefix="$srcdir/"
+     else
+       posrcprefix="../$srcdir/"
+     fi
+   else
+     posrcprefix="../"
+   fi
+   rm -f po/POTFILES
+   sed -e "/^#/d" -e "/^\$/d" -e "s,.*,        $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \
+       < $srcdir/po/POTFILES.in > po/POTFILES
+  
+
+trap '' 1 2 15
+cat > confcache <<\EOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs.  It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already.  You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+EOF
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(set) 2>&1 |
+  case `(ac_space=' '; set | grep ac_space) 2>&1` in
+  *ac_space=\ *)
+    # `set' does not quote correctly, so add quotes (double-quote substitution
+    # turns \\\\ into \\, and sed turns \\ into \).
+    sed -n \
+      -e "s/'/'\\\\''/g" \
+      -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
+    ;;
+  *)
+    # `set' quotes correctly as required by POSIX, so do not add quotes.
+    sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
+    ;;
+  esac >> confcache
+if cmp -s $cache_file confcache; then
+  :
+else
+  if test -w $cache_file; then
+    echo "updating cache $cache_file"
+    cat confcache > $cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Any assignment to VPATH causes Sun make to only execute
+# the first set of double-colon rules, so remove it if not needed.
+# If there is a colon in the path, we need to keep it.
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[        ]*VPATH[        ]*=[^:]*$/d'
+fi
+
+trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
+
+DEFS=-DHAVE_CONFIG_H
+
+# Without the "./", some shells look in PATH for config.status.
+: ${CONFIG_STATUS=./config.status}
+
+echo creating $CONFIG_STATUS
+rm -f $CONFIG_STATUS
+cat > $CONFIG_STATUS <<EOF
+#! /bin/sh
+# Generated automatically by configure.
+# Run this file to recreate the current configuration.
+# This directory was configured as follows,
+# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+#
+# $0 $ac_configure_args
+#
+# Compiler output produced by configure, useful for debugging
+# configure, is in ./config.log if it exists.
+
+ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
+for ac_option
+do
+  case "\$ac_option" in
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
+    exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
+  -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
+    echo "$CONFIG_STATUS generated by autoconf version 2.13"
+    exit 0 ;;
+  -help | --help | --hel | --he | --h)
+    echo "\$ac_cs_usage"; exit 0 ;;
+  *) echo "\$ac_cs_usage"; exit 1 ;;
+  esac
+done
+
+ac_given_srcdir=$srcdir
+ac_given_INSTALL="$INSTALL"
+
+trap 'rm -fr `echo "Makefile intl/Makefile po/Makefile.in config.h:config.h.in" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+# Protect against being on the right side of a sed subst in config.status.
+sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
+ s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
+$ac_vpsub
+$extrasub
+s%@SHELL@%$SHELL%g
+s%@CFLAGS@%$CFLAGS%g
+s%@CPPFLAGS@%$CPPFLAGS%g
+s%@CXXFLAGS@%$CXXFLAGS%g
+s%@FFLAGS@%$FFLAGS%g
+s%@DEFS@%$DEFS%g
+s%@LDFLAGS@%$LDFLAGS%g
+s%@LIBS@%$LIBS%g
+s%@exec_prefix@%$exec_prefix%g
+s%@prefix@%$prefix%g
+s%@program_transform_name@%$program_transform_name%g
+s%@bindir@%$bindir%g
+s%@sbindir@%$sbindir%g
+s%@libexecdir@%$libexecdir%g
+s%@datadir@%$datadir%g
+s%@sysconfdir@%$sysconfdir%g
+s%@sharedstatedir@%$sharedstatedir%g
+s%@localstatedir@%$localstatedir%g
+s%@libdir@%$libdir%g
+s%@includedir@%$includedir%g
+s%@oldincludedir@%$oldincludedir%g
+s%@infodir@%$infodir%g
+s%@mandir@%$mandir%g
+s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
+s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
+s%@INSTALL_DATA@%$INSTALL_DATA%g
+s%@PACKAGE@%$PACKAGE%g
+s%@VERSION@%$VERSION%g
+s%@ACLOCAL@%$ACLOCAL%g
+s%@AUTOCONF@%$AUTOCONF%g
+s%@AUTOMAKE@%$AUTOMAKE%g
+s%@AUTOHEADER@%$AUTOHEADER%g
+s%@MAKEINFO@%$MAKEINFO%g
+s%@SET_MAKE@%$SET_MAKE%g
+s%@CC@%$CC%g
+s%@CPP@%$CPP%g
+s%@GLIB_CONFIG@%$GLIB_CONFIG%g
+s%@GLIB_CFLAGS@%$GLIB_CFLAGS%g
+s%@GLIB_LIBS@%$GLIB_LIBS%g
+s%@CURSES_LIB@%$CURSES_LIB%g
+s%@RANLIB@%$RANLIB%g
+s%@ALLOCA@%$ALLOCA%g
+s%@USE_NLS@%$USE_NLS%g
+s%@MSGFMT@%$MSGFMT%g
+s%@GMSGFMT@%$GMSGFMT%g
+s%@XGETTEXT@%$XGETTEXT%g
+s%@GENCAT@%$GENCAT%g
+s%@USE_INCLUDED_LIBINTL@%$USE_INCLUDED_LIBINTL%g
+s%@CATALOGS@%$CATALOGS%g
+s%@CATOBJEXT@%$CATOBJEXT%g
+s%@DATADIRNAME@%$DATADIRNAME%g
+s%@GMOFILES@%$GMOFILES%g
+s%@INSTOBJEXT@%$INSTOBJEXT%g
+s%@INTLDEPS@%$INTLDEPS%g
+s%@INTLLIBS@%$INTLLIBS%g
+s%@INTLOBJS@%$INTLOBJS%g
+s%@POFILES@%$POFILES%g
+s%@POSUB@%$POSUB%g
+s%@INCLUDE_LOCALE_H@%$INCLUDE_LOCALE_H%g
+s%@GT_NO@%$GT_NO%g
+s%@GT_YES@%$GT_YES%g
+s%@MKINSTALLDIRS@%$MKINSTALLDIRS%g
+s%@l@%$l%g
+
+CEOF
+EOF
+
+cat >> $CONFIG_STATUS <<\EOF
+
+# Split the substitutions into bite-sized pieces for seds with
+# small command number limits, like on Digital OSF/1 and HP-UX.
+ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
+ac_file=1 # Number of current file.
+ac_beg=1 # First line for current file.
+ac_end=$ac_max_sed_cmds # Line after last line for current file.
+ac_more_lines=:
+ac_sed_cmds=""
+while $ac_more_lines; do
+  if test $ac_beg -gt 1; then
+    sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
+  else
+    sed "${ac_end}q" conftest.subs > conftest.s$ac_file
+  fi
+  if test ! -s conftest.s$ac_file; then
+    ac_more_lines=false
+    rm -f conftest.s$ac_file
+  else
+    if test -z "$ac_sed_cmds"; then
+      ac_sed_cmds="sed -f conftest.s$ac_file"
+    else
+      ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
+    fi
+    ac_file=`expr $ac_file + 1`
+    ac_beg=$ac_end
+    ac_end=`expr $ac_end + $ac_max_sed_cmds`
+  fi
+done
+if test -z "$ac_sed_cmds"; then
+  ac_sed_cmds=cat
+fi
+EOF
+
+cat >> $CONFIG_STATUS <<EOF
+
+CONFIG_FILES=\${CONFIG_FILES-"Makefile intl/Makefile po/Makefile.in"}
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case "$ac_file" in
+  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+  *) ac_file_in="${ac_file}.in" ;;
+  esac
+
+  # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
+
+  # Remove last slash and all that follows it.  Not all systems have dirname.
+  ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+  if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+    # The file is in a subdirectory.
+    test ! -d "$ac_dir" && mkdir "$ac_dir"
+    ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
+    # A "../" for each directory in $ac_dir_suffix.
+    ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+  else
+    ac_dir_suffix= ac_dots=
+  fi
+
+  case "$ac_given_srcdir" in
+  .)  srcdir=.
+      if test -z "$ac_dots"; then top_srcdir=.
+      else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
+  /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
+  *) # Relative path.
+    srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
+    top_srcdir="$ac_dots$ac_given_srcdir" ;;
+  esac
+
+  case "$ac_given_INSTALL" in
+  [/$]*) INSTALL="$ac_given_INSTALL" ;;
+  *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+  esac
+
+  echo creating "$ac_file"
+  rm -f "$ac_file"
+  configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
+  case "$ac_file" in
+  *Makefile*) ac_comsub="1i\\
+# $configure_input" ;;
+  *) ac_comsub= ;;
+  esac
+
+  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+  sed -e "$ac_comsub
+s%@configure_input@%$configure_input%g
+s%@srcdir@%$srcdir%g
+s%@top_srcdir@%$top_srcdir%g
+s%@INSTALL@%$INSTALL%g
+" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
+fi; done
+rm -f conftest.s*
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s%^\([  ]*\)#\([        ]*define[       ][      ]*\)'
+ac_dB='\([     ][      ]*\)[^  ]*%\1#\2'
+ac_dC='\3'
+ac_dD='%g'
+# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
+ac_uA='s%^\([  ]*\)#\([        ]*\)undef\([    ][      ]*\)'
+ac_uB='\([     ]\)%\1#\2define\3'
+ac_uC=' '
+ac_uD='\4%g'
+# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_eA='s%^\([  ]*\)#\([        ]*\)undef\([    ][      ]*\)'
+ac_eB='$%\1#\2define\3'
+ac_eC=' '
+ac_eD='%g'
+
+if test "${CONFIG_HEADERS+set}" != set; then
+EOF
+cat >> $CONFIG_STATUS <<EOF
+  CONFIG_HEADERS="config.h:config.h.in"
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+fi
+for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case "$ac_file" in
+  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+  *) ac_file_in="${ac_file}.in" ;;
+  esac
+
+  echo creating $ac_file
+
+  rm -f conftest.frag conftest.in conftest.out
+  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+  cat $ac_file_inputs > conftest.in
+
+EOF
+
+# Transform confdefs.h into a sed script conftest.vals that substitutes
+# the proper values into config.h.in to produce config.h.  And first:
+# Protect against being on the right side of a sed subst in config.status.
+# Protect against being in an unquoted here document in config.status.
+rm -f conftest.vals
+cat > conftest.hdr <<\EOF
+s/[\\&%]/\\&/g
+s%[\\$`]%\\&%g
+s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
+s%ac_d%ac_u%gp
+s%ac_u%ac_e%gp
+EOF
+sed -n -f conftest.hdr confdefs.h > conftest.vals
+rm -f conftest.hdr
+
+# This sed command replaces #undef with comments.  This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+cat >> conftest.vals <<\EOF
+s%^[   ]*#[    ]*undef[        ][      ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
+EOF
+
+# Break up conftest.vals because some shells have a limit on
+# the size of here documents, and old seds have small limits too.
+
+rm -f conftest.tail
+while :
+do
+  ac_lines=`grep -c . conftest.vals`
+  # grep -c gives empty output for an empty file on some AIX systems.
+  if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
+  # Write a limited-size here document to conftest.frag.
+  echo '  cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
+  echo 'CEOF
+  sed -f conftest.frag conftest.in > conftest.out
+  rm -f conftest.in
+  mv conftest.out conftest.in
+' >> $CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
+  rm -f conftest.vals
+  mv conftest.tail conftest.vals
+done
+rm -f conftest.vals
+
+cat >> $CONFIG_STATUS <<\EOF
+  rm -f conftest.frag conftest.h
+  echo "/* $ac_file.  Generated automatically by configure.  */" > conftest.h
+  cat conftest.in >> conftest.h
+  rm -f conftest.in
+  if cmp -s $ac_file conftest.h 2>/dev/null; then
+    echo "$ac_file is unchanged"
+    rm -f conftest.h
+  else
+    # Remove last slash and all that follows it.  Not all systems have dirname.
+      ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+      if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+      # The file is in a subdirectory.
+      test ! -d "$ac_dir" && mkdir "$ac_dir"
+    fi
+    rm -f $ac_file
+    mv conftest.h $ac_file
+  fi
+fi; done
+
+EOF
+
+cat >> $CONFIG_STATUS <<EOF
+ac_sources="$nls_cv_header_libgt"
+ac_dests="$nls_cv_header_intl"
+EOF
+
+cat >> $CONFIG_STATUS <<\EOF
+srcdir=$ac_given_srcdir
+while test -n "$ac_sources"; do
+  set $ac_dests; ac_dest=$1; shift; ac_dests=$*
+  set $ac_sources; ac_source=$1; shift; ac_sources=$*
+
+  echo "linking $srcdir/$ac_source to $ac_dest"
+
+  if test ! -r $srcdir/$ac_source; then
+    { echo "configure: error: $srcdir/$ac_source: File not found" 1>&2; exit 1; }
+  fi
+  rm -f $ac_dest
+
+  # Make relative symlinks.
+  # Remove last slash and all that follows it.  Not all systems have dirname.
+  ac_dest_dir=`echo $ac_dest|sed 's%/[^/][^/]*$%%'`
+  if test "$ac_dest_dir" != "$ac_dest" && test "$ac_dest_dir" != .; then
+    # The dest file is in a subdirectory.
+    test ! -d "$ac_dest_dir" && mkdir "$ac_dest_dir"
+    ac_dest_dir_suffix="/`echo $ac_dest_dir|sed 's%^\./%%'`"
+    # A "../" for each directory in $ac_dest_dir_suffix.
+    ac_dots=`echo $ac_dest_dir_suffix|sed 's%/[^/]*%../%g'`
+  else
+    ac_dest_dir_suffix= ac_dots=
+  fi
+
+  case "$srcdir" in
+  [/$]*) ac_rel_source="$srcdir/$ac_source" ;;
+  *) ac_rel_source="$ac_dots$srcdir/$ac_source" ;;
+  esac
+
+  # Make a symlink if possible; otherwise try a hard link.
+  if ln -s $ac_rel_source $ac_dest 2>/dev/null ||
+    ln $srcdir/$ac_source $ac_dest; then :
+  else
+    { echo "configure: error: can not link $ac_dest to $srcdir/$ac_source" 1>&2; exit 1; }
+  fi
+done
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+
+
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h
+case "$CONFIG_FILES" in *po/Makefile.in*)
+        sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile
+      esac
+
+exit 0
+EOF
+chmod +x $CONFIG_STATUS
+rm -fr confdefs* $ac_clean_files
+test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+
diff --git a/configure.in b/configure.in
new file mode 100644 (file)
index 0000000..533de84
--- /dev/null
@@ -0,0 +1,149 @@
+dnl Process this file with autoconf to produce a configure script.
+AC_INIT(nano.c)
+AM_INIT_AUTOMAKE(nano, 0.9.10)
+AM_CONFIG_HEADER(config.h:config.h.in)
+ALL_LINGUAS="es de fr it"
+
+dnl Checks for programs.
+AC_PROG_CC
+AC_ISC_POSIX
+
+dnl Checks for header files.
+AC_HEADER_STDC
+AC_CHECK_HEADERS(fcntl.h unistd.h malloc.h termios.h termio.h limits.h getopt.h)
+
+dnl options
+AC_ARG_ENABLE(tiny,
+[  --enable-tiny           Disables features for the sake of size
+                          (currently disables detailed help and i18n)],
+[if test x$enableval = xyes; then
+    AC_DEFINE(NANO_SMALL) tiny_support=yes
+ fi])
+
+AC_MSG_CHECKING(whether to use slang)
+CURSES_LIB_NAME=""
+AC_ARG_WITH(slang,
+[  --with-slang[=DIR]      Use the slang library instead of curses],
+[    case "$with_slang" in
+    yes)
+       AC_MSG_RESULT(yes)
+
+       AC_CHECK_HEADER(slcurses.h,
+           AC_CHECK_LIB(slang, SLcurses_newwin,
+               [AC_DEFINE(USE_SLANG) slang_support=yes
+               CURSES_LIB="-lslang" CURSES_LIB_NAME=slang]),
+           AC_MSG_ERROR([
+*** The header file slcurses.h was not found. If you wish to use
+*** slang support this header file is required. Please either
+*** install a version of slang that includes the slcurses.h file or
+*** do not call the configure script with --with-slang
+]))
+       ;;
+    no)
+       AC_MSG_RESULT(no)
+       ;;
+    *)
+       AC_MSG_RESULT(yes)
+
+       # Needed for AC_CHECK_HEADERS and AC_CHECK_LIB to look at
+       # alternate readline path
+       _ldflags=${LDFLAGS}
+       _cppflags=${CPPFLAGS}
+
+       # Add additional search path
+       LDFLAGS="-L$with_slang/lib $LDFLAGS"
+       CPPFLAGS="-I$with_slang/include $CPPFLAGS"
+
+       AC_CHECK_HEADER(slcurses.h,
+           AC_CHECK_LIB(slang, SLcurses_newwin,
+               [AC_DEFINE(USE_SLANG) slang_support=yes
+               CURSES_LIB="-L${with_slang}/lib -lslang"
+               CURSES_LIB_NAME=slang],
+               AC_MSG_ERROR([
+*** The slang library was not found or the version you have installed
+*** is incorrect.
+])),
+           AC_MSG_ERROR([
+*** The header file slcurses.h was not found. If you wish to use
+*** slang support this header file is required. Please either
+*** install a version of slang that includes the slcurses.h file or
+*** do not call the configure script with --with-slang
+]))
+
+       LDFLAGS=${_ldflags}
+       ;;
+    esac])
+
+dnl Checks for functions
+AC_CHECK_FUNCS(snprintf vsnprintf)
+if test "x$ac_cv_func_snprintf" = "xno" -o "xac_cv_func_vsnprintf" = "xno"
+then
+       AM_PATH_GLIB(1.2.4,,
+           AC_MSG_ERROR([
+*** snprintf() and/or vsnprintf() not found.  GLIB not found either.
+*** You need both snprintf() and vsnprintf().  Alternatively you can
+*** install the GLIB library which can be found at ftp://ftp.gtk.org/.]),
+           glib)
+       glib_cflags=`$GLIB_CONFIG --cflags glib`
+       glib_libs=`$GLIB_CONFIG --libs glib`
+fi
+
+dnl Checks for typedefs, structures, and compiler characteristics.
+
+dnl Checks for library functions.
+AC_TYPE_SIGNAL
+AC_FUNC_VPRINTF
+AC_CHECK_FUNCS(getopt_long)
+
+dnl Checks for libraries.
+
+
+if eval "test x$CURSES_LIB_NAME = x"
+then
+    AC_CHECK_HEADERS(curses.h ncurses.h)
+    AC_CHECK_LIB(ncurses, tgetent, CURSES_LIB="-lncurses" CURSES_LIB_NAME=ncurses)
+fi
+
+if eval "test x$CURSES_LIB_NAME = x"
+then
+    AC_CHECK_LIB(curses, tgetent, CURSES_LIB="-lcurses" CURSES_LIB_NAME=curses)
+fi
+
+if eval "test x$CURSES_LIB_NAME = x"
+then
+    AC_CHECK_LIB(termcap, tgetent, CURSES_LIB="-ltermcap" CURSES_LIB_NAME=termcap)
+fi
+
+if eval "test x$CURSES_LIB_NAME = x"
+then
+    AC_MSG_WARN([
+*** No termcap lib available, consider getting the official ncurses
+*** distribution from ftp://ftp.gnu.org/pub/gnu/ncurses if you get
+*** errors compiling nano.])
+else
+    AC_MSG_RESULT("Using $CURSES_LIB_NAME as the termcap library")
+fi
+
+
+AC_CHECK_LIB($CURSES_LIB_NAME, wresize, AC_DEFINE(HAVE_WRESIZE))
+
+dnl Parse any configure options
+
+LIBS="$LIBS $CURSES_LIB"
+AC_ARG_ENABLE(debug, [  --enable-debug          Enable debugging (def disabled)],)
+
+AC_SUBST(CURSES_LIB)
+
+if test "x$glib_cflags" != "x"
+then
+       CFLAGS="$CFLAGS $glib_cflags"
+fi
+if test "x$glib_libs" != "x"
+then
+       LDFLAGS="$LDFLAGS $glib_libs"
+fi
+
+dnl i18n stuff - pretty incomplete for now
+AM_GNU_GETTEXT
+
+AC_OUTPUT([Makefile intl/Makefile po/Makefile.in])
diff --git a/cut.c b/cut.c
new file mode 100644 (file)
index 0000000..24b0b32
--- /dev/null
+++ b/cut.c
@@ -0,0 +1,379 @@
+/**************************************************************************
+ *   cut.c                                                                *
+ *                                                                        *
+ *   Copyright (C) 1999 Chris Allegretta                                  *
+ *   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 1, 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., 675 Mass Ave, Cambridge, MA 02139, USA.            *
+ *                                                                        *
+ **************************************************************************/
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include "config.h"
+#include "proto.h"
+#include "nano.h"
+
+#ifndef NANO_SMALL
+#include <libintl.h>
+#define _(string) gettext(string)
+#else
+#define _(string) (string)
+#endif
+
+static int marked_cut;         /* Is the cutbuffer from a mark */
+static filestruct *cutbottom = NULL;   /* Pointer to end of cutbuffer */
+
+void add_to_cutbuffer(filestruct * inptr)
+{
+    filestruct *tmp;
+
+#ifdef DEBUG
+    fprintf(stderr, _("add_to_cutbuffer called with inptr->data = %s\n"),
+           inptr->data);
+#endif
+
+    totsize -= strlen(inptr->data) + 1;
+    tmp = cutbuffer;
+    if (cutbuffer == NULL) {
+       cutbuffer = inptr;
+       inptr->prev = NULL;
+    } else {
+       cutbottom->next = inptr;
+       inptr->prev = cutbottom;
+    }
+
+    inptr->next = NULL;
+    cutbottom = inptr;
+}
+
+#ifndef NANO_SMALL
+void cut_marked_segment(filestruct * top, int top_x, filestruct * bot,
+                       int bot_x)
+{
+    filestruct *tmp, *next;
+    char *tmpstr;
+
+    /* Set up the beginning of the cutbuffer */
+    tmp = copy_node(top);
+    tmpstr = nmalloc(strlen(&top->data[top_x]) + 1);
+    strcpy(tmpstr, &top->data[top_x]);
+    free(tmp->data);
+    tmp->data = tmpstr;
+
+    /* Chop off the end of the first line */
+    tmpstr = nmalloc(top_x + 1);
+    strncpy(tmpstr, top->data, top_x);
+    free(top->data);
+    top->data = tmpstr;
+
+    do {
+       next = tmp->next;
+       add_to_cutbuffer(tmp);
+       totlines--;
+       tmp = next;
+    }
+    while (next != bot && next != NULL);
+
+    dump_buffer(cutbuffer);
+    if (next == NULL)
+       return;
+    /* Now, paste bot[bot_x] into top[top_x] */
+    tmpstr = nmalloc(strlen(top->data) + strlen(&bot->data[bot_x]));
+    strncpy(tmpstr, top->data, top_x);
+    strcpy(&tmpstr[top_x], &bot->data[bot_x]);
+    free(top->data);
+    top->data = tmpstr;
+
+    bot->data[bot_x] = 0;
+    align(&bot->data);
+    next = bot->next;
+
+    /* We explicitly don't decrement totlines here because we don't snarf
+     * up a newline when we're grabbing the last line of the mark */
+
+    add_to_cutbuffer(bot);
+    top->next = next;
+    if (next != NULL)
+       next->prev = top;
+
+    dump_buffer(cutbuffer);
+    renumber(top);
+    current = top;
+    current_x = top_x;
+
+    /* If we're hitting the end of the buffer we should clean that up. */
+    if (bot == filebot) {
+       if (next != NULL) {
+           filebot = next;
+       } else {
+           filebot = top;
+       }
+    }
+    if (top->lineno < edittop->lineno)
+       edit_update(top);
+}
+#endif
+
+int do_cut_text(void)
+{
+    filestruct *tmp, *fileptr = current;
+#ifndef NANO_SMALL
+    char *tmpstr;
+    int newsize;
+#endif
+
+    if (fileptr == NULL || fileptr->data == NULL)
+       return 0;
+
+    tmp = fileptr->next;
+
+    if (!ISSET(KEEP_CUTBUFFER) || ISSET(MARK_ISSET)) {
+       free_filestruct(cutbuffer);
+       cutbuffer = NULL;
+#ifdef DEBUG
+       fprintf(stderr, _("Blew away cutbuffer =)\n"));
+#endif
+    }
+#ifndef NANO_SMALL
+    if (ISSET(MARK_ISSET)) {
+       if (current->lineno == mark_beginbuf->lineno) {
+           tmp = copy_node(current);
+           newsize = abs(strlen(&current->data[mark_beginx]) -
+                         strlen(&current->data[current_x]));
+
+           tmpstr = nmalloc(newsize);
+           if (current_x < mark_beginx) {
+               strncpy(tmpstr, &current->data[current_x], newsize);
+               memmove(&current->data[current_x],
+                       &current->data[mark_beginx],
+                       strlen(&current->data[mark_beginx] - newsize));
+           } else {
+               strncpy(tmpstr, &current->data[mark_beginx], newsize);
+               memmove(&current->data[mark_beginx],
+                       &current->data[current_x],
+                       strlen(&current->data[current_x] - newsize));
+               current_x = mark_beginx;
+               update_cursor();
+           }
+           tmpstr[newsize] = 0;
+           tmp->data = tmpstr;
+           add_to_cutbuffer(tmp);
+           dump_buffer(cutbuffer);
+           align(&current->data);
+       } else if (current->lineno < mark_beginbuf->lineno)
+           cut_marked_segment(current, current_x, mark_beginbuf,
+                              mark_beginx);
+       else
+           cut_marked_segment(mark_beginbuf, mark_beginx, current,
+                              current_x);
+
+       placewewant = xplustabs();
+       UNSET(MARK_ISSET);
+       marked_cut = 1;
+       set_modified();
+       edit_update_top(edittop);
+       return 1;
+#else
+    if (0) {
+#endif
+    } else if (fileptr == fileage) {
+       /* we're cutting the first line */
+       if (fileptr->next != NULL) {
+           fileptr = fileptr->next;
+           tmp = fileptr;
+           fileage = fileptr;
+           add_to_cutbuffer(fileptr->prev);
+           totlines--;
+           fileptr->prev = NULL;
+           edit_update(fileage);
+           current = fileptr;
+       } else {
+           add_to_cutbuffer(fileptr);
+           totlines--;
+           fileage = make_new_node(NULL);
+           fileage->data = nmalloc(1);
+           strcpy(fileage->data, "");
+           current = fileage;
+       }
+    } else {
+       if (fileptr->prev != NULL)
+           fileptr->prev->next = fileptr->next;
+
+       if (fileptr->next != NULL) {
+           (fileptr->next)->prev = fileptr->prev;
+           current = fileptr->next;
+           totlines--;
+       } else {
+           /* we're deleteing the last line
+              and replacing it with a dummy line,
+              so totlines is the same */
+           tmp = fileptr->prev;
+           tmp->next = make_new_node(tmp);
+           tmp = tmp->next;
+           tmp->data = nmalloc(1);
+           strcpy(tmp->data, "");
+           current = tmp;
+           filebot = tmp;
+       }
+
+       add_to_cutbuffer(fileptr);
+    }
+
+    if (fileptr == edittop)
+       edittop = current;
+
+    edit_refresh();
+
+    dump_buffer(cutbuffer);
+    reset_cursor();
+
+    set_modified();
+    marked_cut = 0;
+    current_x = 0;
+    placewewant = 0;
+    update_cursor();
+    renumber(tmp);
+    SET(KEEP_CUTBUFFER);
+    return 1;
+}
+
+int do_uncut_text(void)
+{
+    filestruct *tmp = current, *fileptr = current, *newbuf, *newend;
+#ifndef NANO_SMALL
+    char *tmpstr, *tmpstr2;
+#endif
+    int i;
+
+    wrap_reset();
+    if (cutbuffer == NULL || fileptr == NULL)
+       return 0;               /* AIEEEEEEEEEEEE */
+
+    newbuf = copy_filestruct(cutbuffer);
+    for (newend = newbuf; newend->next != NULL && newend != NULL;
+        newend = newend->next) {
+       totlines++;
+    }
+
+    /* Hook newbuf into fileptr */
+#ifndef NANO_SMALL
+    if (marked_cut == 1) {
+       /* If there's only one line in the cutbuffer */
+       if (cutbuffer->next == NULL) {
+           tmpstr =
+               nmalloc(strlen(current->data) + strlen(cutbuffer->data) +
+                       1);
+           strncpy(tmpstr, current->data, current_x);
+           strcpy(&tmpstr[current_x], cutbuffer->data);
+           strcat(tmpstr, &current->data[current_x]);
+           free(current->data);
+           current->data = tmpstr;
+           current_x += strlen(cutbuffer->data);
+           totsize += strlen(cutbuffer->data);
+
+           placewewant = xplustabs();
+           update_cursor();
+           renumber(current);
+       } else {                /* yuck -- no kidding! */
+           tmp = current->next;
+           /* New beginning */
+           tmpstr = nmalloc(current_x + strlen(newbuf->data) + 1);
+           strncpy(tmpstr, current->data, current_x);
+           strcpy(&tmpstr[current_x], newbuf->data);
+           totsize += strlen(newbuf->data) + strlen(newend->data) + 1;
+
+           /* New end */
+           tmpstr2 = nmalloc(strlen(newend->data) +
+                             strlen(&current->data[current_x]) + 1);
+           strcpy(tmpstr2, newend->data);
+           strcat(tmpstr2, &current->data[current_x]);
+
+           free(current->data);
+           current->data = tmpstr;
+           current->next = newbuf->next;
+           newbuf->next->prev = current;
+           delete_node(newbuf);
+
+           current_x = strlen(newend->data);
+           placewewant = xplustabs();
+           free(newend->data);
+           newend->data = tmpstr2;
+
+           newend->next = tmp;
+
+           /* If tmp isn't null, we're in the middle: update the
+            * prev pointer.  If it IS null, we're at the end, update
+            * the filebot pointer */
+
+           if (tmp != NULL)
+               tmp->prev = newend;
+           else
+               filebot = newend;
+
+           /* Now why don't we update the totsize also */
+           for (tmp = current->next; tmp != newend; tmp = tmp->next)
+               totsize += strlen(tmp->data) + 1;
+
+           i = editbot->lineno;
+
+           renumber(current);
+
+           current = newend;
+           if (i <= newend->lineno)
+               edit_update(current);
+       }
+
+       dump_buffer(fileage);
+       dump_buffer(cutbuffer);
+       set_modified();
+       edit_refresh();
+       return 0;
+#else
+    if (0) {
+#endif
+    } else if (fileptr != fileage) {
+       tmp = fileptr->prev;
+       tmp->next = newbuf;
+       newbuf->prev = tmp;
+       totlines++;             /* Unmarked uncuts don't split lines */
+    } else {
+       fileage = newbuf;
+       totlines++;             /* Unmarked uncuts don't split lines */
+    }
+
+    /* This is so uncutting at the top of the buffer will work => */
+    if (current_y == 0)
+       edittop = newbuf;
+
+    /* Connect the end of the buffer to the filestruct */
+    newend->next = fileptr;
+    fileptr->prev = newend;
+
+    /* recalculate size *sigh* */
+    for (tmp = newbuf; tmp != fileptr; tmp = tmp->next)
+       totsize += strlen(tmp->data) + 1;
+
+    i = editbot->lineno;
+    renumber(newbuf);
+    if (i < newend->lineno)
+       edit_update(fileptr);
+
+    dump_buffer_reverse(fileptr);
+
+    set_modified();
+    UNSET(KEEP_CUTBUFFER);
+    edit_refresh();
+    return 1;
+}
diff --git a/global.c b/global.c
new file mode 100644 (file)
index 0000000..416c039
--- /dev/null
+++ b/global.c
@@ -0,0 +1,328 @@
+/**************************************************************************
+ *   global.c                                                             *
+ *                                                                        *
+ *   Copyright (C) 1999 Chris Allegretta                                  *
+ *   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 1, 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., 675 Mass Ave, Cambridge, MA 02139, USA.            *
+ *                                                                        *
+ **************************************************************************/
+
+#include <sys/stat.h>
+#include "config.h"
+#include "nano.h"
+#include "proto.h"
+
+#ifndef NANO_SMALL
+#include <libintl.h>
+#define _(string) gettext(string)
+#else
+#define _(string) (string)
+#endif
+
+/*
+ * Global variables
+ */
+int flags = 0;                 /* Our new flag containig many options */
+int center_x = 0, center_y = 0;        /* Center of screen */
+WINDOW *edit;                  /* The file portion of the editor  */
+WINDOW *topwin;                        /* Top line of screen */
+WINDOW *bottomwin;             /* Bottom buffer */
+char *filename;                        /* Name of the file */
+int editwinrows = 0;           /* How many rows long is the edit
+                                  window? */
+filestruct *current;           /* Current buffer pointer */
+int current_x = 0, current_y = 0;      /* Current position of X and Y in
+                                          the editor - relative to edit
+                                          window (0,0) */
+filestruct *fileage = NULL;    /* Our file buffer */
+filestruct *edittop = NULL;    /* Pointer to the top of the edit
+                                  buffer with respect to the
+                                  file struct */
+filestruct *editbot = NULL;    /* Same for the bottom */
+filestruct *filebot = NULL;    /* Last node in the file struct */
+filestruct *cutbuffer = NULL;  /* A place to store cut text */
+
+char *answer;                  /* Answer str to many questions */
+int totlines = 0;              /* Total number of lines in the file */
+int totsize = 0;               /* Total number of bytes in the file */
+int placewewant = 0;           /* The collum we'd like the cursor
+                                  to jump to when we go to the
+                                  next or previous line */
+
+char *hblank;                  /* A horizontal blank line */
+char *help_text;               /* The text in the help window */
+
+/* More stuff for the marker select */
+
+filestruct *mark_beginbuf;     /* the begin marker buffer */
+int mark_beginx;               /* X value in the string to start */
+
+shortcut main_list[MAIN_LIST_LEN];
+shortcut whereis_list[WHEREIS_LIST_LEN];
+shortcut replace_list[REPLACE_LIST_LEN];
+shortcut goto_list[GOTO_LIST_LEN];
+shortcut writefile_list[WRITEFILE_LIST_LEN];
+shortcut help_list[HELP_LIST_LEN];
+shortcut spell_list[SPELL_LIST_LEN];
+
+/* Initialize a struct *without* our lovely braces =( */
+void sc_init_one(shortcut * s, int key, char *desc, char *help, int alt,
+                int misc1, int misc2, int view, int (*func) (void))
+{
+    s->val = key;
+    s->desc = desc;
+    s->help = help;
+    s->altval = alt;
+    s->misc1 = misc1;
+    s->misc2 = misc2;
+    s->viewok = view;
+    s->func = func;
+}
+
+void shortcut_init(void)
+{
+    char *nano_help_msg = "", *nano_writeout_msg = "", *nano_exit_msg = "",
+       *nano_goto_msg = "", *nano_justify_msg = "", *nano_replace_msg =
+       "", *nano_insert_msg = "", *nano_whereis_msg =
+       "", *nano_prevpage_msg = "", *nano_nextpage_msg =
+       "", *nano_cut_msg = "", *nano_uncut_msg = "", *nano_cursorpos_msg =
+       "", *nano_spell_msg = "", *nano_up_msg = "", *nano_down_msg =
+       "", *nano_forward_msg = "", *nano_back_msg = "", *nano_home_msg =
+       "", *nano_end_msg = "", *nano_firstline_msg =
+       "", *nano_lastline_msg = "", *nano_refresh_msg =
+       "", *nano_mark_msg = "", *nano_delete_msg =
+       "", *nano_backspace_msg = "", *nano_tab_msg =
+       "", *nano_enter_msg = "", *nano_case_msg =
+       "", *nano_cancel_msg = "";
+
+#ifndef NANO_SMALL
+    nano_help_msg = _("Invoke the help menu");
+    nano_writeout_msg = _("Write the current file to disk");
+    nano_exit_msg = _("Exit from nano");
+    nano_goto_msg = _("Goto a specific line number");
+    nano_justify_msg = _("Justify the current paragraph");
+    nano_replace_msg = _("Replace text within the editor");
+    nano_insert_msg = _("Insert another file into the current one");
+    nano_whereis_msg = _("Search for text within the editor");
+    nano_prevpage_msg = _("Move to the previous screen");
+    nano_nextpage_msg = _("Move to the next screen");
+    nano_cut_msg = _("Cut the current line and store it in the cutbuffer");
+    nano_uncut_msg = _("Uncut from the cutbuffer into the current line");
+    nano_cursorpos_msg = _("Show the posititon of the cursor");
+    nano_spell_msg = _("Invoke the spell checker (if available)");
+    nano_up_msg = _("Move up one line");
+    nano_down_msg = _("Move down one line");
+    nano_forward_msg = _("Move forward one character");
+    nano_back_msg = _("Move back one character");
+    nano_home_msg = _("Move to the beginning of the current line");
+    nano_end_msg = _("Move to the end of the current line");
+    nano_firstline_msg = _("Go to the first line of the file");
+    nano_lastline_msg = _("Go to the last line of the file");
+    nano_refresh_msg = _("Refresh (redraw) the current screen");
+    nano_mark_msg = _("Mark text at the current cursor location");
+    nano_delete_msg = _("Delete the character under the cursor");
+    nano_backspace_msg =
+       _("Delete the character to the left of the cursor");
+    nano_tab_msg = _("Insert a tab character");
+    nano_enter_msg = _("Insert a carriage return at the cursor position");
+    nano_case_msg =
+       _("Make the current search or replace case (in)sensitive");
+    nano_cancel_msg = _("Cancel the current function");
+#endif
+
+
+    if (ISSET(PICO_MSGS))
+       sc_init_one(&main_list[0], NANO_HELP_KEY, _("Get Help"),
+                   nano_help_msg, 0, 0, 0, VIEW, do_help);
+    else
+       sc_init_one(&main_list[0], NANO_WRITEOUT_KEY, _("WriteOut"),
+                   nano_writeout_msg,
+                   0, NANO_WRITEOUT_FKEY, 0, NOVIEW, do_writeout_void);
+
+    sc_init_one(&main_list[1], NANO_EXIT_KEY, _("Exit"),
+               nano_exit_msg, 0, NANO_EXIT_FKEY, 0, VIEW, do_exit);
+
+    if (ISSET(PICO_MSGS))
+       sc_init_one(&main_list[2], NANO_WRITEOUT_KEY, _("WriteOut"),
+                   nano_writeout_msg,
+                   0, NANO_WRITEOUT_FKEY, 0, NOVIEW, do_writeout_void);
+    else
+       sc_init_one(&main_list[2], NANO_GOTO_KEY, _("Goto Line"),
+                   nano_goto_msg,
+                   NANO_ALT_G, NANO_GOTO_FKEY, 0, VIEW, do_gotoline_void);
+
+    if (ISSET(PICO_MSGS))
+       sc_init_one(&main_list[3], NANO_JUSTIFY_KEY, _("Justify"),
+                   nano_justify_msg, 0, 0, 0, NOVIEW, do_justify);
+    else
+       sc_init_one(&main_list[3], NANO_REPLACE_KEY, _("Replace"),
+                   nano_replace_msg,
+                   NANO_ALT_R, NANO_REPLACE_FKEY, 0, NOVIEW, do_replace);
+
+    sc_init_one(&main_list[4], NANO_INSERTFILE_KEY, _("Read File"),
+               nano_insert_msg,
+               0, NANO_INSERTFILE_FKEY, 0, NOVIEW, do_insertfile);
+
+    sc_init_one(&main_list[5], NANO_WHEREIS_KEY, _("Where Is"),
+               nano_whereis_msg,
+               0, NANO_WHEREIS_FKEY, 0, VIEW, do_search);
+
+    sc_init_one(&main_list[6], NANO_PREVPAGE_KEY, _("Prev Page"),
+               nano_prevpage_msg,
+               0, NANO_PREVPAGE_FKEY, KEY_PPAGE, VIEW, page_up);
+
+    sc_init_one(&main_list[7], NANO_NEXTPAGE_KEY, _("Next Page"),
+               nano_nextpage_msg,
+               0, NANO_NEXTPAGE_FKEY, KEY_NPAGE, VIEW, page_down);
+
+    sc_init_one(&main_list[8], NANO_CUT_KEY, _("Cut Text"),
+               nano_cut_msg, 0, NANO_CUT_FKEY, 0, NOVIEW, do_cut_text);
+
+    sc_init_one(&main_list[9], NANO_UNCUT_KEY, _("UnCut Txt"),
+               nano_uncut_msg,
+               0, NANO_UNCUT_FKEY, 0, NOVIEW, do_uncut_text);
+
+    sc_init_one(&main_list[10], NANO_CURSORPOS_KEY, _("Cur Pos"),
+               nano_cursorpos_msg,
+               0, NANO_CURSORPOS_FKEY, 0, VIEW, do_cursorpos);
+
+    sc_init_one(&main_list[11], NANO_SPELL_KEY, _("To Spell"),
+               nano_spell_msg, 0, NANO_SPELL_FKEY, 0, NOVIEW, do_spell);
+
+
+    sc_init_one(&main_list[12], NANO_UP_KEY, _("Up"),
+               nano_up_msg, 0, KEY_UP, 0, VIEW, do_up);
+
+    sc_init_one(&main_list[13], NANO_DOWN_KEY, _("Down"),
+               nano_down_msg, 0, KEY_DOWN, 0, VIEW, do_down);
+
+    sc_init_one(&main_list[14], NANO_FORWARD_KEY, _("Forward"),
+               nano_forward_msg, 0, KEY_RIGHT, 0, VIEW, do_right);
+
+    sc_init_one(&main_list[15], NANO_BACK_KEY, _("Back"),
+               nano_back_msg, 0, KEY_LEFT, 0, VIEW, do_left);
+
+    sc_init_one(&main_list[16], NANO_HOME_KEY, _("Home"),
+               nano_home_msg, 0, KEY_HOME, 362, VIEW, do_home);
+
+    sc_init_one(&main_list[17], NANO_END_KEY, _("End"),
+               nano_end_msg, 0, KEY_END, 385, VIEW, do_end);
+
+    sc_init_one(&main_list[18], NANO_REFRESH_KEY, _("Refresh"),
+               nano_refresh_msg, 0, 0, 0, VIEW, total_refresh);
+
+    sc_init_one(&main_list[19], NANO_MARK_KEY, _("Mark Text"),
+               nano_mark_msg, 0, 0, 0, NOVIEW, do_mark);
+
+    sc_init_one(&main_list[20], NANO_DELETE_KEY, _("Delete"),
+               nano_delete_msg, 0, KEY_DC,
+               NANO_CONTROL_D, NOVIEW, do_delete);
+
+    sc_init_one(&main_list[21], NANO_BACKSPACE_KEY, _("Backspace"),
+               nano_backspace_msg, 0,
+               KEY_BACKSPACE, 127, NOVIEW, do_backspace);
+
+    sc_init_one(&main_list[22], NANO_TAB_KEY, _("Tab"),
+               nano_tab_msg, 0, 0, 0, NOVIEW, do_tab);
+
+    if (ISSET(PICO_MSGS))
+       sc_init_one(&main_list[23], NANO_REPLACE_KEY, _("Replace"),
+                   nano_replace_msg,
+                   NANO_ALT_R, NANO_REPLACE_FKEY, 0, NOVIEW, do_replace);
+    else
+       sc_init_one(&main_list[23], NANO_JUSTIFY_KEY, _("Justify"),
+                   nano_justify_msg, 0, 0, 0, NOVIEW, do_justify);
+
+    sc_init_one(&main_list[24], NANO_ENTER_KEY, _("Enter"),
+               nano_enter_msg,
+               0, KEY_ENTER, NANO_CONTROL_M, NOVIEW, do_enter_void);
+
+    if (ISSET(PICO_MSGS))
+       sc_init_one(&main_list[25], NANO_GOTO_KEY, _("Goto Line"),
+                   nano_goto_msg,
+                   NANO_ALT_G, NANO_GOTO_FKEY, 0, VIEW, do_gotoline_void);
+    else
+       sc_init_one(&main_list[25], NANO_HELP_KEY, _("Get Help"),
+                   nano_help_msg, 0, 0, 0, VIEW, do_help);
+
+
+    sc_init_one(&whereis_list[0], NANO_FIRSTLINE_KEY, _("First Line"),
+               nano_firstline_msg, 0, 0, 0, VIEW, do_first_line);
+
+    sc_init_one(&whereis_list[1], NANO_LASTLINE_KEY, _("Last Line"),
+               nano_lastline_msg, 0, 0, 0, VIEW, do_last_line);
+
+    sc_init_one(&whereis_list[2], NANO_CASE_KEY, _("Case Sens"),
+               nano_case_msg, 0, 0, 0, VIEW, 0);
+
+
+    sc_init_one(&whereis_list[3], NANO_OTHERSEARCH_KEY, _("To Replace"),
+               nano_replace_msg, 0, 0, 0, VIEW, do_replace);
+
+    sc_init_one(&whereis_list[4], NANO_CANCEL_KEY, _("Cancel"),
+               nano_cancel_msg, 0, 0, 0, VIEW, 0);
+
+
+    sc_init_one(&replace_list[0], NANO_FIRSTLINE_KEY, _("First Line"),
+               nano_firstline_msg, 0, 0, 0, VIEW, do_first_line);
+
+    sc_init_one(&replace_list[1], NANO_LASTLINE_KEY, _("Last Line"),
+               nano_lastline_msg, 0, 0, 0, VIEW, do_last_line);
+
+    sc_init_one(&replace_list[2], NANO_CASE_KEY, _("Case Sens"),
+               nano_case_msg, 0, 0, 0, VIEW, 0);
+
+    sc_init_one(&replace_list[3], NANO_OTHERSEARCH_KEY, _("To Search"),
+               nano_whereis_msg, 0, 0, 0, VIEW, do_search);
+
+    sc_init_one(&replace_list[4], NANO_CANCEL_KEY, _("Cancel"),
+               nano_cancel_msg, 0, 0, 0, VIEW, 0);
+
+
+    sc_init_one(&goto_list[0], NANO_FIRSTLINE_KEY, _("First Line"),
+               nano_firstline_msg, 0, 0, 0, VIEW, &do_first_line);
+
+    sc_init_one(&goto_list[1], NANO_LASTLINE_KEY, _("Last Line"),
+               nano_lastline_msg, 0, 0, 0, VIEW, &do_last_line);
+
+    sc_init_one(&goto_list[2], NANO_CANCEL_KEY, _("Cancel"),
+               nano_cancel_msg, 0, 0, 0, VIEW, 0);
+
+
+    sc_init_one(&help_list[0], NANO_PREVPAGE_KEY, _("Prev Page"),
+               nano_prevpage_msg,
+               0, NANO_PREVPAGE_FKEY, KEY_PPAGE, VIEW, page_up);
+
+    sc_init_one(&help_list[1], NANO_NEXTPAGE_KEY, _("Next Page"),
+               nano_nextpage_msg,
+               0, NANO_NEXTPAGE_FKEY, KEY_NPAGE, VIEW, page_down);
+
+    sc_init_one(&help_list[2], NANO_EXIT_KEY, _("Exit"),
+               nano_exit_msg, 0, NANO_EXIT_FKEY, 0, VIEW, do_exit);
+
+
+    sc_init_one(&writefile_list[0], NANO_CANCEL_KEY, _("Cancel"),
+               nano_cancel_msg, 0, 0, 0, VIEW, 0);
+
+
+    sc_init_one(&writefile_list[0], NANO_CANCEL_KEY, _("Cancel"),
+               nano_cancel_msg, 0, 0, 0, VIEW, 0);
+
+    sc_init_one(&spell_list[0], NANO_HELP_KEY, _("Get Help"),
+               nano_help_msg, 0, 0, 0, VIEW, do_help);
+
+    sc_init_one(&spell_list[1], NANO_CANCEL_KEY, _("Cancel"),
+               nano_cancel_msg, 0, 0, 0, VIEW, 0);
+
+}
diff --git a/install-sh b/install-sh
new file mode 100755 (executable)
index 0000000..e9de238
--- /dev/null
@@ -0,0 +1,251 @@
+#!/bin/sh
+#
+# install - install a program, script, or datafile
+# This comes from X11R5 (mit/util/scripts/install.sh).
+#
+# Copyright 1991 by the Massachusetts Institute of Technology
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of M.I.T. not be used in advertising or
+# publicity pertaining to distribution of the software without specific,
+# written prior permission.  M.I.T. makes no representations about the
+# suitability of this software for any purpose.  It is provided "as is"
+# without express or implied warranty.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.  It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+transformbasename=""
+transform_arg=""
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=""
+dst=""
+dir_arg=""
+
+while [ x"$1" != x ]; do
+    case $1 in
+       -c) instcmd="$cpprog"
+           shift
+           continue;;
+
+       -d) dir_arg=true
+           shift
+           continue;;
+
+       -m) chmodcmd="$chmodprog $2"
+           shift
+           shift
+           continue;;
+
+       -o) chowncmd="$chownprog $2"
+           shift
+           shift
+           continue;;
+
+       -g) chgrpcmd="$chgrpprog $2"
+           shift
+           shift
+           continue;;
+
+       -s) stripcmd="$stripprog"
+           shift
+           continue;;
+
+       -t=*) transformarg=`echo $1 | sed 's/-t=//'`
+           shift
+           continue;;
+
+       -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+           shift
+           continue;;
+
+       *)  if [ x"$src" = x ]
+           then
+               src=$1
+           else
+               # this colon is to work around a 386BSD /bin/sh bug
+               :
+               dst=$1
+           fi
+           shift
+           continue;;
+    esac
+done
+
+if [ x"$src" = x ]
+then
+       echo "install:  no input file specified"
+       exit 1
+else
+       true
+fi
+
+if [ x"$dir_arg" != x ]; then
+       dst=$src
+       src=""
+       
+       if [ -d $dst ]; then
+               instcmd=:
+               chmodcmd=""
+       else
+               instcmd=mkdir
+       fi
+else
+
+# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+# might cause directories to be created, which would be especially bad 
+# if $src (and thus $dsttmp) contains '*'.
+
+       if [ -f $src -o -d $src ]
+       then
+               true
+       else
+               echo "install:  $src does not exist"
+               exit 1
+       fi
+       
+       if [ x"$dst" = x ]
+       then
+               echo "install:  no destination specified"
+               exit 1
+       else
+               true
+       fi
+
+# If destination is a directory, append the input filename; if your system
+# does not like double slashes in filenames, you may need to add some logic
+
+       if [ -d $dst ]
+       then
+               dst="$dst"/`basename $src`
+       else
+               true
+       fi
+fi
+
+## this sed command emulates the dirname command
+dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+#  this part is taken from Noah Friedman's mkinstalldirs script
+
+# Skip lots of stat calls in the usual case.
+if [ ! -d "$dstdir" ]; then
+defaultIFS='   
+'
+IFS="${IFS-${defaultIFS}}"
+
+oIFS="${IFS}"
+# Some sh's can't handle IFS=/ for some reason.
+IFS='%'
+set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS="${oIFS}"
+
+pathcomp=''
+
+while [ $# -ne 0 ] ; do
+       pathcomp="${pathcomp}${1}"
+       shift
+
+       if [ ! -d "${pathcomp}" ] ;
+        then
+               $mkdirprog "${pathcomp}"
+       else
+               true
+       fi
+
+       pathcomp="${pathcomp}/"
+done
+fi
+
+if [ x"$dir_arg" != x ]
+then
+       $doit $instcmd $dst &&
+
+       if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
+       if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
+       if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
+       if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
+else
+
+# If we're going to rename the final executable, determine the name now.
+
+       if [ x"$transformarg" = x ] 
+       then
+               dstfile=`basename $dst`
+       else
+               dstfile=`basename $dst $transformbasename | 
+                       sed $transformarg`$transformbasename
+       fi
+
+# don't allow the sed command to completely eliminate the filename
+
+       if [ x"$dstfile" = x ] 
+       then
+               dstfile=`basename $dst`
+       else
+               true
+       fi
+
+# Make a temp file name in the proper directory.
+
+       dsttmp=$dstdir/#inst.$$#
+
+# Move or copy the file name to the temp name
+
+       $doit $instcmd $src $dsttmp &&
+
+       trap "rm -f ${dsttmp}" 0 &&
+
+# and set any options; do chmod last to preserve setuid bits
+
+# If any of these fail, we abort the whole thing.  If we want to
+# ignore errors from any of these, just make sure not to ignore
+# errors from the above "$doit $instcmd $src $dsttmp" command.
+
+       if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
+       if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
+       if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
+       if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
+
+# Now rename the file to the real destination.
+
+       $doit $rmcmd -f $dstdir/$dstfile &&
+       $doit $mvcmd $dsttmp $dstdir/$dstfile 
+
+fi &&
+
+
+exit 0
diff --git a/intl/ChangeLog b/intl/ChangeLog
new file mode 100644 (file)
index 0000000..1989501
--- /dev/null
@@ -0,0 +1,1086 @@
+1998-04-29  Ulrich Drepper  <drepper@cygnus.com>
+
+       * intl/localealias.c (read_alias_file): Use unsigned char for
+       local variables.  Remove unused variable tp.
+       * intl/l10nflist.c (_nl_normalize_codeset): Use unsigned char *
+       for type of codeset.  For loosing Solaris systems.
+       * intl/loadinfo.h: Adapt prototype of _nl_normalize_codeset.
+       * intl/bindtextdom.c (BINDTEXTDOMAIN): Don't define local variable
+       len if not needed.
+       Patches by Jim Meyering.
+
+1998-04-28  Ulrich Drepper  <drepper@cygnus.com>
+
+       * loadmsgcat.c (_nl_load_domain): Don't assign the element use_mmap if
+       mmap is not supported.
+
+       * hash-string.h: Don't include <values.h>.
+
+1998-04-27  Ulrich Drepper  <drepper@cygnus.com>
+
+       * textdomain.c: Use strdup is available.
+
+       * localealias.c: Define HAVE_MEMPCPY so that we can use this
+       function.  Define and use semapahores to protect modfication of
+       global objects when compiling for glibc.  Add code to allow
+       freeing alias table.
+
+       * l10nflist.c: Don't assume stpcpy not being a macro.
+
+       * gettextP.h: Define internal_function macri if not already done.
+       Use glibc byte-swap macros instead of defining SWAP when compiled
+       for glibc.
+       (struct loaded_domain): Add elements to allow unloading.
+
+       * Makefile.in (distclean): Don't remove libintl.h here.
+
+       * bindtextdomain.c: Carry over changes from glibc.  Use strdup if
+       available.
+
+       * dcgettext.c: Don't assume stpcpy not being a macro.  Mark internal
+       functions.  Add memory freeing code for glibc.
+
+       * dgettext.c: Update copyright.
+
+       * explodename.c: Include stdlib.h and string.h only if they exist.
+       Use strings.h eventually.
+
+       * finddomain.c: Mark internal functions.  Use strdup if available.
+       Add memory freeing code for glibc.
+
+1997-10-10 20:00  Ulrich Drepper  <drepper@cygnus.com>
+
+       * libgettext.h: Fix dummy textdomain and bindtextdomain macros.
+       They should return reasonable values.
+       Reported by Tom Tromey <tromey@cygnus.com>.
+
+1997-09-16 03:33  Ulrich Drepper  <drepper@cygnus.com>
+
+       * libgettext.h: Define PARAMS also to `args' if __cplusplus is defined.
+       * intlh.inst.in: Likewise.
+       Reported by Jean-Marc Lasgouttes <Jean-Marc.Lasgouttes@inria.fr>.
+
+       * libintl.glibc: Update from current glibc version.
+
+1997-09-06 02:10  Ulrich Drepper  <drepper@cygnus.com>
+
+       * intlh.inst.in: Reformat copyright.
+
+1997-08-19 15:22  Ulrich Drepper  <drepper@cygnus.com>
+
+       * dcgettext.c (DCGETTEXT): Remove wrong comment.
+
+1997-08-16 00:13  Ulrich Drepper  <drepper@cygnus.com>
+
+       * Makefile.in (install-data): Don't change directory to install.
+
+1997-08-01 14:30  Ulrich Drepper  <drepper@cygnus.com>
+
+       * cat-compat.c: Fix copyright.
+
+       * localealias.c: Don't define strchr unless !HAVE_STRCHR.
+
+       * loadmsgcat.c: Update copyright.  Fix typos.
+
+       * l10nflist.c: Don't define strchr unless !HAVE_STRCHR.
+       (_nl_make_l10nflist): Handle sponsor and revision correctly.
+
+       * gettext.c: Update copyright.
+       * gettext.h: Likewise.
+       * hash-string.h: Likewise.
+
+       * finddomain.c: Remoave dead code.  Define strchr only if
+       !HAVE_STRCHR.
+
+       * explodename.c: Include <sys/types.h>.
+
+       * explodename.c: Reformat copyright text.
+       (_nl_explode_name): Fix typo.
+
+       * dcgettext.c: Define and use __set_errno.
+       (guess_category_value): Don't use setlocale if HAVE_LC_MESSAGES is
+       not defined.
+
+       * bindtextdom.c: Pretty printing.
+
+1997-05-01 02:25  Ulrich Drepper  <drepper@cygnus.com>
+
+       * dcgettext.c (guess_category_value): Don't depend on
+       HAVE_LC_MESSAGES.  We don't need the macro here.
+       Patch by Bruno Haible <haible@ilog.fr>.
+
+       * cat-compat.c (textdomain): DoN't refer to HAVE_SETLOCALE_NULL
+       macro.  Instead use HAVE_LOCALE_NULL and define it when using
+       glibc, as in dcgettext.c.
+       Patch by Bruno Haible <haible@ilog.fr>.
+
+       * Makefile.in (CPPFLAGS): New variable.  Reported by Franc,ois
+       Pinard.
+
+Mon Mar 10 06:51:17 1997  Ulrich Drepper  <drepper@cygnus.com>
+
+       * Makefile.in: Implement handling of libtool.
+
+       * gettextP.h: Change data structures for use of generic lowlevel
+       i18n file handling.
+
+Wed Dec  4 20:21:18 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * textdomain.c: Put parentheses around arguments of memcpy macro
+       definition.
+       * localealias.c: Likewise.
+       * l10nflist.c: Likewise.
+       * finddomain.c: Likewise.
+       * bindtextdom.c: Likewise.
+       Reported by Thomas Esken.
+
+Mon Nov 25 22:57:51 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * textdomain.c: Move definition of `memcpy` macro to right
+       position.
+
+Fri Nov 22 04:01:58 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * finddomain.c [!HAVE_STRING_H && !_LIBC]: Define memcpy using
+       bcopy if not already defined.  Reported by Thomas Esken.
+       * bindtextdom.c: Likewise.
+       * l10nflist.c: Likewise.
+       * localealias.c: Likewise.
+       * textdomain.c: Likewise.
+
+Tue Oct 29 11:10:27 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * Makefile.in (libdir): Change to use exec_prefix instead of
+       prefix.  Reported by Knut-HåvardAksnes <etokna@eto.ericsson.se>.
+
+Sat Aug 31 03:07:09 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * l10nflist.c (_nl_normalize_codeset): We convert to lower case,
+       so don't prepend uppercase `ISO' for only numeric arg.
+
+Fri Jul 19 00:15:46 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * l10nflist.c: Move inclusion of argz.h, ctype.h, stdlib.h after
+       definition of _GNU_SOURCE.  Patch by Roland McGrath.
+
+       * Makefile.in (uninstall): Fix another bug with `for' loop and
+       empty arguments.  Patch by Jim Meyering.  Correct name os
+       uninstalled files: no intl- prefix anymore.
+
+       * Makefile.in (install-data): Again work around shells which
+       cannot handle mpty for list.  Reported by Jim Meyering.
+
+Sat Jul 13 18:11:35 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * Makefile.in (install): Split goal.  Now depend on install-exec
+        and install-data.
+       (install-exec, install-data): New goals.  Created from former
+       install goal.
+       Reported by Karl Berry.
+
+Sat Jun 22 04:58:14 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * Makefile.in (MKINSTALLDIRS): New variable.  Path to
+        mkinstalldirs script.
+       (install): use MKINSTALLDIRS variable or if the script is not present
+       try to find it in the $top_scrdir).
+
+Wed Jun 19 02:56:56 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * l10nflist.c: Linux libc *partly* includes the argz_* functions.
+       Grr.  Work around by renaming the static version and use macros
+       for renaming.
+
+Tue Jun 18 20:11:17 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * l10nflist.c: Correct presence test macros of __argz_* functions.
+
+       * l10nflist.c: Include <argz.h> based on test of it instead when
+       __argz_* functions are available.
+       Reported by Andreas Schwab.
+
+Thu Jun 13 15:17:44 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * explodename.c, l10nflist.c: Define NULL for dumb systems.
+
+Tue Jun 11 17:05:13 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * intlh.inst.in, libgettext.h (dcgettext): Rename local variable
+       result to __result to prevent name clash.
+
+       * l10nflist.c, localealias.c, dcgettext.c: Define _GNU_SOURCE to
+        get prototype for stpcpy and strcasecmp.
+
+       * intlh.inst.in, libgettext.h: Move declaration of
+       `_nl_msg_cat_cntr' outside __extension__ block to prevent warning
+       from gcc's -Wnested-extern option.
+
+Fri Jun  7 01:58:00 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * Makefile.in (install): Remove comment.
+
+Thu Jun  6 17:28:17 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * Makefile.in (install): Work around for another Buglix stupidity.
+       Always use an `else' close for `if's.  Reported by Nelson Beebe.
+
+       * Makefile.in (intlh.inst): Correct typo in phony rule.
+       Reported by Nelson Beebe.
+
+Thu Jun  6 01:49:52 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * dcgettext.c (read_alias_file): Rename variable alloca_list to
+       block_list as the macro calls assume.
+       Patch by Eric Backus.
+
+       * localealias.c [!HAVE_ALLOCA]: Define alloca as macro using
+        malloc.
+       (read_alias_file): Rename varriabe alloca_list to block_list as the
+       macro calls assume.
+       Patch by Eric Backus.
+
+       * l10nflist.c: Correct conditional for <argz.h> inclusion.
+       Reported by Roland McGrath.
+
+       * Makefile.in (all): Depend on all-@USE_INCLUDED_LIBINTL@, not
+        all-@USE_NLS@.
+
+       * Makefile.in (install): intlh.inst comes from local dir, not
+        $(srcdir).
+
+       * Makefile.in (intlh.inst): Special handling of this goal.  If
+       used in gettext, this is really a rul to construct this file.  If
+       used in any other package it is defined as a .PHONY rule with
+       empty body.
+
+       * finddomain.c: Extract locale file information handling into
+       l10nfile.c.  Rename local stpcpy__ function to stpcpy.
+
+       * dcgettext.c (stpcpy): Add local definition.
+
+       * l10nflist.c: Solve some portability problems.  Patches partly by
+       Thomas Esken.  Add local definition of stpcpy.
+
+Tue Jun  4 02:47:49 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * intlh.inst.in: Don't depend including <locale.h> on
+       HAVE_LOCALE_H.  Instead configure must rewrite this fiile
+       depending on the result of the configure run.
+
+       * Makefile.in (install): libintl.inst is now called intlh.inst.
+       Add rules for updating intlh.inst from intlh.inst.in.
+
+       * libintl.inst: Renamed to intlh.inst.in.
+
+       * localealias.c, dcgettext.c [__GNUC__]: Define HAVE_ALLOCA to 1
+        because gcc has __buitlin_alloca.
+       Reported by Roland McGrath.
+
+Mon Jun  3 00:32:16 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * Makefile.in (installcheck): New goal to fulfill needs of
+        automake's distcheck.
+
+       * Makefile.in (install): Reorder commands so that VERSION is
+        found.
+
+       * Makefile.in (gettextsrcdir): Now use subdirectory intl/ in
+        @datadir@/gettext.
+       (COMSRCS): Add l10nfile.c.
+       (OBJECTS): Add l10nfile.o.
+       (DISTFILES): Rename to DISTFILE.normal.  Remove $(DISTFILES.common).
+       (DISTFILE.gettext): Remove $(DISTFILES.common).
+       (all-gettext): Remove goal.
+       (install): If $(PACKAGE) = gettext install, otherwose do nothing.  No
+       package but gettext itself should install libintl.h + headers.
+       (dist): Extend goal to work for gettext, too.
+       (dist-gettext): Remove goal.
+
+       * dcgettext.c [!HAVE_ALLOCA]: Define macro alloca by using malloc.
+
+Sun Jun  2 17:33:06 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * loadmsgcat.c (_nl_load_domain): Parameter is now comes from
+        find_l10nfile.
+
+Sat Jun  1 02:23:03 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+       * l10nflist.c (__argz_next): Add definition.
+
+       * dcgettext.c [!HAVE_ALLOCA]: Add code for handling missing alloca
+       code.  Use new l10nfile handling.
+
+       * localealias.c [!HAVE_ALLOCA]: Add code for handling missing
+        alloca code.
+
+       * l10nflist.c: Initial revision.
+
+Tue Apr  2 18:51:18 1996  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (all-gettext): New goal.  Same as all-yes.
+
+Thu Mar 28 23:01:22 1996  Karl Eichwalder  <ke@ke.central.de>
+
+       * Makefile.in (gettextsrcdir): Define using @datadir@.
+
+Tue Mar 26 12:39:14 1996  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c: Include <ctype.h>.  Reported by Roland McGrath.
+
+Sat Mar 23 02:00:35 1996  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c (stpcpy): Rename to stpcpy__ to prevent clashing
+        with external declaration.
+
+Sat Mar  2 00:47:09 1996  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (all-no): Rename from all_no.
+
+Sat Feb 17 00:25:59 1996  Ulrich Drepper  <drepper@myware>
+
+       * gettextP.h [loaded_domain]: Array `successor' must now contain up
+        to 63 elements (because of codeset name normalization).
+
+       * finddomain.c: Implement codeset name normalization.
+
+Thu Feb 15 04:39:09 1996  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (all): Define to `all-@USE_NLS@'.
+       (all-yes, all_no): New goals.  `all-no' is noop, `all-yes'
+       is former all.
+
+Mon Jan 15 21:46:01 1996  Howard Gayle  <howard@hal.com>
+
+       * localealias.c (alias_compare): Increment string pointers in loop
+        of strcasecmp replacement.
+
+Fri Dec 29 21:16:34 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (install-src): Who commented this goal out ? :-)
+
+Fri Dec 29 15:08:16 1995  Ulrich Drepper  <drepper@myware>
+
+       * dcgettext.c (DCGETTEXT): Save `errno'.  Failing system calls
+       should not effect it because a missing catalog is no error.
+       Reported by Harald K<o:>nig <koenig@tat.physik.uni-tuebingen.de>.
+
+Tue Dec 19 22:09:13 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (Makefile): Explicitly use $(SHELL) for running
+        shell scripts.
+
+Fri Dec 15 17:34:59 1995  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+       * Makefile.in (install-src): Only install library and header when
+       we use the own implementation.  Don't do it when using the
+       system's gettext or catgets functions.
+
+       * dcgettext.c (find_msg): Must not swap domain->hash_size here.
+
+Sat Dec  9 16:24:37 1995  Ulrich Drepper  <drepper@myware>
+
+       * localealias.c, libintl.inst, libgettext.h, hash-string.h,
+       gettextP.h, finddomain.c, dcgettext.c, cat-compat.c:
+       Use PARAMS instead of __P.  Suggested by Roland McGrath.
+
+Tue Dec  5 11:39:14 1995  Larry Schwimmer  <rosebud@cyclone.stanford.edu>
+
+       * libgettext.h: Use `#if !defined (_LIBINTL_H)' instead of `#if
+       !_LIBINTL_H' because Solaris defines _LIBINTL_H as empty.
+
+Mon Dec  4 15:42:07 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (install-src):
+       Install libintl.inst instead of libintl.h.install.
+
+Sat Dec  2 22:51:38 1995  Marcus Daniels  <marcus@sysc.pdx.edu>
+
+       * cat-compat.c (textdomain):
+       Reverse order in which files are tried you load.  First
+       try local file, when this failed absolute path.
+
+Wed Nov 29 02:03:53 1995  Nelson H. F. Beebe  <beebe@math.utah.edu>
+
+       * cat-compat.c (bindtextdomain): Add missing { }.
+
+Sun Nov 26 18:21:41 1995  Ulrich Drepper  <drepper@myware>
+
+       * libintl.inst: Add missing __P definition.  Reported by Nelson Beebe.
+
+       * Makefile.in:
+       Add dummy `all' and `dvi' goals.  Reported by Tom Tromey.
+
+Sat Nov 25 16:12:01 1995  Franc,ois Pinard  <pinard@iro.umontreal.ca>
+
+       * hash-string.h: Capitalize arguments of macros.
+
+Sat Nov 25 12:01:36 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (DISTFILES): Prevent files names longer than 13
+       characters.  libintl.h.glibc->libintl.glibc,
+       libintl.h.install->libintl.inst.  Reported by Joshua R. Poulson.
+
+Sat Nov 25 11:31:12 1995  Eric Backus  <ericb@lsid.hp.com>
+
+       * dcgettext.c: Fix bug in preprocessor conditionals.
+
+Sat Nov 25 02:35:27 1995  Nelson H. F. Beebe  <beebe@math.utah.edu>
+
+       * libgettext.h: Solaris cc does not understand
+        #if !SYMBOL1 && !SYMBOL2.  Sad but true.
+
+Thu Nov 23 16:22:14 1995  Ulrich Drepper  <drepper@myware>
+
+       * hash-string.h (hash_string):
+       Fix for machine with >32 bit `unsigned long's.
+
+       * dcgettext.c (DCGETTEXT):
+       Fix horrible bug in loop for alternative translation.
+
+Thu Nov 23 01:45:29 1995  Ulrich Drepper  <drepper@myware>
+
+       * po2tbl.sed.in, linux-msg.sed, xopen-msg.sed:
+       Some further simplifications in message number generation.
+
+Mon Nov 20 21:08:43 1995  Ulrich Drepper  <drepper@myware>
+
+       * libintl.h.glibc: Use __const instead of const in prototypes.
+
+       * Makefile.in (install-src):
+       Install libintl.h.install instead of libintl.h.  This
+       is a stripped-down version.  Suggested by Peter Miller.
+
+       * libintl.h.install, libintl.h.glibc: Initial revision.
+
+       * localealias.c (_nl_expand_alias, read_alias_file):
+       Protect prototypes in type casts by __P.
+
+Tue Nov 14 16:43:58 1995  Ulrich Drepper  <drepper@myware>
+
+       * hash-string.h: Correct prototype for hash_string.
+
+Sun Nov 12 12:42:30 1995  Ulrich Drepper  <drepper@myware>
+
+       * hash-string.h (hash_string): Add prototype.
+
+       * gettextP.h: Fix copyright.
+       (SWAP): Add prototype.
+
+Wed Nov  8 22:56:33 1995  Ulrich Drepper  <drepper@myware>
+
+       * localealias.c (read_alias_file): Forgot sizeof.
+       Avoid calling *printf function.  This introduces a big overhead.
+       Patch by Roland McGrath.
+
+Tue Nov  7 14:21:08 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c, cat-compat.c: Wrong indentation in #if for stpcpy.
+
+       * finddomain.c (stpcpy):
+       Define substitution function local.  The macro was to flaky.
+
+       * cat-compat.c: Fix typo.
+
+       * xopen-msg.sed, linux-msg.sed:
+       While bringing message number to right place only accept digits.
+
+       * linux-msg.sed, xopen-msg.sed: Now that the counter does not have
+       leading 0s we don't need to remove them.  Reported by Marcus
+       Daniels.
+
+       * Makefile.in (../po/cat-id-tbl.o): Use $(top_srdir) in
+       dependency.  Reported by Marcus Daniels.
+
+       * cat-compat.c: (stpcpy) [!_LIBC && !HAVE_STPCPY]: Define replacement.
+       Generally cleanup using #if instead of #ifndef.
+
+       * Makefile.in: Correct typos in comment.  By Franc,ois Pinard.
+
+Mon Nov  6 00:27:02 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (install-src): Don't install libintl.h and libintl.a
+       if we use an available gettext implementation.
+
+Sun Nov  5 22:02:08 1995  Ulrich Drepper  <drepper@myware>
+
+       * libgettext.h: Fix typo: HAVE_CATGETTS -> HAVE_CATGETS.  Reported
+       by Franc,ois Pinard.
+
+       * libgettext.h: Use #if instead of #ifdef/#ifndef.
+
+       * finddomain.c:
+       Comments describing what has to be done should start with FIXME.
+
+Sun Nov  5 19:38:01 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (DISTFILES): Split.  Use DISTFILES with normal meaning.
+       DISTFILES.common names the files common to both dist goals.
+       DISTFILES.gettext are the files only distributed in GNU gettext.
+
+Sun Nov  5 17:32:54 1995  Ulrich Drepper  <drepper@myware>
+
+       * dcgettext.c (DCGETTEXT): Correct searching in derived locales.
+       This was necessary since a change in _nl_find_msg several weeks
+       ago.  I really don't know this is still not fixed.
+
+Sun Nov  5 12:43:12 1995  Ulrich Drepper  <drepper@myware>
+
+       * loadmsgcat.c (_nl_load_domain): Test for FILENAME == NULL.  This
+       might mark a special condition.
+
+       * finddomain.c (make_entry_rec): Don't make illegal entry as decided.
+
+       * Makefile.in (dist): Suppress error message when ln failed.
+       Get files from $(srcdir) explicitly.
+
+       * libgettext.h (gettext_const): Rename to gettext_noop.
+
+Fri Nov  3 07:36:50 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c (make_entry_rec):
+       Protect against wrong locale names by testing mask.
+
+       * libgettext.h (gettext_const): Add macro definition.
+       Capitalize macro arguments.
+
+Thu Nov  2 23:15:51 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c (_nl_find_domain):
+       Test for pointer != NULL before accessing value.
+       Reported by Tom Tromey.
+
+       * gettext.c (NULL):
+       Define as (void*)0 instad of 0.  Reported by Franc,ois Pinard.
+
+Mon Oct 30 21:28:52 1995  Ulrich Drepper  <drepper@myware>
+
+       * po2tbl.sed.in: Serious typo bug fixed by Jim Meyering.
+
+Sat Oct 28 23:20:47 1995  Ulrich Drepper  <drepper@myware>
+
+       * libgettext.h: Disable dcgettext optimization for Solaris 2.3.
+
+       * localealias.c (alias_compare):
+       Peter Miller reported that tolower in some systems is
+       even dumber than I thought.  Protect call by `isupper'.
+
+Fri Oct 27 22:22:51 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (libdir, includedir): New variables.
+       (install-src): Install libintl.a and libintl.h in correct dirs.
+
+Fri Oct 27 22:07:29 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (SOURCES): Fix typo: intrl.compat.c -> intl-compat.c.
+
+       * po2tbl.sed.in: Patch for buggy SEDs by Christian von Roques.
+
+       * localealias.c:
+       Fix typo and superflous test.  Reported by Christian von Roques.
+
+Fri Oct  6 11:52:05 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c (_nl_find_domain):
+       Correct some remainder from the pre-CEN syntax.  Now
+       we don't have a constant number of successors anymore.
+
+Wed Sep 27 21:41:13 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (DISTFILES): Add libintl.h.glibc.
+
+       * Makefile.in (dist-libc): Add goal for packing sources for glibc.
+       (COMSRCS, COMHDRS): Splitted to separate sources shared with glibc.
+
+       * loadmsgcat.c: Forget to continue #if line.
+
+       * localealias.c:
+       [_LIBC]: Rename strcasecmp to __strcasecmp to keep ANSI C name
+       space clean.
+
+       * dcgettext.c, finddomain.c: Better comment to last change.
+
+       * loadmsgcat.c:
+       [_LIBC]: Rename fstat, open, close, read, mmap, and munmap to
+       __fstat, __open, __close, __read, __mmap, and __munmap resp
+       to keep ANSI C name space clean.
+
+       * finddomain.c:
+       [_LIBC]: Rename stpcpy to __stpcpy to keep ANSI C name space clean.
+
+       * dcgettext.c:
+       [_LIBC]: Rename getced and stpcpy to __getcwd and __stpcpy resp to
+       keep ANSI C name space clean.
+
+       * libgettext.h:
+       Include sys/types.h for those old SysV systems out there.
+       Reported by Francesco Potorti`.
+
+       * loadmsgcat.c (use_mmap): Define if compiled for glibc.
+
+       * bindtextdom.c: Include all those standard headers
+       unconditionally if _LIBC is defined.
+
+       * finddomain.c: Fix 2 times defiend -> defined.
+
+       * textdomain.c: Include libintl.h instead of libgettext.h when
+       compiling for glibc.  Include all those standard headers
+       unconditionally if _LIBC is defined.
+
+       * localealias.c, loadmsgcat.c: Prepare to be compiled in glibc.
+
+       * gettext.c:
+       Include libintl.h instead of libgettext.h when compiling for glibc.
+       Get NULL from stddef.h if we compile for glibc.
+
+       * finddomain.c: Include libintl.h instead of libgettext.h when
+       compiling for glibc.  Include all those standard headers
+       unconditionally if _LIBC is defined.
+
+       * dcgettext.c: Include all those standard headers unconditionally
+       if _LIBC is defined.
+
+       * dgettext.c: If compiled in glibc include libintl.h instead of
+       libgettext.h.
+       (locale.h): Don't rely on HAVE_LOCALE_H when compiling for glibc.
+
+       * dcgettext.c: If compiled in glibc include libintl.h instead of
+       libgettext.h.
+       (getcwd): Don't rely on HAVE_GETCWD when compiling for glibc.
+
+       * bindtextdom.c:
+       If compiled in glibc include libintl.h instead of libgettext.h.
+
+Mon Sep 25 22:23:06 1995  Ulrich Drepper  <drepper@myware>
+
+       * localealias.c (_nl_expand_alias): Don't call bsearch if NMAP <= 0.
+       Reported by Marcus Daniels.
+
+       * cat-compat.c (bindtextdomain):
+       String used in putenv must not be recycled.
+       Reported by Marcus Daniels.
+
+       * libgettext.h (__USE_GNU_GETTEXT):
+       Additional symbol to signal that we use GNU gettext
+       library.
+
+       * cat-compat.c (bindtextdomain):
+       Fix bug with the strange stpcpy replacement.
+       Reported by Nelson Beebe.
+
+Sat Sep 23 08:23:51 1995  Ulrich Drepper  <drepper@myware>
+
+       * cat-compat.c: Include <string.h> for stpcpy prototype.
+
+       * localealias.c (read_alias_file):
+       While expand strdup code temporary variable `cp' hided
+       higher level variable with same name.  Rename to `tp'.
+
+       * textdomain.c (textdomain):
+       Avoid warning by using temporary variable in strdup code.
+
+       * finddomain.c (_nl_find_domain): Remove unused variable `application'.
+
+Thu Sep 21 15:51:44 1995  Ulrich Drepper  <drepper@myware>
+
+       * localealias.c (alias_compare):
+       Use strcasecmp() only if available.  Else use
+       implementation in place.
+
+       * intl-compat.c:
+       Wrapper functions now call *__ functions instead of __*.
+
+       * libgettext.h: Declare prototypes for *__ functions instead for __*.
+
+       * cat-compat.c, loadmsgcat.c:
+       Don't use xmalloc, xstrdup, and stpcpy.  These functions are not part
+       of the standard libc and so prevent libintl.a from being used
+       standalone.
+
+       * bindtextdom.c:
+       Don't use xmalloc, xstrdup, and stpcpy.  These functions are not part
+       of the standard libc and so prevent libintl.a from being used
+       standalone.
+       Rename to bindtextdomain__ if not used in GNU C Library.
+
+       * dgettext.c:
+       Rename function to dgettext__ if not used in GNU C Library.
+
+       * gettext.c:
+       Don't use xmalloc, xstrdup, and stpcpy.  These functions are not part
+       of the standard libc and so prevent libintl.a from being used
+       standalone.
+       Functions now called gettext__ if not used in GNU C Library.
+
+       * dcgettext.c, localealias.c, textdomain.c, finddomain.c:
+       Don't use xmalloc, xstrdup, and stpcpy.  These functions are not part
+       of the standard libc and so prevent libintl.a from being used
+       standalone.
+
+Sun Sep 17 23:14:49 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c: Correct some bugs in handling of CEN standard
+       locale definitions.
+
+Thu Sep  7 01:49:28 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c: Implement CEN syntax.
+
+       * gettextP.h (loaded_domain): Extend number of successors to 31.
+
+Sat Aug 19 19:25:29 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (aliaspath): Remove path to X11 locale dir.
+
+       * Makefile.in: Make install-src depend on install.  This helps
+       gettext to install the sources and other packages can use the
+       install goal.
+
+Sat Aug 19 15:19:33 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (uninstall): Remove stuff installed by install-src.
+
+Tue Aug 15 13:13:53 1995  Ulrich Drepper  <drepper@myware>
+
+       * VERSION.in: Initial revision.
+
+       * Makefile.in (DISTFILES):
+       Add VERSION file.  This is not necessary for gettext, but
+       for other packages using this library.
+
+Tue Aug 15 06:16:44 1995  Ulrich Drepper  <drepper@myware>
+
+       * gettextP.h (_nl_find_domain):
+       New prototype after changing search strategy.
+
+       * finddomain.c (_nl_find_domain):
+       We now try only to find a specified catalog.  Fall back to other
+       catalogs listed in the locale list is now done in __dcgettext.
+
+       * dcgettext.c (__dcgettext):
+       Now we provide message fall back even to different languages.
+       I.e. if a message is not available in one language all the other
+       in the locale list a tried.  Formerly fall back was only possible
+       within one language.  Implemented by moving one loop from
+       _nl_find_domain to here.
+
+Mon Aug 14 23:45:50 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (gettextsrcdir):
+       Directory where source of GNU gettext library are made
+       available.
+       (INSTALL, INSTALL_DATA): Programs used for installing sources.
+       (gettext-src): New.  Rule to install GNU gettext sources for use in
+       gettextize shell script.
+
+Sun Aug 13 14:40:48 1995  Ulrich Drepper  <drepper@myware>
+
+       * loadmsgcat.c (_nl_load_domain):
+       Use mmap for loading only when munmap function is
+       also available.
+
+       * Makefile.in (install): Depend on `all' goal.
+
+Wed Aug  9 11:04:33 1995  Ulrich Drepper  <drepper@myware>
+
+       * localealias.c (read_alias_file):
+       Do not overwrite '\n' when terminating alias value string.
+
+       * localealias.c (read_alias_file):
+       Handle long lines.  Ignore the rest not fitting in
+       the buffer after the initial `fgets' call.
+
+Wed Aug  9 00:54:29 1995  Ulrich Drepper  <drepper@myware>
+
+       * gettextP.h (_nl_load_domain):
+       Add prototype, replacing prototype for _nl_load_msg_cat.
+
+       * finddomain.c (_nl_find_domain):
+       Remove unneeded variable filename and filename_len.
+       (expand_alias): Remove prototype because functions does not
+       exist anymore.
+
+       * localealias.c (read_alias_file):
+       Change type of fname_len parameter to int.
+       (xmalloc): Add prototype.
+
+       * loadmsgcat.c: Better prototypes for xmalloc.
+
+Tue Aug  8 22:30:39 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c (_nl_find_domain):
+       Allow alias name to be constructed from the four components.
+
+       * Makefile.in (aliaspath): New variable.  Set to preliminary value.
+       (SOURCES): Add localealias.c.
+       (OBJECTS): Add localealias.o.
+
+       * gettextP.h: Add prototype for _nl_expand_alias.
+
+       * finddomain.c: Aliasing handled in intl/localealias.c.
+
+       * localealias.c: Aliasing for locale names.
+
+       * bindtextdom.c: Better prototypes for xmalloc and xstrdup.
+
+Mon Aug  7 23:47:42 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (DISTFILES): gettext.perl is now found in misc/.
+
+       * cat-compat.c (bindtextdomain):
+       Correct implementation.  dirname parameter was not used.
+       Reported by Marcus Daniels.
+
+       * gettextP.h (loaded_domain):
+       New fields `successor' and `decided' for oo, lazy
+       message handling implementation.
+
+       * dcgettext.c:
+       Adopt for oo, lazy message handliing.
+       Now we can inherit translations from less specific locales.
+       (find_msg): New function.
+
+       * loadmsgcat.c, finddomain.c:
+       Complete rewrite.  Implement oo, lazy message handling :-).
+       We now have an additional environment variable `LANGUAGE' with
+       a higher priority than LC_ALL for the LC_MESSAGE locale.
+       Here we can set a colon separated list of specifications each
+       of the form `language[_territory[.codeset]][@modifier]'.
+
+Sat Aug  5 09:55:42 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c (unistd.h):
+       Include to get _PC_PATH_MAX defined on system having it.
+
+Fri Aug  4 22:42:00 1995  Ulrich Drepper  <drepper@myware>
+
+       * finddomain.c (stpcpy): Include prototype.
+
+       * Makefile.in (dist): Remove `copying instead' message.
+
+Wed Aug  2 18:52:03 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (ID, TAGS): Do not use $^.
+
+Tue Aug  1 20:07:11 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (TAGS, ID): Use $^ as command argument.
+       (TAGS): Give etags -o option t write to current directory,
+       not $(srcdir).
+       (ID): Use $(srcdir) instead os $(top_srcdir)/src.
+       (distclean): Remove ID.
+
+Sun Jul 30 11:51:46 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (gnulocaledir):
+       New variable, always using share/ for data directory.
+       (DEFS): Add GNULOCALEDIR, used in finddomain.c.
+
+       * finddomain.c (_nl_default_dirname):
+       Set to GNULOCALEDIR, because it always has to point
+       to the directory where GNU gettext Library writes it to.
+
+       * intl-compat.c (textdomain, bindtextdomain):
+       Undefine macros before function definition.
+
+Sat Jul 22 01:10:02 1995  Ulrich Drepper  <drepper@myware>
+
+       * libgettext.h (_LIBINTL_H):
+       Protect definition in case where this file is included as
+       libgettext.h on Solaris machines.  Add comment about this.
+
+Wed Jul 19 02:36:42 1995  Ulrich Drepper  <drepper@myware>
+
+       * intl-compat.c (textdomain): Correct typo.
+
+Wed Jul 19 01:51:35 1995  Ulrich Drepper  <drepper@myware>
+
+       * dcgettext.c (dcgettext): Function now called __dcgettext.
+
+       * dgettext.c (dgettext): Now called __dgettext and calls
+       __dcgettext.
+
+       * gettext.c (gettext):
+       Function now called __gettext and calls __dgettext.
+
+       * textdomain.c (textdomain): Function now called __textdomain.
+
+       * bindtextdom.c (bindtextdomain): Function now called
+       __bindtextdomain.
+
+       * intl-compat.c: Initial revision.
+
+       * Makefile.in (SOURCES): Add intl-compat.c.
+       (OBJECTS): We always compile the GNU gettext library functions.
+       OBJECTS contains all objects but cat-compat.o, ../po/cat-if-tbl.o,
+       and intl-compat.o.
+       (GETTOBJS): Contains now only intl-compat.o.
+
+       * libgettext.h:
+       Re-include protection matches dualistic character of libgettext.h.
+       For all functions in GNU gettext library define __ counter part.
+
+       * finddomain.c (strchr): Define as index if not found in C library.
+       (_nl_find_domain): For relative paths paste / in between.
+
+Tue Jul 18 16:37:45 1995  Ulrich Drepper  <drepper@myware>
+
+       * loadmsgcat.c, finddomain.c: Add inclusion of sys/types.h.
+
+       * xopen-msg.sed: Fix bug with `msgstr ""' lines.
+       A little bit better comments.
+
+Tue Jul 18 01:18:27 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in:
+       po-mode.el, makelinks, combine-sh are now found in ../misc.
+
+       * po-mode.el, makelinks, combine-sh, elisp-comp:
+       Moved to ../misc/.
+
+       * libgettext.h, gettextP.h, gettext.h: Uniform test for __STDC__.
+
+Sun Jul 16 22:33:02 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (INSTALL, INSTALL_DATA): New variables.
+       (install-data, uninstall): Install/uninstall .elc file.
+
+       * po-mode.el (Installation comment):
+       Add .pox as possible extension of .po files.
+
+Sun Jul 16 13:23:27 1995  Ulrich Drepper  <drepper@myware>
+
+       * elisp-comp: Complete new version by Franc,ois: This does not
+       fail when not compiling in the source directory.
+
+Sun Jul 16 00:12:17 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (../po/cat-id-tbl.o):
+       Use $(MAKE) instead of make for recursive make.
+
+       * Makefile.in (.el.elc): Use $(SHELL) instead of /bin/sh.
+       (install-exec): Add missing dummy goal.
+       (install-data, uninstall): @ in multi-line shell command at
+       beginning, not in front of echo.  Reported by Eric Backus.
+
+Sat Jul 15 00:21:28 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (DISTFILES):
+       Rename libgettext.perl to gettext.perl to fit in 14 chars
+       file systems.
+
+       * gettext.perl:
+       Rename to gettext.perl to fit in 14 chars file systems.
+
+Thu Jul 13 23:17:20 1995  Ulrich Drepper  <drepper@myware>
+
+       * cat-compat.c: If !STDC_HEADERS try to include malloc.h.
+
+Thu Jul 13 20:55:02 1995  Ulrich Drepper  <drepper@myware>
+
+       * po2tbl.sed.in: Pretty printing.
+
+       * linux-msg.sed, xopen-msg.sed:
+       Correct bugs with handling substitute flags in branches.
+
+       * hash-string.h (hash_string):
+       Old K&R compilers don't under stand `unsigned char'.
+
+       * gettext.h (nls_uint32):
+       Some old K&R compilers (eg HP) don't understand `unsigned int'.
+
+       * cat-compat.c (msg_to_cat_id): De-ANSI-fy prototypes.
+
+Thu Jul 13 01:34:33 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (ELCFILES): New variable.
+       (DISTFILES): Add elisp-comp.
+       Add implicit rule for .el -> .elc compilation.
+       (install-data): install $ELCFILES
+       (clean): renamed po-to-tbl and po-to-msg to po2tbl and po2msg resp.
+
+       * elisp-comp: Initial revision
+
+Wed Jul 12 16:14:52 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in:
+       cat-id-tbl.c is now found in po/.  This enables us to use an identical
+       intl/ directory in all packages.
+
+       * dcgettext.c (dcgettext): hashing does not work for table size <= 2.
+
+       * textdomain.c: fix typo (#if def -> #if defined)
+
+Tue Jul 11 18:44:43 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in (stamp-cat-id): use top_srcdir to address source files
+       (DISTFILES,distclean): move tupdate.perl to src/
+
+       * po-to-tbl.sed.in:
+       add additional jump to clear change flag to recognize multiline strings
+
+Tue Jul 11 01:32:50 1995  Ulrich Drepper  <drepper@myware>
+
+       * textdomain.c: Protect inclusion of stdlib.h and string.h.
+
+       * loadmsgcat.c: Protect inclusion of stdlib.h.
+
+       * libgettext.h: Protect inclusion of locale.h.
+       Allow use in C++ programs.
+       Define NULL is not happened already.
+
+       * Makefile.in (DISTFILES): ship po-to-tbl.sed.in instead of
+       po-to-tbl.sed.
+       (distclean): remove po-to-tbl.sed and tupdate.perl.
+
+       * tupdate.perl.in: Substitute Perl path even in exec line.
+       Don't include entries without translation from old .po file.
+
+Tue Jul  4 00:41:51 1995  Ulrich Drepper  <drepper@myware>
+
+       * tupdate.perl.in: use "Updated: " in msgid "".
+
+       * cat-compat.c: Fix typo (LOCALDIR -> LOCALEDIR).
+       Define getenv if !__STDC__.
+
+       * bindtextdom.c: Protect stdlib.h and string.h inclusion.
+       Define free if !__STDC__.
+
+       * finddomain.c: Change DEF_MSG_DOM_DIR to LOCALEDIR.
+       Define free if !__STDC__.
+
+       * cat-compat.c: Change DEF_MSG_DOM_DIR to LOCALEDIR.
+
+Mon Jul  3 23:56:30 1995  Ulrich Drepper  <drepper@myware>
+
+       * Makefile.in: Use LOCALEDIR instead of DEF_MSG_DOM_DIR.
+       Remove unneeded $(srcdir) from Makefile.in dependency.
+
+       * makelinks: Add copyright and short description.
+
+       * po-mode.el: Last version for 0.7.
+
+       * tupdate.perl.in: Fix die message.
+
+       * dcgettext.c: Protect include of string.h.
+
+       * gettext.c: Protect include of stdlib.h and further tries to get NULL.
+
+       * finddomain.c: Some corrections in includes.
+
+       * Makefile.in (INCLUDES): Prune list correct path to Makefile.in.
+
+       * po-to-tbl.sed: Adopt for new .po file format.
+
+       * linux-msg.sed, xopen-msg.sed: Adopt for new .po file format.
+
+Sun Jul  2 23:55:03 1995  Ulrich Drepper  <drepper@myware>
+
+       * tupdate.perl.in: Complete rewrite for new .po file format.
+
+Sun Jul  2 02:06:50 1995  Ulrich Drepper  <drepper@myware>
+
+       * First official release.  This directory contains all the code
+       needed to internationalize own packages.  It provides functions
+       which allow to use the X/Open catgets function with an interface
+       like the Uniforum gettext function.  For system which does not
+       have neither of those a complete implementation is provided.
diff --git a/intl/Makefile.in b/intl/Makefile.in
new file mode 100644 (file)
index 0000000..4bdb186
--- /dev/null
@@ -0,0 +1,214 @@
+# Makefile for directory with message catalog handling in GNU NLS Utilities.
+# Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+
+SHELL = /bin/sh
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+top_builddir = ..
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+transform = @program_transform_name@
+libdir = $(exec_prefix)/lib
+includedir = $(prefix)/include
+datadir = $(prefix)/@DATADIRNAME@
+localedir = $(datadir)/locale
+gnulocaledir = $(prefix)/share/locale
+gettextsrcdir = @datadir@/gettext/intl
+aliaspath = $(localedir):.
+subdir = intl
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+
+l = @l@
+
+AR = ar
+CC = @CC@
+LIBTOOL = @LIBTOOL@
+RANLIB = @RANLIB@
+
+DEFS = -DLOCALEDIR=\"$(localedir)\" -DGNULOCALEDIR=\"$(gnulocaledir)\" \
+-DLOCALE_ALIAS_PATH=\"$(aliaspath)\" @DEFS@
+CPPFLAGS = @CPPFLAGS@
+CFLAGS = @CFLAGS@
+LDFLAGS = @LDFLAGS@
+
+COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
+
+HEADERS = $(COMHDRS) libgettext.h loadinfo.h
+COMHDRS = gettext.h gettextP.h hash-string.h
+SOURCES = $(COMSRCS) intl-compat.c cat-compat.c
+COMSRCS = bindtextdom.c dcgettext.c dgettext.c gettext.c \
+finddomain.c loadmsgcat.c localealias.c textdomain.c l10nflist.c \
+explodename.c
+OBJECTS = @INTLOBJS@ bindtextdom.$lo dcgettext.$lo dgettext.$lo gettext.$lo \
+finddomain.$lo loadmsgcat.$lo localealias.$lo textdomain.$lo l10nflist.$lo \
+explodename.$lo
+CATOBJS = cat-compat.$lo ../po/cat-id-tbl.$lo
+GETTOBJS = intl-compat.$lo
+DISTFILES.common = ChangeLog Makefile.in linux-msg.sed po2tbl.sed.in \
+xopen-msg.sed $(HEADERS) $(SOURCES)
+DISTFILES.normal = VERSION
+DISTFILES.gettext = libintl.glibc intlh.inst.in
+
+.SUFFIXES:
+.SUFFIXES: .c .o .lo
+.c.o:
+       $(COMPILE) $<
+.c.lo:
+       $(LIBTOOL) --mode=compile $(COMPILE) $<
+
+INCLUDES = -I.. -I. -I$(top_srcdir)/intl -I$(top_srcdir)/lib
+
+all: all-@USE_INCLUDED_LIBINTL@
+
+all-yes: libintl.$la intlh.inst
+all-no:
+
+libintl.a: $(OBJECTS)
+       rm -f $@
+       $(AR) cru $@ $(OBJECTS)
+       $(RANLIB) $@
+
+libintl.la: $(OBJECTS)
+       $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ $(OBJECTS) \
+                  -version-info 1:0 -rpath $(libdir)
+
+../po/cat-id-tbl.$lo: ../po/cat-id-tbl.c $(top_srcdir)/po/$(PACKAGE).pot
+       cd ../po && $(MAKE) cat-id-tbl.$lo
+
+check: all
+
+# This installation goal is only used in GNU gettext.  Packages which
+# only use the library should use install instead.
+
+# We must not install the libintl.h/libintl.a files if we are on a
+# system which has the gettext() function in its C library or in a
+# separate library or use the catgets interface.  A special case is
+# where configure found a previously installed GNU gettext library.
+# If you want to use the one which comes with this version of the
+# package, you have to use `configure --with-included-gettext'.
+install: install-exec install-data
+install-exec: all
+       if test "$(PACKAGE)" = "gettext" \
+          && test '@INTLOBJS@' = '$(GETTOBJS)'; then \
+         if test -r $(MKINSTALLDIRS); then \
+           $(MKINSTALLDIRS) $(libdir) $(includedir); \
+         else \
+           $(top_srcdir)/mkinstalldirs $(libdir) $(includedir); \
+         fi; \
+         $(INSTALL_DATA) intlh.inst $(includedir)/libintl.h; \
+         $(INSTALL_DATA) libintl.a $(libdir)/libintl.a; \
+       else \
+         : ; \
+       fi
+install-data: all
+       if test "$(PACKAGE)" = "gettext"; then \
+         if test -r $(MKINSTALLDIRS); then \
+           $(MKINSTALLDIRS) $(gettextsrcdir); \
+         else \
+           $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \
+         fi; \
+         $(INSTALL_DATA) VERSION $(gettextsrcdir)/VERSION; \
+         dists="$(DISTFILES.common)"; \
+         for file in $$dists; do \
+           $(INSTALL_DATA) $(srcdir)/$$file $(gettextsrcdir)/$$file; \
+         done; \
+       else \
+         : ; \
+       fi
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall:
+       dists="$(DISTFILES.common)"; \
+       for file in $$dists; do \
+         rm -f $(gettextsrcdir)/$$file; \
+       done
+
+info dvi:
+
+$(OBJECTS): ../config.h libgettext.h
+bindtextdom.$lo finddomain.$lo loadmsgcat.$lo: gettextP.h gettext.h loadinfo.h
+dcgettext.$lo: gettextP.h gettext.h hash-string.h loadinfo.h
+
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES)
+       here=`pwd`; cd $(srcdir) && etags -o $$here/TAGS $(HEADERS) $(SOURCES)
+
+id: ID
+
+ID: $(HEADERS) $(SOURCES)
+       here=`pwd`; cd $(srcdir) && mkid -f$$here/ID $(HEADERS) $(SOURCES)
+
+
+mostlyclean:
+       rm -f *.a *.o *.lo core core.*
+
+clean: mostlyclean
+
+distclean: clean
+       rm -f Makefile ID TAGS po2msg.sed po2tbl.sed
+
+maintainer-clean: distclean
+       @echo "This command is intended for maintainers to use;"
+       @echo "it deletes files that may require special tools to rebuild."
+
+
+# GNU gettext needs not contain the file `VERSION' but contains some
+# other files which should not be distributed in other packages.
+distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir: Makefile $(DISTFILES)
+       if test "$(PACKAGE)" = gettext; then \
+         additional="$(DISTFILES.gettext)"; \
+       else \
+         additional="$(DISTFILES.normal)"; \
+       fi; \
+       for file in $(DISTFILES.common) $$additional; do \
+         ln $(srcdir)/$$file $(distdir) 2> /dev/null \
+           || cp -p $(srcdir)/$$file $(distdir); \
+       done
+
+dist-libc:
+       tar zcvf intl-glibc.tar.gz $(COMSRCS) $(COMHDRS) libintl.h.glibc
+
+Makefile: Makefile.in ../config.status
+       cd .. \
+         && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+# The dependency for intlh.inst is different in gettext and all other
+# packages.  Because we cannot you GNU make features we have to solve
+# the problem while rewriting Makefile.in.
+@GT_YES@intlh.inst: intlh.inst.in ../config.status
+@GT_YES@       cd .. \
+@GT_YES@       && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= \
+@GT_YES@         $(SHELL) ./config.status
+@GT_NO@.PHONY: intlh.inst
+@GT_NO@intlh.inst:
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/intl/VERSION b/intl/VERSION
new file mode 100644 (file)
index 0000000..ee66b06
--- /dev/null
@@ -0,0 +1 @@
+GNU gettext library from gettext-0.10.35
diff --git a/intl/bindtextdom.c b/intl/bindtextdom.c
new file mode 100644 (file)
index 0000000..d9c3f34
--- /dev/null
@@ -0,0 +1,203 @@
+/* Implementation of the bindtextdomain(3) function
+   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#if defined STDC_HEADERS || defined _LIBC
+# include <stdlib.h>
+#else
+# ifdef HAVE_MALLOC_H
+#  include <malloc.h>
+# else
+void free ();
+# endif
+#endif
+
+#if defined HAVE_STRING_H || defined _LIBC
+# include <string.h>
+#else
+# include <strings.h>
+# ifndef memcpy
+#  define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
+# endif
+#endif
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgettext.h"
+#endif
+#include "gettext.h"
+#include "gettextP.h"
+
+/* @@ end of prolog @@ */
+
+/* Contains the default location of the message catalogs.  */
+extern const char _nl_default_dirname[];
+
+/* List with bindings of specific domains.  */
+extern struct binding *_nl_domain_bindings;
+
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define BINDTEXTDOMAIN __bindtextdomain
+# ifndef strdup
+#  define strdup(str) __strdup (str)
+# endif
+#else
+# define BINDTEXTDOMAIN bindtextdomain__
+#endif
+
+/* Specify that the DOMAINNAME message catalog will be found
+   in DIRNAME rather than in the system locale data base.  */
+char *
+BINDTEXTDOMAIN (domainname, dirname)
+     const char *domainname;
+     const char *dirname;
+{
+  struct binding *binding;
+
+  /* Some sanity checks.  */
+  if (domainname == NULL || domainname[0] == '\0')
+    return NULL;
+
+  for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
+    {
+      int compare = strcmp (domainname, binding->domainname);
+      if (compare == 0)
+       /* We found it!  */
+       break;
+      if (compare < 0)
+       {
+         /* It is not in the list.  */
+         binding = NULL;
+         break;
+       }
+    }
+
+  if (dirname == NULL)
+    /* The current binding has be to returned.  */
+    return binding == NULL ? (char *) _nl_default_dirname : binding->dirname;
+
+  if (binding != NULL)
+    {
+      /* The domain is already bound.  If the new value and the old
+        one are equal we simply do nothing.  Otherwise replace the
+        old binding.  */
+      if (strcmp (dirname, binding->dirname) != 0)
+       {
+         char *new_dirname;
+
+         if (strcmp (dirname, _nl_default_dirname) == 0)
+           new_dirname = (char *) _nl_default_dirname;
+         else
+           {
+#if defined _LIBC || defined HAVE_STRDUP
+             new_dirname = strdup (dirname);
+             if (new_dirname == NULL)
+               return NULL;
+#else
+             size_t len = strlen (dirname) + 1;
+             new_dirname = (char *) malloc (len);
+             if (new_dirname == NULL)
+               return NULL;
+
+             memcpy (new_dirname, dirname, len);
+#endif
+           }
+
+         if (binding->dirname != _nl_default_dirname)
+           free (binding->dirname);
+
+         binding->dirname = new_dirname;
+       }
+    }
+  else
+    {
+      /* We have to create a new binding.  */
+#if !defined _LIBC && !defined HAVE_STRDUP
+      size_t len;
+#endif
+      struct binding *new_binding =
+       (struct binding *) malloc (sizeof (*new_binding));
+
+      if (new_binding == NULL)
+       return NULL;
+
+#if defined _LIBC || defined HAVE_STRDUP
+      new_binding->domainname = strdup (domainname);
+      if (new_binding->domainname == NULL)
+       return NULL;
+#else
+      len = strlen (domainname) + 1;
+      new_binding->domainname = (char *) malloc (len);
+      if (new_binding->domainname == NULL)
+       return NULL;
+      memcpy (new_binding->domainname, domainname, len);
+#endif
+
+      if (strcmp (dirname, _nl_default_dirname) == 0)
+       new_binding->dirname = (char *) _nl_default_dirname;
+      else
+       {
+#if defined _LIBC || defined HAVE_STRDUP
+         new_binding->dirname = strdup (dirname);
+         if (new_binding->dirname == NULL)
+           return NULL;
+#else
+         len = strlen (dirname) + 1;
+         new_binding->dirname = (char *) malloc (len);
+         if (new_binding->dirname == NULL)
+           return NULL;
+         memcpy (new_binding->dirname, dirname, len);
+#endif
+       }
+
+      /* Now enqueue it.  */
+      if (_nl_domain_bindings == NULL
+         || strcmp (domainname, _nl_domain_bindings->domainname) < 0)
+       {
+         new_binding->next = _nl_domain_bindings;
+         _nl_domain_bindings = new_binding;
+       }
+      else
+       {
+         binding = _nl_domain_bindings;
+         while (binding->next != NULL
+                && strcmp (domainname, binding->next->domainname) > 0)
+           binding = binding->next;
+
+         new_binding->next = binding->next;
+         binding->next = new_binding;
+       }
+
+      binding = new_binding;
+    }
+
+  return binding->dirname;
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library.  */
+weak_alias (__bindtextdomain, bindtextdomain);
+#endif
diff --git a/intl/cat-compat.c b/intl/cat-compat.c
new file mode 100644 (file)
index 0000000..867d901
--- /dev/null
@@ -0,0 +1,262 @@
+/* Compatibility code for gettext-using-catgets interface.
+   Copyright (C) 1995, 1997 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <string.h>
+#else
+char *getenv ();
+# ifdef HAVE_MALLOC_H
+#  include <malloc.h>
+# endif
+#endif
+
+#ifdef HAVE_NL_TYPES_H
+# include <nl_types.h>
+#endif
+
+#include "libgettext.h"
+
+/* @@ end of prolog @@ */
+
+/* XPG3 defines the result of `setlocale (category, NULL)' as:
+   ``Directs `setlocale()' to query `category' and return the current
+     setting of `local'.''
+   However it does not specify the exact format.  And even worse: POSIX
+   defines this not at all.  So we can use this feature only on selected
+   system (e.g. those using GNU C Library).  */
+#ifdef _LIBC
+# define HAVE_LOCALE_NULL
+#endif
+
+/* The catalog descriptor.  */
+static nl_catd catalog = (nl_catd) -1;
+
+/* Name of the default catalog.  */
+static const char default_catalog_name[] = "messages";
+
+/* Name of currently used catalog.  */
+static const char *catalog_name = default_catalog_name;
+
+/* Get ID for given string.  If not found return -1.  */
+static int msg_to_cat_id PARAMS ((const char *msg));
+
+/* Substitution for systems lacking this function in their C library.  */
+#if !_LIBC && !HAVE_STPCPY
+static char *stpcpy PARAMS ((char *dest, const char *src));
+#endif
+
+
+/* Set currently used domain/catalog.  */
+char *
+textdomain (domainname)
+     const char *domainname;
+{
+  nl_catd new_catalog;
+  char *new_name;
+  size_t new_name_len;
+  char *lang;
+
+#if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES \
+    && defined HAVE_LOCALE_NULL
+  lang = setlocale (LC_MESSAGES, NULL);
+#else
+  lang = getenv ("LC_ALL");
+  if (lang == NULL || lang[0] == '\0')
+    {
+      lang = getenv ("LC_MESSAGES");
+      if (lang == NULL || lang[0] == '\0')
+       lang = getenv ("LANG");
+    }
+#endif
+  if (lang == NULL || lang[0] == '\0')
+    lang = "C";
+
+  /* See whether name of currently used domain is asked.  */
+  if (domainname == NULL)
+    return (char *) catalog_name;
+
+  if (domainname[0] == '\0')
+    domainname = default_catalog_name;
+
+  /* Compute length of added path element.  */
+  new_name_len = sizeof (LOCALEDIR) - 1 + 1 + strlen (lang)
+                + sizeof ("/LC_MESSAGES/") - 1 + sizeof (PACKAGE) - 1
+                + sizeof (".cat");
+
+  new_name = (char *) malloc (new_name_len);
+  if (new_name == NULL)
+    return NULL;
+
+  strcpy (new_name, PACKAGE);
+  new_catalog = catopen (new_name, 0);
+
+  if (new_catalog == (nl_catd) -1)
+    {
+      /* NLSPATH search didn't work, try absolute path */
+      sprintf (new_name, "%s/%s/LC_MESSAGES/%s.cat", LOCALEDIR, lang,
+              PACKAGE);
+      new_catalog = catopen (new_name, 0);
+
+      if (new_catalog == (nl_catd) -1)
+       {
+         free (new_name);
+         return (char *) catalog_name;
+       }
+    }
+
+  /* Close old catalog.  */
+  if (catalog != (nl_catd) -1)
+    catclose (catalog);
+  if (catalog_name != default_catalog_name)
+    free ((char *) catalog_name);
+
+  catalog = new_catalog;
+  catalog_name = new_name;
+
+  return (char *) catalog_name;
+}
+
+char *
+bindtextdomain (domainname, dirname)
+     const char *domainname;
+     const char *dirname;
+{
+#if HAVE_SETENV || HAVE_PUTENV
+  char *old_val, *new_val, *cp;
+  size_t new_val_len;
+
+  /* This does not make much sense here but to be compatible do it.  */
+  if (domainname == NULL)
+    return NULL;
+
+  /* Compute length of added path element.  If we use setenv we don't need
+     the first byts for NLSPATH=, but why complicate the code for this
+     peanuts.  */
+  new_val_len = sizeof ("NLSPATH=") - 1 + strlen (dirname)
+               + sizeof ("/%L/LC_MESSAGES/%N.cat");
+
+  old_val = getenv ("NLSPATH");
+  if (old_val == NULL || old_val[0] == '\0')
+    {
+      old_val = NULL;
+      new_val_len += 1 + sizeof (LOCALEDIR) - 1
+                    + sizeof ("/%L/LC_MESSAGES/%N.cat");
+    }
+  else
+    new_val_len += strlen (old_val);
+
+  new_val = (char *) malloc (new_val_len);
+  if (new_val == NULL)
+    return NULL;
+
+# if HAVE_SETENV
+  cp = new_val;
+# else
+  cp = stpcpy (new_val, "NLSPATH=");
+# endif
+
+  cp = stpcpy (cp, dirname);
+  cp = stpcpy (cp, "/%L/LC_MESSAGES/%N.cat:");
+
+  if (old_val == NULL)
+    {
+# if __STDC__
+      stpcpy (cp, LOCALEDIR "/%L/LC_MESSAGES/%N.cat");
+# else
+
+      cp = stpcpy (cp, LOCALEDIR);
+      stpcpy (cp, "/%L/LC_MESSAGES/%N.cat");
+# endif
+    }
+  else
+    stpcpy (cp, old_val);
+
+# if HAVE_SETENV
+  setenv ("NLSPATH", new_val, 1);
+  free (new_val);
+# else
+  putenv (new_val);
+  /* Do *not* free the environment entry we just entered.  It is used
+     from now on.   */
+# endif
+
+#endif
+
+  return (char *) domainname;
+}
+
+#undef gettext
+char *
+gettext (msg)
+     const char *msg;
+{
+  int msgid;
+
+  if (msg == NULL || catalog == (nl_catd) -1)
+    return (char *) msg;
+
+  /* Get the message from the catalog.  We always use set number 1.
+     The message ID is computed by the function `msg_to_cat_id'
+     which works on the table generated by `po-to-tbl'.  */
+  msgid = msg_to_cat_id (msg);
+  if (msgid == -1)
+    return (char *) msg;
+
+  return catgets (catalog, 1, msgid, (char *) msg);
+}
+
+/* Look through the table `_msg_tbl' which has `_msg_tbl_length' entries
+   for the one equal to msg.  If it is found return the ID.  In case when
+   the string is not found return -1.  */
+static int
+msg_to_cat_id (msg)
+     const char *msg;
+{
+  int cnt;
+
+  for (cnt = 0; cnt < _msg_tbl_length; ++cnt)
+    if (strcmp (msg, _msg_tbl[cnt]._msg) == 0)
+      return _msg_tbl[cnt]._msg_number;
+
+  return -1;
+}
+
+
+/* @@ begin of epilog @@ */
+
+/* We don't want libintl.a to depend on any other library.  So we
+   avoid the non-standard function stpcpy.  In GNU C Library this
+   function is available, though.  Also allow the symbol HAVE_STPCPY
+   to be defined.  */
+#if !_LIBC && !HAVE_STPCPY
+static char *
+stpcpy (dest, src)
+     char *dest;
+     const char *src;
+{
+  while ((*dest++ = *src++) != '\0')
+    /* Do nothing. */ ;
+  return dest - 1;
+}
+#endif
diff --git a/intl/dcgettext.c b/intl/dcgettext.c
new file mode 100644 (file)
index 0000000..0f7bb48
--- /dev/null
@@ -0,0 +1,655 @@
+/* Implementation of the dcgettext(3) function.
+   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <sys/types.h>
+
+#if defined __GNUC__ && !defined C_ALLOCA
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#else
+# if (defined HAVE_ALLOCA_H || defined _LIBC) && !defined C_ALLOCA
+#  include <alloca.h>
+# else
+#  ifdef _AIX
+ #pragma alloca
+#  else
+#   ifndef alloca
+char *alloca ();
+#   endif
+#  endif
+# endif
+#endif
+
+#include <errno.h>
+#ifndef errno
+extern int errno;
+#endif
+#ifndef __set_errno
+# define __set_errno(val) errno = (val)
+#endif
+
+#if defined STDC_HEADERS || defined _LIBC
+# include <stdlib.h>
+#else
+char *getenv ();
+# ifdef HAVE_MALLOC_H
+#  include <malloc.h>
+# else
+void free ();
+# endif
+#endif
+
+#if defined HAVE_STRING_H || defined _LIBC
+# ifndef _GNU_SOURCE
+#  define _GNU_SOURCE  1
+# endif
+# include <string.h>
+#else
+# include <strings.h>
+#endif
+#if !HAVE_STRCHR && !defined _LIBC
+# ifndef strchr
+#  define strchr index
+# endif
+#endif
+
+#if defined HAVE_UNISTD_H || defined _LIBC
+# include <unistd.h>
+#endif
+
+#include "gettext.h"
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgettext.h"
+#endif
+#include "hash-string.h"
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ANSI C functions.  This is required by the standard
+   because some ANSI C functions will require linking with this object
+   file and the name space must not be polluted.  */
+# define getcwd __getcwd
+# ifndef stpcpy
+#  define stpcpy __stpcpy
+# endif
+#else
+# if !defined HAVE_GETCWD
+char *getwd ();
+#  define getcwd(buf, max) getwd (buf)
+# else
+char *getcwd ();
+# endif
+# ifndef HAVE_STPCPY
+static char *stpcpy PARAMS ((char *dest, const char *src));
+# endif
+#endif
+
+/* Amount to increase buffer size by in each try.  */
+#define PATH_INCR 32
+
+/* The following is from pathmax.h.  */
+/* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define
+   PATH_MAX but might cause redefinition warnings when sys/param.h is
+   later included (as on MORE/BSD 4.3).  */
+#if defined(_POSIX_VERSION) || (defined(HAVE_LIMITS_H) && !defined(__GNUC__))
+# include <limits.h>
+#endif
+
+#ifndef _POSIX_PATH_MAX
+# define _POSIX_PATH_MAX 255
+#endif
+
+#if !defined(PATH_MAX) && defined(_PC_PATH_MAX)
+# define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX))
+#endif
+
+/* Don't include sys/param.h if it already has been.  */
+#if defined(HAVE_SYS_PARAM_H) && !defined(PATH_MAX) && !defined(MAXPATHLEN)
+# include <sys/param.h>
+#endif
+
+#if !defined(PATH_MAX) && defined(MAXPATHLEN)
+# define PATH_MAX MAXPATHLEN
+#endif
+
+#ifndef PATH_MAX
+# define PATH_MAX _POSIX_PATH_MAX
+#endif
+
+/* XPG3 defines the result of `setlocale (category, NULL)' as:
+   ``Directs `setlocale()' to query `category' and return the current
+     setting of `local'.''
+   However it does not specify the exact format.  And even worse: POSIX
+   defines this not at all.  So we can use this feature only on selected
+   system (e.g. those using GNU C Library).  */
+#ifdef _LIBC
+# define HAVE_LOCALE_NULL
+#endif
+
+/* Name of the default domain used for gettext(3) prior any call to
+   textdomain(3).  The default value for this is "messages".  */
+const char _nl_default_default_domain[] = "messages";
+
+/* Value used as the default domain for gettext(3).  */
+const char *_nl_current_default_domain = _nl_default_default_domain;
+
+/* Contains the default location of the message catalogs.  */
+const char _nl_default_dirname[] = GNULOCALEDIR;
+
+/* List with bindings of specific domains created by bindtextdomain()
+   calls.  */
+struct binding *_nl_domain_bindings;
+
+/* Prototypes for local functions.  */
+static char *find_msg PARAMS ((struct loaded_l10nfile *domain_file,
+                              const char *msgid)) internal_function;
+static const char *category_to_name PARAMS ((int category)) internal_function;
+static const char *guess_category_value PARAMS ((int category,
+                                                const char *categoryname))
+     internal_function;
+
+
+/* For those loosing systems which don't have `alloca' we have to add
+   some additional code emulating it.  */
+#ifdef HAVE_ALLOCA
+/* Nothing has to be done.  */
+# define ADD_BLOCK(list, address) /* nothing */
+# define FREE_BLOCKS(list) /* nothing */
+#else
+struct block_list
+{
+  void *address;
+  struct block_list *next;
+};
+# define ADD_BLOCK(list, addr)                                               \
+  do {                                                                       \
+    struct block_list *newp = (struct block_list *) malloc (sizeof (*newp));  \
+    /* If we cannot get a free block we cannot add the new element to        \
+       the list.  */                                                         \
+    if (newp != NULL) {                                                              \
+      newp->address = (addr);                                                \
+      newp->next = (list);                                                   \
+      (list) = newp;                                                         \
+    }                                                                        \
+  } while (0)
+# define FREE_BLOCKS(list)                                                   \
+  do {                                                                       \
+    while (list != NULL) {                                                   \
+      struct block_list *old = list;                                         \
+      list = list->next;                                                     \
+      free (old);                                                            \
+    }                                                                        \
+  } while (0)
+# undef alloca
+# define alloca(size) (malloc (size))
+#endif /* have alloca */
+
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define DCGETTEXT __dcgettext
+#else
+# define DCGETTEXT dcgettext__
+#endif
+
+/* Checking whether the binaries runs SUID must be done and glibc provides
+   easier methods therefore we make a difference here.  */
+#ifdef _LIBC
+# define ENABLE_SECURE __libc_enable_secure
+# define DETERMINE_SECURE
+#else
+static int enable_secure;
+# define ENABLE_SECURE (enable_secure == 1)
+# define DETERMINE_SECURE \
+  if (enable_secure == 0)                                                    \
+    {                                                                        \
+      if (getuid () != geteuid () || getgid () != getegid ())                \
+       enable_secure = 1;                                                    \
+      else                                                                   \
+       enable_secure = -1;                                                   \
+    }
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+   locale.  */
+char *
+DCGETTEXT (domainname, msgid, category)
+     const char *domainname;
+     const char *msgid;
+     int category;
+{
+#ifndef HAVE_ALLOCA
+  struct block_list *block_list = NULL;
+#endif
+  struct loaded_l10nfile *domain;
+  struct binding *binding;
+  const char *categoryname;
+  const char *categoryvalue;
+  char *dirname, *xdomainname;
+  char *single_locale;
+  char *retval;
+  int saved_errno = errno;
+
+  /* If no real MSGID is given return NULL.  */
+  if (msgid == NULL)
+    return NULL;
+
+  /* See whether this is a SUID binary or not.  */
+  DETERMINE_SECURE;
+
+  /* If DOMAINNAME is NULL, we are interested in the default domain.  If
+     CATEGORY is not LC_MESSAGES this might not make much sense but the
+     definition left this undefined.  */
+  if (domainname == NULL)
+    domainname = _nl_current_default_domain;
+
+  /* First find matching binding.  */
+  for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
+    {
+      int compare = strcmp (domainname, binding->domainname);
+      if (compare == 0)
+       /* We found it!  */
+       break;
+      if (compare < 0)
+       {
+         /* It is not in the list.  */
+         binding = NULL;
+         break;
+       }
+    }
+
+  if (binding == NULL)
+    dirname = (char *) _nl_default_dirname;
+  else if (binding->dirname[0] == '/')
+    dirname = binding->dirname;
+  else
+    {
+      /* We have a relative path.  Make it absolute now.  */
+      size_t dirname_len = strlen (binding->dirname) + 1;
+      size_t path_max;
+      char *ret;
+
+      path_max = (unsigned int) PATH_MAX;
+      path_max += 2;           /* The getcwd docs say to do this.  */
+
+      dirname = (char *) alloca (path_max + dirname_len);
+      ADD_BLOCK (block_list, dirname);
+
+      __set_errno (0);
+      while ((ret = getcwd (dirname, path_max)) == NULL && errno == ERANGE)
+       {
+         path_max += PATH_INCR;
+         dirname = (char *) alloca (path_max + dirname_len);
+         ADD_BLOCK (block_list, dirname);
+         __set_errno (0);
+       }
+
+      if (ret == NULL)
+       {
+         /* We cannot get the current working directory.  Don't signal an
+            error but simply return the default string.  */
+         FREE_BLOCKS (block_list);
+         __set_errno (saved_errno);
+         return (char *) msgid;
+       }
+
+      stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname);
+    }
+
+  /* Now determine the symbolic name of CATEGORY and its value.  */
+  categoryname = category_to_name (category);
+  categoryvalue = guess_category_value (category, categoryname);
+
+  xdomainname = (char *) alloca (strlen (categoryname)
+                                + strlen (domainname) + 5);
+  ADD_BLOCK (block_list, xdomainname);
+
+  stpcpy (stpcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"),
+                 domainname),
+         ".mo");
+
+  /* Creating working area.  */
+  single_locale = (char *) alloca (strlen (categoryvalue) + 1);
+  ADD_BLOCK (block_list, single_locale);
+
+
+  /* Search for the given string.  This is a loop because we perhaps
+     got an ordered list of languages to consider for the translation.  */
+  while (1)
+    {
+      /* Make CATEGORYVALUE point to the next element of the list.  */
+      while (categoryvalue[0] != '\0' && categoryvalue[0] == ':')
+       ++categoryvalue;
+      if (categoryvalue[0] == '\0')
+       {
+         /* The whole contents of CATEGORYVALUE has been searched but
+            no valid entry has been found.  We solve this situation
+            by implicitly appending a "C" entry, i.e. no translation
+            will take place.  */
+         single_locale[0] = 'C';
+         single_locale[1] = '\0';
+       }
+      else
+       {
+         char *cp = single_locale;
+         while (categoryvalue[0] != '\0' && categoryvalue[0] != ':')
+           *cp++ = *categoryvalue++;
+         *cp = '\0';
+
+         /* When this is a SUID binary we must not allow accessing files
+            outside the dedicated directories.  */
+         if (ENABLE_SECURE
+             && (memchr (single_locale, '/',
+                         _nl_find_language (single_locale) - single_locale)
+                 != NULL))
+           /* Ingore this entry.  */
+           continue;
+       }
+
+      /* If the current locale value is C (or POSIX) we don't load a
+        domain.  Return the MSGID.  */
+      if (strcmp (single_locale, "C") == 0
+         || strcmp (single_locale, "POSIX") == 0)
+       {
+         FREE_BLOCKS (block_list);
+         __set_errno (saved_errno);
+         return (char *) msgid;
+       }
+
+
+      /* Find structure describing the message catalog matching the
+        DOMAINNAME and CATEGORY.  */
+      domain = _nl_find_domain (dirname, single_locale, xdomainname);
+
+      if (domain != NULL)
+       {
+         retval = find_msg (domain, msgid);
+
+         if (retval == NULL)
+           {
+             int cnt;
+
+             for (cnt = 0; domain->successor[cnt] != NULL; ++cnt)
+               {
+                 retval = find_msg (domain->successor[cnt], msgid);
+
+                 if (retval != NULL)
+                   break;
+               }
+           }
+
+         if (retval != NULL)
+           {
+             FREE_BLOCKS (block_list);
+             __set_errno (saved_errno);
+             return retval;
+           }
+       }
+    }
+  /* NOTREACHED */
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library.  */
+weak_alias (__dcgettext, dcgettext);
+#endif
+
+
+static char *
+internal_function
+find_msg (domain_file, msgid)
+     struct loaded_l10nfile *domain_file;
+     const char *msgid;
+{
+  size_t act = 0;
+  size_t top, bottom;
+  struct loaded_domain *domain;
+
+  if (domain_file->decided == 0)
+    _nl_load_domain (domain_file);
+
+  if (domain_file->data == NULL)
+    return NULL;
+
+  domain = (struct loaded_domain *) domain_file->data;
+
+  /* Locate the MSGID and its translation.  */
+  if (domain->hash_size > 2 && domain->hash_tab != NULL)
+    {
+      /* Use the hashing table.  */
+      nls_uint32 len = strlen (msgid);
+      nls_uint32 hash_val = hash_string (msgid);
+      nls_uint32 idx = hash_val % domain->hash_size;
+      nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2));
+      nls_uint32 nstr = W (domain->must_swap, domain->hash_tab[idx]);
+
+      if (nstr == 0)
+       /* Hash table entry is empty.  */
+       return NULL;
+
+      if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) == len
+         && strcmp (msgid,
+                    domain->data + W (domain->must_swap,
+                                      domain->orig_tab[nstr - 1].offset)) == 0)
+       return (char *) domain->data + W (domain->must_swap,
+                                         domain->trans_tab[nstr - 1].offset);
+
+      while (1)
+       {
+         if (idx >= domain->hash_size - incr)
+           idx -= domain->hash_size - incr;
+         else
+           idx += incr;
+
+         nstr = W (domain->must_swap, domain->hash_tab[idx]);
+         if (nstr == 0)
+           /* Hash table entry is empty.  */
+           return NULL;
+
+         if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) == len
+             && strcmp (msgid,
+                        domain->data + W (domain->must_swap,
+                                          domain->orig_tab[nstr - 1].offset))
+                == 0)
+           return (char *) domain->data
+             + W (domain->must_swap, domain->trans_tab[nstr - 1].offset);
+       }
+      /* NOTREACHED */
+    }
+
+  /* Now we try the default method:  binary search in the sorted
+     array of messages.  */
+  bottom = 0;
+  top = domain->nstrings;
+  while (bottom < top)
+    {
+      int cmp_val;
+
+      act = (bottom + top) / 2;
+      cmp_val = strcmp (msgid, domain->data
+                              + W (domain->must_swap,
+                                   domain->orig_tab[act].offset));
+      if (cmp_val < 0)
+       top = act;
+      else if (cmp_val > 0)
+       bottom = act + 1;
+      else
+       break;
+    }
+
+  /* If an translation is found return this.  */
+  return bottom >= top ? NULL : (char *) domain->data
+                                + W (domain->must_swap,
+                                    domain->trans_tab[act].offset);
+}
+
+
+/* Return string representation of locale CATEGORY.  */
+static const char *
+internal_function
+category_to_name (category)
+     int category;
+{
+  const char *retval;
+
+  switch (category)
+  {
+#ifdef LC_COLLATE
+  case LC_COLLATE:
+    retval = "LC_COLLATE";
+    break;
+#endif
+#ifdef LC_CTYPE
+  case LC_CTYPE:
+    retval = "LC_CTYPE";
+    break;
+#endif
+#ifdef LC_MONETARY
+  case LC_MONETARY:
+    retval = "LC_MONETARY";
+    break;
+#endif
+#ifdef LC_NUMERIC
+  case LC_NUMERIC:
+    retval = "LC_NUMERIC";
+    break;
+#endif
+#ifdef LC_TIME
+  case LC_TIME:
+    retval = "LC_TIME";
+    break;
+#endif
+#ifdef LC_MESSAGES
+  case LC_MESSAGES:
+    retval = "LC_MESSAGES";
+    break;
+#endif
+#ifdef LC_RESPONSE
+  case LC_RESPONSE:
+    retval = "LC_RESPONSE";
+    break;
+#endif
+#ifdef LC_ALL
+  case LC_ALL:
+    /* This might not make sense but is perhaps better than any other
+       value.  */
+    retval = "LC_ALL";
+    break;
+#endif
+  default:
+    /* If you have a better idea for a default value let me know.  */
+    retval = "LC_XXX";
+  }
+
+  return retval;
+}
+
+/* Guess value of current locale from value of the environment variables.  */
+static const char *
+internal_function
+guess_category_value (category, categoryname)
+     int category;
+     const char *categoryname;
+{
+  const char *retval;
+
+  /* The highest priority value is the `LANGUAGE' environment
+     variable.  This is a GNU extension.  */
+  retval = getenv ("LANGUAGE");
+  if (retval != NULL && retval[0] != '\0')
+    return retval;
+
+  /* `LANGUAGE' is not set.  So we have to proceed with the POSIX
+     methods of looking to `LC_ALL', `LC_xxx', and `LANG'.  On some
+     systems this can be done by the `setlocale' function itself.  */
+#if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL
+  return setlocale (category, NULL);
+#else
+  /* Setting of LC_ALL overwrites all other.  */
+  retval = getenv ("LC_ALL");
+  if (retval != NULL && retval[0] != '\0')
+    return retval;
+
+  /* Next comes the name of the desired category.  */
+  retval = getenv (categoryname);
+  if (retval != NULL && retval[0] != '\0')
+    return retval;
+
+  /* Last possibility is the LANG environment variable.  */
+  retval = getenv ("LANG");
+  if (retval != NULL && retval[0] != '\0')
+    return retval;
+
+  /* We use C as the default domain.  POSIX says this is implementation
+     defined.  */
+  return "C";
+#endif
+}
+
+/* @@ begin of epilog @@ */
+
+/* We don't want libintl.a to depend on any other library.  So we
+   avoid the non-standard function stpcpy.  In GNU C Library this
+   function is available, though.  Also allow the symbol HAVE_STPCPY
+   to be defined.  */
+#if !_LIBC && !HAVE_STPCPY
+static char *
+stpcpy (dest, src)
+     char *dest;
+     const char *src;
+{
+  while ((*dest++ = *src++) != '\0')
+    /* Do nothing. */ ;
+  return dest - 1;
+}
+#endif
+
+
+#ifdef _LIBC
+/* If we want to free all resources we have to do some work at
+   program's end.  */
+static void __attribute__ ((unused))
+free_mem (void)
+{
+  struct binding *runp;
+
+  for (runp = _nl_domain_bindings; runp != NULL; runp = runp->next)
+    {
+      free (runp->domainname);
+      if (runp->dirname != _nl_default_dirname)
+       /* Yes, this is a pointer comparison.  */
+       free (runp->dirname);
+    }
+
+  if (_nl_current_default_domain != _nl_default_default_domain)
+    /* Yes, again a pointer comparison.  */
+    free ((char *) _nl_current_default_domain);
+}
+
+text_set_element (__libc_subfreeres, free_mem);
+#endif
diff --git a/intl/dgettext.c b/intl/dgettext.c
new file mode 100644 (file)
index 0000000..0510c2b
--- /dev/null
@@ -0,0 +1,59 @@
+/* Implementation of the dgettext(3) function
+   Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#if defined HAVE_LOCALE_H || defined _LIBC
+# include <locale.h>
+#endif
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgettext.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define DGETTEXT __dgettext
+# define DCGETTEXT __dcgettext
+#else
+# define DGETTEXT dgettext__
+# define DCGETTEXT dcgettext__
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog of the current
+   LC_MESSAGES locale.  */
+char *
+DGETTEXT (domainname, msgid)
+     const char *domainname;
+     const char *msgid;
+{
+  return DCGETTEXT (domainname, msgid, LC_MESSAGES);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library.  */
+weak_alias (__dgettext, dgettext);
+#endif
diff --git a/intl/explodename.c b/intl/explodename.c
new file mode 100644 (file)
index 0000000..7f48097
--- /dev/null
@@ -0,0 +1,198 @@
+/* Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#if defined STDC_HEADERS || defined _LIBC
+# include <stdlib.h>
+#endif
+
+#if defined HAVE_STRING_H || defined _LIBC
+# include <string.h>
+#else
+# include <strings.h>
+#endif
+#include <sys/types.h>
+
+#include "loadinfo.h"
+
+/* On some strange systems still no definition of NULL is found.  Sigh!  */
+#ifndef NULL
+# if defined __STDC__ && __STDC__
+#  define NULL ((void *) 0)
+# else
+#  define NULL 0
+# endif
+#endif
+
+/* @@ end of prolog @@ */
+
+char *
+_nl_find_language (name)
+     const char *name;
+{
+  while (name[0] != '\0' && name[0] != '_' && name[0] != '@'
+        && name[0] != '+' && name[0] != ',')
+    ++name;
+
+  return (char *) name;
+}
+
+
+int
+_nl_explode_name (name, language, modifier, territory, codeset,
+                 normalized_codeset, special, sponsor, revision)
+     char *name;
+     const char **language;
+     const char **modifier;
+     const char **territory;
+     const char **codeset;
+     const char **normalized_codeset;
+     const char **special;
+     const char **sponsor;
+     const char **revision;
+{
+  enum { undecided, xpg, cen } syntax;
+  char *cp;
+  int mask;
+
+  *modifier = NULL;
+  *territory = NULL;
+  *codeset = NULL;
+  *normalized_codeset = NULL;
+  *special = NULL;
+  *sponsor = NULL;
+  *revision = NULL;
+
+  /* Now we determine the single parts of the locale name.  First
+     look for the language.  Termination symbols are `_' and `@' if
+     we use XPG4 style, and `_', `+', and `,' if we use CEN syntax.  */
+  mask = 0;
+  syntax = undecided;
+  *language = cp = name;
+  cp = _nl_find_language (*language);
+
+  if (*language == cp)
+    /* This does not make sense: language has to be specified.  Use
+       this entry as it is without exploding.  Perhaps it is an alias.  */
+    cp = strchr (*language, '\0');
+  else if (cp[0] == '_')
+    {
+      /* Next is the territory.  */
+      cp[0] = '\0';
+      *territory = ++cp;
+
+      while (cp[0] != '\0' && cp[0] != '.' && cp[0] != '@'
+            && cp[0] != '+' && cp[0] != ',' && cp[0] != '_')
+       ++cp;
+
+      mask |= TERRITORY;
+
+      if (cp[0] == '.')
+       {
+         /* Next is the codeset.  */
+         syntax = xpg;
+         cp[0] = '\0';
+         *codeset = ++cp;
+
+         while (cp[0] != '\0' && cp[0] != '@')
+           ++cp;
+
+         mask |= XPG_CODESET;
+
+         if (*codeset != cp && (*codeset)[0] != '\0')
+           {
+             *normalized_codeset = _nl_normalize_codeset (*codeset,
+                                                          cp - *codeset);
+             if (strcmp (*codeset, *normalized_codeset) == 0)
+               free ((char *) *normalized_codeset);
+             else
+               mask |= XPG_NORM_CODESET;
+           }
+       }
+    }
+
+  if (cp[0] == '@' || (syntax != xpg && cp[0] == '+'))
+    {
+      /* Next is the modifier.  */
+      syntax = cp[0] == '@' ? xpg : cen;
+      cp[0] = '\0';
+      *modifier = ++cp;
+
+      while (syntax == cen && cp[0] != '\0' && cp[0] != '+'
+            && cp[0] != ',' && cp[0] != '_')
+       ++cp;
+
+      mask |= XPG_MODIFIER | CEN_AUDIENCE;
+    }
+
+  if (syntax != xpg && (cp[0] == '+' || cp[0] == ',' || cp[0] == '_'))
+    {
+      syntax = cen;
+
+      if (cp[0] == '+')
+       {
+         /* Next is special application (CEN syntax).  */
+         cp[0] = '\0';
+         *special = ++cp;
+
+         while (cp[0] != '\0' && cp[0] != ',' && cp[0] != '_')
+           ++cp;
+
+         mask |= CEN_SPECIAL;
+       }
+
+      if (cp[0] == ',')
+       {
+         /* Next is sponsor (CEN syntax).  */
+         cp[0] = '\0';
+         *sponsor = ++cp;
+
+         while (cp[0] != '\0' && cp[0] != '_')
+           ++cp;
+
+         mask |= CEN_SPONSOR;
+       }
+
+      if (cp[0] == '_')
+       {
+         /* Next is revision (CEN syntax).  */
+         cp[0] = '\0';
+         *revision = ++cp;
+
+         mask |= CEN_REVISION;
+       }
+    }
+
+  /* For CEN syntax values it might be important to have the
+     separator character in the file name, not for XPG syntax.  */
+  if (syntax == xpg)
+    {
+      if (*territory != NULL && (*territory)[0] == '\0')
+       mask &= ~TERRITORY;
+
+      if (*codeset != NULL && (*codeset)[0] == '\0')
+       mask &= ~XPG_CODESET;
+
+      if (*modifier != NULL && (*modifier)[0] == '\0')
+       mask &= ~XPG_MODIFIER;
+    }
+
+  return mask;
+}
diff --git a/intl/finddomain.c b/intl/finddomain.c
new file mode 100644 (file)
index 0000000..81ea29b
--- /dev/null
@@ -0,0 +1,216 @@
+/* Handle list of needed message catalogs
+   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+   Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <ctype.h>
+#include <errno.h>
+#include <stdio.h>
+#include <sys/types.h>
+
+#if defined STDC_HEADERS || defined _LIBC
+# include <stdlib.h>
+#else
+# ifdef HAVE_MALLOC_H
+#  include <malloc.h>
+# else
+void free ();
+# endif
+#endif
+
+#if defined HAVE_STRING_H || defined _LIBC
+# include <string.h>
+#else
+# include <strings.h>
+# ifndef memcpy
+#  define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
+# endif
+#endif
+#if !HAVE_STRCHR && !defined _LIBC
+# ifndef strchr
+#  define strchr index
+# endif
+#endif
+
+#if defined HAVE_UNISTD_H || defined _LIBC
+# include <unistd.h>
+#endif
+
+#include "gettext.h"
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgettext.h"
+#endif
+
+/* @@ end of prolog @@ */
+/* List of already loaded domains.  */
+static struct loaded_l10nfile *_nl_loaded_domains;
+
+
+/* Return a data structure describing the message catalog described by
+   the DOMAINNAME and CATEGORY parameters with respect to the currently
+   established bindings.  */
+struct loaded_l10nfile *
+internal_function
+_nl_find_domain (dirname, locale, domainname)
+     const char *dirname;
+     char *locale;
+     const char *domainname;
+{
+  struct loaded_l10nfile *retval;
+  const char *language;
+  const char *modifier;
+  const char *territory;
+  const char *codeset;
+  const char *normalized_codeset;
+  const char *special;
+  const char *sponsor;
+  const char *revision;
+  const char *alias_value;
+  int mask;
+
+  /* LOCALE can consist of up to four recognized parts for the XPG syntax:
+
+               language[_territory[.codeset]][@modifier]
+
+     and six parts for the CEN syntax:
+
+       language[_territory][+audience][+special][,[sponsor][_revision]]
+
+     Beside the first part all of them are allowed to be missing.  If
+     the full specified locale is not found, the less specific one are
+     looked for.  The various parts will be stripped off according to
+     the following order:
+               (1) revision
+               (2) sponsor
+               (3) special
+               (4) codeset
+               (5) normalized codeset
+               (6) territory
+               (7) audience/modifier
+   */
+
+  /* If we have already tested for this locale entry there has to
+     be one data set in the list of loaded domains.  */
+  retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
+                              strlen (dirname) + 1, 0, locale, NULL, NULL,
+                              NULL, NULL, NULL, NULL, NULL, domainname, 0);
+  if (retval != NULL)
+    {
+      /* We know something about this locale.  */
+      int cnt;
+
+      if (retval->decided == 0)
+       _nl_load_domain (retval);
+
+      if (retval->data != NULL)
+       return retval;
+
+      for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
+       {
+         if (retval->successor[cnt]->decided == 0)
+           _nl_load_domain (retval->successor[cnt]);
+
+         if (retval->successor[cnt]->data != NULL)
+           break;
+       }
+      return cnt >= 0 ? retval : NULL;
+      /* NOTREACHED */
+    }
+
+  /* See whether the locale value is an alias.  If yes its value
+     *overwrites* the alias name.  No test for the original value is
+     done.  */
+  alias_value = _nl_expand_alias (locale);
+  if (alias_value != NULL)
+    {
+#if defined _LIBC || defined HAVE_STRDUP
+      locale = strdup (alias_value);
+      if (locale == NULL)
+       return NULL;
+#else
+      size_t len = strlen (alias_value) + 1;
+      locale = (char *) malloc (len);
+      if (locale == NULL)
+       return NULL;
+
+      memcpy (locale, alias_value, len);
+#endif
+    }
+
+  /* Now we determine the single parts of the locale name.  First
+     look for the language.  Termination symbols are `_' and `@' if
+     we use XPG4 style, and `_', `+', and `,' if we use CEN syntax.  */
+  mask = _nl_explode_name (locale, &language, &modifier, &territory,
+                          &codeset, &normalized_codeset, &special,
+                          &sponsor, &revision);
+
+  /* Create all possible locale entries which might be interested in
+     generalization.  */
+  retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
+                              strlen (dirname) + 1, mask, language, territory,
+                              codeset, normalized_codeset, modifier, special,
+                              sponsor, revision, domainname, 1);
+  if (retval == NULL)
+    /* This means we are out of core.  */
+    return NULL;
+
+  if (retval->decided == 0)
+    _nl_load_domain (retval);
+  if (retval->data == NULL)
+    {
+      int cnt;
+      for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
+       {
+         if (retval->successor[cnt]->decided == 0)
+           _nl_load_domain (retval->successor[cnt]);
+         if (retval->successor[cnt]->data != NULL)
+           break;
+       }
+    }
+
+  /* The room for an alias was dynamically allocated.  Free it now.  */
+  if (alias_value != NULL)
+    free (locale);
+
+  return retval;
+}
+
+
+#ifdef _LIBC
+static void __attribute__ ((unused))
+free_mem (void)
+{
+  struct loaded_l10nfile *runp = _nl_loaded_domains;
+
+  while (runp != NULL)
+    {
+      struct loaded_l10nfile *here = runp;
+      if (runp->data != NULL)
+       _nl_unload_domain ((struct loaded_domain *) runp->data);
+      runp = runp->next;
+      free (here);
+    }
+}
+
+text_set_element (__libc_subfreeres, free_mem);
+#endif
diff --git a/intl/gettext.c b/intl/gettext.c
new file mode 100644 (file)
index 0000000..d929f98
--- /dev/null
@@ -0,0 +1,70 @@
+/* Implementation of gettext(3) function.
+   Copyright (C) 1995, 1997 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef _LIBC
+# define __need_NULL
+# include <stddef.h>
+#else
+# ifdef STDC_HEADERS
+#  include <stdlib.h>          /* Just for NULL.  */
+# else
+#  ifdef HAVE_STRING_H
+#   include <string.h>
+#  else
+#   define NULL ((void *) 0)
+#  endif
+# endif
+#endif
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgettext.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define GETTEXT __gettext
+# define DGETTEXT __dgettext
+#else
+# define GETTEXT gettext__
+# define DGETTEXT dgettext__
+#endif
+
+/* Look up MSGID in the current default message catalog for the current
+   LC_MESSAGES locale.  If not found, returns MSGID itself (the default
+   text).  */
+char *
+GETTEXT (msgid)
+     const char *msgid;
+{
+  return DGETTEXT (NULL, msgid);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library.  */
+weak_alias (__gettext, gettext);
+#endif
diff --git a/intl/gettext.h b/intl/gettext.h
new file mode 100644 (file)
index 0000000..3cd23d7
--- /dev/null
@@ -0,0 +1,105 @@
+/* Internal header for GNU gettext internationalization functions.
+   Copyright (C) 1995, 1997 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#ifndef _GETTEXT_H
+#define _GETTEXT_H 1
+
+#include <stdio.h>
+
+#if HAVE_LIMITS_H || _LIBC
+# include <limits.h>
+#endif
+
+/* @@ end of prolog @@ */
+
+/* The magic number of the GNU message catalog format.  */
+#define _MAGIC 0x950412de
+#define _MAGIC_SWAPPED 0xde120495
+
+/* Revision number of the currently used .mo (binary) file format.  */
+#define MO_REVISION_NUMBER 0
+
+/* The following contortions are an attempt to use the C preprocessor
+   to determine an unsigned integral type that is 32 bits wide.  An
+   alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but
+   doing that would require that the configure script compile and *run*
+   the resulting executable.  Locally running cross-compiled executables
+   is usually not possible.  */
+
+#if __STDC__
+# define UINT_MAX_32_BITS 4294967295U
+#else
+# define UINT_MAX_32_BITS 0xFFFFFFFF
+#endif
+
+/* If UINT_MAX isn't defined, assume it's a 32-bit type.
+   This should be valid for all systems GNU cares about because
+   that doesn't include 16-bit systems, and only modern systems
+   (that certainly have <limits.h>) have 64+-bit integral types.  */
+
+#ifndef UINT_MAX
+# define UINT_MAX UINT_MAX_32_BITS
+#endif
+
+#if UINT_MAX == UINT_MAX_32_BITS
+typedef unsigned nls_uint32;
+#else
+# if USHRT_MAX == UINT_MAX_32_BITS
+typedef unsigned short nls_uint32;
+# else
+#  if ULONG_MAX == UINT_MAX_32_BITS
+typedef unsigned long nls_uint32;
+#  else
+  /* The following line is intended to throw an error.  Using #error is
+     not portable enough.  */
+  "Cannot determine unsigned 32-bit data type."
+#  endif
+# endif
+#endif
+
+
+/* Header for binary .mo file format.  */
+struct mo_file_header
+{
+  /* The magic number.  */
+  nls_uint32 magic;
+  /* The revision number of the file format.  */
+  nls_uint32 revision;
+  /* The number of strings pairs.  */
+  nls_uint32 nstrings;
+  /* Offset of table with start offsets of original strings.  */
+  nls_uint32 orig_tab_offset;
+  /* Offset of table with start offsets of translation strings.  */
+  nls_uint32 trans_tab_offset;
+  /* Size of hashing table.  */
+  nls_uint32 hash_tab_size;
+  /* Offset of first hashing entry.  */
+  nls_uint32 hash_tab_offset;
+};
+
+struct string_desc
+{
+  /* Length of addressed string.  */
+  nls_uint32 length;
+  /* Offset of string in file.  */
+  nls_uint32 offset;
+};
+
+/* @@ begin of epilog @@ */
+
+#endif /* gettext.h  */
diff --git a/intl/gettextP.h b/intl/gettextP.h
new file mode 100644 (file)
index 0000000..00c5203
--- /dev/null
@@ -0,0 +1,89 @@
+/* Header describing internals of gettext library
+   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+   Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifndef _GETTEXTP_H
+#define _GETTEXTP_H
+
+#include "loadinfo.h"
+
+/* @@ end of prolog @@ */
+
+#ifndef PARAMS
+# if __STDC__
+#  define PARAMS(args) args
+# else
+#  define PARAMS(args) ()
+# endif
+#endif
+
+#ifndef internal_function
+# define internal_function
+#endif
+
+#ifndef W
+# define W(flag, data) ((flag) ? SWAP (data) : (data))
+#endif
+
+
+#ifdef _LIBC
+# include <byteswap.h>
+# define SWAP(i) bswap_32 (i)
+#else
+static nls_uint32 SWAP PARAMS ((nls_uint32 i));
+
+static inline nls_uint32
+SWAP (i)
+     nls_uint32 i;
+{
+  return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24);
+}
+#endif
+
+
+struct loaded_domain
+{
+  const char *data;
+  int use_mmap;
+  size_t mmap_size;
+  int must_swap;
+  nls_uint32 nstrings;
+  struct string_desc *orig_tab;
+  struct string_desc *trans_tab;
+  nls_uint32 hash_size;
+  nls_uint32 *hash_tab;
+};
+
+struct binding
+{
+  struct binding *next;
+  char *domainname;
+  char *dirname;
+};
+
+struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname,
+                                                char *__locale,
+                                                const char *__domainname))
+     internal_function;
+void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain))
+     internal_function;
+void _nl_unload_domain PARAMS ((struct loaded_domain *__domain))
+     internal_function;
+
+/* @@ begin of epilog @@ */
+
+#endif /* gettextP.h  */
diff --git a/intl/hash-string.h b/intl/hash-string.h
new file mode 100644 (file)
index 0000000..939e958
--- /dev/null
@@ -0,0 +1,59 @@
+/* Implements a string hashing function.
+   Copyright (C) 1995, 1997 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+/* @@ end of prolog @@ */
+
+#ifndef PARAMS
+# if __STDC__
+#  define PARAMS(Args) Args
+# else
+#  define PARAMS(Args) ()
+# endif
+#endif
+
+/* We assume to have `unsigned long int' value with at least 32 bits.  */
+#define HASHWORDBITS 32
+
+
+/* Defines the so called `hashpjw' function by P.J. Weinberger
+   [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
+   1986, 1987 Bell Telephone Laboratories, Inc.]  */
+static unsigned long int hash_string PARAMS ((const char *__str_param));
+
+static inline unsigned long int
+hash_string (str_param)
+     const char *str_param;
+{
+  unsigned long int hval, g;
+  const char *str = str_param;
+
+  /* Compute the hash value for the given string.  */
+  hval = 0;
+  while (*str != '\0')
+    {
+      hval <<= 4;
+      hval += (unsigned long int) *str++;
+      g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4));
+      if (g != 0)
+       {
+         hval ^= g >> (HASHWORDBITS - 8);
+         hval ^= g;
+       }
+    }
+  return hval;
+}
diff --git a/intl/intl-compat.c b/intl/intl-compat.c
new file mode 100644 (file)
index 0000000..503efa0
--- /dev/null
@@ -0,0 +1,76 @@
+/* intl-compat.c - Stub functions to call gettext functions from GNU gettext
+   Library.
+   Copyright (C) 1995 Software Foundation, Inc.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "libgettext.h"
+
+/* @@ end of prolog @@ */
+
+
+#undef gettext
+#undef dgettext
+#undef dcgettext
+#undef textdomain
+#undef bindtextdomain
+
+
+char *
+bindtextdomain (domainname, dirname)
+     const char *domainname;
+     const char *dirname;
+{
+  return bindtextdomain__ (domainname, dirname);
+}
+
+
+char *
+dcgettext (domainname, msgid, category)
+     const char *domainname;
+     const char *msgid;
+     int category;
+{
+  return dcgettext__ (domainname, msgid, category);
+}
+
+
+char *
+dgettext (domainname, msgid)
+     const char *domainname;
+     const char *msgid;
+{
+  return dgettext__ (domainname, msgid);
+}
+
+
+char *
+gettext (msgid)
+     const char *msgid;
+{
+  return gettext__ (msgid);
+}
+
+
+char *
+textdomain (domainname)
+     const char *domainname;
+{
+  return textdomain__ (domainname);
+}
diff --git a/intl/l10nflist.c b/intl/l10nflist.c
new file mode 100644 (file)
index 0000000..30f5f64
--- /dev/null
@@ -0,0 +1,411 @@
+/* Handle list of needed message catalogs
+   Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+
+#if defined HAVE_STRING_H || defined _LIBC
+# ifndef _GNU_SOURCE
+#  define _GNU_SOURCE  1
+# endif
+# include <string.h>
+#else
+# include <strings.h>
+# ifndef memcpy
+#  define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
+# endif
+#endif
+#if !HAVE_STRCHR && !defined _LIBC
+# ifndef strchr
+#  define strchr index
+# endif
+#endif
+
+#if defined _LIBC || defined HAVE_ARGZ_H
+# include <argz.h>
+#endif
+#include <ctype.h>
+#include <sys/types.h>
+
+#if defined STDC_HEADERS || defined _LIBC
+# include <stdlib.h>
+#endif
+
+#include "loadinfo.h"
+
+/* On some strange systems still no definition of NULL is found.  Sigh!  */
+#ifndef NULL
+# if defined __STDC__ && __STDC__
+#  define NULL ((void *) 0)
+# else
+#  define NULL 0
+# endif
+#endif
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ANSI C functions.  This is required by the standard
+   because some ANSI C functions will require linking with this object
+   file and the name space must not be polluted.  */
+# ifndef stpcpy
+#  define stpcpy(dest, src) __stpcpy(dest, src)
+# endif
+#else
+# ifndef HAVE_STPCPY
+static char *stpcpy PARAMS ((char *dest, const char *src));
+# endif
+#endif
+
+/* Define function which are usually not available.  */
+
+#if !defined _LIBC && !defined HAVE___ARGZ_COUNT
+/* Returns the number of strings in ARGZ.  */
+static size_t argz_count__ PARAMS ((const char *argz, size_t len));
+
+static size_t
+argz_count__ (argz, len)
+     const char *argz;
+     size_t len;
+{
+  size_t count = 0;
+  while (len > 0)
+    {
+      size_t part_len = strlen (argz);
+      argz += part_len + 1;
+      len -= part_len + 1;
+      count++;
+    }
+  return count;
+}
+# undef __argz_count
+# define __argz_count(argz, len) argz_count__ (argz, len)
+#endif /* !_LIBC && !HAVE___ARGZ_COUNT */
+
+#if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY
+/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's
+   except the last into the character SEP.  */
+static void argz_stringify__ PARAMS ((char *argz, size_t len, int sep));
+
+static void
+argz_stringify__ (argz, len, sep)
+     char *argz;
+     size_t len;
+     int sep;
+{
+  while (len > 0)
+    {
+      size_t part_len = strlen (argz);
+      argz += part_len;
+      len -= part_len + 1;
+      if (len > 0)
+       *argz++ = sep;
+    }
+}
+# undef __argz_stringify
+# define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep)
+#endif /* !_LIBC && !HAVE___ARGZ_STRINGIFY */
+
+#if !defined _LIBC && !defined HAVE___ARGZ_NEXT
+static char *argz_next__ PARAMS ((char *argz, size_t argz_len,
+                                 const char *entry));
+
+static char *
+argz_next__ (argz, argz_len, entry)
+     char *argz;
+     size_t argz_len;
+     const char *entry;
+{
+  if (entry)
+    {
+      if (entry < argz + argz_len)
+        entry = strchr (entry, '\0') + 1;
+
+      return entry >= argz + argz_len ? NULL : (char *) entry;
+    }
+  else
+    if (argz_len > 0)
+      return argz;
+    else
+      return 0;
+}
+# undef __argz_next
+# define __argz_next(argz, len, entry) argz_next__ (argz, len, entry)
+#endif /* !_LIBC && !HAVE___ARGZ_NEXT */
+
+
+/* Return number of bits set in X.  */
+static int pop PARAMS ((int x));
+
+static inline int
+pop (x)
+     int x;
+{
+  /* We assume that no more than 16 bits are used.  */
+  x = ((x & ~0x5555) >> 1) + (x & 0x5555);
+  x = ((x & ~0x3333) >> 2) + (x & 0x3333);
+  x = ((x >> 4) + x) & 0x0f0f;
+  x = ((x >> 8) + x) & 0xff;
+
+  return x;
+}
+
+\f
+struct loaded_l10nfile *
+_nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
+                   territory, codeset, normalized_codeset, modifier, special,
+                   sponsor, revision, filename, do_allocate)
+     struct loaded_l10nfile **l10nfile_list;
+     const char *dirlist;
+     size_t dirlist_len;
+     int mask;
+     const char *language;
+     const char *territory;
+     const char *codeset;
+     const char *normalized_codeset;
+     const char *modifier;
+     const char *special;
+     const char *sponsor;
+     const char *revision;
+     const char *filename;
+     int do_allocate;
+{
+  char *abs_filename;
+  struct loaded_l10nfile *last = NULL;
+  struct loaded_l10nfile *retval;
+  char *cp;
+  size_t entries;
+  int cnt;
+
+  /* Allocate room for the full file name.  */
+  abs_filename = (char *) malloc (dirlist_len
+                                 + strlen (language)
+                                 + ((mask & TERRITORY) != 0
+                                    ? strlen (territory) + 1 : 0)
+                                 + ((mask & XPG_CODESET) != 0
+                                    ? strlen (codeset) + 1 : 0)
+                                 + ((mask & XPG_NORM_CODESET) != 0
+                                    ? strlen (normalized_codeset) + 1 : 0)
+                                 + (((mask & XPG_MODIFIER) != 0
+                                     || (mask & CEN_AUDIENCE) != 0)
+                                    ? strlen (modifier) + 1 : 0)
+                                 + ((mask & CEN_SPECIAL) != 0
+                                    ? strlen (special) + 1 : 0)
+                                 + (((mask & CEN_SPONSOR) != 0
+                                     || (mask & CEN_REVISION) != 0)
+                                    ? (1 + ((mask & CEN_SPONSOR) != 0
+                                            ? strlen (sponsor) + 1 : 0)
+                                       + ((mask & CEN_REVISION) != 0
+                                          ? strlen (revision) + 1 : 0)) : 0)
+                                 + 1 + strlen (filename) + 1);
+
+  if (abs_filename == NULL)
+    return NULL;
+
+  retval = NULL;
+  last = NULL;
+
+  /* Construct file name.  */
+  memcpy (abs_filename, dirlist, dirlist_len);
+  __argz_stringify (abs_filename, dirlist_len, ':');
+  cp = abs_filename + (dirlist_len - 1);
+  *cp++ = '/';
+  cp = stpcpy (cp, language);
+
+  if ((mask & TERRITORY) != 0)
+    {
+      *cp++ = '_';
+      cp = stpcpy (cp, territory);
+    }
+  if ((mask & XPG_CODESET) != 0)
+    {
+      *cp++ = '.';
+      cp = stpcpy (cp, codeset);
+    }
+  if ((mask & XPG_NORM_CODESET) != 0)
+    {
+      *cp++ = '.';
+      cp = stpcpy (cp, normalized_codeset);
+    }
+  if ((mask & (XPG_MODIFIER | CEN_AUDIENCE)) != 0)
+    {
+      /* This component can be part of both syntaces but has different
+        leading characters.  For CEN we use `+', else `@'.  */
+      *cp++ = (mask & CEN_AUDIENCE) != 0 ? '+' : '@';
+      cp = stpcpy (cp, modifier);
+    }
+  if ((mask & CEN_SPECIAL) != 0)
+    {
+      *cp++ = '+';
+      cp = stpcpy (cp, special);
+    }
+  if ((mask & (CEN_SPONSOR | CEN_REVISION)) != 0)
+    {
+      *cp++ = ',';
+      if ((mask & CEN_SPONSOR) != 0)
+       cp = stpcpy (cp, sponsor);
+      if ((mask & CEN_REVISION) != 0)
+       {
+         *cp++ = '_';
+         cp = stpcpy (cp, revision);
+       }
+    }
+
+  *cp++ = '/';
+  stpcpy (cp, filename);
+
+  /* Look in list of already loaded domains whether it is already
+     available.  */
+  last = NULL;
+  for (retval = *l10nfile_list; retval != NULL; retval = retval->next)
+    if (retval->filename != NULL)
+      {
+       int compare = strcmp (retval->filename, abs_filename);
+       if (compare == 0)
+         /* We found it!  */
+         break;
+       if (compare < 0)
+         {
+           /* It's not in the list.  */
+           retval = NULL;
+           break;
+         }
+
+       last = retval;
+      }
+
+  if (retval != NULL || do_allocate == 0)
+    {
+      free (abs_filename);
+      return retval;
+    }
+
+  retval = (struct loaded_l10nfile *)
+    malloc (sizeof (*retval) + (__argz_count (dirlist, dirlist_len)
+                               * (1 << pop (mask))
+                               * sizeof (struct loaded_l10nfile *)));
+  if (retval == NULL)
+    return NULL;
+
+  retval->filename = abs_filename;
+  retval->decided = (__argz_count (dirlist, dirlist_len) != 1
+                    || ((mask & XPG_CODESET) != 0
+                        && (mask & XPG_NORM_CODESET) != 0));
+  retval->data = NULL;
+
+  if (last == NULL)
+    {
+      retval->next = *l10nfile_list;
+      *l10nfile_list = retval;
+    }
+  else
+    {
+      retval->next = last->next;
+      last->next = retval;
+    }
+
+  entries = 0;
+  /* If the DIRLIST is a real list the RETVAL entry corresponds not to
+     a real file.  So we have to use the DIRLIST separation mechanism
+     of the inner loop.  */
+  cnt = __argz_count (dirlist, dirlist_len) == 1 ? mask - 1 : mask;
+  for (; cnt >= 0; --cnt)
+    if ((cnt & ~mask) == 0
+       && ((cnt & CEN_SPECIFIC) == 0 || (cnt & XPG_SPECIFIC) == 0)
+       && ((cnt & XPG_CODESET) == 0 || (cnt & XPG_NORM_CODESET) == 0))
+      {
+       /* Iterate over all elements of the DIRLIST.  */
+       char *dir = NULL;
+
+       while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir))
+              != NULL)
+         retval->successor[entries++]
+           = _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1, cnt,
+                                 language, territory, codeset,
+                                 normalized_codeset, modifier, special,
+                                 sponsor, revision, filename, 1);
+      }
+  retval->successor[entries] = NULL;
+
+  return retval;
+}
+\f
+/* Normalize codeset name.  There is no standard for the codeset
+   names.  Normalization allows the user to use any of the common
+   names.  */
+const char *
+_nl_normalize_codeset (codeset, name_len)
+     const char *codeset;
+     size_t name_len;
+{
+  int len = 0;
+  int only_digit = 1;
+  char *retval;
+  char *wp;
+  size_t cnt;
+
+  for (cnt = 0; cnt < name_len; ++cnt)
+    if (isalnum (codeset[cnt]))
+      {
+       ++len;
+
+       if (isalpha (codeset[cnt]))
+         only_digit = 0;
+      }
+
+  retval = (char *) malloc ((only_digit ? 3 : 0) + len + 1);
+
+  if (retval != NULL)
+    {
+      if (only_digit)
+       wp = stpcpy (retval, "iso");
+      else
+       wp = retval;
+
+      for (cnt = 0; cnt < name_len; ++cnt)
+       if (isalpha (codeset[cnt]))
+         *wp++ = tolower (codeset[cnt]);
+       else if (isdigit (codeset[cnt]))
+         *wp++ = codeset[cnt];
+
+      *wp = '\0';
+    }
+
+  return (const char *) retval;
+}
+
+
+/* @@ begin of epilog @@ */
+
+/* We don't want libintl.a to depend on any other library.  So we
+   avoid the non-standard function stpcpy.  In GNU C Library this
+   function is available, though.  Also allow the symbol HAVE_STPCPY
+   to be defined.  */
+#if !_LIBC && !HAVE_STPCPY
+static char *
+stpcpy (dest, src)
+     char *dest;
+     const char *src;
+{
+  while ((*dest++ = *src++) != '\0')
+    /* Do nothing. */ ;
+  return dest - 1;
+}
+#endif
diff --git a/intl/libgettext.h b/intl/libgettext.h
new file mode 100644 (file)
index 0000000..3a92960
--- /dev/null
@@ -0,0 +1,182 @@
+/* Message catalogs for internationalization.
+   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+/* Because on some systems (e.g. Solaris) we sometimes have to include
+   the systems libintl.h as well as this file we have more complex
+   include protection above.  But the systems header might perhaps also
+   define _LIBINTL_H and therefore we have to protect the definition here.  */
+
+#if !defined _LIBINTL_H || !defined _LIBGETTEXT_H
+#ifndef _LIBINTL_H
+# define _LIBINTL_H    1
+#endif
+#define _LIBGETTEXT_H  1
+
+/* We define an additional symbol to signal that we use the GNU
+   implementation of gettext.  */
+#define __USE_GNU_GETTEXT 1
+
+#include <sys/types.h>
+
+#if HAVE_LOCALE_H
+# include <locale.h>
+#endif
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* @@ end of prolog @@ */
+
+#ifndef PARAMS
+# if __STDC__ || defined __cplusplus
+#  define PARAMS(args) args
+# else
+#  define PARAMS(args) ()
+# endif
+#endif
+
+#ifndef NULL
+# if !defined __cplusplus || defined __GNUC__
+#  define NULL ((void *) 0)
+# else
+#  define NULL (0)
+# endif
+#endif
+
+#if !HAVE_LC_MESSAGES
+/* This value determines the behaviour of the gettext() and dgettext()
+   function.  But some system does not have this defined.  Define it
+   to a default value.  */
+# define LC_MESSAGES (-1)
+#endif
+
+
+/* Declarations for gettext-using-catgets interface.  Derived from
+   Jim Meyering's libintl.h.  */
+struct _msg_ent
+{
+  const char *_msg;
+  int _msg_number;
+};
+
+
+#if HAVE_CATGETS
+/* These two variables are defined in the automatically by po-to-tbl.sed
+   generated file `cat-id-tbl.c'.  */
+extern const struct _msg_ent _msg_tbl[];
+extern int _msg_tbl_length;
+#endif
+
+
+/* For automatical extraction of messages sometimes no real
+   translation is needed.  Instead the string itself is the result.  */
+#define gettext_noop(Str) (Str)
+
+/* Look up MSGID in the current default message catalog for the current
+   LC_MESSAGES locale.  If not found, returns MSGID itself (the default
+   text).  */
+extern char *gettext PARAMS ((const char *__msgid));
+extern char *gettext__ PARAMS ((const char *__msgid));
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current
+   LC_MESSAGES locale.  */
+extern char *dgettext PARAMS ((const char *__domainname, const char *__msgid));
+extern char *dgettext__ PARAMS ((const char *__domainname,
+                                const char *__msgid));
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+   locale.  */
+extern char *dcgettext PARAMS ((const char *__domainname, const char *__msgid,
+                               int __category));
+extern char *dcgettext__ PARAMS ((const char *__domainname,
+                                 const char *__msgid, int __category));
+
+
+/* Set the current default message catalog to DOMAINNAME.
+   If DOMAINNAME is null, return the current default.
+   If DOMAINNAME is "", reset to the default of "messages".  */
+extern char *textdomain PARAMS ((const char *__domainname));
+extern char *textdomain__ PARAMS ((const char *__domainname));
+
+/* Specify that the DOMAINNAME message catalog will be found
+   in DIRNAME rather than in the system locale data base.  */
+extern char *bindtextdomain PARAMS ((const char *__domainname,
+                                 const char *__dirname));
+extern char *bindtextdomain__ PARAMS ((const char *__domainname,
+                                   const char *__dirname));
+
+#if ENABLE_NLS
+
+/* Solaris 2.3 has the gettext function but dcgettext is missing.
+   So we omit this optimization for Solaris 2.3.  BTW, Solaris 2.4
+   has dcgettext.  */
+# if !HAVE_CATGETS && (!HAVE_GETTEXT || HAVE_DCGETTEXT)
+
+#  define gettext(Msgid)                                                     \
+     dgettext (NULL, Msgid)
+
+#  define dgettext(Domainname, Msgid)                                        \
+     dcgettext (Domainname, Msgid, LC_MESSAGES)
+
+#  if defined __GNUC__ && __GNUC__ == 2 && __GNUC_MINOR__ >= 7
+/* This global variable is defined in loadmsgcat.c.  We need a sign,
+   whether a new catalog was loaded, which can be associated with all
+   translations.  */
+extern int _nl_msg_cat_cntr;
+
+#   define dcgettext(Domainname, Msgid, Category)                            \
+  (__extension__                                                             \
+   ({                                                                        \
+     char *__result;                                                         \
+     if (__builtin_constant_p (Msgid))                                       \
+       {                                                                     \
+        static char *__translation__;                                        \
+        static int __catalog_counter__;                                      \
+        if (! __translation__ || __catalog_counter__ != _nl_msg_cat_cntr)    \
+          {                                                                  \
+            __translation__ =                                                \
+              dcgettext__ (Domainname, Msgid, Category);                     \
+            __catalog_counter__ = _nl_msg_cat_cntr;                          \
+          }                                                                  \
+        __result = __translation__;                                          \
+       }                                                                     \
+     else                                                                    \
+       __result = dcgettext__ (Domainname, Msgid, Category);                 \
+     __result;                                                               \
+    }))
+#  endif
+# endif
+
+#else
+
+# define gettext(Msgid) (Msgid)
+# define dgettext(Domainname, Msgid) (Msgid)
+# define dcgettext(Domainname, Msgid, Category) (Msgid)
+# define textdomain(Domainname) ((char *) Domainname)
+# define bindtextdomain(Domainname, Dirname) ((char *) Dirname)
+
+#endif
+
+/* @@ begin of epilog @@ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/intl/linux-msg.sed b/intl/linux-msg.sed
new file mode 100644 (file)
index 0000000..5918e72
--- /dev/null
@@ -0,0 +1,100 @@
+# po2msg.sed - Convert Uniforum style .po file to Linux style .msg file
+# Copyright (C) 1995 Free Software Foundation, Inc.
+# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+#
+# The first directive in the .msg should be the definition of the
+# message set number.  We use always set number 1.
+#
+1 {
+  i\
+$set 1 # Automatically created by po2msg.sed
+  h
+  s/.*/0/
+  x
+}
+#
+# Mitch's old catalog format does not allow comments.
+#
+# We copy the original message as a comment into the .msg file.
+#
+/^msgid/ {
+  s/msgid[     ]*"//
+#
+# This does not work now with the new format.
+# /"$/! {
+#   s/\\$//
+#   s/$/ ... (more lines following)"/
+# }
+  x
+# The following nice solution is by
+# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de>
+  td
+# Increment a decimal number in pattern space.
+# First hide trailing `9' digits.
+  :d
+  s/9\(_*\)$/_\1/
+  td
+# Assure at least one digit is available.
+  s/^\(_*\)$/0\1/
+# Increment the last digit.
+  s/8\(_*\)$/9\1/
+  s/7\(_*\)$/8\1/
+  s/6\(_*\)$/7\1/
+  s/5\(_*\)$/6\1/
+  s/4\(_*\)$/5\1/
+  s/3\(_*\)$/4\1/
+  s/2\(_*\)$/3\1/
+  s/1\(_*\)$/2\1/
+  s/0\(_*\)$/1\1/
+# Convert the hidden `9' digits to `0's.
+  s/_/0/g
+  x
+  G
+  s/\(.*\)"\n\([0-9]*\)/$ #\2 Original Message:(\1)/p
+}
+#
+# The .msg file contains, other then the .po file, only the translations
+# but each given a unique ID.  Starting from 1 and incrementing by 1 for
+# each message we assign them to the messages.
+# It is important that the .po file used to generate the cat-id-tbl.c file
+# (with po-to-tbl) is the same as the one used here.  (At least the order
+# of declarations must not be changed.)
+#
+/^msgstr/ {
+  s/msgstr[    ]*"\(.*\)"/# \1/
+# Clear substitution flag.
+  tb
+# Append the next line.
+  :b
+  N
+# Look whether second part is continuation line.
+  s/\(.*\n\)"\(.*\)"/\1\2/
+# Yes, then branch.
+  ta
+  P
+  D
+# Note that D includes a jump to the start!!
+# We found a continuation line.  But before printing insert '\'.
+  :a
+  s/\(.*\)\(\n.*\)/\1\\\2/
+  P
+# We cannot use D here.
+  s/.*\n\(.*\)/\1/
+  tb
+}
+d
diff --git a/intl/loadinfo.h b/intl/loadinfo.h
new file mode 100644 (file)
index 0000000..1c4524a
--- /dev/null
@@ -0,0 +1,78 @@
+/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifndef PARAMS
+# if __STDC__
+#  define PARAMS(args) args
+# else
+#  define PARAMS(args) ()
+# endif
+#endif
+
+/* Encoding of locale name parts.  */
+#define CEN_REVISION           1
+#define CEN_SPONSOR            2
+#define CEN_SPECIAL            4
+#define XPG_NORM_CODESET       8
+#define XPG_CODESET            16
+#define TERRITORY              32
+#define CEN_AUDIENCE           64
+#define XPG_MODIFIER           128
+
+#define CEN_SPECIFIC   (CEN_REVISION|CEN_SPONSOR|CEN_SPECIAL|CEN_AUDIENCE)
+#define XPG_SPECIFIC   (XPG_CODESET|XPG_NORM_CODESET|XPG_MODIFIER)
+
+
+struct loaded_l10nfile
+{
+  const char *filename;
+  int decided;
+
+  const void *data;
+
+  struct loaded_l10nfile *next;
+  struct loaded_l10nfile *successor[1];
+};
+
+
+extern const char *_nl_normalize_codeset PARAMS ((const char *codeset,
+                                                 size_t name_len));
+
+extern struct loaded_l10nfile *
+_nl_make_l10nflist PARAMS ((struct loaded_l10nfile **l10nfile_list,
+                           const char *dirlist, size_t dirlist_len, int mask,
+                           const char *language, const char *territory,
+                           const char *codeset,
+                           const char *normalized_codeset,
+                           const char *modifier, const char *special,
+                           const char *sponsor, const char *revision,
+                           const char *filename, int do_allocate));
+
+
+extern const char *_nl_expand_alias PARAMS ((const char *name));
+
+extern int _nl_explode_name PARAMS ((char *name, const char **language,
+                                    const char **modifier,
+                                    const char **territory,
+                                    const char **codeset,
+                                    const char **normalized_codeset,
+                                    const char **special,
+                                    const char **sponsor,
+                                    const char **revision));
+
+extern char *_nl_find_language PARAMS ((const char *name));
diff --git a/intl/loadmsgcat.c b/intl/loadmsgcat.c
new file mode 100644 (file)
index 0000000..2c6a565
--- /dev/null
@@ -0,0 +1,220 @@
+/* Load needed message catalogs.
+   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#if defined STDC_HEADERS || defined _LIBC
+# include <stdlib.h>
+#endif
+
+#if defined HAVE_UNISTD_H || defined _LIBC
+# include <unistd.h>
+#endif
+
+#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
+    || (defined _LIBC && defined _POSIX_MAPPED_FILES)
+# include <sys/mman.h>
+# undef HAVE_MMAP
+# define HAVE_MMAP     1
+#else
+# undef HAVE_MMAP
+#endif
+
+#include "gettext.h"
+#include "gettextP.h"
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ISO C functions.  This is required by the standard
+   because some ISO C functions will require linking with this object
+   file and the name space must not be polluted.  */
+# define open   __open
+# define close  __close
+# define read   __read
+# define mmap   __mmap
+# define munmap __munmap
+#endif
+
+/* We need a sign, whether a new catalog was loaded, which can be associated
+   with all translations.  This is important if the translations are
+   cached by one of GCC's features.  */
+int _nl_msg_cat_cntr = 0;
+
+
+/* Load the message catalogs specified by FILENAME.  If it is no valid
+   message catalog do nothing.  */
+void
+internal_function
+_nl_load_domain (domain_file)
+     struct loaded_l10nfile *domain_file;
+{
+  int fd;
+  size_t size;
+  struct stat st;
+  struct mo_file_header *data = (struct mo_file_header *) -1;
+  int use_mmap = 0;
+  struct loaded_domain *domain;
+
+  domain_file->decided = 1;
+  domain_file->data = NULL;
+
+  /* If the record does not represent a valid locale the FILENAME
+     might be NULL.  This can happen when according to the given
+     specification the locale file name is different for XPG and CEN
+     syntax.  */
+  if (domain_file->filename == NULL)
+    return;
+
+  /* Try to open the addressed file.  */
+  fd = open (domain_file->filename, O_RDONLY);
+  if (fd == -1)
+    return;
+
+  /* We must know about the size of the file.  */
+  if (fstat (fd, &st) != 0
+      || (size = (size_t) st.st_size) != st.st_size
+      || size < sizeof (struct mo_file_header))
+    {
+      /* Something went wrong.  */
+      close (fd);
+      return;
+    }
+
+#ifdef HAVE_MMAP
+  /* Now we are ready to load the file.  If mmap() is available we try
+     this first.  If not available or it failed we try to load it.  */
+  data = (struct mo_file_header *) mmap (NULL, size, PROT_READ,
+                                        MAP_PRIVATE, fd, 0);
+
+  if (data != (struct mo_file_header *) -1)
+    {
+      /* mmap() call was successful.  */
+      close (fd);
+      use_mmap = 1;
+    }
+#endif
+
+  /* If the data is not yet available (i.e. mmap'ed) we try to load
+     it manually.  */
+  if (data == (struct mo_file_header *) -1)
+    {
+      size_t to_read;
+      char *read_ptr;
+
+      data = (struct mo_file_header *) malloc (size);
+      if (data == NULL)
+       return;
+
+      to_read = size;
+      read_ptr = (char *) data;
+      do
+       {
+         long int nb = (long int) read (fd, read_ptr, to_read);
+         if (nb == -1)
+           {
+             close (fd);
+             return;
+           }
+
+         read_ptr += nb;
+         to_read -= nb;
+       }
+      while (to_read > 0);
+
+      close (fd);
+    }
+
+  /* Using the magic number we can test whether it really is a message
+     catalog file.  */
+  if (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED)
+    {
+      /* The magic number is wrong: not a message catalog file.  */
+#ifdef HAVE_MMAP
+      if (use_mmap)
+       munmap ((caddr_t) data, size);
+      else
+#endif
+       free (data);
+      return;
+    }
+
+  domain_file->data
+    = (struct loaded_domain *) malloc (sizeof (struct loaded_domain));
+  if (domain_file->data == NULL)
+    return;
+
+  domain = (struct loaded_domain *) domain_file->data;
+  domain->data = (char *) data;
+  domain->use_mmap = use_mmap;
+  domain->mmap_size = size;
+  domain->must_swap = data->magic != _MAGIC;
+
+  /* Fill in the information about the available tables.  */
+  switch (W (domain->must_swap, data->revision))
+    {
+    case 0:
+      domain->nstrings = W (domain->must_swap, data->nstrings);
+      domain->orig_tab = (struct string_desc *)
+       ((char *) data + W (domain->must_swap, data->orig_tab_offset));
+      domain->trans_tab = (struct string_desc *)
+       ((char *) data + W (domain->must_swap, data->trans_tab_offset));
+      domain->hash_size = W (domain->must_swap, data->hash_tab_size);
+      domain->hash_tab = (nls_uint32 *)
+       ((char *) data + W (domain->must_swap, data->hash_tab_offset));
+      break;
+    default:
+      /* This is an invalid revision.  */
+#ifdef HAVE_MMAP
+      if (use_mmap)
+       munmap ((caddr_t) data, size);
+      else
+#endif
+       free (data);
+      free (domain);
+      domain_file->data = NULL;
+      return;
+    }
+
+  /* Show that one domain is changed.  This might make some cached
+     translations invalid.  */
+  ++_nl_msg_cat_cntr;
+}
+
+
+#ifdef _LIBC
+void
+internal_function
+_nl_unload_domain (domain)
+     struct loaded_domain *domain;
+{
+#ifdef _POSIX_MAPPED_FILES
+  if (domain->use_mmap)
+    munmap ((caddr_t) domain->data, domain->mmap_size);
+  else
+#endif /* _POSIX_MAPPED_FILES */
+    free ((void *) domain->data);
+
+  free (domain);
+}
+#endif
diff --git a/intl/localealias.c b/intl/localealias.c
new file mode 100644 (file)
index 0000000..861020d
--- /dev/null
@@ -0,0 +1,438 @@
+/* Handle aliases for locale names.
+   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+   Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <ctype.h>
+#include <stdio.h>
+#include <sys/types.h>
+
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#else
+# if defined HAVE_ALLOCA_H || defined _LIBC
+#  include <alloca.h>
+# else
+#  ifdef _AIX
+ #pragma alloca
+#  else
+#   ifndef alloca
+char *alloca ();
+#   endif
+#  endif
+# endif
+#endif
+
+#if defined STDC_HEADERS || defined _LIBC
+# include <stdlib.h>
+#else
+char *getenv ();
+# ifdef HAVE_MALLOC_H
+#  include <malloc.h>
+# else
+void free ();
+# endif
+#endif
+
+#if defined HAVE_STRING_H || defined _LIBC
+# ifndef _GNU_SOURCE
+#  define _GNU_SOURCE  1
+# endif
+# include <string.h>
+#else
+# include <strings.h>
+# ifndef memcpy
+#  define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
+# endif
+#endif
+#if !HAVE_STRCHR && !defined _LIBC
+# ifndef strchr
+#  define strchr index
+# endif
+#endif
+
+#include "gettext.h"
+#include "gettextP.h"
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ANSI C functions.  This is required by the standard
+   because some ANSI C functions will require linking with this object
+   file and the name space must not be polluted.  */
+# define strcasecmp __strcasecmp
+
+# ifndef mempcpy
+#  define mempcpy __mempcpy
+# endif
+# define HAVE_MEMPCPY  1
+
+/* We need locking here since we can be called from different places.  */
+# include <bits/libc-lock.h>
+
+__libc_lock_define_initialized (static, lock);
+#endif
+
+#ifndef internal_function
+# define internal_function
+#endif
+
+/* For those loosing systems which don't have `alloca' we have to add
+   some additional code emulating it.  */
+#ifdef HAVE_ALLOCA
+/* Nothing has to be done.  */
+# define ADD_BLOCK(list, address) /* nothing */
+# define FREE_BLOCKS(list) /* nothing */
+#else
+struct block_list
+{
+  void *address;
+  struct block_list *next;
+};
+# define ADD_BLOCK(list, addr)                                               \
+  do {                                                                       \
+    struct block_list *newp = (struct block_list *) malloc (sizeof (*newp));  \
+    /* If we cannot get a free block we cannot add the new element to        \
+       the list.  */                                                         \
+    if (newp != NULL) {                                                              \
+      newp->address = (addr);                                                \
+      newp->next = (list);                                                   \
+      (list) = newp;                                                         \
+    }                                                                        \
+  } while (0)
+# define FREE_BLOCKS(list)                                                   \
+  do {                                                                       \
+    while (list != NULL) {                                                   \
+      struct block_list *old = list;                                         \
+      list = list->next;                                                     \
+      free (old);                                                            \
+    }                                                                        \
+  } while (0)
+# undef alloca
+# define alloca(size) (malloc (size))
+#endif /* have alloca */
+
+#if defined _LIBC_REENTRANT || defined HAVE_FGETS_UNLOCKED
+# undef fgets
+# define fgets(buf, len, s) fgets_unlocked (buf, len, s)
+#endif
+#if defined _LIBC_REENTRANT || defined HAVE_FEOF_UNLOCKED
+# undef feof
+# define feof(s) feof_unlocked (s)
+#endif
+
+
+struct alias_map
+{
+  const char *alias;
+  const char *value;
+};
+
+
+static char *string_space = NULL;
+static size_t string_space_act = 0;
+static size_t string_space_max = 0;
+static struct alias_map *map;
+static size_t nmap = 0;
+static size_t maxmap = 0;
+
+
+/* Prototypes for local functions.  */
+static size_t read_alias_file PARAMS ((const char *fname, int fname_len))
+     internal_function;
+static void extend_alias_table PARAMS ((void));
+static int alias_compare PARAMS ((const struct alias_map *map1,
+                                 const struct alias_map *map2));
+
+
+const char *
+_nl_expand_alias (name)
+    const char *name;
+{
+  static const char *locale_alias_path = LOCALE_ALIAS_PATH;
+  struct alias_map *retval;
+  const char *result = NULL;
+  size_t added;
+
+#ifdef _LIBC
+  __libc_lock_lock (lock);
+#endif
+
+  do
+    {
+      struct alias_map item;
+
+      item.alias = name;
+
+      if (nmap > 0)
+       retval = (struct alias_map *) bsearch (&item, map, nmap,
+                                              sizeof (struct alias_map),
+                                              (int (*) PARAMS ((const void *,
+                                                                const void *))
+                                               ) alias_compare);
+      else
+       retval = NULL;
+
+      /* We really found an alias.  Return the value.  */
+      if (retval != NULL)
+       {
+         result = retval->value;
+         break;
+       }
+
+      /* Perhaps we can find another alias file.  */
+      added = 0;
+      while (added == 0 && locale_alias_path[0] != '\0')
+       {
+         const char *start;
+
+         while (locale_alias_path[0] == ':')
+           ++locale_alias_path;
+         start = locale_alias_path;
+
+         while (locale_alias_path[0] != '\0' && locale_alias_path[0] != ':')
+           ++locale_alias_path;
+
+         if (start < locale_alias_path)
+           added = read_alias_file (start, locale_alias_path - start);
+       }
+    }
+  while (added != 0);
+
+#ifdef _LIBC
+  __libc_lock_unlock (lock);
+#endif
+
+  return result;
+}
+
+
+static size_t
+internal_function
+read_alias_file (fname, fname_len)
+     const char *fname;
+     int fname_len;
+{
+#ifndef HAVE_ALLOCA
+  struct block_list *block_list = NULL;
+#endif
+  FILE *fp;
+  char *full_fname;
+  size_t added;
+  static const char aliasfile[] = "/locale.alias";
+
+  full_fname = (char *) alloca (fname_len + sizeof aliasfile);
+  ADD_BLOCK (block_list, full_fname);
+#ifdef HAVE_MEMPCPY
+  mempcpy (mempcpy (full_fname, fname, fname_len),
+          aliasfile, sizeof aliasfile);
+#else
+  memcpy (full_fname, fname, fname_len);
+  memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile);
+#endif
+
+  fp = fopen (full_fname, "r");
+  if (fp == NULL)
+    {
+      FREE_BLOCKS (block_list);
+      return 0;
+    }
+
+  added = 0;
+  while (!feof (fp))
+    {
+      /* It is a reasonable approach to use a fix buffer here because
+        a) we are only interested in the first two fields
+        b) these fields must be usable as file names and so must not
+           be that long
+       */
+      char buf[BUFSIZ];
+      char *alias;
+      char *value;
+      char *cp;
+
+      if (fgets (buf, sizeof buf, fp) == NULL)
+       /* EOF reached.  */
+       break;
+
+      /* Possibly not the whole line fits into the buffer.  Ignore
+        the rest of the line.  */
+      if (strchr (buf, '\n') == NULL)
+       {
+         char altbuf[BUFSIZ];
+         do
+           if (fgets (altbuf, sizeof altbuf, fp) == NULL)
+             /* Make sure the inner loop will be left.  The outer loop
+                will exit at the `feof' test.  */
+             break;
+         while (strchr (altbuf, '\n') == NULL);
+       }
+
+      cp = buf;
+      /* Ignore leading white space.  */
+      while (isspace (cp[0]))
+       ++cp;
+
+      /* A leading '#' signals a comment line.  */
+      if (cp[0] != '\0' && cp[0] != '#')
+       {
+         alias = cp++;
+         while (cp[0] != '\0' && !isspace (cp[0]))
+           ++cp;
+         /* Terminate alias name.  */
+         if (cp[0] != '\0')
+           *cp++ = '\0';
+
+         /* Now look for the beginning of the value.  */
+         while (isspace (cp[0]))
+           ++cp;
+
+         if (cp[0] != '\0')
+           {
+             size_t alias_len;
+             size_t value_len;
+
+             value = cp++;
+             while (cp[0] != '\0' && !isspace (cp[0]))
+               ++cp;
+             /* Terminate value.  */
+             if (cp[0] == '\n')
+               {
+                 /* This has to be done to make the following test
+                    for the end of line possible.  We are looking for
+                    the terminating '\n' which do not overwrite here.  */
+                 *cp++ = '\0';
+                 *cp = '\n';
+               }
+             else if (cp[0] != '\0')
+               *cp++ = '\0';
+
+             if (nmap >= maxmap)
+               extend_alias_table ();
+
+             alias_len = strlen (alias) + 1;
+             value_len = strlen (value) + 1;
+
+             if (string_space_act + alias_len + value_len > string_space_max)
+               {
+                 /* Increase size of memory pool.  */
+                 size_t new_size = (string_space_max
+                                    + (alias_len + value_len > 1024
+                                       ? alias_len + value_len : 1024));
+                 char *new_pool = (char *) realloc (string_space, new_size);
+                 if (new_pool == NULL)
+                   {
+                     FREE_BLOCKS (block_list);
+                     return added;
+                   }
+                 string_space = new_pool;
+                 string_space_max = new_size;
+               }
+
+             map[nmap].alias = memcpy (&string_space[string_space_act],
+                                       alias, alias_len);
+             string_space_act += alias_len;
+
+             map[nmap].value = memcpy (&string_space[string_space_act],
+                                       value, value_len);
+             string_space_act += value_len;
+
+             ++nmap;
+             ++added;
+           }
+       }
+    }
+
+  /* Should we test for ferror()?  I think we have to silently ignore
+     errors.  --drepper  */
+  fclose (fp);
+
+  if (added > 0)
+    qsort (map, nmap, sizeof (struct alias_map),
+          (int (*) PARAMS ((const void *, const void *))) alias_compare);
+
+  FREE_BLOCKS (block_list);
+  return added;
+}
+
+
+static void
+extend_alias_table ()
+{
+  size_t new_size;
+  struct alias_map *new_map;
+
+  new_size = maxmap == 0 ? 100 : 2 * maxmap;
+  new_map = (struct alias_map *) realloc (map, (new_size
+                                               * sizeof (struct alias_map)));
+  if (new_map == NULL)
+    /* Simply don't extend: we don't have any more core.  */
+    return;
+
+  map = new_map;
+  maxmap = new_size;
+}
+
+
+#ifdef _LIBC
+static void __attribute__ ((unused))
+free_mem (void)
+{
+  if (string_space != NULL)
+    free (string_space);
+  if (map != NULL)
+    free (map);
+}
+text_set_element (__libc_subfreeres, free_mem);
+#endif
+
+
+static int
+alias_compare (map1, map2)
+     const struct alias_map *map1;
+     const struct alias_map *map2;
+{
+#if defined _LIBC || defined HAVE_STRCASECMP
+  return strcasecmp (map1->alias, map2->alias);
+#else
+  const unsigned char *p1 = (const unsigned char *) map1->alias;
+  const unsigned char *p2 = (const unsigned char *) map2->alias;
+  unsigned char c1, c2;
+
+  if (p1 == p2)
+    return 0;
+
+  do
+    {
+      /* I know this seems to be odd but the tolower() function in
+        some systems libc cannot handle nonalpha characters.  */
+      c1 = isupper (*p1) ? tolower (*p1) : *p1;
+      c2 = isupper (*p2) ? tolower (*p2) : *p2;
+      if (c1 == '\0')
+       break;
+      ++p1;
+      ++p2;
+    }
+  while (c1 == c2);
+
+  return c1 - c2;
+#endif
+}
diff --git a/intl/po2tbl.sed.in b/intl/po2tbl.sed.in
new file mode 100644 (file)
index 0000000..b3bcca4
--- /dev/null
@@ -0,0 +1,102 @@
+# po2tbl.sed - Convert Uniforum style .po file to lookup table for catgets
+# Copyright (C) 1995 Free Software Foundation, Inc.
+# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+1 {
+  i\
+/* Automatically generated by po2tbl.sed from @PACKAGE NAME@.pot.  */\
+\
+#if HAVE_CONFIG_H\
+# include <config.h>\
+#endif\
+\
+#include "libgettext.h"\
+\
+const struct _msg_ent _msg_tbl[] = {
+  h
+  s/.*/0/
+  x
+}
+#
+# Write msgid entries in C array form.
+#
+/^msgid/ {
+  s/msgid[     ]*\(".*"\)/  {\1/
+  tb
+# Append the next line
+  :b
+  N
+# Look whether second part is continuation line.
+  s/\(.*\)"\(\n\)"\(.*"\)/\1\2\3/
+# Yes, then branch.
+  ta
+# Because we assume that the input file correctly formed the line
+# just read cannot be again be a msgid line.  So it's safe to ignore
+# it.
+  s/\(.*\)\n.*/\1/
+  bc
+# We found a continuation line.  But before printing insert '\'.
+  :a
+  s/\(.*\)\(\n.*\)/\1\\\2/
+  P
+# We cannot use D here.
+  s/.*\n\(.*\)/\1/
+# Some buggy seds do not clear the `successful substitution since last ``t'''
+# flag on `N', so we do a `t' here to clear it.
+  tb
+# Not reached
+  :c
+  x
+# The following nice solution is by
+# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de>
+  td
+# Increment a decimal number in pattern space.
+# First hide trailing `9' digits.
+  :d
+  s/9\(_*\)$/_\1/
+  td
+# Assure at least one digit is available.
+  s/^\(_*\)$/0\1/
+# Increment the last digit.
+  s/8\(_*\)$/9\1/
+  s/7\(_*\)$/8\1/
+  s/6\(_*\)$/7\1/
+  s/5\(_*\)$/6\1/
+  s/4\(_*\)$/5\1/
+  s/3\(_*\)$/4\1/
+  s/2\(_*\)$/3\1/
+  s/1\(_*\)$/2\1/
+  s/0\(_*\)$/1\1/
+# Convert the hidden `9' digits to `0's.
+  s/_/0/g
+  x
+  G
+  s/\(.*\)\n\([0-9]*\)/\1, \2},/
+  s/\(.*\)"$/\1/
+  p
+}
+#
+# Last line.
+#
+$ {
+  i\
+};\
+
+  g
+  s/0*\(.*\)/int _msg_tbl_length = \1;/p
+}
+d
diff --git a/intl/textdomain.c b/intl/textdomain.c
new file mode 100644 (file)
index 0000000..8855746
--- /dev/null
@@ -0,0 +1,108 @@
+/* Implementation of the textdomain(3) function.
+   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
+   Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#if defined STDC_HEADERS || defined _LIBC
+# include <stdlib.h>
+#endif
+
+#if defined STDC_HEADERS || defined HAVE_STRING_H || defined _LIBC
+# include <string.h>
+#else
+# include <strings.h>
+# ifndef memcpy
+#  define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
+# endif
+#endif
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgettext.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Name of the default text domain.  */
+extern const char _nl_default_default_domain[];
+
+/* Default text domain in which entries for gettext(3) are to be found.  */
+extern const char *_nl_current_default_domain;
+
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define TEXTDOMAIN __textdomain
+# ifndef strdup
+#  define strdup(str) __strdup (str)
+# endif
+#else
+# define TEXTDOMAIN textdomain__
+#endif
+
+/* Set the current default message catalog to DOMAINNAME.
+   If DOMAINNAME is null, return the current default.
+   If DOMAINNAME is "", reset to the default of "messages".  */
+char *
+TEXTDOMAIN (domainname)
+     const char *domainname;
+{
+  char *old;
+
+  /* A NULL pointer requests the current setting.  */
+  if (domainname == NULL)
+    return (char *) _nl_current_default_domain;
+
+  old = (char *) _nl_current_default_domain;
+
+  /* If domain name is the null string set to default domain "messages".  */
+  if (domainname[0] == '\0'
+      || strcmp (domainname, _nl_default_default_domain) == 0)
+    _nl_current_default_domain = _nl_default_default_domain;
+  else
+    {
+      /* If the following malloc fails `_nl_current_default_domain'
+        will be NULL.  This value will be returned and so signals we
+        are out of core.  */
+#if defined _LIBC || defined HAVE_STRDUP
+      _nl_current_default_domain = strdup (domainname);
+#else
+      size_t len = strlen (domainname) + 1;
+      char *cp = (char *) malloc (len);
+      if (cp != NULL)
+       memcpy (cp, domainname, len);
+      _nl_current_default_domain = cp;
+#endif
+    }
+
+  if (old != _nl_default_default_domain)
+    free (old);
+
+  return (char *) _nl_current_default_domain;
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library.  */
+weak_alias (__textdomain, textdomain);
+#endif
diff --git a/intl/xopen-msg.sed b/intl/xopen-msg.sed
new file mode 100644 (file)
index 0000000..b19c0bb
--- /dev/null
@@ -0,0 +1,104 @@
+# po2msg.sed - Convert Uniforum style .po file to X/Open style .msg file
+# Copyright (C) 1995 Free Software Foundation, Inc.
+# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+#
+# The first directive in the .msg should be the definition of the
+# message set number.  We use always set number 1.
+#
+1 {
+  i\
+$set 1 # Automatically created by po2msg.sed
+  h
+  s/.*/0/
+  x
+}
+#
+# We copy all comments into the .msg file.  Perhaps they can help.
+#
+/^#/ s/^#[     ]*/$ /p
+#
+# We copy the original message as a comment into the .msg file.
+#
+/^msgid/ {
+# Does not work now
+#  /"$/! {
+#    s/\\$//
+#    s/$/ ... (more lines following)"/
+#  }
+  s/^msgid[    ]*"\(.*\)"$/$ Original Message: \1/
+  p
+}
+#
+# The .msg file contains, other then the .po file, only the translations
+# but each given a unique ID.  Starting from 1 and incrementing by 1 for
+# each message we assign them to the messages.
+# It is important that the .po file used to generate the cat-id-tbl.c file
+# (with po-to-tbl) is the same as the one used here.  (At least the order
+# of declarations must not be changed.)
+#
+/^msgstr/ {
+  s/msgstr[    ]*"\(.*\)"/\1/
+  x
+# The following nice solution is by
+# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de>
+  td
+# Increment a decimal number in pattern space.
+# First hide trailing `9' digits.
+  :d
+  s/9\(_*\)$/_\1/
+  td
+# Assure at least one digit is available.
+  s/^\(_*\)$/0\1/
+# Increment the last digit.
+  s/8\(_*\)$/9\1/
+  s/7\(_*\)$/8\1/
+  s/6\(_*\)$/7\1/
+  s/5\(_*\)$/6\1/
+  s/4\(_*\)$/5\1/
+  s/3\(_*\)$/4\1/
+  s/2\(_*\)$/3\1/
+  s/1\(_*\)$/2\1/
+  s/0\(_*\)$/1\1/
+# Convert the hidden `9' digits to `0's.
+  s/_/0/g
+  x
+# Bring the line in the format `<number> <message>'
+  G
+  s/^[^\n]*$/& /
+  s/\(.*\)\n\([0-9]*\)/\2 \1/
+# Clear flag from last substitution.
+  tb
+# Append the next line.
+  :b
+  N
+# Look whether second part is a continuation line.
+  s/\(.*\n\)"\(.*\)"/\1\2/
+# Yes, then branch.
+  ta
+  P
+  D
+# Note that `D' includes a jump to the start!!
+# We found a continuation line.  But before printing insert '\'.
+  :a
+  s/\(.*\)\(\n.*\)/\1\\\2/
+  P
+# We cannot use the sed command `D' here
+  s/.*\n\(.*\)/\1/
+  tb
+}
+d
diff --git a/missing b/missing
new file mode 100755 (executable)
index 0000000..7789652
--- /dev/null
+++ b/missing
@@ -0,0 +1,190 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+# Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+# Franc,ois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+if test $# -eq 0; then
+  echo 1>&2 "Try \`$0 --help' for more information"
+  exit 1
+fi
+
+case "$1" in
+
+  -h|--h|--he|--hel|--help)
+    echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+  -h, --help      display this help and exit
+  -v, --version   output version information and exit
+
+Supported PROGRAM values:
+  aclocal      touch file \`aclocal.m4'
+  autoconf     touch file \`configure'
+  autoheader   touch file \`config.h.in'
+  automake     touch all \`Makefile.in' files
+  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
+  flex         create \`lex.yy.c', if possible, from existing .c
+  lex          create \`lex.yy.c', if possible, from existing .c
+  makeinfo     touch the output file
+  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]"
+    ;;
+
+  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+    echo "missing - GNU libit 0.0"
+    ;;
+
+  -*)
+    echo 1>&2 "$0: Unknown \`$1' option"
+    echo 1>&2 "Try \`$0 --help' for more information"
+    exit 1
+    ;;
+
+  aclocal)
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified \`acinclude.m4' or \`configure.in'.  You might want
+         to install the \`Automake' and \`Perl' packages.  Grab them from
+         any GNU archive site."
+    touch aclocal.m4
+    ;;
+
+  autoconf)
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified \`configure.in'.  You might want to install the
+         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
+         archive site."
+    touch configure
+    ;;
+
+  autoheader)
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified \`acconfig.h' or \`configure.in'.  You might want
+         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
+         from any GNU archive site."
+    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' configure.in`
+    test -z "$files" && files="config.h"
+    touch_files=
+    for f in $files; do
+      case "$f" in
+      *:*) touch_files="$touch_files "`echo "$f" |
+                                      sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+      *) touch_files="$touch_files $f.in";;
+      esac
+    done
+    touch $touch_files
+    ;;
+
+  automake)
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'.
+         You might want to install the \`Automake' and \`Perl' packages.
+         Grab them from any GNU archive site."
+    find . -type f -name Makefile.am -print |
+          sed 's/\.am$/.in/' |
+          while read f; do touch "$f"; done
+    ;;
+
+  bison|yacc)
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified a \`.y' file.  You may need the \`Bison' package
+         in order for those modifications to take effect.  You can get
+         \`Bison' from any GNU archive site."
+    rm -f y.tab.c y.tab.h
+    if [ $# -ne 1 ]; then
+        eval LASTARG="\${$#}"
+       case "$LASTARG" in
+       *.y)
+           SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+           if [ -f "$SRCFILE" ]; then
+                cp "$SRCFILE" y.tab.c
+           fi
+           SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+           if [ -f "$SRCFILE" ]; then
+                cp "$SRCFILE" y.tab.h
+           fi
+         ;;
+       esac
+    fi
+    if [ ! -f y.tab.h ]; then
+       echo >y.tab.h
+    fi
+    if [ ! -f y.tab.c ]; then
+       echo 'main() { return 0; }' >y.tab.c
+    fi
+    ;;
+
+  lex|flex)
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified a \`.l' file.  You may need the \`Flex' package
+         in order for those modifications to take effect.  You can get
+         \`Flex' from any GNU archive site."
+    rm -f lex.yy.c
+    if [ $# -ne 1 ]; then
+        eval LASTARG="\${$#}"
+       case "$LASTARG" in
+       *.l)
+           SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+           if [ -f "$SRCFILE" ]; then
+                cp "$SRCFILE" lex.yy.c
+           fi
+         ;;
+       esac
+    fi
+    if [ ! -f lex.yy.c ]; then
+       echo 'main() { return 0; }' >lex.yy.c
+    fi
+    ;;
+
+  makeinfo)
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified a \`.texi' or \`.texinfo' file, or any other file
+         indirectly affecting the aspect of the manual.  The spurious
+         call might also be the consequence of using a buggy \`make' (AIX,
+         DU, IRIX).  You might want to install the \`Texinfo' package or
+         the \`GNU make' package.  Grab either from any GNU archive site."
+    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+    if test -z "$file"; then
+      file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+      file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
+    fi
+    touch $file
+    ;;
+
+  *)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, and you do not seem to have it handy on your
+         system.  You might have modified some files without having the
+         proper tools for further handling them.  Check the \`README' file,
+         it often tells you about the needed prerequirements for installing
+         this package.  You may also peek at any GNU archive site, in case
+         some other package would contain this missing \`$1' program."
+    exit 1
+    ;;
+esac
+
+exit 0
diff --git a/mkinstalldirs b/mkinstalldirs
new file mode 100755 (executable)
index 0000000..6b3b5fc
--- /dev/null
@@ -0,0 +1,40 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+# Author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain
+
+# $Id$
+
+errstatus=0
+
+for file
+do
+   set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+   shift
+
+   pathcomp=
+   for d
+   do
+     pathcomp="$pathcomp$d"
+     case "$pathcomp" in
+       -* ) pathcomp=./$pathcomp ;;
+     esac
+
+     if test ! -d "$pathcomp"; then
+        echo "mkdir $pathcomp"
+
+        mkdir "$pathcomp" || lasterr=$?
+
+        if test ! -d "$pathcomp"; then
+         errstatus=$lasterr
+        fi
+     fi
+
+     pathcomp="$pathcomp/"
+   done
+done
+
+exit $errstatus
+
+# mkinstalldirs ends here
diff --git a/nano.1 b/nano.1
new file mode 100644 (file)
index 0000000..d5801d1
--- /dev/null
+++ b/nano.1
@@ -0,0 +1,97 @@
+.\"                                      Hey, EMACS: -*- nroff -*-
+.\" First parameter, NAME, should be all caps
+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
+.\" other parameters are allowed: see man(7), man(1)
+.TH NANO 1 "January 4, 2000"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh        disable hyphenation
+.\" .hy        enable hyphenation
+.\" .ad l      left justify
+.\" .ad b      justify to both left and right margins
+.\" .nf        disable filling
+.\" .fi        enable filling
+.\" .br        insert line break
+.\" .sp <n>    insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME
+nano \- Nano's ANOther editor, an enhanced free Pico Clone
+.SH SYNOPSIS
+.B nano
+.RI [options]\ [+LINE] " file"
+.br
+.SH DESCRIPTION
+This manual page documents briefly the
+.B nano
+command.
+.PP
+.\" TeX users may be more comfortable with the \fB<whatever>\fP and
+.\" \fI<whatever>\fP escape sequences to invode bold face and italics, 
+.\" respectively.
+\fBnano\fP was originally known as TIP (TIP Isn't Pico). It is a small,
+free and friendly editor which aims to replace Pico, the default editor
+included in the non-free Pine package. Rather than just copying Pico's
+look and feel, 
+.B nano
+also implements some missing (or disabled by
+default) features in Pico, such as "search and replace" and "goto line
+number".
+.SH OPTIONS
+.TP
+.B \-V (\-\-version)
+Show the current version number and author.
+.TP
+.B \-h (\-\-help)
+Display a summary of commandline options.
+.TP
+.B \-c (\-\-const)
+Constantly show the cursor position.
+.TP
+.B \-i (\-\-autoindent)
+Indent new lines to the previous line's indentation. Useful when editing
+source code.
+.TP
+.B \-l (\-\-nofollow)
+If the file being edited is a symbolic link, replace the link with a 
+a new file, do not follow it.  Good for editing files in /tmp perhaps?
+.TP
+.B \-m (\-\-mouse)
+Enable mouse support (if available for your system).
+.TP
+.B \-p (\-\-pico)
+Display the same shortcut lists as Pico does.
+.TP
+.B \-s (\-\-speller)
+Enable alternative spell checker command.
+.TP
+.B \-t (\-\-tempfile)
+Always save changed buffer without prompting. Same as Pico -t option.
+.TP
+.B \-v (\-\-view)
+View file (read only) mode.
+.TP
+.B \-w (\-\-nowrap)
+Disable wrapping of long lines.
+.TP
+.B \-x (\-\-nohelp)
+Disable help screen at bottom of editor.
+.TP
+.B \-z (\-\-suspend)
+Enable suspend ability.
+.TP
+.B \+LINE
+Places cursor at LINE on startup.
+.SH BUGS
+Please send any comments or bug reports to
+.B nano@asty.org.
+The nano mailing list is available from
+.B nano-devel@lists.sourceforge.net.
+To subscribe, email to nano-devel-request@lists.sourceforge.net with a
+subject of "subscribe".
+.SH HOMEPAGE
+http://www.asty.org/nano
+.SH AUTHOR
+Chris Allegretta <chrisa@asty.org>, et al.  This manual page was
+originally written by Jordi Mallach <jordi@sindominio.net>, for the Debian
+GNU/Linux system (but may be used by others).
diff --git a/nano.1.html b/nano.1.html
new file mode 100644 (file)
index 0000000..d0be08b
--- /dev/null
@@ -0,0 +1,158 @@
+Content-type: text/html
+
+<HTML><HEAD><TITLE>Manpage of NANO</TITLE>
+</HEAD><BODY>
+<H1>NANO</H1>
+Section: User Commands  (1)<BR>Updated: January 4, 2000<BR><A HREF="#index">Index</A>
+<A HREF="http://localhost/cgi-bin/man/man2html">Return to Main Contents</A><HR>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<A NAME="lbAB">&nbsp;</A>
+<H2>NAME</H2>
+
+nano - Nano's ANOther editor, an enhanced free Pico Clone
+<A NAME="lbAC">&nbsp;</A>
+<H2>SYNOPSIS</H2>
+
+<B>nano</B>
+
+[options]&nbsp;[+LINE]<I> file</I>
+
+<BR>
+
+<A NAME="lbAD">&nbsp;</A>
+<H2>DESCRIPTION</H2>
+
+This manual page documents briefly the
+<B>nano</B>
+
+command.
+<P>
+
+
+
+
+<B>nano</B> was originally known as TIP (TIP Isn't Pico). It is a small,
+free and friendly editor which aims to replace Pico, the default editor
+included in the non-free Pine package. Rather than just copying Pico's
+look and feel, 
+<B>nano</B>
+
+also implements some missing (or disabled by
+default) features in Pico, such as &quot;search and replace&quot; and &quot;goto line
+number&quot;.
+<A NAME="lbAE">&nbsp;</A>
+<H2>OPTIONS</H2>
+
+<DL COMPACT>
+<DT><B>-V (--version)</B>
+
+<DD>
+Show the current version number and author.
+<DT><B>-h (--help)</B>
+
+<DD>
+Display a summary of commandline options.
+<DT><B>-c (--const)</B>
+
+<DD>
+Constantly show the cursor position.
+<DT><B>-i (--autoindent)</B>
+
+<DD>
+Indent new lines to the previous line's indentation. Useful when editing
+source code.
+<DT><B>-l (--nofollow)</B>
+
+<DD>
+If the file being edited is a symbolic link, replace the link with a 
+a new file, do not follow it.  Good for editing files in /tmp perhaps?
+<DT><B>-m (--mouse)</B>
+
+<DD>
+Enable mouse support (if available for your system).
+<DT><B>-p (--pico)</B>
+
+<DD>
+Display the same shortcut lists as Pico does.
+<DT><B>-s (--speller)</B>
+
+<DD>
+Enable alternative spell checker command.
+<DT><B>-t (--tempfile)</B>
+
+<DD>
+Always save changed buffer without prompting. Same as Pico -t option.
+<DT><B>-v (--view)</B>
+
+<DD>
+View file (read only) mode.
+<DT><B>-w (--nowrap)</B>
+
+<DD>
+Disable wrapping of long lines.
+<DT><B>-x (--nohelp)</B>
+
+<DD>
+Disable help screen at bottom of editor.
+<DT><B>-z (--suspend)</B>
+
+<DD>
+Enable suspend ability.
+<DT><B>+LINE</B>
+
+<DD>
+Places cursor at LINE on startup.
+</DL>
+<A NAME="lbAF">&nbsp;</A>
+<H2>BUGS</H2>
+
+Please send any comments or bug reports to
+<B><A HREF="mailto:nano@asty.org">nano@asty.org</A>.</B>
+
+The nano mailing list is available from
+<B><A HREF="mailto:nano-devel@lists.sourceforge.net">nano-devel@lists.sourceforge.net</A>.</B>
+
+To subscribe, email to <A HREF="mailto:nano-devel-request@lists.sourceforge.net">nano-devel-request@lists.sourceforge.net</A> with a
+subject of &quot;subscribe&quot;.
+<A NAME="lbAG">&nbsp;</A>
+<H2>HOMEPAGE</H2>
+
+<A HREF="http://www.asty.org/nano">http://www.asty.org/nano</A>
+<A NAME="lbAH">&nbsp;</A>
+<H2>AUTHOR</H2>
+
+Chris Allegretta &lt;<A HREF="mailto:chrisa@asty.org">chrisa@asty.org</A>&gt;, et al.  This manual page was
+originally written by Jordi Mallach &lt;<A HREF="mailto:jordi@sindominio.net">jordi@sindominio.net</A>&gt;, for the Debian
+GNU/Linux system (but may be used by others).
+<P>
+
+<HR>
+<A NAME="index">&nbsp;</A><H2>Index</H2>
+<DL>
+<DT><A HREF="#lbAB">NAME</A><DD>
+<DT><A HREF="#lbAC">SYNOPSIS</A><DD>
+<DT><A HREF="#lbAD">DESCRIPTION</A><DD>
+<DT><A HREF="#lbAE">OPTIONS</A><DD>
+<DT><A HREF="#lbAF">BUGS</A><DD>
+<DT><A HREF="#lbAG">HOMEPAGE</A><DD>
+<DT><A HREF="#lbAH">AUTHOR</A><DD>
+</DL>
+<HR>
+This document was created by
+<A HREF="http://localhost/cgi-bin/man/man2html">man2html</A>,
+using the manual pages.<BR>
+Time: 23:18:59 GMT, June 04, 2000
+</BODY>
+</HTML>
diff --git a/nano.c b/nano.c
new file mode 100644 (file)
index 0000000..799ac29
--- /dev/null
+++ b/nano.c
@@ -0,0 +1,2640 @@
+/**************************************************************************
+ *   nano.c                                                               *
+ *                                                                        *
+ *   Copyright (C) 1999 Chris Allegretta                                  *
+ *   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 1, 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., 675 Mass Ave, Cambridge, MA 02139, USA.            *
+ *                                                                        *
+ **************************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <signal.h>
+#include <unistd.h>
+#include <string.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <sys/ioctl.h>
+#include <sys/param.h>
+#include <errno.h>
+#include <ctype.h>
+#include <locale.h>
+#include <limits.h>
+
+#include "config.h"
+#include "proto.h"
+#include "nano.h"
+
+#ifndef NANO_SMALL
+#include <libintl.h>
+#define _(string) gettext(string)
+#else
+#define _(string) (string)
+#endif
+
+#ifdef HAVE_TERMIOS_H
+#include <termios.h>
+#endif
+
+#ifdef HAVE_TERMIO_H
+#include <termio.h>
+#endif
+
+#ifdef HAVE_GETOPT_H
+#include <getopt.h>
+#endif
+
+/* Former globals, now static */
+char *last_search;             /* Last string we searched for */
+char *last_replace;            /* Last replacement string */
+int temp_opt = 0;              /* Editing temp file (pico -t option) */
+int fill = 0;                  /* Fill - where to wrap lines, basically */
+static char *alt_speller;      /* Alternative spell command */
+static int editwineob = 0;     /* Last Line in edit buffer
+                                  (0 - editwineob) */
+struct termios oldterm;                /* The user's original term settings */
+static char *alt_speller;      /* Alternative spell command */
+static char *help_text_init = "";
+                               /* Initial message, not including shortcuts */
+
+/* What we do when we're all set to exit */
+RETSIGTYPE finish(int sigage)
+{
+    if (!ISSET(NO_HELP)) {
+       mvwaddstr(bottomwin, 1, 0, hblank);
+       mvwaddstr(bottomwin, 2, 0, hblank);
+    }
+    else
+       mvwaddstr(bottomwin, 0, 0, hblank);
+
+    wrefresh(bottomwin);
+    endwin();
+
+    /* Restore the old term settings */
+    tcsetattr (0, TCSANOW, &oldterm);
+
+    exit(sigage);
+}
+
+/* Die (gracefully?) */
+void die(char *msg, ...)
+{
+    va_list ap;
+
+    va_start(ap, msg);
+    vfprintf(stderr, msg, ap);
+    va_end(ap);
+
+    /* if we can't save we have REAL bad problems,
+     * but we might as well TRY.  FIXME: This should probabally base it
+     * off of the current filename */
+    write_file("nano.save", 0);
+
+    /* Restore the old term settings */
+    tcsetattr (0, TCSANOW, &oldterm);
+
+    clear();
+    refresh();
+    resetty();
+    endwin();
+
+    fprintf(stderr, msg);
+    fprintf(stderr, _("\nBuffer written to 'nano.save'\n"));
+
+    exit(1);                   /* We have a problem: exit w/ errorlevel(1) */
+}
+
+/* Thanks BG, many ppl have been asking for this... */
+void *nmalloc(size_t howmuch)
+{
+    void *r;
+
+    /* Panic save? */
+
+    if (!(r = malloc(howmuch)))
+       die(_("nano: malloc: out of memory!"));
+
+    return r;
+}
+
+void *nrealloc(void *ptr, size_t howmuch)
+{
+    void *r;
+
+    if (!(r = realloc(ptr, howmuch)))
+       die("nano: realloc: out of memory!");
+
+    return r;
+}
+
+void print_view_warning(void)
+{
+    statusbar(_("Key illegal in VIEW mode"));
+}
+
+/* Initialize global variables - no better way for now */
+void global_init(void)
+{
+    int i;
+
+    center_x = COLS / 2;
+    center_y = LINES / 2;
+    current_x = 0;
+    current_y = 0;
+    editwinrows = LINES - 5 + no_help();
+    editwineob = editwinrows - 1;
+    fileage = NULL;
+    cutbuffer = NULL;
+    current = NULL;
+    edittop = NULL;
+    editbot = NULL;
+    totlines = 0;
+    placewewant = 0;
+    if (!fill)
+       fill = COLS - 8;
+    hblank = nmalloc(COLS + 1);
+
+    /* Thanks BG for this bit... */
+    for (i = 0; i <= COLS - 1; i++)
+       hblank[i] = ' ';
+    hblank[i] = 0;
+    last_search = nmalloc(132);
+    last_replace = nmalloc(132);
+    answer = nmalloc(132);
+
+}
+
+void init_help_msg(void)
+{
+
+#ifndef NANO_SMALL
+
+    help_text_init =
+    _(" nano help text\n\n "
+    "The nano editor is designed to emulate the functionality and "
+    "ease-of-use of the UW Pico text editor.  There are four main "
+    "sections of the editor: The top line shows the program "
+    "version, the current filename being edited, and whether "
+    "or not the file has been modified.  Next is the main editor "
+    "window showing the file being edited.  The status line is "
+    "the third line from the bottom and shows important messages. "
+    "The bottom two lines show the most commonly used shortcuts "
+    "in the editor.\n\n "
+    "The notation for shortcuts is as follows: Control-key "
+    "sequences are notated with a caret (^) symbol.  Alt-key "
+    "sequences are notated with an at (@) symbol.  The following "
+    "keystrokes are available in the main editor window. "
+    "Optional keys are shown in parentheses:\n\n");
+#endif
+
+}
+
+/* Make a copy of a node to a pointer (space will be malloc()ed) */
+filestruct *copy_node(filestruct * src)
+{
+    filestruct *dst;
+
+    dst = nmalloc(sizeof(filestruct));
+    dst->data = nmalloc(strlen(src->data) + 1);
+
+    dst->next = src->next;
+    dst->prev = src->prev;
+
+    strcpy(dst->data, src->data);
+    dst->lineno = src->lineno;
+
+    return dst;
+}
+
+/* Unlink a node from the rest of the struct */
+void unlink_node(filestruct * fileptr)
+{
+    if (fileptr->prev != NULL)
+       fileptr->prev->next = fileptr->next;
+
+    if (fileptr->next != NULL)
+       fileptr->next->prev = fileptr->prev;
+}
+
+void delete_node(filestruct * fileptr)
+{
+    if (fileptr->data != NULL)
+       free(fileptr->data);
+    free(fileptr);
+}
+
+/* Okay, now let's duplicate a whole struct! */
+filestruct *copy_filestruct(filestruct * src)
+{
+    filestruct *dst, *tmp, *head, *prev;
+
+    head = copy_node(src);
+    dst = head;                        /* Else we barf on copying just one line */
+    head->prev = NULL;
+    tmp = src->next;
+    prev = head;
+
+    while (tmp != NULL) {
+       dst = copy_node(tmp);
+       dst->prev = prev;
+       prev->next = dst;
+
+       prev = dst;
+       tmp = tmp->next;
+    }
+
+    dst->next = NULL;
+    return head;
+}
+
+/* Free() a single node */
+int free_node(filestruct * src)
+{
+    if (src == NULL)
+       return 0;
+
+    if (src->next != NULL)
+       free(src->data);
+    free(src);
+    return 1;
+}
+
+int free_filestruct(filestruct * src)
+{
+    filestruct *fileptr = src;
+
+    if (src == NULL)
+       return 0;
+
+    while (fileptr->next != NULL) {
+       fileptr = fileptr->next;
+       free_node(fileptr->prev);
+
+#ifdef DEBUG
+       fprintf(stderr, _("free_node(): free'd a node, YAY!\n"));
+#endif
+    }
+    free_node(fileptr);
+#ifdef DEBUG
+    fprintf(stderr, _("free_node(): free'd last node.\n"));
+#endif
+
+    return 1;
+}
+
+int renumber_all(void)
+{
+    filestruct *temp;
+    long i = 1;
+
+    for (temp = fileage; temp != NULL; temp = temp->next) {
+       temp->lineno = i++;
+    }
+
+    return 0;
+}
+
+int renumber(filestruct * fileptr)
+{
+    filestruct *temp;
+
+    if (fileptr == NULL || fileptr->prev == NULL || fileptr == fileage) {
+       renumber_all();
+       return 0;
+    }
+    for (temp = fileptr; temp != NULL; temp = temp->next) {
+       temp->lineno = temp->prev->lineno + 1;
+    }
+
+    return 0;
+}
+
+/* Fix the memory allocation for a string */
+void align(char **strp)
+{
+    /* There was a serious bug here:  the new address was never
+       stored anywhere... */
+
+    *strp = nrealloc(*strp, strlen(*strp) + 1);
+}
+
+/* Load file into edit buffer - takes data from file struct */
+void load_file(void)
+{
+    current = fileage;
+    wmove(edit, current_y, current_x);
+}
+
+/* What happens when there is no file to open? aiee! */
+void new_file(void)
+{
+    fileage = nmalloc(sizeof(filestruct));
+    fileage->data = nmalloc(1);
+    strcpy(fileage->data, "");
+    fileage->prev = NULL;
+    fileage->next = NULL;
+    fileage->lineno = 1;
+    filebot = fileage;
+    edittop = fileage;
+    editbot = fileage;
+    current = fileage;
+    totlines = 1;
+    UNSET(VIEW_MODE);
+}
+
+
+int read_byte(int fd, char *filename, char *input)
+{
+    static char buf[BUFSIZ];
+    static int index = 0;
+    static int size = 0;
+
+    if (index == size) {
+       index = 0;
+       size = read(fd, buf, BUFSIZ);
+       if (size == -1) {
+           clear();
+           refresh();
+           resetty();
+           endwin();
+           perror(filename);
+       }
+       if (!size)
+           return 0;
+    }
+    *input = buf[index++];
+    return 1;
+}
+
+filestruct *read_line(char *buf, filestruct * prev, int *line1ins)
+{
+    filestruct *fileptr;
+
+    fileptr = nmalloc(sizeof(filestruct));
+    fileptr->data = nmalloc(strlen(buf) + 2);
+    strcpy(fileptr->data, buf);
+
+    if (*line1ins) {
+       /* Special case, insert with cursor on 1st line. */
+       fileptr->prev = NULL;
+       fileptr->next = fileage;
+       fileptr->lineno = 1;
+       *line1ins = 0;
+       fileage = fileptr;
+    } else if (fileage == NULL) {
+       fileage = fileptr;
+       fileage->lineno = 1;
+       fileage->next = fileage->prev = NULL;
+       fileptr = filebot = fileage;
+    } else if (prev) {
+       fileptr->prev = prev;
+       fileptr->next = NULL;
+       fileptr->lineno = prev->lineno + 1;
+       prev->next = fileptr;
+    } else {
+       die(_("read_line: not on first line and prev is NULL"));
+    }
+
+    return fileptr;
+}
+
+
+int read_file(int fd, char *filename)
+{
+    long size, lines = 0, linetemp = 0;
+    char input[2];             /* buffer */
+    char *buf;
+    long i = 0, bufx = 128;
+    filestruct *fileptr = current, *tmp = NULL;
+    int line1ins = 0;
+
+    buf = nmalloc(bufx);
+
+    if (fileptr != NULL && fileptr->prev != NULL) {
+       fileptr = fileptr->prev;
+       tmp = fileptr;
+    } else if (fileptr != NULL && fileptr->prev == NULL) {
+       tmp = fileage;
+       current = fileage;
+       line1ins = 1;
+    }
+    input[1] = 0;
+    /* Read the entire file into file struct */
+    while ((size = read_byte(fd, filename, input)) > 0) {
+       linetemp = 0;
+       if (input[0] == '\n') {
+           fileptr = read_line(buf, fileptr, &line1ins);
+           lines++;
+           buf[0] = 0;
+           i = 0;
+       } else {
+           /* Now we allocate a bigger buffer 128 characters at a time.
+              If we allocate a lot of space for one line, we may indeed 
+              have to use a buffer this big later on, so we don't
+              decrease it at all.  We do free it at the end though. */
+
+           if (i >= bufx - 1) {
+               buf = nrealloc(buf, bufx + 128);
+               bufx += 128;
+           }
+           buf[i] = input[0];
+           buf[i + 1] = 0;
+           i++;
+       }
+       totsize += size;
+    }
+
+    /* Did we not get a newline but still have stuff to do? */
+    if (buf[0]) {
+       fileptr = read_line(buf, fileptr, &line1ins);
+       lines++;
+       buf[0] = 0;
+    }
+    /* Did we even GET a file? */
+    if (totsize == 0) {
+       new_file();
+       statusbar(_("Read %d lines"), lines);
+       return 1;
+    }
+    if (current != NULL) {
+       fileptr->next = current;
+       current->prev = fileptr;
+       renumber(current);
+       current_x = 0;
+       placewewant = 0;
+       edit_update(fileptr);
+    } else if (fileptr->next == NULL) {
+       filebot = fileptr;
+       load_file();
+    }
+    statusbar(_("Read %d lines"), lines);
+    totlines += lines;
+
+    free(buf);
+    close(fd);
+
+    return 1;
+}
+
+/* Open the file (and decide if it exists) */
+int open_file(char *filename, int insert, int quiet)
+{
+    int fd;
+    struct stat fileinfo;
+
+    if (!strcmp(filename, "") || stat(filename, &fileinfo) == -1) {
+       if (insert) {
+           if (!quiet)
+               statusbar(_("\"%s\" not found"), filename);
+           return -1;
+       } else {
+           /* We have a new file */
+           statusbar(_("New File"));
+           new_file();
+       }
+    } else if ((fd = open(filename, O_RDONLY)) == -1) {
+       if (!quiet)
+           statusbar("%s: %s", strerror(errno), filename);
+       return -1;
+    } else {                   /* File is A-OK */
+       if (S_ISDIR(fileinfo.st_mode)) {
+           statusbar(_("File \"%s\" is a directory"), filename);
+           new_file();
+           return -1;
+       }
+       if (!quiet)
+           statusbar(_("Reading File"));
+       read_file(fd, filename);
+    }
+
+    return 1;
+}
+
+int do_insertfile(void)
+{
+    int i;
+
+    wrap_reset();
+    i = statusq(writefile_list, WRITEFILE_LIST_LEN, "",
+               _("File to insert [from ./] "));
+    if (i != -1) {
+
+#ifdef DEBUG
+       fprintf(stderr, "filename is %s", answer);
+#endif
+
+       i = open_file(answer, 1, 0);
+
+       dump_buffer(fileage);
+       set_modified();
+       UNSET(KEEP_CUTBUFFER);
+       display_main_list();
+       return i;
+    } else {
+       statusbar(_("Cancelled"));
+       UNSET(KEEP_CUTBUFFER);
+       display_main_list();
+       return 0;
+    }
+}
+
+void usage(void)
+{
+#ifdef HAVE_GETOPT_LONG
+    printf(_("Usage: nano [GNU long option] [option] +LINE <file>\n\n"));
+    printf(_("Option           Long option             Meaning\n"));
+    printf
+       (_
+        (" -V          --version               Print version information and exit\n"));
+    printf(_
+          (" -c                --const                 Constantly show cursor position\n"));
+    printf(_
+          (" -h                --help                  Show this message\n"));
+    printf(_
+          (" -i                --autoindent            Automatically indent new lines\n"));
+    printf(_
+          (" -l                --nofollow              Don't follow symbolic links, overwrite.\n"));
+#ifndef NANO_SMALL
+#ifdef NCURSES_MOUSE_VERSION
+    printf(_(" -m              --mouse                 Enable mouse\n"));
+#endif
+#endif
+    printf
+       (_
+        (" -r [#cols]  --fill=[#cols]          Set fill cols to (wrap lines at) #cols\n"));
+    printf(_
+          (" -p                --pico                  Make bottom 2 lines more Pico-like\n"));
+    printf(_
+          (" -s [prog]         --speller=[prog]        Enable alternate speller\n"));
+    printf(_
+          (" -t                --tempfile              Auto save on exit, don't prompt\n"));
+    printf(_
+          (" -v                --view                  View (read only) mode\n"));
+    printf(_
+          (" -w                --nowrap                Don't wrap long lines\n"));
+    printf(_
+          (" -x                --nohelp                Don't show help window\n"));
+    printf(_
+          (" -z                --suspend               Enable suspend\n"));
+    printf(_
+          (" +LINE                                     Start at line number LINE\n"));
+#else
+    printf(_("Usage: nano [option] +LINE <file>\n\n"));
+    printf(_("Option           Meaning\n"));
+    printf(_(" -V              Print version information and exit\n"));
+    printf(_(" -c              Constantly show cursor position\n"));
+    printf(_(" -h              Show this message\n"));
+    printf(_(" -i              Automatically indent new lines\n"));
+    printf(_
+          (" -l                Don't follow symbolic links, overwrite.\n"));
+#ifndef NANO_SMALL
+#ifdef NCURSES_MOUSE_VERSION
+    printf(_(" -m              Enable mouse\n"));
+#endif
+#endif
+    printf(_
+          (" -r [#cols]        Set fill cols to (wrap lines at) #cols\n"));
+    printf(_(" -s [prog]       Enable alternate speller\n"));
+    printf(_(" -p              Make bottom 2 lines more Pico-like\n"));
+    printf(_(" -t              Auto save on exit, don't prompt\n"));
+    printf(_(" -v              View (read only) mode\n"));
+    printf(_(" -w              Don't wrap long lines\n"));
+    printf(_(" -x              Don't show help window\n"));
+    printf(_(" -z              Enable suspend\n"));
+    printf(_(" +LINE           Start at line number LINE\n"));
+#endif
+    exit(0);
+}
+
+void version(void)
+{
+    printf(_(" nano version %s by Chris Allegretta (compiled %s, %s)\n"),
+          VERSION, __TIME__, __DATE__);
+    printf(_(" Email: nano@asty.org    Web: http://www.asty.org/nano\n"));
+}
+
+void page_down_center(void)
+{
+    if (editbot->next != NULL && editbot->next != filebot) {
+       edit_update(editbot->next);
+       center_cursor();
+    } else if (editbot != filebot) {
+       edit_update(editbot);
+       center_cursor();
+    } else {
+       while (current != filebot)
+           current = current->next;
+       edit_update(current);
+    }
+    update_cursor();
+
+}
+
+int page_down(void)
+{
+    wrap_reset();
+    current_x = 0;
+    placewewant = 0;
+
+    if (current == filebot)
+       return 0;
+
+    if (editbot != filebot) {
+       current_y = 0;
+       current = editbot;
+    } else
+       while (current != filebot) {
+           current = current->next;
+           current_y++;
+       }
+
+    edit_update_top(current);
+    update_cursor();
+    UNSET(KEEP_CUTBUFFER);
+    check_statblank();
+    return 1;
+}
+
+int do_home(void)
+{
+    current_x = 0;
+    placewewant = 0;
+    update_line(current, current_x);
+    return 1;
+}
+
+int do_end(void)
+{
+    current_x = strlen(current->data);
+    placewewant = xplustabs();
+    update_line(current, current_x);
+
+    return 1;
+}
+
+filestruct *make_new_node(filestruct * prevnode)
+{
+    filestruct *newnode;
+
+    newnode = nmalloc(sizeof(filestruct));
+    newnode->data = NULL;
+
+    newnode->prev = prevnode;
+    newnode->next = NULL;
+
+    if (prevnode != NULL)
+       newnode->lineno = prevnode->lineno + 1;
+
+    return newnode;
+}
+
+int do_mark()
+{
+#ifdef NANO_SMALL
+    nano_small_msg();
+#else
+    if (!ISSET(MARK_ISSET)) {
+       statusbar(_("Mark Set"));
+       SET(MARK_ISSET);
+       mark_beginbuf = current;
+       mark_beginx = current_x;
+    } else {
+       statusbar(_("Mark UNset"));
+       UNSET(MARK_ISSET);
+       mark_beginbuf = NULL;
+       mark_beginx = 0;
+
+       edit_refresh();
+    }
+#endif
+    return 1;
+}
+
+int no_help(void)
+{
+    if ISSET
+       (NO_HELP)
+           return 2;
+    else
+       return 0;
+}
+
+void nano_small_msg(void)
+{
+    statusbar("Sorry, this function not available with nano-tiny option");
+}
+
+/* What happens when we want to go past the bottom of the buffer */
+int do_down(void)
+{
+    wrap_reset();
+    if (current->next != NULL) {
+       update_line(current->prev, 0);
+
+       if (placewewant > 0)
+           current_x = actual_x(current->next, placewewant);
+
+       if (current_x > strlen(current->next->data))
+           current_x = strlen(current->next->data);
+    } else {
+       UNSET(KEEP_CUTBUFFER);
+       check_statblank();
+       return 0;
+    }
+   if (current_y < editwineob && current != editbot)
+       current_y++;
+    else
+       page_down_center();
+
+    update_cursor();
+    update_line(current->prev, 0);
+    update_line(current, current_x);
+    UNSET(KEEP_CUTBUFFER);
+    check_statblank();
+    return 1;
+}
+
+void page_up_center(void)
+{
+    if (edittop != fileage) {
+       edit_update(edittop);
+       center_cursor();
+    } else
+       current_y = 0;
+
+    update_cursor();
+
+}
+
+int do_up(void)
+{
+    wrap_reset();
+    if (current->prev != NULL) {
+       update_line(current, 0);
+
+       if (placewewant > 0)
+           current_x = actual_x(current->prev, placewewant);
+
+       if (current_x > strlen(current->prev->data))
+           current_x = strlen(current->prev->data);
+    }
+    if (current_y > 0)
+       current_y--;
+    else
+       page_up_center();
+
+    update_cursor();
+    update_line(current->next, 0);
+    update_line(current, current_x);
+    UNSET(KEEP_CUTBUFFER);
+    check_statblank();
+    return 1;
+}
+
+int do_right(void)
+{
+    if (current_x < strlen(current->data)) {
+       current_x++;
+    } else {
+       if (do_down())
+           current_x = 0;
+    }
+
+    placewewant = xplustabs();
+    update_cursor();
+    update_line(current, current_x);
+    UNSET(KEEP_CUTBUFFER);
+    check_statblank();
+    return 1;
+}
+
+int do_left(void)
+{
+    if (current_x > 0)
+       current_x--;
+    else if (current != fileage) {
+       placewewant = 0;
+       current_x = strlen(current->prev->data);
+       do_up();
+    }
+    placewewant = xplustabs();
+
+    update_cursor();
+    update_line(current, current_x);
+    UNSET(KEEP_CUTBUFFER);
+    check_statblank();
+    return 1;
+}
+
+/* The user typed a printable character; add it to the edit buffer */
+void do_char(char ch)
+{
+    /* More dangerousness fun =) */
+    current->data = nrealloc(current->data, strlen(current->data) + 2);
+    memmove(&current->data[current_x + 1],
+           &current->data[current_x],
+           strlen(current->data) - current_x + 1);
+    current->data[current_x] = ch;
+    do_right();
+
+    if (!ISSET(NO_WRAP))
+       check_wrap(current);
+    set_modified();
+    check_statblank();
+    UNSET(KEEP_CUTBUFFER);
+    totsize++;
+
+}
+
+/* Someone hits return *gasp!* */
+int do_enter(filestruct * inptr)
+{
+    filestruct *new;
+    char *tmp, *spc;
+    int extra = 0;
+
+    new = make_new_node(inptr);
+    tmp = &current->data[current_x];
+    current_x = 0;
+
+    /* Do auto-indenting, like the neolithic Turbo Pascal editor */
+    if (ISSET(AUTOINDENT)) {
+       spc = current->data;
+       if (spc) {
+           while ((*spc == ' ') || (*spc == '\t')) {
+               extra++;
+               spc++;
+               current_x++;
+           }
+           new->data = nmalloc(strlen(tmp) + extra + 1);
+           strncpy(new->data, current->data, extra);
+           strcpy(&new->data[extra], tmp);
+       }
+    } else {
+       new->data = nmalloc(strlen(tmp) + 1);
+       strcpy(new->data, tmp);
+    }
+    *tmp = 0;
+
+    new->next = inptr->next;
+    new->prev = inptr;
+    inptr->next = new;
+    if (new->next != NULL)
+       new->next->prev = new;
+    else {
+       filebot = new;
+       editbot = new;
+    }
+
+    totsize++;
+    renumber(current);
+    current = new;
+    align(&current->data);
+
+    if (current_y == editwinrows - 1) {
+       edit_update(current);
+
+       /* FIXME - figure out why the hell this is needed =) */
+       reset_cursor();
+    } else
+       current_y++;
+
+    totlines++;
+    set_modified();
+
+    update_cursor();
+    edit_refresh();
+    return 1;
+}
+
+int do_enter_void(void)
+{
+    return do_enter(current);
+}
+
+void do_next_word(void)
+{
+    filestruct *fileptr;
+    int i;
+
+    if (current == NULL)
+       return;
+
+    i = current_x;
+    for (fileptr = current; fileptr != NULL; fileptr = fileptr->next) {
+       if (fileptr == current) {
+           while (isalnum((int) fileptr->data[i])
+                  && fileptr->data[i] != 0)
+               i++;
+
+           if (fileptr->data[i] == 0) {
+               i = 0;
+               continue;
+           }
+       }
+       while (!isalnum((int) fileptr->data[i]) && fileptr->data[i] != 0)
+           i++;
+
+       if (fileptr->data[i] != 0)
+           break;
+
+       i = 0;
+    }
+    if (fileptr == NULL)
+       current = filebot;
+    else
+       current = fileptr;
+
+    current_x = i;
+    placewewant = xplustabs();
+    if (current->lineno >= editbot->lineno)
+       edit_update(current);
+
+}
+
+/* Actually wrap a line, called by check_wrap() */
+void do_wrap(filestruct * inptr)
+{
+    int i, j, chop;
+    char *tmp, *foo;
+
+    i = actual_x(inptr, fill);
+
+    while (inptr->data[i] != ' ' && inptr->data[i] != '\t' && i != 0)
+       i--;
+
+    if (i == 0)
+       return;
+
+    while ((inptr->data[i] == ' ' || inptr->data[i] == '\t') && i != 0)
+       i--;
+
+    if (i == 0)
+       return;
+
+    /* NB: This sucks */
+    if (inptr->data[i] != 0)
+       i++;
+    if (inptr->data[i] != 0)
+       i++;
+
+    chop = i;
+    while ((inptr->data[i] == ' ' || inptr->data[i] == '\t') &&
+       inptr->data[i] != 0)
+        i++;
+
+    if (inptr->data[i] == 0)
+       return;
+
+    if (ISSET(SAMELINEWRAP)) {
+       tmp = &current->data[i];
+       foo = nmalloc(strlen(tmp) + strlen(current->next->data) + 1);
+       strcpy(foo, tmp);
+       strcpy(&foo[strlen(tmp)], current->next->data);
+       free(current->next->data);
+       current->next->data = foo;
+       *tmp = 0;
+       current->data[chop] = 0;
+       align(&current->data);
+
+       if (current_x >= i) {
+           current_x = current_x - i;
+           current = current->next;
+       }
+       if (current->next == NULL) {
+           current->next = make_new_node(current);
+           current->next->data = nmalloc(1);
+           current->next->data[0] = 0;
+           filebot = current->next;
+       }
+       align(&current->next->data);
+
+       edit_refresh();
+    } else {
+
+       j = current_x;
+       current_x = i;
+       do_enter(current);
+
+       current->prev->data[chop] = 0;
+       align(&current->prev->data);
+
+       if (j > i) {
+           current_x = j - i;
+           UNSET(SAMELINEWRAP);
+       } else {
+           current_x = j;
+           current = current->prev;
+           SET(SAMELINEWRAP);
+       }
+    }
+
+}
+
+/* Check to see if we've just caused the line to wrap to a new line */
+void check_wrap(filestruct * inptr)
+{
+
+#ifdef DEBUG
+    fprintf(stderr, _("check_wrap called with inptr->data=\"%s\"\n"),
+           inptr->data);
+#endif
+
+    if ((int) strlenpt(inptr->data) <= fill)
+       return;
+    else
+       do_wrap(inptr);
+}
+
+/* Stuff we do when we abort from programs and want to clean up the
+ * screen.  This doesnt do much right now.
+ */
+void do_early_abort(void)
+{
+    blank_statusbar_refresh();
+}
+
+/* Set up the system variables for a search or replace.  Returns -1 on
+   abort, 0 on success, and 1 on rerun calling program 
+   Return -2 to run opposite program (searchg -> replace, replace -> search)
+
+   replacing = 1 if we call from do_replace, 0 if called from do_search func.
+*/
+int search_init(int replacing)
+{
+    int i;
+    char buf[135];
+
+    if (last_search[0]) {
+       sprintf(buf, " [%s]", last_search);
+    } else {
+       buf[0] = '\0';
+    }
+
+    i = statusq(replacing ? replace_list : whereis_list,
+               replacing ? REPLACE_LIST_LEN : WHEREIS_LIST_LEN, "",
+               ISSET(CASE_SENSITIVE) ? _("Case Sensitive Search%s") :
+               _("Search%s"), buf);
+
+    /* Cancel any search, or just return with no previous search */
+    if ((i == -1) || (i < 0 && !last_search[0])) {
+       statusbar(_("Search Cancelled"));
+       reset_cursor();
+       return -1;
+    } else if (i == -2) {      /* Same string */
+       strncpy(answer, last_search, 132);
+    } else if (i == 0) {       /* They entered something new */
+       strncpy(last_search, answer, 132);
+
+       /* Blow away last_replace because they entered a new search
+          string....uh, right? =) */
+       last_replace[0] = '\0';
+    } else if (i == NANO_CASE_KEY) {   /* They want it case sensitive */
+       if (ISSET(CASE_SENSITIVE))
+           UNSET(CASE_SENSITIVE);
+       else
+           SET(CASE_SENSITIVE);
+
+       return 1;
+    } else if (i == NANO_OTHERSEARCH_KEY) {
+       return -2;              /* Call the opposite search function */
+    } else {                   /* First line key, etc. */
+       do_early_abort();
+       return -3;
+    }
+
+    return 0;
+}
+
+filestruct *findnextstr(int quiet, filestruct * begin, char *needle)
+{
+    filestruct *fileptr;
+    char *searchstr, *found = NULL, *tmp;
+
+    fileptr = current;
+
+    searchstr = &current->data[current_x + 1];
+    /* Look for searchstr until EOF */
+    while (fileptr != NULL &&
+          (found = strstrwrapper(searchstr, needle)) == NULL) {
+       fileptr = fileptr->next;
+
+       if (fileptr == begin)
+           return NULL;
+
+       if (fileptr != NULL)
+           searchstr = fileptr->data;
+    }
+
+    /* If we're not at EOF, we found an instance */
+    if (fileptr != NULL) {
+       current = fileptr;
+       current_x = 0;
+       for (tmp = fileptr->data; tmp != found; tmp++)
+           current_x++;
+
+       edit_update(current);
+       reset_cursor();
+    } else {                   /* We're at EOF, go back to the top, once */
+
+       fileptr = fileage;
+
+       while (fileptr != current && fileptr != begin &&
+              (found = strstrwrapper(fileptr->data, needle)) == NULL)
+           fileptr = fileptr->next;
+
+       if (fileptr == begin) {
+           if (!quiet)
+               statusbar(_("\"%s\" not found"), needle);
+
+           return NULL;
+       }
+       if (fileptr != current) {       /* We found something */
+           current = fileptr;
+           current_x = 0;
+           for (tmp = fileptr->data; tmp != found; tmp++)
+               current_x++;
+
+           edit_update(current);
+           reset_cursor();
+
+           if (!quiet)
+               statusbar(_("Search Wrapped"));
+       } else {                /* Nada */
+
+           if (!quiet)
+               statusbar(_("\"%s\" not found"), needle);
+           return NULL;
+       }
+    }
+
+    return fileptr;
+}
+
+void search_abort(void)
+{
+    UNSET(KEEP_CUTBUFFER);
+    display_main_list();
+    wrefresh(bottomwin);
+}
+
+/* Search for a string */
+int do_search(void)
+{
+    int i;
+    filestruct *fileptr = current;
+
+    wrap_reset();
+    if ((i = search_init(0)) == -1) {
+       current = fileptr;
+       search_abort();
+       return 0;
+    } else if (i == -3) {
+       search_abort();
+       return 0;
+    } else if (i == -2) {
+       search_abort();
+       do_replace();
+       return 0;
+    } else if (i == 1) {
+       do_search();
+       search_abort();
+       return 1;
+    }
+    findnextstr(0, current, answer);
+    search_abort();
+    return 1;
+}
+
+void print_replaced(int num)
+{
+    if (num > 1)
+       statusbar(_("Replaced %d occurences"), num);
+    else if (num == 1)
+       statusbar(_("Replaced 1 occurence"));
+}
+
+void replace_abort(void)
+{
+    UNSET(KEEP_CUTBUFFER);
+    display_main_list();
+    reset_cursor();
+}
+
+/* Search for a string */
+int do_replace(void)
+{
+    int i, replaceall = 0, numreplaced = 0, beginx;
+    filestruct *fileptr, *begin;
+    char *tmp, *copy, prevanswer[132] = "";
+
+    if ((i = search_init(1)) == -1) {
+       statusbar(_("Replace Cancelled"));
+       replace_abort();
+       return 0;
+    } else if (i == 1) {
+       do_replace();
+       return 1;
+    } else if (i == -2) {
+       replace_abort();
+       do_search();
+       return 0;
+    } else if (i == -3) {
+       replace_abort();
+       return 0;
+    }
+    strncpy(prevanswer, answer, 132);
+
+    if (strcmp(last_replace, "")) {    /* There's a previous replace str */
+       i = statusq(replace_list, REPLACE_LIST_LEN, "",
+                   _("Replace with [%s]"), last_replace);
+
+       if (i == -1) {          /* Aborted enter */
+           strncpy(answer, last_replace, 132);
+           statusbar(_("Replace Cancelled"));
+           replace_abort();
+           return 0;
+       } else if (i == 0)      /* They actually entered something */
+           strncpy(last_replace, answer, 132);
+       else if (i == NANO_CASE_KEY) {  /* They asked for case sensitivity */
+           if (ISSET(CASE_SENSITIVE))
+               UNSET(CASE_SENSITIVE);
+           else
+               SET(CASE_SENSITIVE);
+
+           do_replace();
+           return 0;
+       } else {                /* First page, last page, for example could get here */
+
+           do_early_abort();
+           replace_abort();
+           return 0;
+       }
+    } else {                   /* last_search is empty */
+
+       i = statusq(replace_list, REPLACE_LIST_LEN, "", _("Replace with"));
+       if (i == -1) {
+           statusbar(_("Replace Cancelled"));
+           reset_cursor();
+           replace_abort();
+           return 0;
+       } else if (i == 0)      /* They entered something new */
+           strncpy(last_replace, answer, 132);
+       else if (i == NANO_CASE_KEY) {  /* They want it case sensitive */
+           if (ISSET(CASE_SENSITIVE))
+               UNSET(CASE_SENSITIVE);
+           else
+               SET(CASE_SENSITIVE);
+
+           do_replace();
+           return 1;
+       } else {                /* First line key, etc. */
+
+           do_early_abort();
+           replace_abort();
+           return 0;
+       }
+    }
+
+    /* save where we are */
+    begin = current;
+    beginx = current_x;
+
+    while (1) {
+
+       if (replaceall)
+           fileptr = findnextstr(1, begin, prevanswer);
+       else
+           fileptr = findnextstr(0, begin, prevanswer);
+
+       /* No more matches.  Done! */
+       if (!fileptr)
+           break;
+
+       /* If we're here, we've found the search string */
+       if (!replaceall)
+           i = do_yesno(1, 1, _("Replace this instance?"));
+
+       if (i > 0 || replaceall) {      /* Yes, replace it!!!! */
+           if (i == 2)
+               replaceall = 1;
+
+           /* Create buffer */
+           copy = nmalloc(strlen(current->data) - strlen(last_search) +
+                          strlen(last_replace) + 1);
+
+           /* Head of Original Line */
+           strncpy(copy, current->data, current_x);
+           copy[current_x] = 0;
+
+           /* Replacement Text */
+           strcat(copy, last_replace);
+
+           /* The tail of the original line */
+           /*  This may expose other bugs, because it no longer
+              goes through each character on the string
+              and tests for string goodness.  But because
+              we can assume the invariant that current->data
+              is less than current_x + strlen(last_search) long,   
+              this should be safe.  Or it will expose bugs ;-) */
+           tmp = current->data + current_x + strlen(last_search);
+           strcat(copy, tmp);
+
+           /* Cleanup */
+           free(current->data);
+           current->data = copy;
+
+           /* Stop bug where we replace a substring of the replacement text */
+           current_x += strlen(last_replace);
+
+           edit_refresh();
+           set_modified();
+           numreplaced++;
+       } else if (i == -1)     /* Abort, else do nothing and continue loop */
+           break;
+    }
+
+    current = begin;
+    current_x = beginx;
+    renumber_all();
+    edit_update(current);
+    print_replaced(numreplaced);
+    replace_abort();
+    return 1;
+}
+
+
+int page_up(void)
+{
+    wrap_reset();
+    current_x = 0;
+    placewewant = 0;
+
+    if (current == fileage)
+       return 0;
+
+    current_y = 0;
+    edit_update_bot(edittop);
+    update_cursor();
+
+    UNSET(KEEP_CUTBUFFER);
+    check_statblank();
+    return 1;
+}
+
+void delete_buffer(filestruct * inptr)
+{
+    if (inptr != NULL) {
+       delete_buffer(inptr->next);
+       free(inptr->data);
+       free(inptr);
+    }
+}
+
+int do_backspace(void)
+{
+    filestruct *previous, *tmp;
+
+    if (current_x != 0) {
+       /* Let's get dangerous */
+       memmove(&current->data[current_x - 1], &current->data[current_x],
+               strlen(current->data) - current_x + 1);
+#ifdef DEBUG
+       fprintf(stderr, _("current->data now = \"%s\"\n"), current->data);
+#endif
+       align(&current->data);
+       do_left();
+    } else {
+       if (current == fileage)
+           return 0;           /* Can't delete past top of file */
+
+       previous = current->prev;
+       current_x = strlen(previous->data);
+       previous->data = nrealloc(previous->data,
+                                 strlen(previous->data) +
+                                 strlen(current->data) + 1);
+       strcat(previous->data, current->data);
+
+       tmp = current;
+       unlink_node(current);
+       delete_node(current);
+       if (current == edittop) {
+           if (previous->next)
+               current = previous->next;
+           else
+               current = previous;
+           page_up();
+       } else {
+           if (previous->next)
+               current = previous->next;
+           else
+               current = previous;
+           update_line(current, current_x);
+       }
+
+       /* Ooops, sanity check */
+       if (tmp == filebot)
+       {
+           filebot = current;
+           editbot = current;
+       }
+
+       current = previous;
+       renumber(current);
+       previous_line();
+       totlines--;
+
+#ifdef DEBUG
+       fprintf(stderr, _("After, data = \"%s\"\n"), current->data);
+#endif
+
+    }
+
+    totsize--;
+    set_modified();
+    UNSET(KEEP_CUTBUFFER);
+    edit_refresh();
+    return 1;
+}
+
+int do_delete(void)
+{
+    filestruct *foo;
+
+    if (current_x != strlen(current->data)) {
+       /* Let's get dangerous */
+       memmove(&current->data[current_x], &current->data[current_x + 1],
+               strlen(current->data) - current_x);
+
+       align(&current->data);
+
+    } else if (current->next != NULL) {
+       current->data = nrealloc(current->data,
+                                strlen(current->data) +
+                                strlen(current->next->data) + 1);
+       strcat(current->data, current->next->data);
+
+       foo = current->next;
+       if (filebot == foo)
+       {
+           filebot = current;
+           editbot = current;
+       }
+
+       unlink_node(foo);
+       delete_node(foo);
+       update_line(current, current_x);
+
+       renumber(current);
+       totlines--;
+
+    } else
+       return 0;
+
+    totsize--;
+    set_modified();
+    UNSET(KEEP_CUTBUFFER);
+    edit_refresh();
+    return 1;
+}
+
+void goto_abort(void)
+{
+    UNSET(KEEP_CUTBUFFER);
+    display_main_list();
+}
+
+int do_gotoline(long defline)
+{
+    long line, i = 1, j = 0;
+    filestruct *fileptr;
+
+    if (defline > 0)           /* We already know what line we want to go to */
+       line = defline;
+    else {                     /* Ask for it */
+
+       j = statusq(goto_list, GOTO_LIST_LEN, "", _("Enter line number"));
+       if (j == -1) {
+           statusbar(_("Aborted"));
+           goto_abort();
+           return 0;
+       } else if (j != 0) {
+           do_early_abort();
+           goto_abort();
+           return 0;
+       }
+       if (!strcmp(answer, "$")) {
+           current = filebot;
+           current_x = 0;
+           edit_update(current);
+           goto_abort();
+           return 1;
+       }
+       line = atoi(answer);
+    }
+
+    /* Bounds check */
+    if (line <= 0) {
+       statusbar(_("Come on, be reasonable"));
+       goto_abort();
+       return 0;
+    }
+    if (line > totlines) {
+       statusbar(_("Only %d lines available, skipping to last line"),
+                 filebot->lineno);
+       current = filebot;
+       current_x = 0;
+       edit_update(current);
+    } else {
+       for (fileptr = fileage; fileptr != NULL && i < line; i++)
+           fileptr = fileptr->next;
+
+       current = fileptr;
+       current_x = 0;
+       edit_update(current);
+    }
+
+    goto_abort();
+    return 1;
+}
+
+int do_gotoline_void(void)
+{
+    return do_gotoline(0);
+}
+
+void wrap_reset(void)
+{
+    UNSET(SAMELINEWRAP);
+}
+
+/*
+ * Write a file out.  If tmp is nonzero, we set the umask to 0600,
+ * we don't set the global variable filename to it's name, and don't
+ * print out how many lines we wrote on the statusbar.
+ * 
+ * Note that tmp is only set to 1 for storing temporary files internal
+ * to the editor, and is completely different from temp_opt.
+ */
+int write_file(char *name, int tmp)
+{
+    long size, lineswritten = 0;
+    char buf[PATH_MAX + 1];
+    filestruct *fileptr;
+    int fd, mask = 0;
+    struct stat st;
+
+    if (!strcmp(name, "")) {
+       statusbar(_("Cancelled"));
+       return -1;
+    }
+    titlebar();
+    fileptr = fileage;
+
+
+    /* Open the file and truncate it.  Trust the symlink. */
+    if (ISSET(FOLLOW_SYMLINKS) && !tmp) {
+       if ((fd = open(name, O_WRONLY | O_CREAT | O_TRUNC,
+                      S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH |
+                      S_IWOTH)) == -1) {
+           statusbar(_("Could not open file for writing: %s"),
+                     strerror(errno));
+           return -1;
+       }
+    }
+    /* Don't follow symlink.  Create new file. */
+    else {
+       if (strlen(name) > (PATH_MAX - 7)) {
+           statusbar(_("Could not open file: Path length exceeded."));
+           return -1;
+       }
+
+       memset(buf, 0x00, PATH_MAX + 1);
+       strcat(buf, name);
+       strcat(buf, ".XXXXXX");
+       if ((fd = mkstemp(buf)) == -1) {
+           statusbar(_("Could not open file for writing: %s"),
+                     strerror(errno));
+           return -1;
+       }
+    }
+
+
+
+    dump_buffer(fileage);
+    while (fileptr != NULL && fileptr->next != NULL) {
+       size = write(fd, fileptr->data, strlen(fileptr->data));
+       if (size == -1) {
+           statusbar(_("Could not open file for writing: %s"),
+                     strerror(errno));
+           return -1;
+       } else {
+#ifdef DEBUG
+           fprintf(stderr, _("Wrote >%s\n"), fileptr->data);
+#endif
+       }
+       write(fd, "\n", 1);
+
+       fileptr = fileptr->next;
+       lineswritten++;
+    }
+
+    if (fileptr != NULL) {
+       size = write(fd, fileptr->data, strlen(fileptr->data));
+       if (size == -1) {
+           statusbar(_("Could not open file for writing: %s"),
+                     strerror(errno));
+           return -1;
+       } else if (size > 0) {
+           size = write(fd, "\n", 1);
+           if (size == -1) {
+               statusbar(_("Could not open file for writing: %s"),
+                         strerror(errno));
+               return -1;
+           }
+       }
+    }
+
+
+    if (close(fd) == -1) {
+       statusbar(_("Could not close %s: %s"), name, strerror(errno));
+       unlink(buf);
+       return -1;
+    }
+
+    if (!ISSET(FOLLOW_SYMLINKS) || tmp) {
+       if (stat(name, &st) == -1) {
+           /* Use default umask as file permisions if file is a new file. */
+           mask = umask(0);
+           umask(mask);
+
+           if (tmp)            /* We don't want anyone reading our temporary file! */
+               mask = 0600;
+           else
+               mask = 0666 & ~mask;
+
+       } else {
+           /* Use permissions from file we are overwriting. */
+           mask = st.st_mode;
+           if (unlink(name) == -1) {
+               if (errno != ENOENT) {
+                   statusbar(_("Could not open %s for writing: %s"),
+                             name, strerror(errno));
+                   unlink(buf);
+                   return -1;
+               }
+           }
+       }
+
+       if (link(buf, name) != -1)
+           unlink(buf);
+       else if (errno != EPERM) {
+           statusbar(_("Could not open %s for writing: %s"),
+                     name, strerror(errno));
+           unlink(buf);
+           return -1;
+       } else if (rename(buf, name) == -1) {   /* Try a rename?? */
+           statusbar(_("Could not open %s for writing: %s"),
+                     name, strerror(errno));
+           unlink(buf);
+           return -1;
+       }
+       if (chmod(name, mask) == -1) {
+           statusbar(_("Could not set permissions %o on %s: %s"),
+                     mask, name, strerror(errno));
+       }
+
+    }
+    if (!tmp) {
+       strncpy(filename, name, 132);
+       statusbar(_("Wrote %d lines"), lineswritten);
+    }
+    UNSET(MODIFIED);
+    titlebar();
+    return 1;
+}
+
+int do_writeout(int exiting)
+{
+    int i = 0;
+
+    strncpy(answer, filename, 132);
+
+    if ((exiting) && (temp_opt) && (filename)) {
+       i = write_file(answer, 0);
+       display_main_list();
+       return i;
+    }
+
+    while (1) {
+       i = statusq(writefile_list, WRITEFILE_LIST_LEN, answer,
+                   _("File Name to write"));
+
+        if (i != -1) {
+
+#ifdef DEBUG
+           fprintf(stderr, _("filename is %s"), answer);
+#endif
+           if (strncmp(answer, filename, 132)) {
+               struct stat st;
+               if (!stat(answer, &st)) {
+                   i = do_yesno(0, 0, _("File exists, OVERWRITE ?"));
+
+                   if (!i || (i == -1))
+                       continue;
+                }
+            }
+           i = write_file(answer, 0);
+
+           display_main_list();
+           return i;
+        } else {
+           statusbar(_("Cancelled"));
+           display_main_list();
+           return 0;
+        }
+    }
+}
+
+int do_writeout_void(void)
+{
+    return do_writeout(0);
+}
+
+/* Stuff we want to do when we exit the spell program one of its many ways */
+void exit_spell(char *tmpfilename, char *foo)
+{
+    free(foo);
+
+    if (remove(tmpfilename) == -1)
+       statusbar(_("Error deleting tempfile, ack!"));
+}
+
+/*
+ * This is Chris' very ugly spell function.  Someone please make this
+ * better =-)
+ */
+int do_oldspell(void)
+{
+    char *temp, *foo;
+    int i;
+
+    if ((temp = tempnam(0, "nano.")) == NULL) {
+       statusbar(_("Could not create a temporary filename: %s"),
+                 strerror(errno));
+       return 0;
+    }
+    if (write_file(temp, 1) == -1)
+       return 0;
+
+    if (alt_speller) {
+       foo = nmalloc(strlen(temp) + strlen(alt_speller) + 2);
+       sprintf(foo, "%s %s", alt_speller, temp);
+    } else {
+
+       /* For now, we only try ispell because we're not capable of
+          handling the normal spell program (yet...) */
+       foo = nmalloc(strlen(temp) + 8);
+       sprintf(foo, "ispell %s", temp);
+    }
+
+    endwin();
+    resetty();
+    if (alt_speller) {
+       if ((i = system(foo)) == -1 || i == 32512) {
+           statusbar(_("Could not invoke spell program \"%s\""),
+                     alt_speller);
+           exit_spell(temp, foo);
+           return 0;
+       }
+    } else if ((i = system(foo)) == -1 || i == 32512) {        /* Why 32512? I dont know! */
+       statusbar(_("Could not invoke \"ispell\""));
+       exit_spell(temp, foo);
+       return 0;
+    }
+    initscr();
+
+    free_filestruct(fileage);
+    global_init();
+    open_file(temp, 0, 1);
+    edit_update(fileage);
+    set_modified();
+    exit_spell(temp, foo);
+    statusbar(_("Finished checking spelling"));
+    return 1;
+}
+
+int do_spell(void)
+{
+    char *temp, *foo;
+    int i;
+
+    if ((temp = tempnam(0, "nano.")) == NULL) {
+       statusbar(_("Could not create a temporary filename: %s"),
+                 strerror(errno));
+       return 0;
+    }
+    if (write_file(temp, 1) == -1)
+       return 0;
+
+    if (alt_speller) {
+       foo = nmalloc(strlen(temp) + strlen(alt_speller) + 2);
+       sprintf(foo, "%s %s", alt_speller, temp);
+    } else {
+
+       /* For now, we only try ispell because we're not capable of
+          handling the normal spell program (yet...) */
+       foo = nmalloc(strlen(temp) + 8);
+       sprintf(foo, "ispell %s", temp);
+    }
+
+    endwin();
+    resetty();
+    if (alt_speller) {
+       if ((i = system(foo)) == -1 || i == 32512) {
+           statusbar(_("Could not invoke spell program \"%s\""),
+                     alt_speller);
+           exit_spell(temp, foo);
+           return 0;
+       }
+    } else if ((i = system(foo)) == -1 || i == 32512) {        /* Why 32512? I dont know! */
+       statusbar(_("Could not invoke \"ispell\""));
+       exit_spell(temp, foo);
+       return 0;
+    }
+    initscr();
+
+    free_filestruct(fileage);
+    global_init();
+    open_file(temp, 0, 1);
+    edit_update(fileage);
+    set_modified();
+    exit_spell(temp, foo);
+    statusbar(_("Finished checking spelling"));
+    return 1;
+}
+
+int do_exit(void)
+{
+    int i;
+
+    if (!ISSET(MODIFIED))
+       finish(0);
+
+    if (temp_opt) {
+       i = 1;
+    } else {
+       i =
+           do_yesno(0, 0,
+                    _
+                    ("Save modified buffer (ANSWERING \"No\" WILL DESTROY CHANGES) ? "));
+    }
+
+#ifdef DEBUG
+    dump_buffer(fileage);
+#endif
+
+    if (i == 1) {
+       if (do_writeout(1) > 0)
+           finish(0);
+    } else if (i == 0)
+       finish(0);
+    else
+       statusbar(_("Cancelled"));
+
+    display_main_list();
+    return 1;
+}
+
+#ifndef NANO_SMALL
+#ifdef NCURSES_MOUSE_VERSION
+void do_mouse(void)
+{
+    MEVENT mevent;
+
+    if (getmouse(&mevent) == ERR)
+       return;
+
+    /* If mouse not in edit window, return (add help selection later). */
+    if (!wenclose(edit, mevent.y, mevent.x))
+       return;
+
+    /* Subtract out size of topwin.  Perhaps we need a constant somewhere? */
+    mevent.y -= 2;
+
+    /* Selecting where the cursor is sets the mark.
+     * Selecting beyond the line length with the cursor at the end of the
+     * line sets the mark as well. 
+     */
+    if ((mevent.y == current_y) &&
+       ((mevent.x == current_x) || (current_x == strlen(current->data)
+                                    && (mevent.x >
+                                        strlen(current->data))))) {
+       if (ISSET(VIEW_MODE)) {
+           print_view_warning();
+           return;
+       }
+       do_mark();
+    } else if (mevent.y > current_y) {
+       while (mevent.y > current_y) {
+           if (current->next != NULL)
+               current = current->next;
+           else
+               break;
+           current_y++;
+       }
+    } else if (mevent.y < current_y) {
+       while (mevent.y < current_y) {
+           if (current->prev != NULL)
+               current = current->prev;
+           else
+               break;
+           current_y--;
+       }
+    }
+    current_x = mevent.x;
+    if (current_x > strlen(current->data))
+       current_x = strlen(current->data);
+
+    update_cursor();
+    edit_refresh();
+
+}
+#endif
+#endif
+
+/* Handler for SIGHUP */
+RETSIGTYPE handle_hup(int signal)
+{
+    write_file("nano.save", 0);
+    finish(1);
+}
+
+
+void handle_sigwinch(int s)
+{
+#ifndef NANO_SMALL
+    char *tty = NULL;
+    int fd = 0;
+    int result = 0;
+    int i = 0;
+    struct winsize win;
+
+    tty = ttyname(0);
+    if (!tty)
+       return;
+    fd = open(tty, O_RDWR);
+    if (fd == -1)
+       return;
+    result = ioctl(fd, TIOCGWINSZ, &win);
+    if (result == -1)
+       return;
+
+
+    COLS = win.ws_col;
+    LINES = win.ws_row;
+
+    center_x = COLS / 2;
+    center_y = LINES / 2;
+    editwinrows = LINES - 5 + no_help();
+    editwineob = editwinrows - 1;
+    fill = COLS - 8;
+
+    free(hblank);
+    hblank = nmalloc(COLS + 1);
+
+    for (i = 0; i <= COLS - 1; i++)
+       hblank[i] = ' ';
+    hblank[i] = 0;
+
+#ifdef HAVE_NCURSES_H
+    resizeterm(LINES, COLS);
+#ifdef HAVE_WRESIZE
+    if (wresize(topwin, 2, COLS) == ERR)
+       die(_("Cannot resize top win"));
+    if (mvwin(topwin, 0, 0) == ERR)
+       die(_("Cannot move top win"));
+    if (wresize(edit, editwinrows, COLS) == ERR)
+       die(_("Cannot resize edit win"));
+    if (mvwin(edit, 2, 0) == ERR)
+       die(_("Cannot move edit win"));
+    if (wresize(bottomwin, 3 - no_help(), COLS) == ERR)
+       die(_("Cannot resize bottom win"));
+    if (mvwin(bottomwin, LINES - 3 + no_help(), 0) == ERR)
+       die(_("Cannot move bottom win"));
+#endif                         /* HAVE_WRESIZE */
+#endif                         /* HAVE_NCURSES_H */
+
+    editbot = edittop;
+
+    for (i = 0; (i <= editwineob) && (editbot->next != NULL)
+        && (editbot->next != filebot); i++)
+       editbot = editbot->next;
+
+    if (current_y > editwineob) {
+       edit_update(editbot);
+    }
+    erase();
+    refresh();
+    total_refresh();
+#endif
+}
+
+int do_tab(void)
+{
+    do_char('\t');
+    return 1;
+}
+
+#ifndef NANO_SMALL
+int empty_line(const char *data)
+{
+    while (*data) {
+       if (!isspace(*data))
+           return 0;
+
+       data++;
+    }
+
+    return 1;
+}
+
+int no_spaces(const char *data)
+{
+    while (*data) {
+       if (isspace(*data))
+           return 0;
+
+       data++;
+    }
+
+    return 1;
+}
+
+void justify_format(char *data)
+{
+    int i = 0;
+    int len = strlen(data);
+
+    /* Skip first character regardless and leading whitespace. */
+    for (i = 1; i < len; i++) {
+       if (!isspace(data[i]))
+           break;
+    }
+
+    i++;                       /* (i) is now at least 2. */
+
+    /* No double spaces allowed unless following a period.  Tabs -> space.  No double tabs. */
+    for (; i < len; i++) {
+       if (isspace(data[i]) && isspace(data[i - 1])
+           && (data[i - 2] != '.')) {
+           memmove(data + i, data + i + 1, len - i);
+           len--;
+           i--;
+       }
+    }
+}
+#endif
+
+int do_justify(void)
+{
+#ifndef NANO_SMALL
+    int slen = 0;              /* length of combined lines on one line. */
+    int initial_y;
+    filestruct *initial = NULL;
+
+    if (empty_line(current->data)) {
+       /* Justify starting at first non-empty line. */
+       do {
+           if (!current->next)
+               return 1;
+
+           current = current->next;
+           current_y++;
+       }
+       while (empty_line(current->data));
+    } else {
+       /* Search back for the beginning of the paragraph, where
+        *   Paragraph is  1)  A line with leading whitespace
+        *             or  2)  A line following an empty line.
+        */
+       while (current->prev != NULL) {
+           if (isspace(current->data[0]) || !current->data[0])
+               break;
+
+           current = current->prev;
+           current_y--;
+       }
+
+       /* First line with leading whitespace may be empty. */
+       if (empty_line(current->data)) {
+           if (current->next) {
+               current = current->next;
+               current_y++;
+           } else
+               return 1;
+       }
+    }
+    initial = current;
+    initial_y = current_y;
+
+    set_modified();
+    /* Put the whole paragraph into one big line. */
+    while (current->next && !isspace(current->next->data[0])
+          && current->next->data[0]) {
+       filestruct *tmpnode = current->next;
+       int len = strlen(current->data);
+       int len2 = strlen(current->next->data);
+
+       /* length of both strings plus space between strings and ending \0. */
+       current->data = nrealloc(current->data, len + len2 + 2);
+       current->data[len++] = ' ';
+       current->data[len] = '\0';
+
+       strncat(current->data, current->next->data, len2);
+
+       unlink_node(tmpnode);
+       delete_node(tmpnode);
+
+    }
+
+    justify_format(current->data);
+
+    slen = strlen(current->data);
+    while ((strlenpt(current->data) > (fill + 1))
+          && !no_spaces(current->data)) {
+       int i = 0;
+       int len2 = 0;
+       filestruct *tmpline = nmalloc(sizeof(filestruct));
+
+       /* Start at fill + 2, unless line isn't that long (but it appears at least
+        * fill + 2 long with tabs.
+        */
+       if (slen > (fill + 2))
+           i = fill + 2;
+       else
+           i = slen;
+       for (; i > 0; i--) {
+           if (isspace(current->data[i]) &&
+               ((strlenpt(current->data) - strlen(current->data + i)) <=
+                fill)) break;
+       }
+       if (!i)
+           break;
+
+       current->data[i] = '\0';
+
+       len2 = strlen(current->data + i + 1);
+       tmpline->data = nmalloc(len2 + 1);
+
+       /* Skip the white space in current. */
+       memcpy(tmpline->data, current->data + i + 1, len2);
+       tmpline->data[len2] = '\0';
+
+       current->data = nrealloc(current->data, i + 1);
+
+       tmpline->prev = current;
+       tmpline->next = current->next;
+       if (current->next != NULL)
+           current->next->prev = tmpline;
+
+       current->next = tmpline;
+       current = tmpline;
+       slen -= i + 1;
+       current_y++;
+    }
+
+    renumber(initial);
+
+    if (current->next)
+       current = current->next;
+    current_x = 0;
+    placewewant = 0;
+
+    if ((current_y < 0) || (current_y >= editwineob) || (initial_y <= 0)) {
+       edit_update(current);
+       center_cursor();
+    } else {
+       int i = 0;
+
+       editbot = edittop;
+       for (i = 0; (i <= editwineob) && (editbot->next != NULL)
+            && (editbot->next != filebot); i++)
+           editbot = editbot->next;
+       edit_refresh();
+    }
+
+    statusbar("Justify Complete");
+    return 1;
+#else
+    nano_small_msg();
+    return 1;
+#endif
+}
+
+
+void help_init(void)
+{
+    int i, sofar = 0;
+    long allocsize = 1;                /* How much space we're gonna need for the help text */
+    char buf[BUFSIZ];
+
+    /* Compute the space needed for the shortcut lists - we add 15 to
+       have room for the shortcut abbrev and its possible alternate keys */
+    for (i = 0; i < MAIN_LIST_LEN; i++)
+       if (main_list[i].help != NULL)
+           allocsize += strlen(main_list[i].help) + 15;
+
+    allocsize += strlen(help_text_init);
+
+    if (help_text != NULL)
+       free(help_text);
+
+    /* Allocate space for the help text */
+    help_text = nmalloc(allocsize);
+
+    /* Now add the text we want */
+    strcpy(help_text, help_text_init);
+
+    /* Now add our shortcut info */
+    for (i = 0; i < MAIN_LIST_LEN; i++) {
+       sofar = sprintf(buf, "^%c       ", main_list[i].val + 64);
+
+       if (main_list[i].misc1 > KEY_F0 && main_list[i].misc1 <= KEY_F(64))
+           sofar += sprintf(&buf[sofar], "(F%d)        ",
+                            main_list[i].misc1 - KEY_F0);
+       else
+           sofar += sprintf(&buf[sofar], "     ");
+
+       if (main_list[i].altval > 0)
+           sofar += sprintf(&buf[sofar], "(@%c)        ",
+                            main_list[i].altval - 32);
+       else
+           sofar += sprintf(&buf[sofar], "     ");
+
+       if (main_list[i].help != NULL)
+           sprintf(&buf[sofar], "%s\n", main_list[i].help);
+
+       strcat(help_text, buf);
+    }
+
+}
+
+int main(int argc, char *argv[])
+{
+    int optchr;
+    int kbinput;               /* Input from keyboard */
+    long startline = 0;                /* Line to try and start at */
+    struct sigaction act;      /* For our lovely signals */
+    int keyhandled = 0;                /* Have we handled the keystroke yet? */
+    int tmpkey = 0, i;
+    char *argv0;
+    struct termios term;
+
+#ifdef HAVE_GETOPT_LONG
+    int option_index = 0;
+    struct option long_options[] = {
+       {"version", 0, 0, 'V'},
+       {"const", 0, 0, 'c'},
+       {"suspend", 0, 0, 'z'},
+       {"nowrap", 0, 0, 'w'},
+       {"nohelp", 0, 0, 'x'},
+       {"help", 0, 0, 'h'},
+       {"autoindent", 0, 0, 'i'},
+       {"tempfile", 0, 0, 't'},
+       {"speller", 1, 0, 's'},
+       {"fill", 1, 0, 'r'},
+       {"mouse", 0, 0, 'm'},
+       {"pico", 0, 0, 'p'},
+       {"nofollow", 0, 0, 'l'},
+       {0, 0, 0, 0}
+    };
+#endif
+
+    /* Flag inits... */
+    SET(FOLLOW_SYMLINKS);
+
+#ifndef NANO_SMALL
+    setlocale(LC_ALL, "");
+    bindtextdomain(PACKAGE, LOCALEDIR);
+    textdomain(PACKAGE);
+#endif
+
+#ifdef HAVE_GETOPT_LONG
+    while ((optchr = getopt_long(argc, argv, "?Vchilmpr:s:tvwxz",
+                                long_options, &option_index)) != EOF) {
+#else
+    while ((optchr = getopt(argc, argv, "h?Vcilmpr:s:tvwxz")) != EOF) {
+#endif
+
+       switch (optchr) {
+       case 'V':
+           version();
+           exit(0);
+       case 'c':
+           SET(CONSTUPDATE);
+           break;
+       case 'h':
+       case '?':
+           usage();
+           exit(0);
+       case 'i':
+           SET(AUTOINDENT);
+           break;
+       case 'l':
+           UNSET(FOLLOW_SYMLINKS);
+           break;
+       case 'm':
+           SET(USE_MOUSE);
+           break;
+       case 'p':
+           SET(PICO_MSGS);
+           break;
+       case 'r':
+           fill = atoi(optarg);
+           if (fill <= 0) {
+               usage();        /* To stop bogus data (like a string) */
+               finish(1);
+           }
+           break;
+       case 's':
+           alt_speller = nmalloc(strlen(optarg) + 1);
+           strcpy(alt_speller, optarg);
+           break;
+       case 't':
+           temp_opt = 1;
+           break;
+       case 'v':
+           SET(VIEW_MODE);
+           break;
+       case 'w':
+           SET(NO_WRAP);
+           break;
+       case 'x':
+           SET(NO_HELP);
+           break;
+       case 'z':
+           SET(SUSPEND);
+           break;
+       default:
+           usage();
+          exit(0);
+       }
+
+    }
+
+    argv0 = strrchr(argv[0], '/');
+    if ((argv0 && strstr(argv0, "pico"))
+       || (!argv0 && strstr(argv[0], "pico")))
+       SET(PICO_MSGS);
+
+    filename = nmalloc(PATH_MAX);
+    strcpy(filename, "");
+
+    /* See if there's a non-option in argv (first non-option is the
+       filename, if +LINE is not given) */
+    if (argc == 1 || argc <= optind)
+       strcpy(filename, "");
+    else {
+       /* Look for the +line flag... */
+       if (argv[optind][0] == '+') {
+           startline = atoi(&argv[optind][1]);
+           optind++;
+           if (argc == 1 || argc <= optind)
+               strcpy(filename, "");
+           else
+               strncpy(filename, argv[optind], 132);
+       } else
+           strncpy(filename, argv[optind], 132);
+
+    }
+
+
+    /* First back up the old settings so they can be restored, duh */
+    tcgetattr (0, &oldterm);
+
+    /* Adam's code to blow away intr character so ^C can show cursor pos */
+    tcgetattr (0, &term);
+    for (i = 0; i < NCCS; i++) {
+       if (term.c_cc[i] == CINTR || term.c_cc[i] == CQUIT)
+            term.c_cc[i] = 0;
+    }
+    tcsetattr (0, TCSANOW, &term);
+
+    /* now ncurses init stuff... */
+    initscr();
+    savetty();
+    nonl();
+    cbreak();
+    noecho();
+    timeout(0);
+
+    /* Set up some global variables */
+    global_init();
+    shortcut_init();
+    init_help_msg();
+    help_init();
+
+    /* Trap SIGINT and SIGQUIT  cuz we want them to do useful things. */
+    memset (&act, 0, sizeof (struct sigaction));
+    act.sa_handler = SIG_IGN;
+    sigaction(SIGINT, &act, NULL);
+    sigaction(SIGQUIT, &act, NULL);
+
+    if (!ISSET(SUSPEND))
+       sigaction(SIGTSTP, &act, NULL);
+
+    /* Trap SIGHUP  cuz we want to write the file out. */
+    act.sa_handler = handle_hup;
+    sigaction(SIGHUP, &act, NULL);
+
+    act.sa_handler = handle_sigwinch;
+    sigaction(SIGWINCH, &act, NULL);
+
+#ifdef DEBUG
+    fprintf(stderr, _("Main: set up windows\n"));
+#endif
+
+    /* Setup up the main text window */
+    edit = newwin(editwinrows, COLS, 2, 0);
+    keypad(edit, TRUE);
+
+#ifndef NANO_SMALL
+#ifdef NCURSES_MOUSE_VERSION
+    if (ISSET(USE_MOUSE)) {
+       mousemask(BUTTON1_RELEASED, NULL);
+       mouseinterval(50);
+    }
+#endif
+#endif
+
+    /* And the other windows */
+    topwin = newwin(2, COLS, 0, 0);
+    bottomwin = newwin(3 - no_help(), COLS, LINES - 3 + no_help(), 0);
+    keypad(bottomwin, TRUE);
+
+#ifdef DEBUG
+    fprintf(stderr, _("Main: bottom win\n"));
+#endif
+    /* Set up up bottom of window */
+    display_main_list();
+
+#ifdef DEBUG
+    fprintf(stderr, _("Main: open file\n"));
+#endif
+
+    titlebar();
+    if (argc == 1)
+       new_file();
+    else
+       open_file(filename, 0, 0);
+
+    if (startline > 0)
+       do_gotoline(startline);
+    else
+       edit_update(fileage);
+
+    edit_refresh();
+    reset_cursor();
+
+    while (1) {
+       kbinput = wgetch(edit);
+       if (kbinput == 27) {    /* Grab Alt-key stuff first */
+           switch (kbinput = wgetch(edit)) {
+           case 91:
+
+               switch (kbinput = wgetch(edit)) {
+               case 'A':
+                   kbinput = KEY_UP;
+                   break;
+               case 'B':
+                   kbinput = KEY_DOWN;
+                   break;
+               case 'C':
+                   kbinput = KEY_RIGHT;
+                   break;
+               case 'D':
+                   kbinput = KEY_LEFT;
+                   break;
+               case 'H':
+                   kbinput = KEY_HOME;
+                   break;
+               case 'F':
+                   kbinput = KEY_END;
+                   break;
+               case 49:        /* X window F-keys */
+                   tmpkey = wgetch(edit);
+                   kbinput = KEY_F(tmpkey) - 48;
+                   wgetch(edit);       /* Junk character */
+                   break;
+               case 53:        /* page up */
+                   kbinput = KEY_PPAGE;
+                   if ((kbinput = wgetch(edit)) == 126)
+                       kbinput = KEY_PPAGE;    /* Ignore extra tilde */
+                   else {      /* I guess this could happen ;-) */
+                       ungetch(kbinput);
+                       continue;
+                   }
+                   break;
+               case 54:        /* page down */
+                   kbinput = KEY_NPAGE;
+                   if ((kbinput = wgetch(edit)) == 126)
+                       kbinput = KEY_NPAGE;    /* Same thing here */
+                   else {
+                       ungetch(kbinput);
+                       continue;
+                   }
+                   break;
+
+               default:
+#ifdef DEBUG
+                   fprintf(stderr, _("I got Alt-[-%c! (%d)\n"),
+                           kbinput, kbinput);
+#endif
+                   break;
+               }
+               break;
+           default:
+
+               /* Check for the altkey defs.... */
+               for (i = 0; i <= MAIN_LIST_LEN - 1; i++)
+                   if (kbinput == main_list[i].altval ||
+                       kbinput == main_list[i].altval - 32) {
+                       kbinput = main_list[i].val;
+                       break;
+                   }
+#ifdef DEBUG
+               fprintf(stderr, _("I got Alt-%c! (%d)\n"), kbinput,
+                       kbinput);
+#endif
+               break;
+           }
+       }
+       /* Look through the main shortcut list to see if we've hit a
+          shortcut key */
+       for (i = 0; i < MAIN_LIST_LEN; i++) {
+           if (kbinput == main_list[i].val ||
+               (main_list[i].misc1 && kbinput == main_list[i].misc1) ||
+               (main_list[i].misc2 && kbinput == main_list[i].misc2)) {
+               if (ISSET(VIEW_MODE) && !main_list[i].viewok)
+                   print_view_warning();
+               else
+                   main_list[i].func();
+               keyhandled = 1;
+           }
+       }
+       /* Last gasp, stuff that's not in the main lists */
+       if (!keyhandled)
+           switch (kbinput) {
+#ifndef NANO_SMALL
+#ifdef NCURSES_MOUSE_VERSION
+           case KEY_MOUSE:
+               do_mouse();
+               break;
+#endif
+#endif
+           case 0:             /* Erg */
+               do_next_word();
+               break;
+           case 331:           /* Stuff that we don't want to do squat */
+           case -1:
+           case 410:           /* Must ignore this, it gets sent when we resize */
+               break;
+           default:
+#ifdef DEBUG
+               fprintf(stderr, "I got %c (%d)!\n", kbinput, kbinput);
+#endif
+               /* We no longer stop unhandled sequences so that people with
+                  odd character sets can type... */
+
+               if (ISSET(VIEW_MODE)) {
+                   print_view_warning();
+                   break;
+               }
+               do_char(kbinput);
+           }
+       if (ISSET(CONSTUPDATE))
+           do_cursorpos();
+
+       reset_cursor();
+       wrefresh(edit);
+       keyhandled = 0;
+    }
+
+    getchar();
+    finish(0);
+
+}
diff --git a/nano.h b/nano.h
new file mode 100644 (file)
index 0000000..82be177
--- /dev/null
+++ b/nano.h
@@ -0,0 +1,227 @@
+/**************************************************************************
+ *   nano.h                                                               *
+ *                                                                        *
+ *   Copyright (C) 1999 Chris Allegretta                                  *
+ *   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 1, 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., 675 Mass Ave, Cambridge, MA 02139, USA.            *
+ *                                                                        *
+ **************************************************************************/
+
+#ifdef HAVE_MALLOC_H
+#include <malloc.h>
+#endif
+
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
+
+#ifndef NANO_H
+#define NANO_H 1
+
+/* Macros for the flags int... */
+#define SET(bit) flags |= bit
+#define UNSET(bit) flags &= ~bit
+#define ISSET(bit) (flags & bit)
+
+
+#ifdef USE_SLANG       /* Slang support enabled */
+#include <slcurses.h>
+#define KEY_DC 0x113
+#elif defined(HAVE_NCURSES_H)
+#include <ncurses.h>
+#else /* Uh oh */
+#include <curses.h> 
+#endif /* CURSES_H */
+
+#ifdef HAVE_LIBINTL_H
+#include <libintl.h>
+#endif
+
+#include "config.h"
+
+#if !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF)
+#include <glib.h>
+# ifndef HAVE_SNPRINTF
+#  define snprintf     g_snprintf
+# endif
+# ifndef HAVE_VSNPRINTF
+#  define vsnprintf    g_vsnprintf
+# endif
+#endif
+
+#define VERMSG "nano " VERSION
+
+/* Structure types */
+typedef struct filestruct {
+    char *data;
+    struct filestruct *next;   /* Next node */
+    struct filestruct *prev;   /* Previous node */
+    long lineno;               /* The line number */
+} filestruct;
+
+typedef struct shortcut {
+   int val;            /* Actual sequence that generates the keystroke */
+   int altval;         /* Alt key # for this function, or 0 for none */
+   int misc1;          /* Other int functions we want bound */
+   int misc2;
+   int viewok;         /* is this function legal in view mode? */
+   int (*func) (void); /* Function to call when we catch this key */
+   char *desc;         /* Description, e.g. "Page Up" */
+   char *help;         /* Help file entry text */
+} shortcut;
+
+/* Bitwise flags so we can save space (or more correctly, not waste it) */
+
+#define MODIFIED               (1<<0)
+#define KEEP_CUTBUFFER         (1<<1)
+#define CASE_SENSITIVE         (1<<2)
+#define MARK_ISSET             (1<<3)
+#define CONSTUPDATE            (1<<4)
+#define NO_HELP                        (1<<5)
+#define PICO_MSGS              (1<<6)
+#define FOLLOW_SYMLINKS                (1<<7)
+#define SUSPEND                        (1<<8)
+#define NO_WRAP                        (1<<9)
+#define AUTOINDENT             (1<<10)
+#define SAMELINEWRAP           (1<<11)
+#define VIEW_MODE              (1<<12)
+#define USE_MOUSE              (1<<13)
+
+
+/* Control key sequences, chaning these would be very very bad */
+
+#define NANO_CONTROL_A 1
+#define NANO_CONTROL_B 2
+#define NANO_CONTROL_C 3
+#define NANO_CONTROL_D 4
+#define NANO_CONTROL_E 5
+#define NANO_CONTROL_F 6
+#define NANO_CONTROL_G 7
+#define NANO_CONTROL_H 8
+#define NANO_CONTROL_I 9
+#define NANO_CONTROL_J 10
+#define NANO_CONTROL_K 11
+#define NANO_CONTROL_L 12
+#define NANO_CONTROL_M 13
+#define NANO_CONTROL_N 14
+#define NANO_CONTROL_O 15
+#define NANO_CONTROL_P 16
+#define NANO_CONTROL_Q 17
+#define NANO_CONTROL_R 18
+#define NANO_CONTROL_S 19
+#define NANO_CONTROL_T 20
+#define NANO_CONTROL_U 21
+#define NANO_CONTROL_V 22
+#define NANO_CONTROL_W 23
+#define NANO_CONTROL_X 24
+#define NANO_CONTROL_Y 25
+#define NANO_CONTROL_Z 26
+
+#define NANO_CONTROL_4 28
+#define NANO_CONTROL_5 29
+#define NANO_CONTROL_6 30
+#define NANO_CONTROL_7 31
+
+#define NANO_ALT_A 'a'
+#define NANO_ALT_B 'b'
+#define NANO_ALT_C 'c'
+#define NANO_ALT_D 'd'
+#define NANO_ALT_E 'e'
+#define NANO_ALT_F 'f'
+#define NANO_ALT_G 'g'
+#define NANO_ALT_H 'h'
+#define NANO_ALT_I 'i'
+#define NANO_ALT_J 'j'
+#define NANO_ALT_K 'k'
+#define NANO_ALT_L 'l'
+#define NANO_ALT_M 'm'
+#define NANO_ALT_N 'n'
+#define NANO_ALT_O 'o'
+#define NANO_ALT_P 'p'
+#define NANO_ALT_Q 'q'
+#define NANO_ALT_R 'r'
+#define NANO_ALT_S 's'
+#define NANO_ALT_T 't'
+#define NANO_ALT_U 'u'
+#define NANO_ALT_V 'v'
+#define NANO_ALT_W 'w'
+#define NANO_ALT_X 'x'
+#define NANO_ALT_Y 'y'
+#define NANO_ALT_Z 'z'
+
+/* Some semi-changeable keybindings, dont play with unless you're sure you
+know what you're doing */
+
+#define NANO_INSERTFILE_KEY    NANO_CONTROL_R
+#define NANO_INSERTFILE_FKEY   KEY_F(5)
+#define NANO_EXIT_KEY          NANO_CONTROL_X
+#define NANO_EXIT_FKEY                 KEY_F(2)
+#define NANO_WRITEOUT_KEY      NANO_CONTROL_O
+#define NANO_WRITEOUT_FKEY     KEY_F(3)
+#define NANO_GOTO_KEY          NANO_CONTROL_7
+#define NANO_GOTO_FKEY         KEY_F(13)
+#define NANO_ALT_GOTO_KEY      NANO_ALT_G
+#define NANO_HELP_KEY          NANO_CONTROL_G
+#define NANO_HELP_FKEY         KEY_F(1)
+#define NANO_WHEREIS_KEY       NANO_CONTROL_W
+#define NANO_WHEREIS_FKEY      KEY_F(6)
+#define NANO_REPLACE_KEY       NANO_CONTROL_4
+#define NANO_REPLACE_FKEY      KEY_F(14)
+#define NANO_ALT_REPLACE_KEY   NANO_ALT_R
+#define NANO_OTHERSEARCH_KEY   NANO_CONTROL_T
+#define NANO_PREVPAGE_KEY      NANO_CONTROL_Y
+#define NANO_PREVPAGE_FKEY     KEY_F(7)
+#define NANO_NEXTPAGE_KEY      NANO_CONTROL_V
+#define NANO_NEXTPAGE_FKEY     KEY_F(8)
+#define NANO_CUT_KEY           NANO_CONTROL_K
+#define NANO_CUT_FKEY          KEY_F(9)
+#define NANO_UNCUT_KEY         NANO_CONTROL_U
+#define NANO_UNCUT_FKEY                KEY_F(10)
+#define NANO_CURSORPOS_KEY     NANO_CONTROL_C
+#define NANO_CURSORPOS_FKEY    KEY_F(11)
+#define NANO_SPELL_KEY         NANO_CONTROL_T
+#define NANO_SPELL_FKEY                KEY_F(12)
+#define NANO_FIRSTLINE_KEY     NANO_PREVPAGE_KEY
+#define NANO_LASTLINE_KEY      NANO_NEXTPAGE_KEY
+#define NANO_CANCEL_KEY                NANO_CONTROL_C
+#define NANO_CASE_KEY          NANO_CONTROL_A
+#define NANO_REFRESH_KEY       NANO_CONTROL_L
+#define NANO_JUSTIFY_KEY       NANO_CONTROL_J
+#define NANO_JUSTIFY_FKEY      KEY_F(4)
+#define NANO_UP_KEY            NANO_CONTROL_P
+#define NANO_DOWN_KEY          NANO_CONTROL_N
+#define NANO_FORWARD_KEY       NANO_CONTROL_F
+#define NANO_BACK_KEY          NANO_CONTROL_B
+#define NANO_MARK_KEY          NANO_CONTROL_6
+#define NANO_HOME_KEY          NANO_CONTROL_A
+#define NANO_END_KEY           NANO_CONTROL_E
+#define NANO_DELETE_KEY                NANO_CONTROL_D
+#define NANO_BACKSPACE_KEY     NANO_CONTROL_H
+#define NANO_TAB_KEY           NANO_CONTROL_I
+#define NANO_SUSPEND_KEY       NANO_CONTROL_Z
+#define NANO_ENTER_KEY         NANO_CONTROL_M
+
+#define MAIN_LIST_LEN 26
+#define MAIN_VISIBLE 12
+#define WHEREIS_LIST_LEN 5
+#define REPLACE_LIST_LEN 5
+#define GOTO_LIST_LEN 3
+#define WRITEFILE_LIST_LEN 1
+#define HELP_LIST_LEN 3
+#define SPELL_LIST_LEN 3
+
+#define VIEW 1
+#define NOVIEW 0
+
+#endif                             
diff --git a/po/ChangeLog b/po/ChangeLog
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
new file mode 100644 (file)
index 0000000..111b40f
--- /dev/null
@@ -0,0 +1,248 @@
+# Makefile for program source directory in GNU NLS utilities package.
+# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
+#
+# This file file be copied and used freely without restrictions.  It can
+# be used in projects which are not available under the GNU Public License
+# but which still want to provide support for the GNU gettext functionality.
+# Please note that the actual code is *not* freely available.
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+
+SHELL = /bin/sh
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datadir = $(prefix)/@DATADIRNAME@
+localedir = $(datadir)/locale
+gnulocaledir = $(prefix)/share/locale
+gettextsrcdir = $(prefix)/share/gettext/po
+subdir = po
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+MKINSTALLDIRS = $(top_srcdir)/@MKINSTALLDIRS@
+
+CC = @CC@
+GENCAT = @GENCAT@
+GMSGFMT = PATH=../src:$$PATH @GMSGFMT@
+MSGFMT = @MSGFMT@
+XGETTEXT = PATH=../src:$$PATH @XGETTEXT@
+MSGMERGE = PATH=../src:$$PATH msgmerge
+
+DEFS = @DEFS@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+
+INCLUDES = -I.. -I$(top_srcdir)/intl
+
+COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
+
+SOURCES = cat-id-tbl.c
+POFILES = @POFILES@
+GMOFILES = @GMOFILES@
+DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(PACKAGE).pot \
+stamp-cat-id $(POFILES) $(GMOFILES) $(SOURCES)
+
+POTFILES = \
+
+CATALOGS = @CATALOGS@
+CATOBJEXT = @CATOBJEXT@
+INSTOBJEXT = @INSTOBJEXT@
+
+.SUFFIXES:
+.SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat
+
+.c.o:
+       $(COMPILE) $<
+
+.po.pox:
+       $(MAKE) $(PACKAGE).pot
+       $(MSGMERGE) $< $(srcdir)/$(PACKAGE).pot -o $*.pox
+
+.po.mo:
+       $(MSGFMT) -o $@ $<
+
+.po.gmo:
+       file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \
+         && rm -f $$file && $(GMSGFMT) -o $$file $<
+
+.po.cat:
+       sed -f ../intl/po2msg.sed < $< > $*.msg \
+         && rm -f $@ && $(GENCAT) $@ $*.msg
+
+
+all: all-@USE_NLS@
+
+all-yes: cat-id-tbl.c $(CATALOGS)
+all-no:
+
+$(srcdir)/$(PACKAGE).pot: $(POTFILES)
+       $(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \
+         --add-comments --keyword=_ --keyword=N_ \
+         --files-from=$(srcdir)/POTFILES.in \
+       && test ! -f $(PACKAGE).po \
+          || ( rm -f $(srcdir)/$(PACKAGE).pot \
+               && mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot )
+
+$(srcdir)/cat-id-tbl.c: stamp-cat-id; @:
+$(srcdir)/stamp-cat-id: $(PACKAGE).pot
+       rm -f cat-id-tbl.tmp
+       sed -f ../intl/po2tbl.sed $(srcdir)/$(PACKAGE).pot \
+               | sed -e "s/@PACKAGE NAME@/$(PACKAGE)/" > cat-id-tbl.tmp
+       if cmp -s cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; then \
+         rm cat-id-tbl.tmp; \
+       else \
+         echo cat-id-tbl.c changed; \
+         rm -f $(srcdir)/cat-id-tbl.c; \
+         mv cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; \
+       fi
+       cd $(srcdir) && rm -f stamp-cat-id && echo timestamp > stamp-cat-id
+
+
+install: install-exec install-data
+install-exec:
+install-data: install-data-@USE_NLS@
+install-data-no: all
+install-data-yes: all
+       if test -r "$(MKINSTALLDIRS)"; then \
+         $(MKINSTALLDIRS) $(datadir); \
+       else \
+         $(SHELL) $(top_srcdir)/mkinstalldirs $(datadir); \
+       fi
+       @catalogs='$(CATALOGS)'; \
+       for cat in $$catalogs; do \
+         cat=`basename $$cat`; \
+         case "$$cat" in \
+           *.gmo) destdir=$(gnulocaledir);; \
+           *)     destdir=$(localedir);; \
+         esac; \
+         lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
+         dir=$$destdir/$$lang/LC_MESSAGES; \
+         if test -r "$(MKINSTALLDIRS)"; then \
+           $(MKINSTALLDIRS) $$dir; \
+         else \
+           $(SHELL) $(top_srcdir)/mkinstalldirs $$dir; \
+         fi; \
+         if test -r $$cat; then \
+           $(INSTALL_DATA) $$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \
+           echo "installing $$cat as $$dir/$(PACKAGE)$(INSTOBJEXT)"; \
+         else \
+           $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \
+           echo "installing $(srcdir)/$$cat as" \
+                "$$dir/$(PACKAGE)$(INSTOBJEXT)"; \
+         fi; \
+         if test -r $$cat.m; then \
+           $(INSTALL_DATA) $$cat.m $$dir/$(PACKAGE)$(INSTOBJEXT).m; \
+           echo "installing $$cat.m as $$dir/$(PACKAGE)$(INSTOBJEXT).m"; \
+         else \
+           if test -r $(srcdir)/$$cat.m ; then \
+             $(INSTALL_DATA) $(srcdir)/$$cat.m \
+               $$dir/$(PACKAGE)$(INSTOBJEXT).m; \
+             echo "installing $(srcdir)/$$cat as" \
+                  "$$dir/$(PACKAGE)$(INSTOBJEXT).m"; \
+           else \
+             true; \
+           fi; \
+         fi; \
+       done
+       if test "$(PACKAGE)" = "gettext"; then \
+         if test -r "$(MKINSTALLDIRS)"; then \
+           $(MKINSTALLDIRS) $(gettextsrcdir); \
+         else \
+           $(SHELL) $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \
+         fi; \
+         $(INSTALL_DATA) $(srcdir)/Makefile.in.in \
+                         $(gettextsrcdir)/Makefile.in.in; \
+       else \
+         : ; \
+       fi
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall:
+       catalogs='$(CATALOGS)'; \
+       for cat in $$catalogs; do \
+         cat=`basename $$cat`; \
+         lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
+         rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \
+         rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \
+         rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \
+         rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \
+       done
+       rm -f $(gettextsrcdir)/po-Makefile.in.in
+
+check: all
+
+cat-id-tbl.o: ../intl/libgettext.h
+
+dvi info tags TAGS ID:
+
+mostlyclean:
+       rm -f core core.* *.pox $(PACKAGE).po *.old.po cat-id-tbl.tmp
+       rm -fr *.o
+
+clean: mostlyclean
+
+distclean: clean
+       rm -f Makefile Makefile.in POTFILES *.mo *.msg *.cat *.cat.m
+
+maintainer-clean: distclean
+       @echo "This command is intended for maintainers to use;"
+       @echo "it deletes files that may require special tools to rebuild."
+       rm -f $(GMOFILES)
+
+distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir: update-po $(DISTFILES)
+       dists="$(DISTFILES)"; \
+       for file in $$dists; do \
+         ln $(srcdir)/$$file $(distdir) 2> /dev/null \
+           || cp -p $(srcdir)/$$file $(distdir); \
+       done
+
+update-po: Makefile
+       $(MAKE) $(PACKAGE).pot
+       PATH=`pwd`/../src:$$PATH; \
+       cd $(srcdir); \
+       catalogs='$(CATALOGS)'; \
+       for cat in $$catalogs; do \
+         cat=`basename $$cat`; \
+         lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
+         mv $$lang.po $$lang.old.po; \
+         echo "$$lang:"; \
+         if $(MSGMERGE) $$lang.old.po $(PACKAGE).pot -o $$lang.po; then \
+           rm -f $$lang.old.po; \
+         else \
+           echo "msgmerge for $$cat failed!"; \
+           rm -f $$lang.po; \
+           mv $$lang.old.po $$lang.po; \
+         fi; \
+       done
+
+POTFILES: POTFILES.in
+       ( if test 'x$(srcdir)' != 'x.'; then \
+           posrcprefix='$(top_srcdir)/'; \
+         else \
+           posrcprefix="../"; \
+         fi; \
+         rm -f $@-t $@ \
+           && (sed -e '/^#/d' -e '/^[  ]*$$/d' \
+                   -e "s@.*@   $$posrcprefix& \\\\@" < $(srcdir)/$@.in \
+               | sed -e '$$s/\\$$//') > $@-t \
+           && chmod a-w $@-t \
+           && mv $@-t $@ )
+
+Makefile: Makefile.in.in ../config.status POTFILES
+       cd .. \
+         && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \
+              $(SHELL) ./config.status
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100644 (file)
index 0000000..5ae4e7a
--- /dev/null
@@ -0,0 +1,11 @@
+# List of source files containing translatable strings.
+
+# Package source files
+cut.c
+global.c
+nano.c
+winio.c
+
+# Package header files
+nano.h
+proto.h
diff --git a/po/cat-id-tbl.c b/po/cat-id-tbl.c
new file mode 100644 (file)
index 0000000..b67bd83
--- /dev/null
@@ -0,0 +1,215 @@
+/* Automatically generated by po2tbl.sed from nano.pot.  */
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "libgettext.h"
+
+const struct _msg_ent _msg_tbl[] = {
+  {"", 1},
+  {"add_to_cutbuffer called with inptr->data = %s\n", 2},
+  {"Blew away cutbuffer =)\n", 3},
+  {"Invoke the help menu", 4},
+  {"Write the current file to disk", 5},
+  {"Exit from nano", 6},
+  {"Goto a specific line number", 7},
+  {"Justify the current paragraph", 8},
+  {"Replace text within the editor", 9},
+  {"Insert another file into the current one", 10},
+  {"Search for text within the editor", 11},
+  {"Move to the previous screen", 12},
+  {"Move to the next screen", 13},
+  {"Cut the current line and store it in the cutbuffer", 14},
+  {"Uncut from the cutbuffer into the current line", 15},
+  {"Show the posititon of the cursor", 16},
+  {"Invoke the spell checker (if available)", 17},
+  {"Move up one line", 18},
+  {"Move down one line", 19},
+  {"Move forward one character", 20},
+  {"Move back one character", 21},
+  {"Move to the beginning of the current line", 22},
+  {"Move to the end of the current line", 23},
+  {"Go to the first line of the file", 24},
+  {"Go to the last line of the file", 25},
+  {"Refresh (redraw) the current screen", 26},
+  {"Mark text at the current cursor location", 27},
+  {"Delete the character under the cursor", 28},
+  {"Delete the character to the left of the cursor", 29},
+  {"Insert a tab character", 30},
+  {"Insert a carriage return at the cursor position", 31},
+  {"Make the current search or replace case (in)sensitive", 32},
+  {"Cancel the current function", 33},
+  {"Get Help", 34},
+  {"WriteOut", 35},
+  {"Exit", 36},
+  {"Goto Line", 37},
+  {"Justify", 38},
+  {"Replace", 39},
+  {"Read File", 40},
+  {"Where Is", 41},
+  {"Prev Page", 42},
+  {"Next Page", 43},
+  {"Cut Text", 44},
+  {"UnCut Txt", 45},
+  {"Cur Pos", 46},
+  {"To Spell", 47},
+  {"Up", 48},
+  {"Down", 49},
+  {"Forward", 50},
+  {"Back", 51},
+  {"Home", 52},
+  {"End", 53},
+  {"Refresh", 54},
+  {"Mark Text", 55},
+  {"Delete", 56},
+  {"Backspace", 57},
+  {"Tab", 58},
+  {"Enter", 59},
+  {"First Line", 60},
+  {"Last Line", 61},
+  {"Case Sens", 62},
+  {"To Replace", 63},
+  {"Cancel", 64},
+  {"To Search", 65},
+  {"\
+\n\
+Buffer written to 'nano.save'\n", 66},
+  {"nano: malloc: out of memory!", 67},
+  {"Key illegal in VIEW mode", 68},
+  {"\
+ nano help text\n\
+\n\
+ The nano editor is designed to emulate the functionality and ease-of-use of \
+the UW Pico text editor.  There are four main sections of the editor: The \
+top line shows the program version, the current filename being edited, and \
+whether or not the file has been modified.  Next is the main editor window \
+showing the file being edited.  The status line is the third line from the \
+bottom and shows important messages. The bottom two lines show the most \
+commonly used shortcuts in the editor.\n\
+\n\
+ The notation for shortcuts is as follows: Control-key sequences are notated \
+with a caret (^) symbol.  Alt-key sequences are notated with an at (@) \
+symbol.  The following keystrokes are available in the main editor window. \
+Optional keys are shown in parentheses:\n\
+\n", 69},
+  {"free_node(): free'd a node, YAY!\n", 70},
+  {"free_node(): free'd last node.\n", 71},
+  {"read_line: not on first line and prev is NULL", 72},
+  {"Read %d lines", 73},
+  {"\"%s\" not found", 74},
+  {"New File", 75},
+  {"File \"%s\" is a directory", 76},
+  {"Reading File", 77},
+  {"File to insert [from ./] ", 78},
+  {"Cancelled", 79},
+  {"\
+Usage: nano [GNU long option] [option] +LINE <file>\n\
+\n", 80},
+  {"Option\t\tLong option\t\tMeaning\n", 81},
+  {" -V \t\t--version\t\tPrint version information and exit\n", 82},
+  {" -c \t\t--const\t\t\tConstantly show cursor position\n", 83},
+  {" -h \t\t--help\t\t\tShow this message\n", 84},
+  {" -i \t\t--autoindent\t\tAutomatically indent new lines\n", 85},
+  {" -l \t\t--nofollow\t\tDon't follow symbolic links, overwrite.\n", 86},
+  {" -m \t\t--mouse\t\t\tEnable mouse\n", 87},
+  {"\
+ -r [#cols] \t--fill=[#cols]\t\tSet fill cols to (wrap lines at) #cols\n", 88},
+  {" -p\t \t--pico\t\t\tMake bottom 2 lines more Pico-like\n", 89},
+  {" -s [prog] \t--speller=[prog]\tEnable alternate speller\n", 90},
+  {" -t \t\t--tempfile\t\tAuto save on exit, don't prompt\n", 91},
+  {" -v \t\t--view\t\t\tView (read only) mode\n", 92},
+  {" -w \t\t--nowrap\t\tDon't wrap long lines\n", 93},
+  {" -x \t\t--nohelp\t\tDon't show help window\n", 94},
+  {" -z \t\t--suspend\t\tEnable suspend\n", 95},
+  {" +LINE\t\t\t\t\tStart at line number LINE\n", 96},
+  {"\
+Usage: nano [option] +LINE <file>\n\
+\n", 97},
+  {"Option\t\tMeaning\n", 98},
+  {" -V \t\tPrint version information and exit\n", 99},
+  {" -c \t\tConstantly show cursor position\n", 100},
+  {" -h \t\tShow this message\n", 101},
+  {" -i \t\tAutomatically indent new lines\n", 102},
+  {" -l \t\tDon't follow symbolic links, overwrite.\n", 103},
+  {" -m \t\tEnable mouse\n", 104},
+  {" -r [#cols] \tSet fill cols to (wrap lines at) #cols\n", 105},
+  {" -s [prog]  \tEnable alternate speller\n", 106},
+  {" -p \t\tMake bottom 2 lines more Pico-like\n", 107},
+  {" -t \t\tAuto save on exit, don't prompt\n", 108},
+  {" -v \t\tView (read only) mode\n", 109},
+  {" -w \t\tDon't wrap long lines\n", 110},
+  {" -x \t\tDon't show help window\n", 111},
+  {" -z \t\tEnable suspend\n", 112},
+  {" +LINE\t\tStart at line number LINE\n", 113},
+  {" nano version %s by Chris Allegretta (compiled %s, %s)\n", 114},
+  {" Email: nano@asty.org\tWeb: http://www.asty.org/nano\n", 115},
+  {"Mark Set", 116},
+  {"Mark UNset", 117},
+  {"check_wrap called with inptr->data=\"%s\"\n", 118},
+  {"Case Sensitive Search%s", 119},
+  {"Search%s", 120},
+  {"Search Cancelled", 121},
+  {"Search Wrapped", 122},
+  {"Replaced %d occurences", 123},
+  {"Replaced 1 occurence", 124},
+  {"Replace Cancelled", 125},
+  {"Replace with [%s]", 126},
+  {"Replace with", 127},
+  {"Replace this instance?", 128},
+  {"current->data now = \"%s\"\n", 129},
+  {"After, data = \"%s\"\n", 130},
+  {"Enter line number", 131},
+  {"Aborted", 132},
+  {"Come on, be reasonable", 133},
+  {"Only %d lines available, skipping to last line", 134},
+  {"Could not open file for writing: %s", 135},
+  {"Could not open file: Path length exceeded.", 136},
+  {"Wrote >%s\n", 137},
+  {"Could not close %s: %s", 138},
+  {"Could not open %s for writing: %s", 139},
+  {"Could not set permissions %o on %s: %s", 140},
+  {"Wrote %d lines", 141},
+  {"File Name to write", 142},
+  {"filename is %s", 143},
+  {"File exists, OVERWRITE ?", 144},
+  {"Error deleting tempfile, ack!", 145},
+  {"Could not create a temporary filename: %s", 146},
+  {"Could not invoke spell program \"%s\"", 147},
+  {"Could not invoke \"ispell\"", 148},
+  {"Finished checking spelling", 149},
+  {"Save modified buffer (ANSWERING \"No\" WILL DESTROY CHANGES) ? ", 150},
+  {"Cannot resize top win", 151},
+  {"Cannot move top win", 152},
+  {"Cannot resize edit win", 153},
+  {"Cannot move edit win", 154},
+  {"Cannot resize bottom win", 155},
+  {"Cannot move bottom win", 156},
+  {"Main: set up windows\n", 157},
+  {"Main: bottom win\n", 158},
+  {"Main: open file\n", 159},
+  {"I got Alt-[-%c! (%d)\n", 160},
+  {"I got Alt-%c! (%d)\n", 161},
+  {"actual_x for xplus=%d returned %d\n", 162},
+  {"input '%c' (%d)\n", 163},
+  {"New Buffer", 164},
+  {"  File: ...", 165},
+  {"Modified", 166},
+  {"Moved to (%d, %d) in edit buffer\n", 167},
+  {"current->data = \"%s\"\n", 168},
+  {"I got \"%s\"\n", 169},
+  {" Y", 170},
+  {"Yes", 171},
+  {" A", 172},
+  {"All", 173},
+  {" N", 174},
+  {"No", 175},
+  {"^C", 176},
+  {"do_cursorpos: linepct = %f, bytepct = %f\n", 177},
+  {"line %d of %d (%.0f%%), character %d of %d (%.0f%%)", 178},
+  {"Dumping file buffer to stderr...\n", 179},
+  {"Dumping cutbuffer to stderr...\n", 180},
+  {"Dumping a buffer to stderr...\n", 181},
+};
+
+int _msg_tbl_length = 181;
diff --git a/po/de.gmo b/po/de.gmo
new file mode 100644 (file)
index 0000000..97515cb
Binary files /dev/null and b/po/de.gmo differ
diff --git a/po/de.po b/po/de.po
new file mode 100644 (file)
index 0000000..97be1fd
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,947 @@
+# German Messages for the nano editor
+# Florian König <floki@bigfoot.com> March 30, 2000
+# Copyright (C) 2000 Free Software Foundation, Inc.
+# Florian König <floki@bigfoot.com>, 2000.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2000-05-31 10:00-0500\n"
+"PO-Revision-Date: 2000-03-30 20:50+0100\n"
+"Last-Translator: Florian König <floki@bigfoot.com>\n"
+"Language-Team: German <floki@bigfoot.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+#: cut.c:43
+#, c-format
+msgid "add_to_cutbuffer called with inptr->data = %s\n"
+msgstr "add_to_cutbuffer aufgerufen mit inptr->data = %s\n"
+
+#: cut.c:146
+msgid "Blew away cutbuffer =)\n"
+msgstr "Inhalt der Zwischenablage verworfen\n"
+
+#: global.c:110
+msgid "Invoke the help menu"
+msgstr "Hilfe-Menü anzeigen"
+
+#: global.c:111
+msgid "Write the current file to disk"
+msgstr "Datei speichern"
+
+#: global.c:112
+msgid "Exit from nano"
+msgstr "nano beenden"
+
+#: global.c:113
+msgid "Goto a specific line number"
+msgstr "Zu einer Zeile springen"
+
+#: global.c:114
+msgid "Justify the current paragraph"
+msgstr "Paragraph ausrichten"
+
+#: global.c:115
+msgid "Replace text within the editor"
+msgstr "Text im Editor ersetzen"
+
+#: global.c:116
+msgid "Insert another file into the current one"
+msgstr "Datei einfügen"
+
+#: global.c:117
+msgid "Search for text within the editor"
+msgstr "Im Editor nach Text suchen"
+
+#: global.c:118
+msgid "Move to the previous screen"
+msgstr "Zu der vorhergehenden Seite springen"
+
+#: global.c:119
+msgid "Move to the next screen"
+msgstr "Zu der folgenden Seite springen"
+
+#: global.c:120
+msgid "Cut the current line and store it in the cutbuffer"
+msgstr "Zeile ausschneiden und in dir Zwischenablage speichern"
+
+#: global.c:121
+msgid "Uncut from the cutbuffer into the current line"
+msgstr "Aus der Zwischenablage einfügen"
+
+#: global.c:122
+msgid "Show the posititon of the cursor"
+msgstr "Cursoposition anzeigen"
+
+#: global.c:123
+msgid "Invoke the spell checker (if available)"
+msgstr "Rechtschreibprüfung aufrufen (wenn verfügbar)"
+
+#: global.c:124
+msgid "Move up one line"
+msgstr "Zur vorhergehenden Zeile springen"
+
+#: global.c:125
+msgid "Move down one line"
+msgstr "Zur folgenden Zeile springen"
+
+#: global.c:126
+msgid "Move forward one character"
+msgstr "Zum folgenden Zeichen springen"
+
+#: global.c:127
+msgid "Move back one character"
+msgstr "Zum vorhergehenden Zeichen springen"
+
+#: global.c:128
+msgid "Move to the beginning of the current line"
+msgstr "Zum Zeilenanfang springen"
+
+#: global.c:129
+msgid "Move to the end of the current line"
+msgstr "Zum Zeilenende springen"
+
+#: global.c:130
+msgid "Go to the first line of the file"
+msgstr "Zur ersten Zeile springen"
+
+#: global.c:131
+msgid "Go to the last line of the file"
+msgstr "Zur letzten Zeile springen"
+
+#: global.c:132
+msgid "Refresh (redraw) the current screen"
+msgstr "Bildschirm auffrischen"
+
+#: global.c:133
+msgid "Mark text at the current cursor location"
+msgstr "Text an der derzeitigen Cursorposition markieren"
+
+#: global.c:134
+msgid "Delete the character under the cursor"
+msgstr "Zeichen an der Cursorposition löschen"
+
+#: global.c:136
+msgid "Delete the character to the left of the cursor"
+msgstr "Zeichen links vom Cursor löschen"
+
+#: global.c:137
+msgid "Insert a tab character"
+msgstr "Tabulator einfügen"
+
+#: global.c:138
+msgid "Insert a carriage return at the cursor position"
+msgstr "Zeilenumbruch an der Cursorposition einfügen"
+
+#: global.c:140
+msgid "Make the current search or replace case (in)sensitive"
+msgstr ""
+"Groß- und Kleinschreibung bei Suche oder Erstzen (nicht) berücksichtigen"
+
+#: global.c:141
+msgid "Cancel the current function"
+msgstr "Funktion abbrechen"
+
+#: global.c:146 global.c:256 global.c:322
+msgid "Get Help"
+msgstr "Hilfe"
+
+#: global.c:149 global.c:157
+msgid "WriteOut"
+msgstr "Speichern"
+
+#: global.c:153 global.c:311
+msgid "Exit"
+msgstr "Beenden"
+
+#: global.c:161 global.c:252
+msgid "Goto Line"
+msgstr "Zu Zeile"
+
+#: global.c:166 global.c:244
+msgid "Justify"
+msgstr "Ausrichten"
+
+#: global.c:169 global.c:240
+msgid "Replace"
+msgstr "Ersetzen"
+
+#: global.c:173
+msgid "Read File"
+msgstr "Datei öffnen"
+
+#: global.c:177
+msgid "Where Is"
+msgstr "Wo ist"
+
+#: global.c:181 global.c:303
+msgid "Prev Page"
+msgstr "Seite zurück"
+
+#: global.c:185 global.c:307
+msgid "Next Page"
+msgstr "Seite vor"
+
+#: global.c:189
+msgid "Cut Text"
+msgstr "Ausschneiden"
+
+#: global.c:192
+msgid "UnCut Txt"
+msgstr "Einfügen"
+
+#: global.c:196
+msgid "Cur Pos"
+msgstr "Cursor"
+
+#: global.c:200
+msgid "To Spell"
+msgstr "Rechtschr."
+
+#: global.c:204
+msgid "Up"
+msgstr "Hoch"
+
+#: global.c:207
+msgid "Down"
+msgstr "Runter"
+
+#: global.c:210
+msgid "Forward"
+msgstr "Vorwärts"
+
+#: global.c:213
+msgid "Back"
+msgstr "Zurück"
+
+#: global.c:216
+msgid "Home"
+msgstr "Pos 1"
+
+#: global.c:219
+msgid "End"
+msgstr "Ende"
+
+#: global.c:222
+msgid "Refresh"
+msgstr "Auffrischen"
+
+#: global.c:225
+msgid "Mark Text"
+msgstr "Text markieren"
+
+#: global.c:228
+msgid "Delete"
+msgstr "Löschen"
+
+#: global.c:232
+msgid "Backspace"
+msgstr "Backspace"
+
+#: global.c:236
+msgid "Tab"
+msgstr "Tab"
+
+#: global.c:247
+msgid "Enter"
+msgstr "Enter"
+
+#: global.c:260 global.c:277 global.c:293
+msgid "First Line"
+msgstr "Erste Zeile"
+
+#: global.c:263 global.c:280 global.c:296
+msgid "Last Line"
+msgstr "Letzte Zeile"
+
+#: global.c:266 global.c:283
+msgid "Case Sens"
+msgstr "GROSZ/klein"
+
+#: global.c:270
+#, fuzzy
+msgid "To Replace"
+msgstr "Ersetzen"
+
+#: global.c:273 global.c:289 global.c:299 global.c:315 global.c:319
+#: global.c:325 winio.c:883
+msgid "Cancel"
+msgstr "Abbrechen"
+
+#: global.c:286
+#, fuzzy
+msgid "To Search"
+msgstr "Suche%s"
+
+#: nano.c:114
+msgid ""
+"\n"
+"Buffer written to 'nano.save'\n"
+msgstr ""
+"\n"
+"Puffer in 'nano.save' geschrieben\n"
+
+#: nano.c:127
+msgid "nano: malloc: out of memory!"
+msgstr "nano: malloc: Kein Speicher verfügbar!"
+
+#: nano.c:144
+msgid "Key illegal in VIEW mode"
+msgstr "Unzulässige Taste im View Modus"
+
+#: nano.c:185
+msgid ""
+" nano help text\n"
+"\n"
+" The nano editor is designed to emulate the functionality and ease-of-use of "
+"the UW Pico text editor.  There are four main sections of the editor: The "
+"top line shows the program version, the current filename being edited, and "
+"whether or not the file has been modified.  Next is the main editor window "
+"showing the file being edited.  The status line is the third line from the "
+"bottom and shows important messages. The bottom two lines show the most "
+"commonly used shortcuts in the editor.\n"
+"\n"
+" The notation for shortcuts is as follows: Control-key sequences are notated "
+"with a caret (^) symbol.  Alt-key sequences are notated with an at (@) "
+"symbol.  The following keystrokes are available in the main editor window. "
+"Optional keys are shown in parentheses:\n"
+"\n"
+msgstr ""
+" nano Hilfe\n"
+"\n"
+" Nano wurde konzipiert um die Funktionalität und die Benutzerfreundlichkeit "
+"des UW Pico Texteditors zu imitieren. Es gibt vier Hauptbereiche: Die "
+"Titelzeile zeigt die Version des Programms, den Dateinamen der aktuellen "
+"Datei und ob die Datei verändert wurde oder nicht. Das Hauptfenster zeigt "
+"die geöffnete Datei. Die Statuszeile (die dritte Zeile von unten) und zeigt "
+"wichtige Meldungen. Die untersten zwei Zeilen listet die meistgebrauchten "
+"Tastenkombinationen von nano auf.\n"
+"\n"
+" Tastenkombinationen werden wie folgt abgekürzt: Kombinationen mit der "
+"Strg-Taste werden mit einem ^ ausgedrückt, Alt-Taste-Kombinationen mit einem "
+"@. Die folgenden Tasten(kombinationen) sind im Hauptfenster verfügbar. "
+"Optionale Tasten sind eingeklammert.\n"
+"\n"
+
+#: nano.c:286
+msgid "free_node(): free'd a node, YAY!\n"
+msgstr "free_node(): Knoten freigegeben.\n"
+
+#: nano.c:291
+msgid "free_node(): free'd last node.\n"
+msgstr "free_node(): letzter Knoten freigegeben.\n"
+
+#: nano.c:407
+msgid "read_line: not on first line and prev is NULL"
+msgstr "read_line: nicht in der ersten Zeile und prev ist NULL"
+
+#: nano.c:468 nano.c:482
+#, c-format
+msgid "Read %d lines"
+msgstr "%d Zeilen gelesen"
+
+#: nano.c:500 nano.c:1161 nano.c:1179
+#, c-format
+msgid "\"%s\" not found"
+msgstr "\"%s\" nicht gefunden"
+
+#. We have a new file
+#: nano.c:504
+msgid "New File"
+msgstr "Neue Datei"
+
+#: nano.c:513
+#, c-format
+msgid "File \"%s\" is a directory"
+msgstr "Datei \"%s\" ist ein Verzeichnis"
+
+#: nano.c:518
+msgid "Reading File"
+msgstr "Lese Datei"
+
+#: nano.c:531
+msgid "File to insert [from ./] "
+msgstr "Datei zum Einfügen [von ./] "
+
+#: nano.c:546 nano.c:1601 nano.c:1765 nano.c:1916
+msgid "Cancelled"
+msgstr "Abgebrochen"
+
+#: nano.c:556
+msgid ""
+"Usage: nano [GNU long option] [option] +LINE <file>\n"
+"\n"
+msgstr ""
+"Aufruf: nano [GNU lange Option] [Option] +ZEILE <Datei>\n"
+"\n"
+
+#: nano.c:557
+msgid "Option\t\tLong option\t\tMeaning\n"
+msgstr "Option\t\tlange Option\t\tBedeutung\n"
+
+#: nano.c:560
+msgid " -V \t\t--version\t\tPrint version information and exit\n"
+msgstr " -V \t\t--version\t\tVersionsinfo ausgeben und beenden\n"
+
+#: nano.c:562
+msgid " -c \t\t--const\t\t\tConstantly show cursor position\n"
+msgstr " -c \t\t--const\t\t\tCursorposition ständig anzeigen\n"
+
+#: nano.c:564
+msgid " -h \t\t--help\t\t\tShow this message\n"
+msgstr " -h \t\t--help\t\t\tDiese Meldung anzeigen\n"
+
+#: nano.c:566
+msgid " -i \t\t--autoindent\t\tAutomatically indent new lines\n"
+msgstr " -i \t\t--autoindent\t\tNeue Zeilen automatisch einrücken\n"
+
+#: nano.c:568
+msgid " -l \t\t--nofollow\t\tDon't follow symbolic links, overwrite.\n"
+msgstr ""
+
+#: nano.c:571
+msgid " -m \t\t--mouse\t\t\tEnable mouse\n"
+msgstr " -m \t\t--mouse\t\t\tMaus aktivieren\n"
+
+#: nano.c:576
+msgid ""
+" -r [#cols] \t--fill=[#cols]\t\tSet fill cols to (wrap lines at) #cols\n"
+msgstr ""
+" -r [#Spalten] \t--fill=[#Spalten]\t\tSpalten auffüllen (Zeilenumbruch bei) "
+"#Spalten\n"
+
+#: nano.c:578
+msgid " -p\t \t--pico\t\t\tMake bottom 2 lines more Pico-like\n"
+msgstr " -p\t \t--pico\t\t\tErscheinungsbild von Pico stärker imitieren\n"
+
+#: nano.c:580
+msgid " -s [prog] \t--speller=[prog]\tEnable alternate speller\n"
+msgstr ""
+" -s [Programm] \t--speller=[Programm]\tAlternative Rechtschreibprüfung\n"
+
+#: nano.c:582
+msgid " -t \t\t--tempfile\t\tAuto save on exit, don't prompt\n"
+msgstr " -t \t\t--tempfile\t\tBeim Beenden ohne Rückfrage speichern\n"
+
+#: nano.c:584
+msgid " -v \t\t--view\t\t\tView (read only) mode\n"
+msgstr ""
+" -v \t\t--view\t\t\tNur zum Lesen öffnen (keine Veränderungen möglich)\n"
+
+#: nano.c:586
+msgid " -w \t\t--nowrap\t\tDon't wrap long lines\n"
+msgstr " -w \t\t--nowrap\t\tLange Zeilen nicht in neue Zeilen umbrechen\n"
+
+#: nano.c:588
+msgid " -x \t\t--nohelp\t\tDon't show help window\n"
+msgstr " -x \t\t--nohelp\t\tHilfe-Fenster nicht anzeigen\n"
+
+#: nano.c:590
+msgid " -z \t\t--suspend\t\tEnable suspend\n"
+msgstr ""
+" -z \t\t--suspend\t\tSuspend (anhalten und zurück zur Shell) aktivieren\n"
+
+#: nano.c:592
+msgid " +LINE\t\t\t\t\tStart at line number LINE\n"
+msgstr " +ZEILE\t\t\t\t\tBei Zeile ZEILE beginnen\n"
+
+#: nano.c:594
+msgid ""
+"Usage: nano [option] +LINE <file>\n"
+"\n"
+msgstr ""
+"Aufruf: nano [Option] +ZEILE <Datei>\n"
+"\n"
+
+#: nano.c:595
+msgid "Option\t\tMeaning\n"
+msgstr "Option\t\tBedeutung\n"
+
+#: nano.c:596
+msgid " -V \t\tPrint version information and exit\n"
+msgstr " -V \t\tVersionsinfo ausgeben und beenden\n"
+
+#: nano.c:597
+msgid " -c \t\tConstantly show cursor position\n"
+msgstr " -c \t\tCursorposition ständig anzeigen\n"
+
+#: nano.c:598
+msgid " -h \t\tShow this message\n"
+msgstr " -h \t\tDiese Meldung anzeigen\n"
+
+#: nano.c:599
+msgid " -i \t\tAutomatically indent new lines\n"
+msgstr " -i \t\tNeue Zeilen automatisch einrücken\n"
+
+#: nano.c:601
+msgid " -l \t\tDon't follow symbolic links, overwrite.\n"
+msgstr ""
+
+#: nano.c:604
+msgid " -m \t\tEnable mouse\n"
+msgstr " -m \t\tMaus aktivieren\n"
+
+#: nano.c:608
+msgid " -r [#cols] \tSet fill cols to (wrap lines at) #cols\n"
+msgstr " -r [#Spalten] \tSpalten auffüllen (Zeilenumbruch bei) #Spalten\n"
+
+#: nano.c:609
+msgid " -s [prog]  \tEnable alternate speller\n"
+msgstr " -s [Programm]  \tAlternative Rechtschreibprüfung\n"
+
+#: nano.c:610
+msgid " -p \t\tMake bottom 2 lines more Pico-like\n"
+msgstr " -p \t\tErscheinungsbild von Pico stärker imitieren\n"
+
+#: nano.c:611
+msgid " -t \t\tAuto save on exit, don't prompt\n"
+msgstr " -t \t\tBeim Beenden ohne Rückfrage speichern\n"
+
+#: nano.c:612
+msgid " -v \t\tView (read only) mode\n"
+msgstr " -v \t\tNur zum Lesen öffnen (keine Veränderungen möglich)\n"
+
+#: nano.c:613
+msgid " -w \t\tDon't wrap long lines\n"
+msgstr " -w \t\tLange Zeilen nicht in neue Zeilen umbrechen\n"
+
+#: nano.c:614
+msgid " -x \t\tDon't show help window\n"
+msgstr " -x \t\tHilfe-Fenster nicht anzeigen\n"
+
+#: nano.c:615
+msgid " -z \t\tEnable suspend\n"
+msgstr " -z \t\tSuspend (anhalten und zurück zur Shell) aktivieren\n"
+
+#: nano.c:616
+msgid " +LINE\t\tStart at line number LINE\n"
+msgstr " +ZEILE\t\tBei Zeile ZEILE beginnen\n"
+
+#: nano.c:623
+#, c-format
+msgid " nano version %s by Chris Allegretta (compiled %s, %s)\n"
+msgstr " nano Version %s von Chris Allegretta (compiliert um %s, %s)\n"
+
+#: nano.c:625
+msgid " Email: nano@asty.org\tWeb: http://www.asty.org/nano\n"
+msgstr " Email: nano@asty.org\tWWW: http://www.asty.org/nano\n"
+
+#: nano.c:709
+msgid "Mark Set"
+msgstr "Markierung gesetzt"
+
+#: nano.c:714
+msgid "Mark UNset"
+msgstr "Markierung gelöscht"
+
+#: nano.c:1052
+#, c-format
+msgid "check_wrap called with inptr->data=\"%s\"\n"
+msgstr "check_wrap aufgerufen mit inptr->data=\"%s\"\n"
+
+#: nano.c:1089
+#, c-format
+msgid "Case Sensitive Search%s"
+msgstr "Suche mit Unterscheidung von Groß- und Kleinschreibung%s"
+
+#: nano.c:1090
+#, c-format
+msgid "Search%s"
+msgstr "Suche%s"
+
+#: nano.c:1094
+msgid "Search Cancelled"
+msgstr "Suche abgebrochen"
+
+#: nano.c:1175
+msgid "Search Wrapped"
+msgstr "Suche in neue Zeile umgebrochen"
+
+#: nano.c:1225
+#, c-format
+msgid "Replaced %d occurences"
+msgstr "%d mal Ersetzung vorgenommen"
+
+#: nano.c:1227
+msgid "Replaced 1 occurence"
+msgstr "1 Ersetzung vorgenommen"
+
+#: nano.c:1245 nano.c:1267 nano.c:1290
+msgid "Replace Cancelled"
+msgstr "Ersetzung abgebrochen"
+
+#: nano.c:1263
+#, c-format
+msgid "Replace with [%s]"
+msgstr "Ersetzen mit [%s]"
+
+#. last_search is empty
+#: nano.c:1288
+msgid "Replace with"
+msgstr "Ersetzen mit"
+
+#: nano.c:1329
+msgid "Replace this instance?"
+msgstr "Ersetzen?"
+
+#: nano.c:1416
+#, c-format
+msgid "current->data now = \"%s\"\n"
+msgstr "current->data jetzt = \"%s\"\n"
+
+#: nano.c:1461
+#, c-format
+msgid "After, data = \"%s\"\n"
+msgstr "Nachher, data = \"%s\"\n"
+
+#. Ask for it
+#: nano.c:1529
+msgid "Enter line number"
+msgstr "Zeilennummer eingeben"
+
+#: nano.c:1531
+msgid "Aborted"
+msgstr "Abgebrochen"
+
+#: nano.c:1551
+msgid "Come on, be reasonable"
+msgstr "Komm schon, sei vernünftig"
+
+#: nano.c:1556
+#, c-format
+msgid "Only %d lines available, skipping to last line"
+msgstr "Nur %d Zeilen vorhanden, springe zur letzten Zeile"
+
+#: nano.c:1613 nano.c:1629 nano.c:1641 nano.c:1658 nano.c:1664
+#, c-format
+msgid "Could not open file for writing: %s"
+msgstr "Konnte nicht in Datei schreiben: %s"
+
+#: nano.c:1621
+msgid "Could not open file: Path length exceeded."
+msgstr "Konnte Datei nicht öffnen: Pfad zu lang."
+
+#: nano.c:1646
+#, c-format
+msgid "Wrote >%s\n"
+msgstr "Schrieb >%s\n"
+
+#: nano.c:1673
+#, c-format
+msgid "Could not close %s: %s"
+msgstr "Konnte %s nicht schließen: %s"
+
+#. Try a rename??
+#: nano.c:1694 nano.c:1705 nano.c:1710
+#, c-format
+msgid "Could not open %s for writing: %s"
+msgstr "Konnte nicht in %s schreiben: %s"
+
+#: nano.c:1716
+#, c-format
+msgid "Could not set permissions %o on %s: %s"
+msgstr "Konnte Rechte %o für %s nicht setzen: %s"
+
+#: nano.c:1723
+#, c-format
+msgid "Wrote %d lines"
+msgstr "%d Zeilen geschrieben"
+
+#: nano.c:1744
+msgid "File Name to write"
+msgstr "Dateiname zum speichern"
+
+#: nano.c:1749
+#, c-format
+msgid "filename is %s"
+msgstr "Dateiname ist %s"
+
+#: nano.c:1754
+msgid "File exists, OVERWRITE ?"
+msgstr ""
+
+#: nano.c:1783
+msgid "Error deleting tempfile, ack!"
+msgstr "Konnte temporäre Datei nicht löschen"
+
+#: nano.c:1796 nano.c:1846
+#, c-format
+msgid "Could not create a temporary filename: %s"
+msgstr "Konnte keine temporäre Datei erzeugen: %s"
+
+#: nano.c:1818 nano.c:1868
+#, c-format
+msgid "Could not invoke spell program \"%s\""
+msgstr "Konnte Rechtschreibprogramm \"%s\" nicht aufrufen"
+
+#. Why 32512? I dont know!
+#: nano.c:1824 nano.c:1874
+msgid "Could not invoke \"ispell\""
+msgstr "Konnte \"ispell\" nicht aufrufen"
+
+#: nano.c:1836 nano.c:1886
+msgid "Finished checking spelling"
+msgstr "Rechtschreibprüfung abgeschlossen"
+
+#: nano.c:1903
+msgid "Save modified buffer (ANSWERING \"No\" WILL DESTROY CHANGES) ? "
+msgstr "Veränderten Puffer speichern (\"Nein\" verwirft die Änderungen) ? "
+
+#: nano.c:2027
+msgid "Cannot resize top win"
+msgstr "Kann die Größe des oberen Fensters nicht verändern"
+
+#: nano.c:2029
+msgid "Cannot move top win"
+msgstr "Kann oberes Fenster nicht verschieben"
+
+#: nano.c:2031
+msgid "Cannot resize edit win"
+msgstr "Kann Größe des Bearbeitungsfensters nicht verändern"
+
+#: nano.c:2033
+msgid "Cannot move edit win"
+msgstr "Kann Bearbeitungsfenster nicht verschieben"
+
+#: nano.c:2035
+msgid "Cannot resize bottom win"
+msgstr "Kann Größe des unteren Fensters nicht verändern"
+
+#: nano.c:2037
+msgid "Cannot move bottom win"
+msgstr "Kann unteres Fenster nicht verschieben"
+
+#: nano.c:2468
+msgid "Main: set up windows\n"
+msgstr "Hauptprogramm: Fenster konfigurieren\n"
+
+#: nano.c:2490
+msgid "Main: bottom win\n"
+msgstr "Hauptprogramm: unteres Fenster\n"
+
+#: nano.c:2496
+msgid "Main: open file\n"
+msgstr "Hauptprogramm: Datei öffnen\n"
+
+#: nano.c:2564
+#, c-format
+msgid "I got Alt-[-%c! (%d)\n"
+msgstr "Erhielt Alt-[-%c! (%d)\n"
+
+#: nano.c:2580
+#, c-format
+msgid "I got Alt-%c! (%d)\n"
+msgstr "Erhielt Alt-%c! (%d)\n"
+
+#: winio.c:116
+#, c-format
+msgid "actual_x for xplus=%d returned %d\n"
+msgstr "actual_x für xplus=%d gab %d zurück\n"
+
+#: winio.c:402
+#, c-format
+msgid "input '%c' (%d)\n"
+msgstr "Eingabe '%c' (%d)\n"
+
+#: winio.c:438
+msgid "New Buffer"
+msgstr "Neuer Puffer"
+
+#: winio.c:441
+msgid "  File: ..."
+msgstr "  Datei: ..."
+
+#: winio.c:449
+msgid "Modified"
+msgstr "Verändert"
+
+#: winio.c:800
+#, c-format
+msgid "Moved to (%d, %d) in edit buffer\n"
+msgstr "Nach (%d, %d) im Bearbeitungspuffer verschoben\n"
+
+#: winio.c:811
+#, c-format
+msgid "current->data = \"%s\"\n"
+msgstr "current->data = \"%s\"\n"
+
+#: winio.c:854
+#, c-format
+msgid "I got \"%s\"\n"
+msgstr "Erhielt \"%s\"\n"
+
+#: winio.c:878
+msgid " Y"
+msgstr " J"
+
+#: winio.c:878
+msgid "Yes"
+msgstr "Ja"
+
+#: winio.c:880
+msgid " A"
+msgstr " A"
+
+#: winio.c:880
+msgid "All"
+msgstr "Alle"
+
+#: winio.c:882
+msgid " N"
+msgstr " N"
+
+#: winio.c:882
+msgid "No"
+msgstr "Nein"
+
+#: winio.c:883
+msgid "^C"
+msgstr "^C"
+
+#: winio.c:1027
+#, c-format
+msgid "do_cursorpos: linepct = %f, bytepct = %f\n"
+msgstr "do_cursorpos: linepct = %f, bytepct = %f\n"
+
+#: winio.c:1031
+msgid "line %d of %d (%.0f%%), character %d of %d (%.0f%%)"
+msgstr "Zeile %d von %d (%.0f%%), Zeichen %d von %d (%.0f%%)"
+
+#: winio.c:1157
+msgid "Dumping file buffer to stderr...\n"
+msgstr "Gebe Datei Puffer nach stderr aus...\n"
+
+#: winio.c:1159
+msgid "Dumping cutbuffer to stderr...\n"
+msgstr "Gebe Inhalt der Zwischenablage nach stderr aus...\n"
+
+#: winio.c:1161
+msgid "Dumping a buffer to stderr...\n"
+msgstr "Gebe einen Puffer nach stderr aus...\n"
+
+#~ msgid "nano.save"
+#~ msgstr "nano.save"
+
+#~ msgid "nano: realloc: out of memory!"
+#~ msgstr "nano: realloc: Kein Speicher verfügbar!"
+
+#~ msgid "%s: %s"
+#~ msgstr "%s: %s"
+
+#~ msgid " [%s]"
+#~ msgstr " [%s]"
+
+#~ msgid "$"
+#~ msgstr "ATS "
+
+#~ msgid ".XXXXXX"
+#~ msgstr ".XXXXXX"
+
+#~ msgid "\n"
+#~ msgstr "\n"
+
+#~ msgid "nano."
+#~ msgstr "nano."
+
+#~ msgid "%s %s"
+#~ msgstr "%s %s"
+
+#~ msgid "ispell %s"
+#~ msgstr "ispell %s"
+
+#~ msgid "Justify Complete"
+#~ msgstr "Ausrichten abgeschlossen"
+
+#~ msgid "^%c\t"
+#~ msgstr "^%c\t"
+
+#~ msgid "(F%d)\t"
+#~ msgstr "(F%d)\t"
+
+#~ msgid "\t"
+#~ msgstr "\t"
+
+#~ msgid "(@%c)\t"
+#~ msgstr "(@%c)\t"
+
+#~ msgid "%s\n"
+#~ msgstr "%s\n"
+
+#~ msgid "version"
+#~ msgstr "Version"
+
+#~ msgid "const"
+#~ msgstr "const"
+
+#~ msgid "suspend"
+#~ msgstr "suspend"
+
+#~ msgid "nowrap"
+#~ msgstr "nowrap"
+
+#~ msgid "nohelp"
+#~ msgstr "nohelp"
+
+#~ msgid "help"
+#~ msgstr "help"
+
+#~ msgid "autoindent"
+#~ msgstr "autoindent"
+
+#~ msgid "tempfile"
+#~ msgstr "tempfile"
+
+#~ msgid "speller"
+#~ msgstr "speller"
+
+#~ msgid "fill"
+#~ msgstr "fille"
+
+#~ msgid "mouse"
+#~ msgstr "mouse"
+
+#~ msgid "pico"
+#~ msgstr "pico"
+
+#, fuzzy
+#~ msgid "?Vchilmpr:s:tvwxz"
+#~ msgstr "?Vchimpr:s:tvwxz"
+
+#, fuzzy
+#~ msgid "h?Vcilmpr:s:tvwxz"
+#~ msgstr "h?Vcimpr:s:tvwx"
+
+#~ msgid "I got %c (%d)!\n"
+#~ msgstr "Erhielt %c (%d)!\n"
+
+#~ msgid "File: "
+#~ msgstr "Datei: "
+
+#~ msgid " %-11s"
+#~ msgstr " %-11s"
+
+#~ msgid "^%c"
+#~ msgstr "^%c"
+
+#~ msgid ": "
+#~ msgstr ": "
+
+#~ msgid "[ "
+#~ msgstr "[ "
+
+#~ msgid " ]"
+#~ msgstr " ]"
+
+#~ msgid "(%ld) %s\n"
+#~ msgstr "(%ld) %s\n"
+
+#~ msgid "Suspend"
+#~ msgstr "Suspend"
+
+#~ msgid "Suspend nano if suspend is enabled"
+#~ msgstr "nano anhalten und zur Shell zurückkehren (nur wenn aktiviert)"
+
+#~ msgid "xplustabs for current_x=%d returned %d\n"
+#~ msgstr "xplustabs für current_x=%d gab %d zurück\n"
diff --git a/po/es.gmo b/po/es.gmo
new file mode 100644 (file)
index 0000000..2d1ac62
Binary files /dev/null and b/po/es.gmo differ
diff --git a/po/es.po b/po/es.po
new file mode 100644 (file)
index 0000000..1248a60
--- /dev/null
+++ b/po/es.po
@@ -0,0 +1,818 @@
+# Spanish Messages for the nano editor.
+# Jordi Mallach <jordi@sindominio.net> January 9, 2000
+# Copyright (C) 2000 Free Software Foundation, Inc.
+# Jordi Mallach <jordi@sindominio.net>, 2000.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: 0.9.9\n"
+"POT-Creation-Date: 2000-05-31 10:00-0500\n"
+"PO-Revision-Date: 2000-06-04 20:21+0200\n"
+"Last-Translator: Jordi Mallach <jordi@sindominio.net>\n"
+"Language-Team: Spanish <jordi@sindominio.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+#: cut.c:43
+#, c-format
+msgid "add_to_cutbuffer called with inptr->data = %s\n"
+msgstr "add_to_cutbuffer llamado con inptr->data = %s\n"
+
+#: cut.c:146
+msgid "Blew away cutbuffer =)\n"
+msgstr "Nos hemos cargado el cutbuffer =)\n"
+
+#: global.c:110
+msgid "Invoke the help menu"
+msgstr "Invocar el menú de ayuda"
+
+#: global.c:111
+msgid "Write the current file to disk"
+msgstr "Escribir el fichero actual a disco"
+
+#: global.c:112
+msgid "Exit from nano"
+msgstr "Salir de nano"
+
+#: global.c:113
+msgid "Goto a specific line number"
+msgstr "Ir a un número de línea en concreto"
+
+#: global.c:114
+msgid "Justify the current paragraph"
+msgstr "Justificar el párrafo actual"
+
+#: global.c:115
+msgid "Replace text within the editor"
+msgstr "Reemplazar texto en el editor"
+
+#: global.c:116
+msgid "Insert another file into the current one"
+msgstr "Insertar otro fichero en el actual"
+
+#: global.c:117
+msgid "Search for text within the editor"
+msgstr "Buscar un texto en el editor"
+
+#: global.c:118
+msgid "Move to the previous screen"
+msgstr "Moverse a la página anterior"
+
+#: global.c:119
+msgid "Move to the next screen"
+msgstr "Moverse a la página siguiente"
+
+#: global.c:120
+msgid "Cut the current line and store it in the cutbuffer"
+msgstr "Cortar la línea actual y guardarla en el cutbuffer"
+
+#: global.c:121
+msgid "Uncut from the cutbuffer into the current line"
+msgstr "Pegar el cutbuffer en la línea actual"
+
+#: global.c:122
+msgid "Show the posititon of the cursor"
+msgstr "Mostrar la posición del cursor"
+
+#: global.c:123
+msgid "Invoke the spell checker (if available)"
+msgstr "Invocar el corrector ortográfico (si está disponible)"
+
+#: global.c:124
+msgid "Move up one line"
+msgstr "Moverse una línea hacia arriba"
+
+#: global.c:125
+msgid "Move down one line"
+msgstr "Moverse una línea hacia abajo"
+
+#: global.c:126
+msgid "Move forward one character"
+msgstr "Moverse hacia adelante un carácter"
+
+#: global.c:127
+msgid "Move back one character"
+msgstr "Moverse hacia atrás un carácter"
+
+#: global.c:128
+msgid "Move to the beginning of the current line"
+msgstr "Moverse al principio de la línea actual"
+
+#: global.c:129
+msgid "Move to the end of the current line"
+msgstr "Moverse al final de la línea actual"
+
+#: global.c:130
+msgid "Go to the first line of the file"
+msgstr "Ir a la primera línea del fichero"
+
+#: global.c:131
+msgid "Go to the last line of the file"
+msgstr "Ir a la última línea del fichero"
+
+#: global.c:132
+msgid "Refresh (redraw) the current screen"
+msgstr "Redibujar la pantalla actual"
+
+#: global.c:133
+msgid "Mark text at the current cursor location"
+msgstr "Marcar texto en la posición actual del cursor"
+
+#: global.c:134
+msgid "Delete the character under the cursor"
+msgstr "Borrar el carácter bajo el cursor"
+
+#: global.c:136
+msgid "Delete the character to the left of the cursor"
+msgstr "Borrar el carácter a la izquierda del cursor"
+
+#: global.c:137
+msgid "Insert a tab character"
+msgstr "Insertar un carácter tab"
+
+#: global.c:138
+msgid "Insert a carriage return at the cursor position"
+msgstr "Insertar un retorno de carro en la posición del cursor"
+
+#: global.c:140
+msgid "Make the current search or replace case (in)sensitive"
+msgstr "Hacer que la búsqueda actual sea sensible a mayúsculas"
+
+#: global.c:141
+msgid "Cancel the current function"
+msgstr "Cancelar la función actual"
+
+#: global.c:146 global.c:256 global.c:322
+msgid "Get Help"
+msgstr "Ver Ayuda"
+
+#: global.c:149 global.c:157
+msgid "WriteOut"
+msgstr "Guardar"
+
+#: global.c:153 global.c:311
+msgid "Exit"
+msgstr "Salir"
+
+#: global.c:161 global.c:252
+msgid "Goto Line"
+msgstr "Ir a Línea"
+
+#: global.c:166 global.c:244
+msgid "Justify"
+msgstr "Justificar"
+
+#: global.c:169 global.c:240
+msgid "Replace"
+msgstr "Reemplazar"
+
+#: global.c:173
+msgid "Read File"
+msgstr "L Fichero"
+
+#: global.c:177
+msgid "Where Is"
+msgstr "Buscar"
+
+#: global.c:181 global.c:303
+msgid "Prev Page"
+msgstr "Pag Prev"
+
+#: global.c:185 global.c:307
+msgid "Next Page"
+msgstr "Pag Sig"
+
+#: global.c:189
+msgid "Cut Text"
+msgstr "CortarTxt"
+
+#: global.c:192
+msgid "UnCut Txt"
+msgstr "PegarTxt"
+
+#: global.c:196
+msgid "Cur Pos"
+msgstr "Pos Act"
+
+#: global.c:200
+msgid "To Spell"
+msgstr "Ortografía"
+
+#: global.c:204
+msgid "Up"
+msgstr "Arriba"
+
+#: global.c:207
+msgid "Down"
+msgstr "Abajo"
+
+#: global.c:210
+msgid "Forward"
+msgstr "Adelante"
+
+#: global.c:213
+msgid "Back"
+msgstr "Atrás"
+
+#: global.c:216
+msgid "Home"
+msgstr "Inicio"
+
+#: global.c:219
+msgid "End"
+msgstr "Fin"
+
+#: global.c:222
+msgid "Refresh"
+msgstr "Refrescar"
+
+#: global.c:225
+msgid "Mark Text"
+msgstr "MarcarTxt"
+
+#: global.c:228
+msgid "Delete"
+msgstr "Suprimir"
+
+#: global.c:232
+msgid "Backspace"
+msgstr "Borrar"
+
+#: global.c:236
+msgid "Tab"
+msgstr "Tab"
+
+#: global.c:247
+msgid "Enter"
+msgstr "Enter"
+
+#: global.c:260 global.c:277 global.c:293
+msgid "First Line"
+msgstr "Primera Línea"
+
+#: global.c:263 global.c:280 global.c:296
+msgid "Last Line"
+msgstr "Última Línea"
+
+#: global.c:266 global.c:283
+msgid "Case Sens"
+msgstr "May/Min"
+
+#: global.c:270
+#, fuzzy
+msgid "To Replace"
+msgstr "Reemplazar"
+
+#: global.c:273 global.c:289 global.c:299 global.c:315 global.c:319
+#: global.c:325 winio.c:883
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: global.c:286
+#, fuzzy
+msgid "To Search"
+msgstr "Buscar%s"
+
+#: nano.c:114
+msgid ""
+"\n"
+"Buffer written to 'nano.save'\n"
+msgstr ""
+"\n"
+"Buffer escrito en 'nano.save'\n"
+
+#: nano.c:127
+msgid "nano: malloc: out of memory!"
+msgstr "nano: malloc: memoria agotada!"
+
+#: nano.c:144
+msgid "Key illegal in VIEW mode"
+msgstr "Tecla ilegal en modo VISUALIZACIÓN"
+
+#: nano.c:185
+msgid ""
+" nano help text\n"
+"\n"
+" The nano editor is designed to emulate the functionality and ease-of-use of "
+"the UW Pico text editor.  There are four main sections of the editor: The "
+"top line shows the program version, the current filename being edited, and "
+"whether or not the file has been modified.  Next is the main editor window "
+"showing the file being edited.  The status line is the third line from the "
+"bottom and shows important messages. The bottom two lines show the most "
+"commonly used shortcuts in the editor.\n"
+"\n"
+" The notation for shortcuts is as follows: Control-key sequences are notated "
+"with a caret (^) symbol.  Alt-key sequences are notated with an at (@) "
+"symbol.  The following keystrokes are available in the main editor window. "
+"Optional keys are shown in parentheses:\n"
+"\n"
+msgstr ""
+" texto de ayuda de nano\n"
+"\n"
+" El editor nano está diseñado para emular la funcionalidad y la facilidad de "
+"uso de Pico, el editor de texto de la UW. Hay cuatro secciones en el editor: "
+"la línea superior muestra la versión del programa, el nombre del fichero "
+"editado y si el fichero ha sido o no modificado. También tenemos la ventana "
+"principal de edición, que muestra el fichero que está siendo editado. La "
+"línea de estado es la tercera desde abajo y muestra mensajes importantes. "
+"Las últimas dos líneas muestran los atajos más usados en el editor.\n"
+"\n"
+" La notación de los atajos es la siguiente: las secuencias con la tecla "
+"Control están anotadas con el símbolo circunflejo (^). Las secuencias con la "
+"tecla Alt están anotadas con el símbolo arroba (@). Las siguientes "
+"combinaciones están disponibles en la ventana principal. Las teclas "
+"opcionales están representadas entre paréntesis:\n"
+"\n"
+
+#: nano.c:286
+msgid "free_node(): free'd a node, YAY!\n"
+msgstr "free_node(): liberado un nodo, YEAH!\n"
+
+#: nano.c:291
+msgid "free_node(): free'd last node.\n"
+msgstr "free_node(): liberado el último nodo.\n"
+
+#: nano.c:407
+msgid "read_line: not on first line and prev is NULL"
+msgstr "read_line: no estamos en la primera línea y la anterior es NULL"
+
+#: nano.c:468 nano.c:482
+#, c-format
+msgid "Read %d lines"
+msgstr "%d líneas leídas"
+
+#: nano.c:500 nano.c:1161 nano.c:1179
+#, c-format
+msgid "\"%s\" not found"
+msgstr "\"%s\" no encontrado"
+
+#. We have a new file
+#: nano.c:504
+msgid "New File"
+msgstr "Nuevo Fichero"
+
+#: nano.c:513
+#, c-format
+msgid "File \"%s\" is a directory"
+msgstr "Fichero \"%s\" es un directorio"
+
+#: nano.c:518
+msgid "Reading File"
+msgstr "Leyendo Fichero"
+
+#: nano.c:531
+msgid "File to insert [from ./] "
+msgstr "Fichero a insertar [desde ./] "
+
+#: nano.c:546 nano.c:1601 nano.c:1765 nano.c:1916
+msgid "Cancelled"
+msgstr "Cancelado"
+
+#: nano.c:556
+msgid ""
+"Usage: nano [GNU long option] [option] +LINE <file>\n"
+"\n"
+msgstr ""
+"Uso: nano [opción larga GNU] [opción] +LÍNEA <fichero>\n"
+"\n"
+
+#: nano.c:557
+msgid "Option\t\tLong option\t\tMeaning\n"
+msgstr "Opcion\t\tOpcion larga\t\tSignificado\n"
+
+#: nano.c:560
+msgid " -V \t\t--version\t\tPrint version information and exit\n"
+msgstr " -V \t\t--version\t\tImprimir versión y salir\n"
+
+#: nano.c:562
+msgid " -c \t\t--const\t\t\tConstantly show cursor position\n"
+msgstr " -c \t\t--const\t\t\tMostrar siempre la posición del cursor\n"
+
+#: nano.c:564
+msgid " -h \t\t--help\t\t\tShow this message\n"
+msgstr " -h \t\t--help\t\t\tMostrar este mensaje\n"
+
+#: nano.c:566
+msgid " -i \t\t--autoindent\t\tAutomatically indent new lines\n"
+msgstr " -i \t\t--autoindent\t\tIndentar automáticamente nuevas líneas\n"
+
+#: nano.c:568
+msgid " -l \t\t--nofollow\t\tDon't follow symbolic links, overwrite.\n"
+msgstr ""
+" -l \t\t--nofollow\t\tNo seguir enlaces simbólicos, sobreescribirlos.\n"
+
+#: nano.c:571
+msgid " -m \t\t--mouse\t\t\tEnable mouse\n"
+msgstr " -m \t\t--mouse\t\t\tHabilitar ratón\n"
+
+#: nano.c:576
+msgid ""
+" -r [#cols] \t--fill=[#cols]\t\tSet fill cols to (wrap lines at) #cols\n"
+msgstr " -r [#cols] \t--fill=[#cols]\t\tRellenar columnas (wrapear en) #cols\n"
+
+#: nano.c:578
+msgid " -p\t \t--pico\t\t\tMake bottom 2 lines more Pico-like\n"
+msgstr " -p\t \t--pico\t\t\tHacer el menú más parecido a Pico\n"
+
+#: nano.c:580
+msgid " -s [prog] \t--speller=[prog]\tEnable alternate speller\n"
+msgstr " -s [prog] \t--speller=[prog]\tHabilitar corrector alternativo\n"
+
+#: nano.c:582
+msgid " -t \t\t--tempfile\t\tAuto save on exit, don't prompt\n"
+msgstr " -t \t\t--tempfile\t\tAutosalvar al salir, sin preguntar\n"
+
+#: nano.c:584
+msgid " -v \t\t--view\t\t\tView (read only) mode\n"
+msgstr " -v \t\t--view\t\t\tModo visualización (sólo lectura)\n"
+
+#: nano.c:586
+msgid " -w \t\t--nowrap\t\tDon't wrap long lines\n"
+msgstr " -w \t\t--nowrap\t\tNo wrapear líneas largas\n"
+
+#: nano.c:588
+msgid " -x \t\t--nohelp\t\tDon't show help window\n"
+msgstr " -x \t\t--nohelp\t\tNo mostrar la ventana de ayuda\n"
+
+#: nano.c:590
+msgid " -z \t\t--suspend\t\tEnable suspend\n"
+msgstr " -z \t\t--suspend\t\tHabilitar suspensión\n"
+
+#: nano.c:592
+msgid " +LINE\t\t\t\t\tStart at line number LINE\n"
+msgstr " +LINE\t\t\t\t\tComenzar en la línea número LÍNEA\n"
+
+#: nano.c:594
+msgid ""
+"Usage: nano [option] +LINE <file>\n"
+"\n"
+msgstr ""
+"Uso: nano [opción] +LÍNEA <fichero>\n"
+"\n"
+
+#: nano.c:595
+msgid "Option\t\tMeaning\n"
+msgstr "Opción\t\tSignificado\n"
+
+#: nano.c:596
+msgid " -V \t\tPrint version information and exit\n"
+msgstr " -V \t\tImprimir información sobre la versión y salir\n"
+
+#: nano.c:597
+msgid " -c \t\tConstantly show cursor position\n"
+msgstr " -c \t\tMostrar constantemente la posición del cursor\n"
+
+#: nano.c:598
+msgid " -h \t\tShow this message\n"
+msgstr " -h \t\tMostrar este mensaje\n"
+
+#: nano.c:599
+msgid " -i \t\tAutomatically indent new lines\n"
+msgstr " -v \t\tIndentar automáticamente nuevas líneas\n"
+
+#: nano.c:601
+msgid " -l \t\tDon't follow symbolic links, overwrite.\n"
+msgstr " -l \t\tNo seguir enlaces simbólicos, sobreescribirlos.\n"
+
+#: nano.c:604
+msgid " -m \t\tEnable mouse\n"
+msgstr " -m \t\tHabilitar ratón\n"
+
+#: nano.c:608
+msgid " -r [#cols] \tSet fill cols to (wrap lines at) #cols\n"
+msgstr " -r [#cols] \tRellenar columnas (wrapear líneas en) #cols\n"
+
+#: nano.c:609
+msgid " -s [prog]  \tEnable alternate speller\n"
+msgstr " -s [prog] \tHabilitar corrector alternativo\n"
+
+#: nano.c:610
+msgid " -p \t\tMake bottom 2 lines more Pico-like\n"
+msgstr " -p \t\tHacer el menú más parecido a Pico\n"
+
+#: nano.c:611
+msgid " -t \t\tAuto save on exit, don't prompt\n"
+msgstr " -t \t\tAutosalvar al salir, no preguntar\n"
+
+#: nano.c:612
+msgid " -v \t\tView (read only) mode\n"
+msgstr " -v \t\tModo visualización (sólo lectura)\n"
+
+#: nano.c:613
+msgid " -w \t\tDon't wrap long lines\n"
+msgstr " -w \t\tNo wrapear líneas largas\n"
+
+#: nano.c:614
+msgid " -x \t\tDon't show help window\n"
+msgstr " -x \t\tNo mostrar la ventana de ayuda\n"
+
+#: nano.c:615
+msgid " -z \t\tEnable suspend\n"
+msgstr " -z \t\tHabilitar suspensión\n"
+
+#: nano.c:616
+msgid " +LINE\t\tStart at line number LINE\n"
+msgstr " +LÍNEA\t\tComenzar en la línea número LÍNEA\n"
+
+#: nano.c:623
+#, c-format
+msgid " nano version %s by Chris Allegretta (compiled %s, %s)\n"
+msgstr " nano versión %s por Chris Allegretta (compilado %s, %s)\n"
+
+#: nano.c:625
+msgid " Email: nano@asty.org\tWeb: http://www.asty.org/nano\n"
+msgstr " Correo-e: nano@asty.org\tWeb: http://www.asty.org/nano\n"
+
+#: nano.c:709
+msgid "Mark Set"
+msgstr "Marca Establecida"
+
+#: nano.c:714
+msgid "Mark UNset"
+msgstr "Marca Borrada"
+
+#: nano.c:1052
+#, c-format
+msgid "check_wrap called with inptr->data=\"%s\"\n"
+msgstr "check_wrap llamada con inptr->data=\"%s\"\n"
+
+#: nano.c:1089
+#, c-format
+msgid "Case Sensitive Search%s"
+msgstr "Búsqueda con Mayúsculas/Minúsculas%s"
+
+#: nano.c:1090
+#, c-format
+msgid "Search%s"
+msgstr "Buscar%s"
+
+#: nano.c:1094
+msgid "Search Cancelled"
+msgstr "Búsqueda Cancelada"
+
+#: nano.c:1175
+msgid "Search Wrapped"
+msgstr "Búsqueda Recomenzada"
+
+#: nano.c:1225
+#, c-format
+msgid "Replaced %d occurences"
+msgstr "%d ocurrencias reemplazadas"
+
+#: nano.c:1227
+msgid "Replaced 1 occurence"
+msgstr "1 ocurrencia reemplazada"
+
+#: nano.c:1245 nano.c:1267 nano.c:1290
+msgid "Replace Cancelled"
+msgstr "Reemplazar Cancelado"
+
+#: nano.c:1263
+#, c-format
+msgid "Replace with [%s]"
+msgstr "Reemplazar con [%s]"
+
+#. last_search is empty
+#: nano.c:1288
+msgid "Replace with"
+msgstr "Reemplazar con"
+
+#: nano.c:1329
+msgid "Replace this instance?"
+msgstr "Reemplazar esta instancia?"
+
+#: nano.c:1416
+#, c-format
+msgid "current->data now = \"%s\"\n"
+msgstr "current->data ahora = \"%d\"\n"
+
+#: nano.c:1461
+#, c-format
+msgid "After, data = \"%s\"\n"
+msgstr "Después, data = \"%s\"\n"
+
+#. Ask for it
+#: nano.c:1529
+msgid "Enter line number"
+msgstr "Introduce número de línea"
+
+#: nano.c:1531
+msgid "Aborted"
+msgstr "Abortado"
+
+#: nano.c:1551
+msgid "Come on, be reasonable"
+msgstr "Venga ya, se razonable"
+
+#: nano.c:1556
+#, c-format
+msgid "Only %d lines available, skipping to last line"
+msgstr "Sólo hay %d líneas, saltando hasta la última"
+
+#: nano.c:1613 nano.c:1629 nano.c:1641 nano.c:1658 nano.c:1664
+#, c-format
+msgid "Could not open file for writing: %s"
+msgstr "No pude abrir el fichero para escribir: %s"
+
+#: nano.c:1621
+msgid "Could not open file: Path length exceeded."
+msgstr "El fichero no pudo ser abierto: longitud del path excedida."
+
+#: nano.c:1646
+#, c-format
+msgid "Wrote >%s\n"
+msgstr "Escribí >%s\n"
+
+#: nano.c:1673
+#, c-format
+msgid "Could not close %s: %s"
+msgstr "No pude cerrar %s: %s"
+
+#. Try a rename??
+#: nano.c:1694 nano.c:1705 nano.c:1710
+#, c-format
+msgid "Could not open %s for writing: %s"
+msgstr "No pude abrir %s para escribir: %s"
+
+#: nano.c:1716
+#, c-format
+msgid "Could not set permissions %o on %s: %s"
+msgstr "No pude establecer permisos %o en %s: %s"
+
+#: nano.c:1723
+#, c-format
+msgid "Wrote %d lines"
+msgstr "%d líneas escritas"
+
+#: nano.c:1744
+msgid "File Name to write"
+msgstr "Nombre de Fichero a escribir"
+
+#: nano.c:1749
+#, c-format
+msgid "filename is %s"
+msgstr "filename es %s"
+
+#: nano.c:1754
+msgid "File exists, OVERWRITE ?"
+msgstr "El fichero existe, SOBREESCRIBIR ?"
+
+#: nano.c:1783
+msgid "Error deleting tempfile, ack!"
+msgstr "Error borrando el fichero temporal, ouch!"
+
+#: nano.c:1796 nano.c:1846
+#, c-format
+msgid "Could not create a temporary filename: %s"
+msgstr "No pude crear un fichero temporal: %s"
+
+#: nano.c:1818 nano.c:1868
+#, c-format
+msgid "Could not invoke spell program \"%s\""
+msgstr "No se pudo llamar al corrector \"%s\""
+
+#. Why 32512? I dont know!
+#: nano.c:1824 nano.c:1874
+msgid "Could not invoke \"ispell\""
+msgstr "No pude llamar a \"ispell\""
+
+#: nano.c:1836 nano.c:1886
+msgid "Finished checking spelling"
+msgstr "Revisión de ortografía finalizada"
+
+#: nano.c:1903
+msgid "Save modified buffer (ANSWERING \"No\" WILL DESTROY CHANGES) ? "
+msgstr "Salvar el buffer modificado (RESPONDER \"No\" DESTRUIRÁ LOS CAMBIOS) ?"
+
+#: nano.c:2027
+msgid "Cannot resize top win"
+msgstr "No se puede cambiar el tamaño de la ventana superior"
+
+#: nano.c:2029
+msgid "Cannot move top win"
+msgstr "No se puede mover la ventana superior"
+
+#: nano.c:2031
+msgid "Cannot resize edit win"
+msgstr "No se puede cambiar el tamaño de la ventana de edición"
+
+#: nano.c:2033
+msgid "Cannot move edit win"
+msgstr "No se puede mover la ventana de edición"
+
+#: nano.c:2035
+msgid "Cannot resize bottom win"
+msgstr "No se puede cambiar el tamaño de la ventana inferior"
+
+#: nano.c:2037
+msgid "Cannot move bottom win"
+msgstr "No se puede mover la ventana inferior"
+
+#: nano.c:2468
+msgid "Main: set up windows\n"
+msgstr "Main: configurar las ventanas\n"
+
+#: nano.c:2490
+msgid "Main: bottom win\n"
+msgstr "Main: ventana inferior\n"
+
+#: nano.c:2496
+msgid "Main: open file\n"
+msgstr "Main: abrir fichero\n"
+
+#: nano.c:2564
+#, c-format
+msgid "I got Alt-[-%c! (%d)\n"
+msgstr "Pillé Alt-[-%c! (%d)\n"
+
+#: nano.c:2580
+#, c-format
+msgid "I got Alt-%c! (%d)\n"
+msgstr "Pillé Alt-%c! (%d)\n"
+
+#: winio.c:116
+#, c-format
+msgid "actual_x for xplus=%d returned %d\n"
+msgstr "actual_x para xplus=%d devolvió %d\n"
+
+#: winio.c:402
+#, c-format
+msgid "input '%c' (%d)\n"
+msgstr "entrada '%c' (%d)\n"
+
+#: winio.c:438
+msgid "New Buffer"
+msgstr "Nuevo Buffer"
+
+#: winio.c:441
+msgid "  File: ..."
+msgstr "Fichero: ..."
+
+#: winio.c:449
+msgid "Modified"
+msgstr "Modificado"
+
+#: winio.c:800
+#, c-format
+msgid "Moved to (%d, %d) in edit buffer\n"
+msgstr "Moviendo a (%d, %d) en buffer de edición\n"
+
+#: winio.c:811
+#, c-format
+msgid "current->data = \"%s\"\n"
+msgstr "current->data = \"%s\"\n"
+
+#: winio.c:854
+#, c-format
+msgid "I got \"%s\"\n"
+msgstr "Pillé \"%s\"\n"
+
+#: winio.c:878
+msgid " Y"
+msgstr " S"
+
+#: winio.c:878
+msgid "Yes"
+msgstr "Sí"
+
+#: winio.c:880
+msgid " A"
+msgstr " T"
+
+#: winio.c:880
+msgid "All"
+msgstr "Todas"
+
+#: winio.c:882
+msgid " N"
+msgstr " N"
+
+#: winio.c:882
+msgid "No"
+msgstr "No"
+
+#: winio.c:883
+msgid "^C"
+msgstr "^C"
+
+#: winio.c:1027
+#, c-format
+msgid "do_cursorpos: linepct = %f, bytepct = %f\n"
+msgstr "do_cursorpos: linepct = %f, bytepct = %f\n"
+
+#: winio.c:1031
+msgid "line %d of %d (%.0f%%), character %d of %d (%.0f%%)"
+msgstr "línea %d de %d (%.0f%%), carácter %d de %d (%.0f%%)"
+
+#: winio.c:1157
+msgid "Dumping file buffer to stderr...\n"
+msgstr "Volcando buffer de fichero a stderr...\n"
+
+#: winio.c:1159
+msgid "Dumping cutbuffer to stderr...\n"
+msgstr "Volcando el cutbuffer a stderr...\n"
+
+#: winio.c:1161
+msgid "Dumping a buffer to stderr...\n"
+msgstr "Volcando un buffer a stderr...\n"
diff --git a/po/fr.gmo b/po/fr.gmo
new file mode 100644 (file)
index 0000000..0c3f1ec
Binary files /dev/null and b/po/fr.gmo differ
diff --git a/po/fr.po b/po/fr.po
new file mode 100644 (file)
index 0000000..03340d8
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,830 @@
+# French messages for the nano editor
+# Copyright (C) 2000 Free Software Foundation, Inc.
+# Pierre Tane <tanep@bigfoot.com>, 2000.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: 0.8.9\n"
+"POT-Creation-Date: 2000-05-31 10:00-0500\n"
+"PO-Revision-Date: 2000-03-24 01:32+0100\n"
+"Last-Translator: Pierre Tane <tanep@bigfoot.com>\n"
+"Language-Team: French <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+#: cut.c:43
+#, c-format
+msgid "add_to_cutbuffer called with inptr->data = %s\n"
+msgstr "add_to_cutbuffer appelé avec inptr->data = %s\n"
+
+#: cut.c:146
+msgid "Blew away cutbuffer =)\n"
+msgstr "cutbuffer annihilé -)\n"
+
+#: global.c:110
+msgid "Invoke the help menu"
+msgstr ""
+
+#: global.c:111
+msgid "Write the current file to disk"
+msgstr ""
+
+#: global.c:112
+msgid "Exit from nano"
+msgstr ""
+
+#: global.c:113
+#, fuzzy
+msgid "Goto a specific line number"
+msgstr "Entrer le numéro de ligne"
+
+#: global.c:114
+msgid "Justify the current paragraph"
+msgstr ""
+
+#: global.c:115
+msgid "Replace text within the editor"
+msgstr ""
+
+#: global.c:116
+msgid "Insert another file into the current one"
+msgstr ""
+
+#: global.c:117
+msgid "Search for text within the editor"
+msgstr ""
+
+#: global.c:118
+msgid "Move to the previous screen"
+msgstr ""
+
+#: global.c:119
+msgid "Move to the next screen"
+msgstr ""
+
+#: global.c:120
+msgid "Cut the current line and store it in the cutbuffer"
+msgstr ""
+
+#: global.c:121
+msgid "Uncut from the cutbuffer into the current line"
+msgstr ""
+
+#: global.c:122
+msgid "Show the posititon of the cursor"
+msgstr ""
+
+#: global.c:123
+msgid "Invoke the spell checker (if available)"
+msgstr ""
+
+#: global.c:124
+msgid "Move up one line"
+msgstr ""
+
+#: global.c:125
+msgid "Move down one line"
+msgstr ""
+
+#: global.c:126
+msgid "Move forward one character"
+msgstr ""
+
+#: global.c:127
+msgid "Move back one character"
+msgstr ""
+
+#: global.c:128
+msgid "Move to the beginning of the current line"
+msgstr ""
+
+#: global.c:129
+msgid "Move to the end of the current line"
+msgstr ""
+
+#: global.c:130
+msgid "Go to the first line of the file"
+msgstr ""
+
+#: global.c:131
+msgid "Go to the last line of the file"
+msgstr ""
+
+#: global.c:132
+msgid "Refresh (redraw) the current screen"
+msgstr ""
+
+#: global.c:133
+msgid "Mark text at the current cursor location"
+msgstr ""
+
+#: global.c:134
+msgid "Delete the character under the cursor"
+msgstr ""
+
+#: global.c:136
+msgid "Delete the character to the left of the cursor"
+msgstr ""
+
+#: global.c:137
+msgid "Insert a tab character"
+msgstr ""
+
+#: global.c:138
+msgid "Insert a carriage return at the cursor position"
+msgstr ""
+
+#: global.c:140
+msgid "Make the current search or replace case (in)sensitive"
+msgstr ""
+
+#: global.c:141
+msgid "Cancel the current function"
+msgstr ""
+
+#: global.c:146 global.c:256 global.c:322
+msgid "Get Help"
+msgstr ""
+
+#: global.c:149 global.c:157
+msgid "WriteOut"
+msgstr ""
+
+#: global.c:153 global.c:311
+msgid "Exit"
+msgstr ""
+
+#: global.c:161 global.c:252
+msgid "Goto Line"
+msgstr ""
+
+#: global.c:166 global.c:244
+msgid "Justify"
+msgstr ""
+
+#: global.c:169 global.c:240
+#, fuzzy
+msgid "Replace"
+msgstr "Rempacer par"
+
+#: global.c:173
+#, fuzzy
+msgid "Read File"
+msgstr "Lecture du fichier"
+
+#: global.c:177
+msgid "Where Is"
+msgstr ""
+
+#: global.c:181 global.c:303
+msgid "Prev Page"
+msgstr ""
+
+#: global.c:185 global.c:307
+msgid "Next Page"
+msgstr ""
+
+#: global.c:189
+msgid "Cut Text"
+msgstr ""
+
+#: global.c:192
+msgid "UnCut Txt"
+msgstr ""
+
+#: global.c:196
+msgid "Cur Pos"
+msgstr ""
+
+#: global.c:200
+msgid "To Spell"
+msgstr ""
+
+#: global.c:204
+msgid "Up"
+msgstr ""
+
+#: global.c:207
+msgid "Down"
+msgstr ""
+
+#: global.c:210
+msgid "Forward"
+msgstr ""
+
+#: global.c:213
+msgid "Back"
+msgstr ""
+
+#: global.c:216
+msgid "Home"
+msgstr ""
+
+#: global.c:219
+msgid "End"
+msgstr ""
+
+#: global.c:222
+msgid "Refresh"
+msgstr ""
+
+#: global.c:225
+#, fuzzy
+msgid "Mark Text"
+msgstr "Marque enregistrée"
+
+#: global.c:228
+msgid "Delete"
+msgstr ""
+
+#: global.c:232
+msgid "Backspace"
+msgstr ""
+
+#: global.c:236
+msgid "Tab"
+msgstr ""
+
+#: global.c:247
+msgid "Enter"
+msgstr ""
+
+#: global.c:260 global.c:277 global.c:293
+msgid "First Line"
+msgstr ""
+
+#: global.c:263 global.c:280 global.c:296
+msgid "Last Line"
+msgstr ""
+
+#: global.c:266 global.c:283
+msgid "Case Sens"
+msgstr ""
+
+#: global.c:270
+#, fuzzy
+msgid "To Replace"
+msgstr "Rempacer par"
+
+#: global.c:273 global.c:289 global.c:299 global.c:315 global.c:319
+#: global.c:325 winio.c:883
+msgid "Cancel"
+msgstr "Annuler"
+
+#: global.c:286
+msgid "To Search"
+msgstr ""
+
+#: nano.c:114
+msgid ""
+"\n"
+"Buffer written to 'nano.save'\n"
+msgstr ""
+"\n"
+"Buffer écrit dans 'nano.save'\n"
+
+#: nano.c:127
+msgid "nano: malloc: out of memory!"
+msgstr "nano: malloc: plus de mémoire!"
+
+#: nano.c:144
+msgid "Key illegal in VIEW mode"
+msgstr "Touche illégale en mode VISUALISATION"
+
+#: nano.c:185
+msgid ""
+" nano help text\n"
+"\n"
+" The nano editor is designed to emulate the functionality and ease-of-use of "
+"the UW Pico text editor.  There are four main sections of the editor: The "
+"top line shows the program version, the current filename being edited, and "
+"whether or not the file has been modified.  Next is the main editor window "
+"showing the file being edited.  The status line is the third line from the "
+"bottom and shows important messages. The bottom two lines show the most "
+"commonly used shortcuts in the editor.\n"
+"\n"
+" The notation for shortcuts is as follows: Control-key sequences are notated "
+"with a caret (^) symbol.  Alt-key sequences are notated with an at (@) "
+"symbol.  The following keystrokes are available in the main editor window. "
+"Optional keys are shown in parentheses:\n"
+"\n"
+msgstr ""
+
+#: nano.c:286
+msgid "free_node(): free'd a node, YAY!\n"
+msgstr "free_node(): libération d'un noeud, OUAIS!\n"
+
+#: nano.c:291
+msgid "free_node(): free'd last node.\n"
+msgstr "free_node(): libération du dernier noeud \n"
+
+#: nano.c:407
+msgid "read_line: not on first line and prev is NULL"
+msgstr ""
+"read_line: la position actuelle n'est pas la première ligne et la précédente "
+"est NULL"
+
+#: nano.c:468 nano.c:482
+#, c-format
+msgid "Read %d lines"
+msgstr "%d lignes lues"
+
+#: nano.c:500 nano.c:1161 nano.c:1179
+#, c-format
+msgid "\"%s\" not found"
+msgstr "\"%s\" non trouvé"
+
+#. We have a new file
+#: nano.c:504
+msgid "New File"
+msgstr "Nouveau fichier"
+
+#: nano.c:513
+#, c-format
+msgid "File \"%s\" is a directory"
+msgstr "Le fichier \"%s\" est un répertoire"
+
+#: nano.c:518
+msgid "Reading File"
+msgstr "Lecture du fichier"
+
+#: nano.c:531
+msgid "File to insert [from ./] "
+msgstr "Fichier à insérer [depuis ./] "
+
+#: nano.c:546 nano.c:1601 nano.c:1765 nano.c:1916
+msgid "Cancelled"
+msgstr "Annulé"
+
+#: nano.c:556
+msgid ""
+"Usage: nano [GNU long option] [option] +LINE <file>\n"
+"\n"
+msgstr ""
+"Utilisation: nano [option longue GNU] [option] +LIGNE <fichier>\n"
+"\n"
+
+#: nano.c:557
+msgid "Option\t\tLong option\t\tMeaning\n"
+msgstr "Option\t\tOption Longue\t\tSignification\n"
+
+#: nano.c:560
+msgid " -V \t\t--version\t\tPrint version information and exit\n"
+msgstr " -V \t\t--version\t\tAfficher les informations de version et sortir\n"
+
+#: nano.c:562
+msgid " -c \t\t--const\t\t\tConstantly show cursor position\n"
+msgstr " -c \t\t--const\t\t\tAfficher constamment la position du curseur\n"
+
+#: nano.c:564
+msgid " -h \t\t--help\t\t\tShow this message\n"
+msgstr " -h \t\t--help\t\t\tAfficher ce message\n"
+
+#: nano.c:566
+msgid " -i \t\t--autoindent\t\tAutomatically indent new lines\n"
+msgstr ""
+" -i \t\t--autoindent\t\tIndenter automatiquement les nouvelles lignes\n"
+
+#: nano.c:568
+msgid " -l \t\t--nofollow\t\tDon't follow symbolic links, overwrite.\n"
+msgstr ""
+
+#: nano.c:571
+msgid " -m \t\t--mouse\t\t\tEnable mouse\n"
+msgstr " -m \t\t--mouse\t\t\tActiver le support souris\n"
+
+#: nano.c:576
+msgid ""
+" -r [#cols] \t--fill=[#cols]\t\tSet fill cols to (wrap lines at) #cols\n"
+msgstr ""
+" -r [#cols] \t--fill=[#cols]\t\tMettre la colonne de fin de ligne à (couper "
+"les lignes à) #cols\n"
+
+#: nano.c:578
+msgid " -p\t \t--pico\t\t\tMake bottom 2 lines more Pico-like\n"
+msgstr ""
+" -p\t \t--pico\t\t\tRendre les deux lignes du bas plus semblables à Pico\n"
+
+#: nano.c:580
+msgid " -s [prog] \t--speller=[prog]\tEnable alternate speller\n"
+msgstr ""
+" -s [prog] \t--speller=[prog]\tActiver un vérificateur orthographique "
+"alternatif\n"
+
+#: nano.c:582
+msgid " -t \t\t--tempfile\t\tAuto save on exit, don't prompt\n"
+msgstr ""
+" -t \t\t--tempfile\t\tSauver automatiquement à la sortie, sans demander\n"
+
+#: nano.c:584
+msgid " -v \t\t--view\t\t\tView (read only) mode\n"
+msgstr " -v \t\t--view\t\t\tMode Visualisation (lecture seule)\n"
+
+#: nano.c:586
+msgid " -w \t\t--nowrap\t\tDon't wrap long lines\n"
+msgstr " -w \t\t--nowrap\t\tNe pas couper les lignes trop longues\n"
+
+#: nano.c:588
+msgid " -x \t\t--nohelp\t\tDon't show help window\n"
+msgstr " -x \t\t--nohelp\t\tNe pas afficher la fenêtre d'aide\n"
+
+#: nano.c:590
+msgid " -z \t\t--suspend\t\tEnable suspend\n"
+msgstr " -z \t\t--suspend\t\tAutoriser la suspension\n"
+
+#: nano.c:592
+msgid " +LINE\t\t\t\t\tStart at line number LINE\n"
+msgstr " +LIGNE\t\t\t\t\tCommencer à la ligne LIGNE\n"
+
+#: nano.c:594
+msgid ""
+"Usage: nano [option] +LINE <file>\n"
+"\n"
+msgstr ""
+"Utilisation: nano [option] +LIGNE <fichier>\n"
+"\n"
+
+#: nano.c:595
+msgid "Option\t\tMeaning\n"
+msgstr "Option\t\tSignification\n"
+
+#: nano.c:596
+msgid " -V \t\tPrint version information and exit\n"
+msgstr " -V \t\tAfficher les informations de version et sortir\n"
+
+#: nano.c:597
+msgid " -c \t\tConstantly show cursor position\n"
+msgstr " -c \t\tAfficher constamment la position du curseur\n"
+
+#: nano.c:598
+msgid " -h \t\tShow this message\n"
+msgstr " -h \t\tAfficher ce message\n"
+
+#: nano.c:599
+msgid " -i \t\tAutomatically indent new lines\n"
+msgstr " -i \t\tIndenter automatiquement les nouvelles lignes\n"
+
+#: nano.c:601
+msgid " -l \t\tDon't follow symbolic links, overwrite.\n"
+msgstr ""
+
+#: nano.c:604
+msgid " -m \t\tEnable mouse\n"
+msgstr " -m \t\tActiver la souris\n"
+
+#: nano.c:608
+msgid " -r [#cols] \tSet fill cols to (wrap lines at) #cols\n"
+msgstr ""
+" -r [#cols] \tMettre la colonne de fin de ligne à (couper les lignes à) "
+"#cols\n"
+
+#: nano.c:609
+msgid " -s [prog]  \tEnable alternate speller\n"
+msgstr " -s [prog]  \tActiver un vérificateur orthographique alternatif\n"
+
+#: nano.c:610
+msgid " -p \t\tMake bottom 2 lines more Pico-like\n"
+msgstr " -p \t\tRendre les 2 lignes du bas plus semblables à Pico\n"
+
+#: nano.c:611
+msgid " -t \t\tAuto save on exit, don't prompt\n"
+msgstr " -t \t\tSauver automatiquement à la sortie, sans demander\n"
+
+#: nano.c:612
+msgid " -v \t\tView (read only) mode\n"
+msgstr " -v \t\tMode Visualisation seule (lecture seule)\n"
+
+#: nano.c:613
+msgid " -w \t\tDon't wrap long lines\n"
+msgstr " -w \t\tNe pas couper les lignes longues\n"
+
+#: nano.c:614
+msgid " -x \t\tDon't show help window\n"
+msgstr " -x \t\tNe pas afficher la fenêtre d'aide\n"
+
+#: nano.c:615
+msgid " -z \t\tEnable suspend\n"
+msgstr " -z \t\tAutoriser la suspension\n"
+
+#: nano.c:616
+msgid " +LINE\t\tStart at line number LINE\n"
+msgstr " +LIGNE\t\tDémarrer à la ligne LIGNE\n"
+
+#: nano.c:623
+#, c-format
+msgid " nano version %s by Chris Allegretta (compiled %s, %s)\n"
+msgstr " nano version %s de Chris Allegretta (compilée %s, %s)\n"
+
+#: nano.c:625
+msgid " Email: nano@asty.org\tWeb: http://www.asty.org/nano\n"
+msgstr " Email: nano@asty.org\tWeb: http://www.asty.org/nano\n"
+
+#: nano.c:709
+msgid "Mark Set"
+msgstr "Marque enregistrée"
+
+#: nano.c:714
+msgid "Mark UNset"
+msgstr "Marque effacée"
+
+#: nano.c:1052
+#, c-format
+msgid "check_wrap called with inptr->data=\"%s\"\n"
+msgstr "check_wrap appelée avec inptr->data=\"%s\"\n"
+
+#: nano.c:1089
+#, c-format
+msgid "Case Sensitive Search%s"
+msgstr "Recherche sensible ) la casse%s"
+
+#: nano.c:1090
+#, c-format
+msgid "Search%s"
+msgstr ""
+
+#: nano.c:1094
+msgid "Search Cancelled"
+msgstr "Recherche annulée"
+
+#: nano.c:1175
+msgid "Search Wrapped"
+msgstr "La recherche a bouclé"
+
+#: nano.c:1225
+#, c-format
+msgid "Replaced %d occurences"
+msgstr "%d occurences remplacées"
+
+#: nano.c:1227
+msgid "Replaced 1 occurence"
+msgstr "1 occurence remplacée"
+
+#: nano.c:1245 nano.c:1267 nano.c:1290
+msgid "Replace Cancelled"
+msgstr "Remplacement annulé"
+
+#: nano.c:1263
+#, c-format
+msgid "Replace with [%s]"
+msgstr "Remplacer par [%s]"
+
+#. last_search is empty
+#: nano.c:1288
+msgid "Replace with"
+msgstr "Rempacer par"
+
+#: nano.c:1329
+msgid "Replace this instance?"
+msgstr "Remplacer cette occurence?"
+
+#: nano.c:1416
+#, c-format
+msgid "current->data now = \"%s\"\n"
+msgstr "current->data vaut maintenant \"%s\"\n"
+
+#: nano.c:1461
+#, c-format
+msgid "After, data = \"%s\"\n"
+msgstr "Après, data = \"%s\"\n"
+
+#. Ask for it
+#: nano.c:1529
+msgid "Enter line number"
+msgstr "Entrer le numéro de ligne"
+
+#: nano.c:1531
+msgid "Aborted"
+msgstr "Annulé"
+
+#: nano.c:1551
+msgid "Come on, be reasonable"
+msgstr "Allez, soyez raisonnable"
+
+#: nano.c:1556
+#, c-format
+msgid "Only %d lines available, skipping to last line"
+msgstr "Seulement %d lignes sont disponibles, saut jusqu'à la dernière ligne"
+
+#: nano.c:1613 nano.c:1629 nano.c:1641 nano.c:1658 nano.c:1664
+#, c-format
+msgid "Could not open file for writing: %s"
+msgstr "Impossible d'ouvrir le fichier en écriture: %s"
+
+#: nano.c:1621
+msgid "Could not open file: Path length exceeded."
+msgstr "Impossible d'ouvrir le fichier: la longueur du chemin a été dépassée"
+
+#: nano.c:1646
+#, c-format
+msgid "Wrote >%s\n"
+msgstr "Écrit >%s\n"
+
+#: nano.c:1673
+#, c-format
+msgid "Could not close %s: %s"
+msgstr "Impossible de fermer %s: %s"
+
+#. Try a rename??
+#: nano.c:1694 nano.c:1705 nano.c:1710
+#, c-format
+msgid "Could not open %s for writing: %s"
+msgstr "Impossible d'ouvrir %s en écriture: %s"
+
+#: nano.c:1716
+#, c-format
+msgid "Could not set permissions %o on %s: %s"
+msgstr "Impossible de donner les permissions %o à %s: %s"
+
+#: nano.c:1723
+#, c-format
+msgid "Wrote %d lines"
+msgstr "%d lignes écrites"
+
+#: nano.c:1744
+msgid "File Name to write"
+msgstr "Nom du fichier dans lequel écrire"
+
+#: nano.c:1749
+#, c-format
+msgid "filename is %s"
+msgstr "Le nom du fichier est %s"
+
+#: nano.c:1754
+msgid "File exists, OVERWRITE ?"
+msgstr ""
+
+#: nano.c:1783
+msgid "Error deleting tempfile, ack!"
+msgstr "Erreur lors de l'effacement du fichier temporaire, zut!"
+
+#: nano.c:1796 nano.c:1846
+#, c-format
+msgid "Could not create a temporary filename: %s"
+msgstr "Impossible de créer un nom de fichier temporaire: %s"
+
+#: nano.c:1818 nano.c:1868
+#, c-format
+msgid "Could not invoke spell program \"%s\""
+msgstr "Impossible d'invoquer le programme spell \"%s\""
+
+#. Why 32512? I dont know!
+#: nano.c:1824 nano.c:1874
+msgid "Could not invoke \"ispell\""
+msgstr "Impossible d'invoquer \"ispell\""
+
+#: nano.c:1836 nano.c:1886
+msgid "Finished checking spelling"
+msgstr "Vérification orthographique terminée"
+
+#: nano.c:1903
+msgid "Save modified buffer (ANSWERING \"No\" WILL DESTROY CHANGES) ? "
+msgstr "Sauver le buffer modifié (RÉPONDRE \"No\" EFFACERA LES CHANGEMENTS"
+
+#: nano.c:2027
+msgid "Cannot resize top win"
+msgstr "Impossible de redimensionner la fenêtre du haut"
+
+#: nano.c:2029
+msgid "Cannot move top win"
+msgstr "Impossible de bouger la fenêtre du haut"
+
+#: nano.c:2031
+msgid "Cannot resize edit win"
+msgstr "Impossible de redimensionner la fenêtre d'édition"
+
+#: nano.c:2033
+msgid "Cannot move edit win"
+msgstr "Impossible de bouger la fenêtre d'édition"
+
+#: nano.c:2035
+msgid "Cannot resize bottom win"
+msgstr "Impossible de redimensionner la fenêtre du bas"
+
+#: nano.c:2037
+msgid "Cannot move bottom win"
+msgstr "Impossible de bouger la fenêtre du bas"
+
+#: nano.c:2468
+msgid "Main: set up windows\n"
+msgstr "Main: configuration des fenêtres\n"
+
+#: nano.c:2490
+msgid "Main: bottom win\n"
+msgstr "Main: fenêtre du bas\n"
+
+#: nano.c:2496
+msgid "Main: open file\n"
+msgstr "Main: ouvrir fichier\n"
+
+#: nano.c:2564
+#, c-format
+msgid "I got Alt-[-%c! (%d)\n"
+msgstr "J'ai reçu Alt-[-%c! (%d)\n"
+
+#: nano.c:2580
+#, c-format
+msgid "I got Alt-%c! (%d)\n"
+msgstr "J'ai reçu Alt-%c! (%d)\n"
+
+#: winio.c:116
+#, c-format
+msgid "actual_x for xplus=%d returned %d\n"
+msgstr "actual_x renvoyé pour xplus=%d\n"
+
+#: winio.c:402
+#, c-format
+msgid "input '%c' (%d)\n"
+msgstr "taper '%c' (%d)\n"
+
+#: winio.c:438
+msgid "New Buffer"
+msgstr "Nouveau buffer"
+
+#: winio.c:441
+msgid "  File: ..."
+msgstr "  Fichier: ..."
+
+#: winio.c:449
+msgid "Modified"
+msgstr "Modifié"
+
+#: winio.c:800
+#, c-format
+msgid "Moved to (%d, %d) in edit buffer\n"
+msgstr "Déplacement jusqu'à (%d, %d) dans le buffer d'édition\n"
+
+#: winio.c:811
+#, c-format
+msgid "current->data = \"%s\"\n"
+msgstr "current->data = \"%s\"\n"
+
+#: winio.c:854
+#, c-format
+msgid "I got \"%s\"\n"
+msgstr "J'ai reçu \"%s\"\n"
+
+#: winio.c:878
+msgid " Y"
+msgstr " O"
+
+#: winio.c:878
+msgid "Yes"
+msgstr "Oui"
+
+#: winio.c:880
+msgid " A"
+msgstr " T"
+
+#: winio.c:880
+msgid "All"
+msgstr "Tous"
+
+#: winio.c:882
+msgid " N"
+msgstr " N"
+
+#: winio.c:882
+msgid "No"
+msgstr "Non"
+
+#: winio.c:883
+msgid "^C"
+msgstr "^C"
+
+#: winio.c:1027
+#, c-format
+msgid "do_cursorpos: linepct = %f, bytepct = %f\n"
+msgstr "do_cursorpos: linepct = %f, bytepct = %f\n"
+
+#: winio.c:1031
+msgid "line %d of %d (%.0f%%), character %d of %d (%.0f%%)"
+msgstr "ligne %d sur %d (%.0f%%), caractère %d sur %d (%.0f%%)"
+
+#: winio.c:1157
+msgid "Dumping file buffer to stderr...\n"
+msgstr "Envoi du buffer fichier sur stderr...\n"
+
+#: winio.c:1159
+msgid "Dumping cutbuffer to stderr...\n"
+msgstr "Envoi du cutbuffer sur stderr...\n"
+
+#: winio.c:1161
+msgid "Dumping a buffer to stderr...\n"
+msgstr "Envoi d'un buffer sur stderr...\n"
+
+#, fuzzy
+#~ msgid "nano: realloc: out of memory!"
+#~ msgstr "nano: malloc: plus de mémoire!"
+
+#, fuzzy
+#~ msgid "I got %c (%d)!\n"
+#~ msgstr "J'ai reçu Alt-%c! (%d)\n"
+
+#, fuzzy
+#~ msgid "File: "
+#~ msgstr "  Fichier: ..."
+
+#~ msgid "xplustabs for current_x=%d returned %d\n"
+#~ msgstr "xplustabs renvoyé pour current_x=%d\n"
diff --git a/po/it.gmo b/po/it.gmo
new file mode 100644 (file)
index 0000000..2a2cc42
Binary files /dev/null and b/po/it.gmo differ
diff --git a/po/it.po b/po/it.po
new file mode 100644 (file)
index 0000000..ed9a1d6
--- /dev/null
+++ b/po/it.po
@@ -0,0 +1,832 @@
+# Spanish Messages for the nano editor.
+# Jordi Mallach <jordi@sindominio.net> January 9, 2000
+# Copyright (C) 2000 Free Software Foundation, Inc.
+# Jordi Mallach <jordi@sindominio.net>, 2000.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: 0.8.7\n"
+"POT-Creation-Date: 2000-05-31 10:00-0500\n"
+"PO-Revision-Date: 2000-03-03 04:57+0100\n"
+"Last-Translator: Daniele Medri <madrid@linux.it>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+#: cut.c:43
+#, c-format
+msgid "add_to_cutbuffer called with inptr->data = %s\n"
+msgstr "add_to_cutbuffer chiamato con inptr->data = %s\n"
+
+#: cut.c:146
+msgid "Blew away cutbuffer =)\n"
+msgstr ""
+
+#: global.c:110
+msgid "Invoke the help menu"
+msgstr "Invoca menu aiuti"
+
+#: global.c:111
+msgid "Write the current file to disk"
+msgstr "Salva il file corrente sul disco"
+
+#: global.c:112
+msgid "Exit from nano"
+msgstr "Esci da nano"
+
+#: global.c:113
+msgid "Goto a specific line number"
+msgstr "Vai ad un numero linea specifico"
+
+#: global.c:114
+msgid "Justify the current paragraph"
+msgstr "Giustifica il paragrafo corrente"
+
+#: global.c:115
+msgid "Replace text within the editor"
+msgstr "Sostituisci testo senza editor"
+
+#: global.c:116
+msgid "Insert another file into the current one"
+msgstr "Inserisci un file dentro il corrente"
+
+#: global.c:117
+msgid "Search for text within the editor"
+msgstr "Cerca testo senza editor"
+
+#: global.c:118
+msgid "Move to the previous screen"
+msgstr "Vai alla schermata precedente"
+
+#: global.c:119
+msgid "Move to the next screen"
+msgstr "Vai alla schermata successiva"
+
+#: global.c:120
+msgid "Cut the current line and store it in the cutbuffer"
+msgstr "Taglia la linea corrente e memorizzala nel cutbuffer"
+
+#: global.c:121
+msgid "Uncut from the cutbuffer into the current line"
+msgstr "Uncut dal cutbuffer dentro la linea corrente"
+
+#: global.c:122
+msgid "Show the posititon of the cursor"
+msgstr "Mostra la posizione del cursore"
+
+#: global.c:123
+msgid "Invoke the spell checker (if available)"
+msgstr "Invocar el corrector ortográfico (si está disponible)"
+
+#: global.c:124
+msgid "Move up one line"
+msgstr "Sposta in alto una linea"
+
+#: global.c:125
+msgid "Move down one line"
+msgstr "Sposta in basso una linea"
+
+#: global.c:126
+msgid "Move forward one character"
+msgstr "Sposta avanti un carattere"
+
+#: global.c:127
+msgid "Move back one character"
+msgstr "Sposta indietro un carattere"
+
+#: global.c:128
+msgid "Move to the beginning of the current line"
+msgstr "Sposta all'inizio della linea corrente"
+
+#: global.c:129
+msgid "Move to the end of the current line"
+msgstr "Sposta alla fine delle linea corrente"
+
+#: global.c:130
+msgid "Go to the first line of the file"
+msgstr "Vai alla prima linea del file"
+
+#: global.c:131
+msgid "Go to the last line of the file"
+msgstr "Vai all'ultima linea del file"
+
+#: global.c:132
+msgid "Refresh (redraw) the current screen"
+msgstr "Aggiorna la schermata corrente"
+
+#: global.c:133
+msgid "Mark text at the current cursor location"
+msgstr "Marca testo nella posizione corrente del cursore"
+
+#: global.c:134
+msgid "Delete the character under the cursor"
+msgstr "Elimina i caratteri sotto il cursore"
+
+#: global.c:136
+msgid "Delete the character to the left of the cursor"
+msgstr "Elimina i caratteri a sinistra del cursore"
+
+#: global.c:137
+msgid "Insert a tab character"
+msgstr "Inserisci un carattere tab"
+
+#: global.c:138
+msgid "Insert a carriage return at the cursor position"
+msgstr "Inserisci un ritorno a capo alla posizione del cursore"
+
+#: global.c:140
+msgid "Make the current search or replace case (in)sensitive"
+msgstr "Ricerca/Sostituisci con case (in)sensitive"
+
+#: global.c:141
+msgid "Cancel the current function"
+msgstr "Cancella la funzione corrente"
+
+#: global.c:146 global.c:256 global.c:322
+msgid "Get Help"
+msgstr "Aiuto"
+
+#: global.c:149 global.c:157
+msgid "WriteOut"
+msgstr "Sovrascrivi"
+
+#: global.c:153 global.c:311
+msgid "Exit"
+msgstr "Esci"
+
+#: global.c:161 global.c:252
+msgid "Goto Line"
+msgstr "Vai alla linea"
+
+#: global.c:166 global.c:244
+msgid "Justify"
+msgstr "Giustifica"
+
+#: global.c:169 global.c:240
+msgid "Replace"
+msgstr "Sostituisci"
+
+#: global.c:173
+msgid "Read File"
+msgstr "Leggi file"
+
+#: global.c:177
+msgid "Where Is"
+msgstr "Dov'è"
+
+#: global.c:181 global.c:303
+msgid "Prev Page"
+msgstr "Pag Prec"
+
+#: global.c:185 global.c:307
+msgid "Next Page"
+msgstr "Pag Seg"
+
+#: global.c:189
+msgid "Cut Text"
+msgstr "Taglia"
+
+#: global.c:192
+msgid "UnCut Txt"
+msgstr "UnCut Txt"
+
+#: global.c:196
+msgid "Cur Pos"
+msgstr "Posizione"
+
+#: global.c:200
+msgid "To Spell"
+msgstr "Ortografia"
+
+#: global.c:204
+msgid "Up"
+msgstr "Alza"
+
+#: global.c:207
+msgid "Down"
+msgstr "Abbassa"
+
+#: global.c:210
+msgid "Forward"
+msgstr "Avanti"
+
+#: global.c:213
+msgid "Back"
+msgstr "Indietro"
+
+#: global.c:216
+msgid "Home"
+msgstr "Inizio"
+
+#: global.c:219
+msgid "End"
+msgstr "Fine"
+
+#: global.c:222
+msgid "Refresh"
+msgstr "Aggiorna"
+
+#: global.c:225
+msgid "Mark Text"
+msgstr "Marca testo"
+
+#: global.c:228
+msgid "Delete"
+msgstr "Elimina"
+
+#: global.c:232
+msgid "Backspace"
+msgstr "Backspace"
+
+#: global.c:236
+msgid "Tab"
+msgstr "Tab"
+
+#: global.c:247
+msgid "Enter"
+msgstr "Invio"
+
+#: global.c:260 global.c:277 global.c:293
+msgid "First Line"
+msgstr "Prima linea"
+
+#: global.c:263 global.c:280 global.c:296
+msgid "Last Line"
+msgstr "Ultima linea"
+
+#: global.c:266 global.c:283
+msgid "Case Sens"
+msgstr "Case sens"
+
+#: global.c:270
+#, fuzzy
+msgid "To Replace"
+msgstr "Sostituisci"
+
+#: global.c:273 global.c:289 global.c:299 global.c:315 global.c:319
+#: global.c:325 winio.c:883
+msgid "Cancel"
+msgstr "Cancella"
+
+#: global.c:286
+#, fuzzy
+msgid "To Search"
+msgstr "Ricerca%s"
+
+#: nano.c:114
+msgid ""
+"\n"
+"Buffer written to 'nano.save'\n"
+msgstr ""
+"\n"
+"Buffer scritto su 'nano.save'\n"
+
+#: nano.c:127
+msgid "nano: malloc: out of memory!"
+msgstr "nano: malloc: fuori memoria!"
+
+#: nano.c:144
+msgid "Key illegal in VIEW mode"
+msgstr "Chiave illegale nella modalità VISTA"
+
+#: nano.c:185
+msgid ""
+" nano help text\n"
+"\n"
+" The nano editor is designed to emulate the functionality and ease-of-use of "
+"the UW Pico text editor.  There are four main sections of the editor: The "
+"top line shows the program version, the current filename being edited, and "
+"whether or not the file has been modified.  Next is the main editor window "
+"showing the file being edited.  The status line is the third line from the "
+"bottom and shows important messages. The bottom two lines show the most "
+"commonly used shortcuts in the editor.\n"
+"\n"
+" The notation for shortcuts is as follows: Control-key sequences are notated "
+"with a caret (^) symbol.  Alt-key sequences are notated with an at (@) "
+"symbol.  The following keystrokes are available in the main editor window. "
+"Optional keys are shown in parentheses:\n"
+"\n"
+msgstr ""
+
+#: nano.c:286
+msgid "free_node(): free'd a node, YAY!\n"
+msgstr "free_node(): liberado un nodo, YEAH!\n"
+
+#: nano.c:291
+msgid "free_node(): free'd last node.\n"
+msgstr "free_node(): liberado el último nodo.\n"
+
+#: nano.c:407
+msgid "read_line: not on first line and prev is NULL"
+msgstr "read_line: no estamos en la primera línea y la anterior es NULL"
+
+#: nano.c:468 nano.c:482
+#, c-format
+msgid "Read %d lines"
+msgstr "Leggi %d linee"
+
+#: nano.c:500 nano.c:1161 nano.c:1179
+#, c-format
+msgid "\"%s\" not found"
+msgstr "\"%s\" non trovato"
+
+#. We have a new file
+#: nano.c:504
+msgid "New File"
+msgstr "Nuovo file"
+
+#: nano.c:513
+#, c-format
+msgid "File \"%s\" is a directory"
+msgstr "Il file \"%s\" è una directory"
+
+#: nano.c:518
+msgid "Reading File"
+msgstr "Lettura file"
+
+#: nano.c:531
+msgid "File to insert [from ./] "
+msgstr "File da inserire [da ./] "
+
+#: nano.c:546 nano.c:1601 nano.c:1765 nano.c:1916
+msgid "Cancelled"
+msgstr "Cancellato"
+
+#: nano.c:556
+msgid ""
+"Usage: nano [GNU long option] [option] +LINE <file>\n"
+"\n"
+msgstr ""
+"Utilizzo: nano [GNU opzioni lunghe] [opzioni] +LINEA <file>\n"
+"\n"
+
+#: nano.c:557
+msgid "Option\t\tLong option\t\tMeaning\n"
+msgstr "Opzioni\t\tLunghe opzioni\t\tSignificato\n"
+
+#: nano.c:560
+msgid " -V \t\t--version\t\tPrint version information and exit\n"
+msgstr " -V \t\t--versione\t\tStampa informazioni sulla versione ed esci\n"
+
+#: nano.c:562
+msgid " -c \t\t--const\t\t\tConstantly show cursor position\n"
+msgstr " -c \t\t--const\t\t\tMostra sempre la posizione del cursore\n"
+
+#: nano.c:564
+msgid " -h \t\t--help\t\t\tShow this message\n"
+msgstr " -h \t\t--help\t\t\tMostra questo messaggio\n"
+
+#: nano.c:566
+msgid " -i \t\t--autoindent\t\tAutomatically indent new lines\n"
+msgstr " -i \t\t--autoindent\t\tIndentar automáticamente nuevas líneas\n"
+
+#: nano.c:568
+msgid " -l \t\t--nofollow\t\tDon't follow symbolic links, overwrite.\n"
+msgstr ""
+
+#: nano.c:571
+msgid " -m \t\t--mouse\t\t\tEnable mouse\n"
+msgstr " -m \t\t--mouse\t\t\tAttiva mouse\n"
+
+#: nano.c:576
+msgid ""
+" -r [#cols] \t--fill=[#cols]\t\tSet fill cols to (wrap lines at) #cols\n"
+msgstr " -r [#cols] \t--fill=[#cols]\t\tConfigura riempimento colonne\n"
+
+#: nano.c:578
+msgid " -p\t \t--pico\t\t\tMake bottom 2 lines more Pico-like\n"
+msgstr " -p\t \t--pico\t\t\tCrea in basso 2 linee come l'aspetto di Pico\n"
+
+#: nano.c:580
+msgid " -s [prog] \t--speller=[prog]\tEnable alternate speller\n"
+msgstr " -s [prog] \t--speller=[prog]\tAttiva correttore alternativo\n"
+
+#: nano.c:582
+msgid " -t \t\t--tempfile\t\tAuto save on exit, don't prompt\n"
+msgstr ""
+" -t \t\t--tempfile\t\tSalvataggio automatico in uscita senza richiesta\n"
+
+#: nano.c:584
+msgid " -v \t\t--view\t\t\tView (read only) mode\n"
+msgstr " -v \t\t--view\t\t\tVisualizzazione (sola lettura)\n"
+
+#: nano.c:586
+msgid " -w \t\t--nowrap\t\tDon't wrap long lines\n"
+msgstr " -w \t\t--nowrap\t\tNon interrompere linee lunghe\n"
+
+#: nano.c:588
+msgid " -x \t\t--nohelp\t\tDon't show help window\n"
+msgstr " -x \t\t--nohelp\t\tNon mostrare finestra aiuti\n"
+
+#: nano.c:590
+msgid " -z \t\t--suspend\t\tEnable suspend\n"
+msgstr " -z \t\t--suspend\t\tAbilita sospensione\n"
+
+#: nano.c:592
+msgid " +LINE\t\t\t\t\tStart at line number LINE\n"
+msgstr " +LINE\t\t\t\t\tInizia alla linea numero\n"
+
+#: nano.c:594
+msgid ""
+"Usage: nano [option] +LINE <file>\n"
+"\n"
+msgstr ""
+"Uso: nano [opzioni] +LINEA <file>\n"
+"\n"
+
+#: nano.c:595
+msgid "Option\t\tMeaning\n"
+msgstr "Opzioni\t\tSignificato\n"
+
+#: nano.c:596
+msgid " -V \t\tPrint version information and exit\n"
+msgstr " -V \t\tStampa informazioni sulla versione ed esci\n"
+
+#: nano.c:597
+msgid " -c \t\tConstantly show cursor position\n"
+msgstr " -c \t\tMostra sempre la posizione del cursore\n"
+
+#: nano.c:598
+msgid " -h \t\tShow this message\n"
+msgstr " -h \t\tMostra questo messaggio\n"
+
+#: nano.c:599
+msgid " -i \t\tAutomatically indent new lines\n"
+msgstr " -v \t\tIndentazione automatica nuove linee\n"
+
+#: nano.c:601
+msgid " -l \t\tDon't follow symbolic links, overwrite.\n"
+msgstr " -l \t\tNon seguire i link simbolici, sovrascrivi.\n"
+
+#: nano.c:604
+msgid " -m \t\tEnable mouse\n"
+msgstr " -m \t\tAttiva mouse\n"
+
+#: nano.c:608
+msgid " -r [#cols] \tSet fill cols to (wrap lines at) #cols\n"
+msgstr " -r [#cols] \tRiempimento colonne (interrompi linee a) #cols\n"
+
+#: nano.c:609
+msgid " -s [prog]  \tEnable alternate speller\n"
+msgstr " -s [prog] \tAttiva correttore alternativo\n"
+
+#: nano.c:610
+msgid " -p \t\tMake bottom 2 lines more Pico-like\n"
+msgstr " -p \t\tCrea in basso 2 linee sullo stile di Pico\n"
+
+#: nano.c:611
+msgid " -t \t\tAuto save on exit, don't prompt\n"
+msgstr " -t \t\tSalvataggio automatico in uscita senza avviso\n"
+
+#: nano.c:612
+msgid " -v \t\tView (read only) mode\n"
+msgstr " -v \t\tVisualizza (sola lettura)\n"
+
+#: nano.c:613
+msgid " -w \t\tDon't wrap long lines\n"
+msgstr " -w \t\tNon interrompere linee lunghe\n"
+
+#: nano.c:614
+msgid " -x \t\tDon't show help window\n"
+msgstr " -x \t\tNon mostrare la finestra Aiuti\n"
+
+#: nano.c:615
+msgid " -z \t\tEnable suspend\n"
+msgstr " -z \t\tAttiva sospensione\n"
+
+#: nano.c:616
+msgid " +LINE\t\tStart at line number LINE\n"
+msgstr " +LINEA\t\tInizia alla LINEA numero\n"
+
+#: nano.c:623
+#, c-format
+msgid " nano version %s by Chris Allegretta (compiled %s, %s)\n"
+msgstr " nano versione %s di Chris Allegretta (compilato %s, %s\n"
+
+#: nano.c:625
+msgid " Email: nano@asty.org\tWeb: http://www.asty.org/nano\n"
+msgstr "Email: nano@asty.org\tWeb: http://www.asty.org/nano\n"
+
+#: nano.c:709
+msgid "Mark Set"
+msgstr ""
+
+#: nano.c:714
+msgid "Mark UNset"
+msgstr ""
+
+#: nano.c:1052
+#, c-format
+msgid "check_wrap called with inptr->data=\"%s\"\n"
+msgstr "check_wrap chiamata con inptr->data=\"%s\"\n"
+
+#: nano.c:1089
+#, c-format
+msgid "Case Sensitive Search%s"
+msgstr "Ricerca case sensitive %s"
+
+#: nano.c:1090
+#, c-format
+msgid "Search%s"
+msgstr "Ricerca%s"
+
+#: nano.c:1094
+msgid "Search Cancelled"
+msgstr "Ricerca annullata"
+
+#: nano.c:1175
+msgid "Search Wrapped"
+msgstr "Ricerca interrotta"
+
+#: nano.c:1225
+#, c-format
+msgid "Replaced %d occurences"
+msgstr "Sostituite %d occorrenze"
+
+#: nano.c:1227
+msgid "Replaced 1 occurence"
+msgstr "Sostituita 1 occorrenza"
+
+#: nano.c:1245 nano.c:1267 nano.c:1290
+msgid "Replace Cancelled"
+msgstr "Sostituzione annullata"
+
+#: nano.c:1263
+#, c-format
+msgid "Replace with [%s]"
+msgstr "Sostituisci con [%s]"
+
+#. last_search is empty
+#: nano.c:1288
+msgid "Replace with"
+msgstr "Sostituisci con"
+
+#: nano.c:1329
+msgid "Replace this instance?"
+msgstr "Sostituisci questa istanza?"
+
+#: nano.c:1416
+#, c-format
+msgid "current->data now = \"%s\"\n"
+msgstr "current->data ora = \"%d\"\n"
+
+#: nano.c:1461
+#, c-format
+msgid "After, data = \"%s\"\n"
+msgstr "Dopo, data = \"%s\"\n"
+
+#. Ask for it
+#: nano.c:1529
+msgid "Enter line number"
+msgstr "Inserire numero linea"
+
+#: nano.c:1531
+msgid "Aborted"
+msgstr "Operazione fallita"
+
+#: nano.c:1551
+msgid "Come on, be reasonable"
+msgstr "Avanti, sii ragionevole"
+
+#: nano.c:1556
+#, c-format
+msgid "Only %d lines available, skipping to last line"
+msgstr "Solo %d linee disponibili, vai all'ultima"
+
+#: nano.c:1613 nano.c:1629 nano.c:1641 nano.c:1658 nano.c:1664
+#, c-format
+msgid "Could not open file for writing: %s"
+msgstr "Impossibile aprire il file in scrittura: %s"
+
+#: nano.c:1621
+msgid "Could not open file: Path length exceeded."
+msgstr "Impossibile aprire il file: esagerata lunghezza del percorso."
+
+#: nano.c:1646
+#, c-format
+msgid "Wrote >%s\n"
+msgstr "Scrivi >%s\n"
+
+#: nano.c:1673
+#, c-format
+msgid "Could not close %s: %s"
+msgstr "Impossibile chiudere %s: %s"
+
+#. Try a rename??
+#: nano.c:1694 nano.c:1705 nano.c:1710
+#, c-format
+msgid "Could not open %s for writing: %s"
+msgstr "Impossibile aprire %s in scrittura: %s"
+
+#: nano.c:1716
+#, c-format
+msgid "Could not set permissions %o on %s: %s"
+msgstr "Impossibile configurare i permessi di %o su %s: %s"
+
+#: nano.c:1723
+#, c-format
+msgid "Wrote %d lines"
+msgstr "Scritte %d linee"
+
+#: nano.c:1744
+msgid "File Name to write"
+msgstr "Salva con nome"
+
+#: nano.c:1749
+#, c-format
+msgid "filename is %s"
+msgstr "Il nome file è %s"
+
+#: nano.c:1754
+msgid "File exists, OVERWRITE ?"
+msgstr "File esistente, SOVRASCRIVERE?"
+
+#: nano.c:1783
+msgid "Error deleting tempfile, ack!"
+msgstr ""
+
+#: nano.c:1796 nano.c:1846
+#, c-format
+msgid "Could not create a temporary filename: %s"
+msgstr "Impossibile creare un nome file temporaneo: %s"
+
+#: nano.c:1818 nano.c:1868
+#, c-format
+msgid "Could not invoke spell program \"%s\""
+msgstr "Impossibile invocare correttore ortografico \"%s\""
+
+#. Why 32512? I dont know!
+#: nano.c:1824 nano.c:1874
+msgid "Could not invoke \"ispell\""
+msgstr "Impossibile invocare \"ispell\""
+
+#: nano.c:1836 nano.c:1886
+msgid "Finished checking spelling"
+msgstr "Controllo ortografico terminato"
+
+#: nano.c:1903
+msgid "Save modified buffer (ANSWERING \"No\" WILL DESTROY CHANGES) ? "
+msgstr ""
+"Salva il buffer modificato (RISPONDENDO \"No\" ANNULLERETE I CAMBIAMENTI "
+"AVVENUTI) ?"
+
+#: nano.c:2027
+msgid "Cannot resize top win"
+msgstr "Impossibile ridimensionare la finestra superiore"
+
+#: nano.c:2029
+msgid "Cannot move top win"
+msgstr "Impossibile spostare la finestra superiore"
+
+#: nano.c:2031
+msgid "Cannot resize edit win"
+msgstr "Impossibile ridimensionare la finestra di modifica"
+
+#: nano.c:2033
+msgid "Cannot move edit win"
+msgstr "Impossibile spostare finestra di modifica"
+
+#: nano.c:2035
+msgid "Cannot resize bottom win"
+msgstr "Impossibile ridimensionare la finestra inferiore"
+
+#: nano.c:2037
+msgid "Cannot move bottom win"
+msgstr "Impossibile spostare la finestra inferiore"
+
+#: nano.c:2468
+msgid "Main: set up windows\n"
+msgstr "Main: configura finestre\n"
+
+#: nano.c:2490
+msgid "Main: bottom win\n"
+msgstr "Main: finestra inferiore\n"
+
+#: nano.c:2496
+msgid "Main: open file\n"
+msgstr "Main: apri file\n"
+
+#: nano.c:2564
+#, c-format
+msgid "I got Alt-[-%c! (%d)\n"
+msgstr "Premuto Alt-[-%c! (%d)\n"
+
+#: nano.c:2580
+#, c-format
+msgid "I got Alt-%c! (%d)\n"
+msgstr "Premuto Alt-%c! (%d)\n"
+
+#: winio.c:116
+#, c-format
+msgid "actual_x for xplus=%d returned %d\n"
+msgstr "actual_x per xplus=%d ha riportato %d\n"
+
+#: winio.c:402
+#, c-format
+msgid "input '%c' (%d)\n"
+msgstr "input '%c' (%d)\n"
+
+#: winio.c:438
+msgid "New Buffer"
+msgstr "Nuovo Buffer"
+
+#: winio.c:441
+msgid "  File: ..."
+msgstr "File: ..."
+
+#: winio.c:449
+msgid "Modified"
+msgstr "Modificato"
+
+#: winio.c:800
+#, c-format
+msgid "Moved to (%d, %d) in edit buffer\n"
+msgstr "Mosso in (%d, %d) nel buffer di modifica\n"
+
+#: winio.c:811
+#, c-format
+msgid "current->data = \"%s\"\n"
+msgstr "current->data = \"%s\"\n"
+
+#: winio.c:854
+#, c-format
+msgid "I got \"%s\"\n"
+msgstr "Premuto \"%s\"\n"
+
+#: winio.c:878
+msgid " Y"
+msgstr " S"
+
+#: winio.c:878
+msgid "Yes"
+msgstr " Sì"
+
+#: winio.c:880
+msgid " A"
+msgstr " T"
+
+#: winio.c:880
+msgid "All"
+msgstr " Tutti"
+
+#: winio.c:882
+msgid " N"
+msgstr " N"
+
+#: winio.c:882
+msgid "No"
+msgstr " No"
+
+#: winio.c:883
+msgid "^C"
+msgstr "^C"
+
+#: winio.c:1027
+#, c-format
+msgid "do_cursorpos: linepct = %f, bytepct = %f\n"
+msgstr "do_cursorpos: linepct = %f, bytepct = %f\n"
+
+#: winio.c:1031
+msgid "line %d of %d (%.0f%%), character %d of %d (%.0f%%)"
+msgstr "linea %d di %d (%.0f%%), carattere %d di %d (%.0f%%)"
+
+#: winio.c:1157
+msgid "Dumping file buffer to stderr...\n"
+msgstr "Copia file buffer sullo stderr...\n"
+
+#: winio.c:1159
+msgid "Dumping cutbuffer to stderr...\n"
+msgstr "Copia cutbuffer sullo stderr...\n"
+
+#: winio.c:1161
+msgid "Dumping a buffer to stderr...\n"
+msgstr "Copia un buffer sullo stderr...\n"
+
+#, fuzzy
+#~ msgid "nano: realloc: out of memory!"
+#~ msgstr "nano: malloc: fuori memoria!"
+
+#, fuzzy
+#~ msgid "Justify Complete"
+#~ msgstr "Giustifica"
+
+#, fuzzy
+#~ msgid "suspend"
+#~ msgstr "Sospendi"
+
+#, fuzzy
+#~ msgid "I got %c (%d)!\n"
+#~ msgstr "Premuto Alt-%c! (%d)\n"
+
+#, fuzzy
+#~ msgid "File: "
+#~ msgstr "File: ..."
+
+#~ msgid "Suspend nano if suspend is enabled"
+#~ msgstr "Sospendi nano se la sospensione è abilitata"
+
+#~ msgid "Justify function not yet implemented, and I feel fine"
+#~ msgstr "Funzione di giustificazione non ancora implementata e mi sento bene"
+
+#~ msgid "xplustabs for current_x=%d returned %d\n"
+#~ msgstr "xplustabs per current_x=%d ha riportato %d\n"
diff --git a/po/nano.pot b/po/nano.pot
new file mode 100644 (file)
index 0000000..2485181
--- /dev/null
@@ -0,0 +1,793 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2000-05-31 10:00-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: ENCODING\n"
+
+#: cut.c:43
+#, c-format
+msgid "add_to_cutbuffer called with inptr->data = %s\n"
+msgstr ""
+
+#: cut.c:146
+msgid "Blew away cutbuffer =)\n"
+msgstr ""
+
+#: global.c:110
+msgid "Invoke the help menu"
+msgstr ""
+
+#: global.c:111
+msgid "Write the current file to disk"
+msgstr ""
+
+#: global.c:112
+msgid "Exit from nano"
+msgstr ""
+
+#: global.c:113
+msgid "Goto a specific line number"
+msgstr ""
+
+#: global.c:114
+msgid "Justify the current paragraph"
+msgstr ""
+
+#: global.c:115
+msgid "Replace text within the editor"
+msgstr ""
+
+#: global.c:116
+msgid "Insert another file into the current one"
+msgstr ""
+
+#: global.c:117
+msgid "Search for text within the editor"
+msgstr ""
+
+#: global.c:118
+msgid "Move to the previous screen"
+msgstr ""
+
+#: global.c:119
+msgid "Move to the next screen"
+msgstr ""
+
+#: global.c:120
+msgid "Cut the current line and store it in the cutbuffer"
+msgstr ""
+
+#: global.c:121
+msgid "Uncut from the cutbuffer into the current line"
+msgstr ""
+
+#: global.c:122
+msgid "Show the posititon of the cursor"
+msgstr ""
+
+#: global.c:123
+msgid "Invoke the spell checker (if available)"
+msgstr ""
+
+#: global.c:124
+msgid "Move up one line"
+msgstr ""
+
+#: global.c:125
+msgid "Move down one line"
+msgstr ""
+
+#: global.c:126
+msgid "Move forward one character"
+msgstr ""
+
+#: global.c:127
+msgid "Move back one character"
+msgstr ""
+
+#: global.c:128
+msgid "Move to the beginning of the current line"
+msgstr ""
+
+#: global.c:129
+msgid "Move to the end of the current line"
+msgstr ""
+
+#: global.c:130
+msgid "Go to the first line of the file"
+msgstr ""
+
+#: global.c:131
+msgid "Go to the last line of the file"
+msgstr ""
+
+#: global.c:132
+msgid "Refresh (redraw) the current screen"
+msgstr ""
+
+#: global.c:133
+msgid "Mark text at the current cursor location"
+msgstr ""
+
+#: global.c:134
+msgid "Delete the character under the cursor"
+msgstr ""
+
+#: global.c:136
+msgid "Delete the character to the left of the cursor"
+msgstr ""
+
+#: global.c:137
+msgid "Insert a tab character"
+msgstr ""
+
+#: global.c:138
+msgid "Insert a carriage return at the cursor position"
+msgstr ""
+
+#: global.c:140
+msgid "Make the current search or replace case (in)sensitive"
+msgstr ""
+
+#: global.c:141
+msgid "Cancel the current function"
+msgstr ""
+
+#: global.c:146 global.c:256 global.c:322
+msgid "Get Help"
+msgstr ""
+
+#: global.c:149 global.c:157
+msgid "WriteOut"
+msgstr ""
+
+#: global.c:153 global.c:311
+msgid "Exit"
+msgstr ""
+
+#: global.c:161 global.c:252
+msgid "Goto Line"
+msgstr ""
+
+#: global.c:166 global.c:244
+msgid "Justify"
+msgstr ""
+
+#: global.c:169 global.c:240
+msgid "Replace"
+msgstr ""
+
+#: global.c:173
+msgid "Read File"
+msgstr ""
+
+#: global.c:177
+msgid "Where Is"
+msgstr ""
+
+#: global.c:181 global.c:303
+msgid "Prev Page"
+msgstr ""
+
+#: global.c:185 global.c:307
+msgid "Next Page"
+msgstr ""
+
+#: global.c:189
+msgid "Cut Text"
+msgstr ""
+
+#: global.c:192
+msgid "UnCut Txt"
+msgstr ""
+
+#: global.c:196
+msgid "Cur Pos"
+msgstr ""
+
+#: global.c:200
+msgid "To Spell"
+msgstr ""
+
+#: global.c:204
+msgid "Up"
+msgstr ""
+
+#: global.c:207
+msgid "Down"
+msgstr ""
+
+#: global.c:210
+msgid "Forward"
+msgstr ""
+
+#: global.c:213
+msgid "Back"
+msgstr ""
+
+#: global.c:216
+msgid "Home"
+msgstr ""
+
+#: global.c:219
+msgid "End"
+msgstr ""
+
+#: global.c:222
+msgid "Refresh"
+msgstr ""
+
+#: global.c:225
+msgid "Mark Text"
+msgstr ""
+
+#: global.c:228
+msgid "Delete"
+msgstr ""
+
+#: global.c:232
+msgid "Backspace"
+msgstr ""
+
+#: global.c:236
+msgid "Tab"
+msgstr ""
+
+#: global.c:247
+msgid "Enter"
+msgstr ""
+
+#: global.c:260 global.c:277 global.c:293
+msgid "First Line"
+msgstr ""
+
+#: global.c:263 global.c:280 global.c:296
+msgid "Last Line"
+msgstr ""
+
+#: global.c:266 global.c:283
+msgid "Case Sens"
+msgstr ""
+
+#: global.c:270
+msgid "To Replace"
+msgstr ""
+
+#: global.c:273 global.c:289 global.c:299 global.c:315 global.c:319
+#: global.c:325 winio.c:883
+msgid "Cancel"
+msgstr ""
+
+#: global.c:286
+msgid "To Search"
+msgstr ""
+
+#: nano.c:114
+msgid ""
+"\n"
+"Buffer written to 'nano.save'\n"
+msgstr ""
+
+#: nano.c:127
+msgid "nano: malloc: out of memory!"
+msgstr ""
+
+#: nano.c:144
+msgid "Key illegal in VIEW mode"
+msgstr ""
+
+#: nano.c:185
+msgid ""
+" nano help text\n"
+"\n"
+" The nano editor is designed to emulate the functionality and ease-of-use of "
+"the UW Pico text editor.  There are four main sections of the editor: The "
+"top line shows the program version, the current filename being edited, and "
+"whether or not the file has been modified.  Next is the main editor window "
+"showing the file being edited.  The status line is the third line from the "
+"bottom and shows important messages. The bottom two lines show the most "
+"commonly used shortcuts in the editor.\n"
+"\n"
+" The notation for shortcuts is as follows: Control-key sequences are notated "
+"with a caret (^) symbol.  Alt-key sequences are notated with an at (@) "
+"symbol.  The following keystrokes are available in the main editor window. "
+"Optional keys are shown in parentheses:\n"
+"\n"
+msgstr ""
+
+#: nano.c:286
+msgid "free_node(): free'd a node, YAY!\n"
+msgstr ""
+
+#: nano.c:291
+msgid "free_node(): free'd last node.\n"
+msgstr ""
+
+#: nano.c:407
+msgid "read_line: not on first line and prev is NULL"
+msgstr ""
+
+#: nano.c:468 nano.c:482
+#, c-format
+msgid "Read %d lines"
+msgstr ""
+
+#: nano.c:500 nano.c:1161 nano.c:1179
+#, c-format
+msgid "\"%s\" not found"
+msgstr ""
+
+#. We have a new file
+#: nano.c:504
+msgid "New File"
+msgstr ""
+
+#: nano.c:513
+#, c-format
+msgid "File \"%s\" is a directory"
+msgstr ""
+
+#: nano.c:518
+msgid "Reading File"
+msgstr ""
+
+#: nano.c:531
+msgid "File to insert [from ./] "
+msgstr ""
+
+#: nano.c:546 nano.c:1601 nano.c:1765 nano.c:1916
+msgid "Cancelled"
+msgstr ""
+
+#: nano.c:556
+msgid ""
+"Usage: nano [GNU long option] [option] +LINE <file>\n"
+"\n"
+msgstr ""
+
+#: nano.c:557
+msgid "Option\t\tLong option\t\tMeaning\n"
+msgstr ""
+
+#: nano.c:560
+msgid " -V \t\t--version\t\tPrint version information and exit\n"
+msgstr ""
+
+#: nano.c:562
+msgid " -c \t\t--const\t\t\tConstantly show cursor position\n"
+msgstr ""
+
+#: nano.c:564
+msgid " -h \t\t--help\t\t\tShow this message\n"
+msgstr ""
+
+#: nano.c:566
+msgid " -i \t\t--autoindent\t\tAutomatically indent new lines\n"
+msgstr ""
+
+#: nano.c:568
+msgid " -l \t\t--nofollow\t\tDon't follow symbolic links, overwrite.\n"
+msgstr ""
+
+#: nano.c:571
+msgid " -m \t\t--mouse\t\t\tEnable mouse\n"
+msgstr ""
+
+#: nano.c:576
+msgid ""
+" -r [#cols] \t--fill=[#cols]\t\tSet fill cols to (wrap lines at) #cols\n"
+msgstr ""
+
+#: nano.c:578
+msgid " -p\t \t--pico\t\t\tMake bottom 2 lines more Pico-like\n"
+msgstr ""
+
+#: nano.c:580
+msgid " -s [prog] \t--speller=[prog]\tEnable alternate speller\n"
+msgstr ""
+
+#: nano.c:582
+msgid " -t \t\t--tempfile\t\tAuto save on exit, don't prompt\n"
+msgstr ""
+
+#: nano.c:584
+msgid " -v \t\t--view\t\t\tView (read only) mode\n"
+msgstr ""
+
+#: nano.c:586
+msgid " -w \t\t--nowrap\t\tDon't wrap long lines\n"
+msgstr ""
+
+#: nano.c:588
+msgid " -x \t\t--nohelp\t\tDon't show help window\n"
+msgstr ""
+
+#: nano.c:590
+msgid " -z \t\t--suspend\t\tEnable suspend\n"
+msgstr ""
+
+#: nano.c:592
+msgid " +LINE\t\t\t\t\tStart at line number LINE\n"
+msgstr ""
+
+#: nano.c:594
+msgid ""
+"Usage: nano [option] +LINE <file>\n"
+"\n"
+msgstr ""
+
+#: nano.c:595
+msgid "Option\t\tMeaning\n"
+msgstr ""
+
+#: nano.c:596
+msgid " -V \t\tPrint version information and exit\n"
+msgstr ""
+
+#: nano.c:597
+msgid " -c \t\tConstantly show cursor position\n"
+msgstr ""
+
+#: nano.c:598
+msgid " -h \t\tShow this message\n"
+msgstr ""
+
+#: nano.c:599
+msgid " -i \t\tAutomatically indent new lines\n"
+msgstr ""
+
+#: nano.c:601
+msgid " -l \t\tDon't follow symbolic links, overwrite.\n"
+msgstr ""
+
+#: nano.c:604
+msgid " -m \t\tEnable mouse\n"
+msgstr ""
+
+#: nano.c:608
+msgid " -r [#cols] \tSet fill cols to (wrap lines at) #cols\n"
+msgstr ""
+
+#: nano.c:609
+msgid " -s [prog]  \tEnable alternate speller\n"
+msgstr ""
+
+#: nano.c:610
+msgid " -p \t\tMake bottom 2 lines more Pico-like\n"
+msgstr ""
+
+#: nano.c:611
+msgid " -t \t\tAuto save on exit, don't prompt\n"
+msgstr ""
+
+#: nano.c:612
+msgid " -v \t\tView (read only) mode\n"
+msgstr ""
+
+#: nano.c:613
+msgid " -w \t\tDon't wrap long lines\n"
+msgstr ""
+
+#: nano.c:614
+msgid " -x \t\tDon't show help window\n"
+msgstr ""
+
+#: nano.c:615
+msgid " -z \t\tEnable suspend\n"
+msgstr ""
+
+#: nano.c:616
+msgid " +LINE\t\tStart at line number LINE\n"
+msgstr ""
+
+#: nano.c:623
+#, c-format
+msgid " nano version %s by Chris Allegretta (compiled %s, %s)\n"
+msgstr ""
+
+#: nano.c:625
+msgid " Email: nano@asty.org\tWeb: http://www.asty.org/nano\n"
+msgstr ""
+
+#: nano.c:709
+msgid "Mark Set"
+msgstr ""
+
+#: nano.c:714
+msgid "Mark UNset"
+msgstr ""
+
+#: nano.c:1052
+#, c-format
+msgid "check_wrap called with inptr->data=\"%s\"\n"
+msgstr ""
+
+#: nano.c:1089
+#, c-format
+msgid "Case Sensitive Search%s"
+msgstr ""
+
+#: nano.c:1090
+#, c-format
+msgid "Search%s"
+msgstr ""
+
+#: nano.c:1094
+msgid "Search Cancelled"
+msgstr ""
+
+#: nano.c:1175
+msgid "Search Wrapped"
+msgstr ""
+
+#: nano.c:1225
+#, c-format
+msgid "Replaced %d occurences"
+msgstr ""
+
+#: nano.c:1227
+msgid "Replaced 1 occurence"
+msgstr ""
+
+#: nano.c:1245 nano.c:1267 nano.c:1290
+msgid "Replace Cancelled"
+msgstr ""
+
+#: nano.c:1263
+#, c-format
+msgid "Replace with [%s]"
+msgstr ""
+
+#. last_search is empty
+#: nano.c:1288
+msgid "Replace with"
+msgstr ""
+
+#: nano.c:1329
+msgid "Replace this instance?"
+msgstr ""
+
+#: nano.c:1416
+#, c-format
+msgid "current->data now = \"%s\"\n"
+msgstr ""
+
+#: nano.c:1461
+#, c-format
+msgid "After, data = \"%s\"\n"
+msgstr ""
+
+#. Ask for it
+#: nano.c:1529
+msgid "Enter line number"
+msgstr ""
+
+#: nano.c:1531
+msgid "Aborted"
+msgstr ""
+
+#: nano.c:1551
+msgid "Come on, be reasonable"
+msgstr ""
+
+#: nano.c:1556
+#, c-format
+msgid "Only %d lines available, skipping to last line"
+msgstr ""
+
+#: nano.c:1613 nano.c:1629 nano.c:1641 nano.c:1658 nano.c:1664
+#, c-format
+msgid "Could not open file for writing: %s"
+msgstr ""
+
+#: nano.c:1621
+msgid "Could not open file: Path length exceeded."
+msgstr ""
+
+#: nano.c:1646
+#, c-format
+msgid "Wrote >%s\n"
+msgstr ""
+
+#: nano.c:1673
+#, c-format
+msgid "Could not close %s: %s"
+msgstr ""
+
+#. Try a rename??
+#: nano.c:1694 nano.c:1705 nano.c:1710
+#, c-format
+msgid "Could not open %s for writing: %s"
+msgstr ""
+
+#: nano.c:1716
+#, c-format
+msgid "Could not set permissions %o on %s: %s"
+msgstr ""
+
+#: nano.c:1723
+#, c-format
+msgid "Wrote %d lines"
+msgstr ""
+
+#: nano.c:1744
+msgid "File Name to write"
+msgstr ""
+
+#: nano.c:1749
+#, c-format
+msgid "filename is %s"
+msgstr ""
+
+#: nano.c:1754
+msgid "File exists, OVERWRITE ?"
+msgstr ""
+
+#: nano.c:1783
+msgid "Error deleting tempfile, ack!"
+msgstr ""
+
+#: nano.c:1796 nano.c:1846
+#, c-format
+msgid "Could not create a temporary filename: %s"
+msgstr ""
+
+#: nano.c:1818 nano.c:1868
+#, c-format
+msgid "Could not invoke spell program \"%s\""
+msgstr ""
+
+#. Why 32512? I dont know!
+#: nano.c:1824 nano.c:1874
+msgid "Could not invoke \"ispell\""
+msgstr ""
+
+#: nano.c:1836 nano.c:1886
+msgid "Finished checking spelling"
+msgstr ""
+
+#: nano.c:1903
+msgid "Save modified buffer (ANSWERING \"No\" WILL DESTROY CHANGES) ? "
+msgstr ""
+
+#: nano.c:2027
+msgid "Cannot resize top win"
+msgstr ""
+
+#: nano.c:2029
+msgid "Cannot move top win"
+msgstr ""
+
+#: nano.c:2031
+msgid "Cannot resize edit win"
+msgstr ""
+
+#: nano.c:2033
+msgid "Cannot move edit win"
+msgstr ""
+
+#: nano.c:2035
+msgid "Cannot resize bottom win"
+msgstr ""
+
+#: nano.c:2037
+msgid "Cannot move bottom win"
+msgstr ""
+
+#: nano.c:2468
+msgid "Main: set up windows\n"
+msgstr ""
+
+#: nano.c:2490
+msgid "Main: bottom win\n"
+msgstr ""
+
+#: nano.c:2496
+msgid "Main: open file\n"
+msgstr ""
+
+#: nano.c:2564
+#, c-format
+msgid "I got Alt-[-%c! (%d)\n"
+msgstr ""
+
+#: nano.c:2580
+#, c-format
+msgid "I got Alt-%c! (%d)\n"
+msgstr ""
+
+#: winio.c:116
+#, c-format
+msgid "actual_x for xplus=%d returned %d\n"
+msgstr ""
+
+#: winio.c:402
+#, c-format
+msgid "input '%c' (%d)\n"
+msgstr ""
+
+#: winio.c:438
+msgid "New Buffer"
+msgstr ""
+
+#: winio.c:441
+msgid "  File: ..."
+msgstr ""
+
+#: winio.c:449
+msgid "Modified"
+msgstr ""
+
+#: winio.c:800
+#, c-format
+msgid "Moved to (%d, %d) in edit buffer\n"
+msgstr ""
+
+#: winio.c:811
+#, c-format
+msgid "current->data = \"%s\"\n"
+msgstr ""
+
+#: winio.c:854
+#, c-format
+msgid "I got \"%s\"\n"
+msgstr ""
+
+#: winio.c:878
+msgid " Y"
+msgstr ""
+
+#: winio.c:878
+msgid "Yes"
+msgstr ""
+
+#: winio.c:880
+msgid " A"
+msgstr ""
+
+#: winio.c:880
+msgid "All"
+msgstr ""
+
+#: winio.c:882
+msgid " N"
+msgstr ""
+
+#: winio.c:882
+msgid "No"
+msgstr ""
+
+#: winio.c:883
+msgid "^C"
+msgstr ""
+
+#: winio.c:1027
+#, c-format
+msgid "do_cursorpos: linepct = %f, bytepct = %f\n"
+msgstr ""
+
+#: winio.c:1031
+msgid "line %d of %d (%.0f%%), character %d of %d (%.0f%%)"
+msgstr ""
+
+#: winio.c:1157
+msgid "Dumping file buffer to stderr...\n"
+msgstr ""
+
+#: winio.c:1159
+msgid "Dumping cutbuffer to stderr...\n"
+msgstr ""
+
+#: winio.c:1161
+msgid "Dumping a buffer to stderr...\n"
+msgstr ""
diff --git a/po/stamp-cat-id b/po/stamp-cat-id
new file mode 100644 (file)
index 0000000..9788f70
--- /dev/null
@@ -0,0 +1 @@
+timestamp
diff --git a/proto.h b/proto.h
new file mode 100644 (file)
index 0000000..157bbad
--- /dev/null
+++ b/proto.h
@@ -0,0 +1,103 @@
+/**************************************************************************
+ *   proto.h                                                              *
+ *                                                                        *
+ *   Copyright (C) 1999 Chris Allegretta                                  *
+ *   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 1, 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., 675 Mass Ave, Cambridge, MA 02139, USA.            *
+ *                                                                        *
+ **************************************************************************/
+
+/* Externs */
+
+#include <sys/stat.h>
+#include "nano.h"
+
+extern int center_x, center_y, editwinrows;
+extern int current_x, current_y, posible_max, totlines;
+extern int placewewant;
+extern int mark_beginx, samelinewrap;
+extern int totsize, temp_opt;
+extern int fill, flags;
+
+extern WINDOW *edit, *topwin, *bottomwin;
+extern char *filename, *answer, *last_search, *last_replace;
+extern char *hblank, *help_text;
+extern struct stat fileinfo;
+extern filestruct *current, *fileage, *edittop, *editbot, *filebot; 
+extern filestruct *cutbuffer, *mark_beginbuf;
+extern shortcut *shortcut_list;
+extern shortcut main_list[MAIN_LIST_LEN], whereis_list[WHEREIS_LIST_LEN];
+extern shortcut replace_list[REPLACE_LIST_LEN], goto_list[GOTO_LIST_LEN];
+extern shortcut writefile_list[WRITEFILE_LIST_LEN], help_list[HELP_LIST_LEN];
+extern shortcut spell_list[SPELL_LIST_LEN];
+
+/* Programs we want available */
+
+char *strcasestr(char *haystack, char *needle);
+char *strstrwrapper(char *haystack, char *needle);
+int search_init(int replacing);
+int renumber(filestruct * fileptr);
+int free_filestruct(filestruct * src);
+int xplustabs(void);
+int do_yesno(int all, int leavecursor, char *msg, ...);
+int actual_x(filestruct * fileptr, int xplus);
+int strlenpt(char *buf);
+int statusq(shortcut s[], int slen, char *def, char *msg, ...);
+int write_file(char *name, int tmpfile);
+int do_cut_text(void);
+int do_uncut_text(void);
+int no_help(void);
+
+void shortcut_init(void);
+void lowercase(char *src);
+void blank_bottombars(void);
+void check_wrap(filestruct * inptr);
+void dump_buffer(filestruct * inptr);
+void align(char **strp);
+void edit_refresh(void);
+void edit_update(filestruct * fileptr);
+void edit_update_top(filestruct * fileptr);
+void edit_update_bot(filestruct * fileptr);
+void update_cursor(void);
+void delete_node(filestruct * fileptr);
+void set_modified(void);
+void dump_buffer_reverse(filestruct * inptr);
+void reset_cursor(void);
+void check_statblank(void);
+void update_line(filestruct * fileptr, int index);
+void statusbar(char *msg, ...);
+void titlebar(void);
+void previous_line(void);
+void center_cursor(void);
+void bottombars(shortcut s[], int slen);
+void blank_statusbar_refresh(void);
+void *nmalloc (size_t howmuch);
+void wrap_reset(void);
+void display_main_list(void);
+void nano_small_msg(void);
+
+int do_writeout_void(void), do_exit(void), do_gotoline_void(void);
+int do_insertfile(void), do_search(void), page_up(void), page_down(void);
+int do_cursorpos(void), do_spell(void);
+int do_up(void), do_down (void), do_right(void), do_left (void);
+int do_home(void), do_end(void), total_refresh(void), do_mark(void);
+int do_delete(void), do_backspace(void), do_tab(void), do_justify(void);
+int do_first_line(void), do_last_line(void);
+int do_replace(void), do_help(void), do_enter_void(void);
+
+filestruct *copy_node(filestruct * src);
+filestruct *copy_filestruct(filestruct * src);
+filestruct *make_new_node(filestruct * prevnode);
+
+
diff --git a/stamp-h.in b/stamp-h.in
new file mode 100644 (file)
index 0000000..9788f70
--- /dev/null
@@ -0,0 +1 @@
+timestamp
diff --git a/utils.c b/utils.c
new file mode 100644 (file)
index 0000000..fa44d80
--- /dev/null
+++ b/utils.c
@@ -0,0 +1,81 @@
+/**************************************************************************
+ *   utils.c                                                              *
+ *                                                                        *
+ *   Copyright (C) 1999 Chris Allegretta                                  *
+ *   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 1, 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., 675 Mass Ave, Cambridge, MA 02139, USA.            *
+ *                                                                        *
+ **************************************************************************/
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "config.h"
+#include "nano.h"
+#include "proto.h"
+
+/* Lower case a string - must be null terminated */
+void lowercase(char *src)
+{
+    long i = 0;
+
+    while (src[i] != 0) {
+       src[i] = (char) tolower(src[i]);
+       i++;
+    }
+}
+
+
+/* I can't believe I have to write this function */
+char *strcasestr(char *haystack, char *needle)
+{
+    char *localneedle, *localhaystack, *found, *tmp, *tmp2;
+
+    /* Make a copy of the search string and searcgh space */
+    localneedle = nmalloc(strlen(needle) + 2);
+    localhaystack = nmalloc(strlen(haystack) + 2);
+
+    strcpy(localneedle, needle);
+    strcpy(localhaystack, haystack);
+
+    /* Make them lowercase */
+    lowercase(localneedle);
+    lowercase(localhaystack);
+
+    /* Look for the lowercased substring in the lowercased search space -
+       return NULL if we didn't find anything */
+    if ((found = strstr(localhaystack, localneedle)) == NULL) {
+       free(localneedle);
+       free(localhaystack);
+       return NULL;
+    }
+    /* Else return the pointer to the same place in the real search space */
+    tmp2 = haystack;
+    for (tmp = localhaystack; tmp != found; tmp++)
+       tmp2++;
+
+    free(localneedle);
+    free(localhaystack);
+    return tmp2;
+}
+
+char *strstrwrapper(char *haystack, char *needle)
+{
+
+    if (ISSET(CASE_SENSITIVE))
+       return strstr(haystack, needle);
+    else
+       return strcasestr(haystack, needle);
+}
diff --git a/winio.c b/winio.c
new file mode 100644 (file)
index 0000000..3cb92f8
--- /dev/null
+++ b/winio.c
@@ -0,0 +1,1184 @@
+/**************************************************************************
+ *   winio.c                                                              *
+ *                                                                        *
+ *   Copyright (C) 1999 Chris Allegretta                                  *
+ *   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 1, 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., 675 Mass Ave, Cambridge, MA 02139, USA.            *
+ *                                                                        *
+ **************************************************************************/
+
+#include <stdarg.h>
+#include <string.h>
+#include "config.h"
+#include "proto.h"
+#include "nano.h"
+
+#ifndef NANO_SMALL
+#include <libintl.h>
+#define _(string) gettext(string)
+#else
+#define _(string) (string)
+#endif
+
+static int statblank = 0;      /* Number of keystrokes left after
+                                  we call statubar() before we
+                                  actually blank the statusbar */
+/* Window I/O */
+
+int do_first_line(void)
+{
+    current = fileage;
+    placewewant = 0;
+    current_x = 0;
+    edit_update(current);
+    return 1;
+}
+
+int do_last_line(void)
+{
+    current = filebot;
+    placewewant = 0;
+    current_x = 0;
+    edit_update(current);
+    return 1;
+}
+
+/* Like xplustabs, but for a specifc index of a speficific filestruct */
+int xpt(filestruct * fileptr, int index)
+{
+    int i, tabs = 0;
+
+    if (fileptr == NULL || fileptr->data == NULL)
+       return 0;
+
+    for (i = 0; i < index && fileptr->data[i] != 0; i++) {
+       tabs++;
+
+       if (fileptr->data[i] == NANO_CONTROL_I) {
+           if (tabs % 8 == 0);
+           else
+               tabs += 8 - (tabs % 8);
+       } else if (fileptr->data[i] & 0x80)     
+           /* Make 8 bit chars only 1 collumn! */
+           ;
+       else if (fileptr->data[i] < 32)
+           tabs++;
+    }
+
+    return tabs;
+}
+
+
+/* Return the actual place on the screen of current->data[current_x], which 
+   should always be > current_x */
+int xplustabs(void)
+{
+    return xpt(current, current_x);
+}
+
+
+/* Return what current_x should be, given xplustabs() for the line.
+   Opposite of xplustabs */
+int actual_x(filestruct * fileptr, int xplus)
+{
+    int i, tot = 0;
+
+    if (fileptr == NULL || fileptr->data == NULL)
+       return 0;
+
+    for (i = 1; i + tot <= xplus && fileptr->data[i - 1] != 0; i++)
+       if (fileptr->data[i - 1] == NANO_CONTROL_I) {
+           if ((i + tot) % 8 == 0)
+               tot++;
+           else
+               tot += 8 - ((i + tot) % 8);
+       } else if (fileptr->data[i - 1] & 0x80)
+           tot ++;             /* Make 8 bit chars only 1 column (again) */
+       else if (fileptr->data[i - 1] < 32)
+           tot += 2;
+
+    if (fileptr->data[i - 1] != 0)
+       i--;                    /* Im sure there's a good reason why this is needed for
+                                  it to work, I just cant figure out why =-) */
+
+#ifdef DEBUG
+    fprintf(stderr, _("actual_x for xplus=%d returned %d\n"), xplus, i);
+#endif
+    return i;
+}
+
+/* a strlen with tabs factored in, similar to xplustabs() */
+int strlenpt(char *buf)
+{
+    int i, tabs = 0;
+
+    if (buf == NULL)
+       return 0;
+
+    for (i = 0; buf[i] != 0; i++) {
+       tabs++;
+
+       if (buf[i] == NANO_CONTROL_I) {
+           if (tabs % 8 == 0);
+           else
+               tabs += 8 - (tabs % 8);
+       } else if (buf[i] & 0x80)       
+           /* Make 8 bit chars only 1 collumn! */
+           ;
+       else if (buf[i] < 32)
+           tabs++;
+    }
+
+    return tabs;
+}
+
+
+/* resets current_y based on the position of current and puts the cursor at 
+   (current_y, current_x) */
+void reset_cursor(void)
+{
+    filestruct *ptr = edittop;
+    int x;
+
+    current_y = 0;
+
+    while (ptr != current && ptr != editbot && ptr->next != NULL) {
+       ptr = ptr->next;
+       current_y++;
+    }
+
+    x = xplustabs();
+    if (x <= COLS - 2)
+       wmove(edit, current_y, x % (COLS - 1));
+    else
+       wmove(edit, current_y, x % (COLS - 7) + 1);
+
+}
+
+void blank_bottombars(void)
+{
+    int i = no_help()? 3 : 1;
+
+    for (; i <= 2; i++)
+       mvwaddstr(bottomwin, i, 0, hblank);
+
+}
+
+void blank_edit(void)
+{
+    int i;
+    for (i = 0; i <= editwinrows - 1; i++)
+       mvwaddstr(edit, i, 0, hblank);
+    wrefresh(edit);
+}
+
+
+void blank_statusbar(void)
+{
+    mvwaddstr(bottomwin, 0, 0, hblank);
+}
+
+void blank_statusbar_refresh(void)
+{
+    blank_statusbar();
+    wrefresh(bottomwin);
+}
+
+void check_statblank(void)
+{
+
+    if (statblank > 1)
+       statblank--;
+    else if (statblank == 1 && !ISSET(CONSTUPDATE)) {
+       statblank--;
+       blank_statusbar_refresh();
+    }
+}
+
+/* Get the input from the kb, this should only be called from statusq */
+int nanogetstr(char *buf, char *def, shortcut s[], int slen, int start_x)
+{
+    int kbinput = 0, j = 0, x = 0, xend;
+    int x_left = 0;
+    char inputstr[132], inputbuf[132] = "";
+
+    blank_statusbar();
+    mvwaddstr(bottomwin, 0, 0, buf);
+    if (strlen(def) > 0)
+       waddstr(bottomwin, def);
+    wrefresh(bottomwin);
+
+    x_left = strlen(buf);
+    x = strlen(def) + x_left;
+
+    /* Get the input! */
+    if (strlen(def) > 0) {
+       strcpy(answer, def);
+       strcpy(inputbuf, def);
+    }
+    /* Go into raw mode so we can actually get ^C, for example */
+    raw();
+
+    while ((kbinput = wgetch(bottomwin)) != 13) {
+       for (j = 0; j <= slen - 1; j++) {
+           if (kbinput == s[j].val) {
+               noraw();
+               cbreak();
+               strcpy(answer, "");
+               return s[j].val;
+           }
+       }
+       xend = strlen(buf) + strlen(inputbuf);
+
+       switch (kbinput) {
+       case KEY_HOME:
+           x = x_left;
+           blank_statusbar();
+           mvwaddstr(bottomwin, 0, 0, buf);
+           waddstr(bottomwin, inputbuf);
+           wmove(bottomwin, 0, x);
+           break;
+       case KEY_END:
+           x = x_left + strlen(inputbuf);
+           blank_statusbar();
+           mvwaddstr(bottomwin, 0, 0, buf);
+           waddstr(bottomwin, inputbuf);
+           wmove(bottomwin, 0, x);
+           break;
+       case KEY_RIGHT:
+
+           if (x < xend)
+               x++;
+           wmove(bottomwin, 0, x);
+           break;
+       case NANO_CONTROL_D:
+           if (strlen(inputbuf) > 0 && (x - x_left) != strlen(inputbuf)) {
+               memmove(inputbuf + (x - x_left),
+                       inputbuf + (x - x_left) + 1,
+                       strlen(inputbuf) - (x - x_left) - 1);
+               inputbuf[strlen(inputbuf) - 1] = 0;
+           }
+           blank_statusbar();
+           mvwaddstr(bottomwin, 0, 0, buf);
+           waddstr(bottomwin, inputbuf);
+           wmove(bottomwin, 0, x);
+           break;
+       case NANO_CONTROL_K:
+       case NANO_CONTROL_U:
+           *inputbuf = 0;
+           x = x_left;
+           blank_statusbar();
+           mvwaddstr(bottomwin, 0, 0, buf);
+           waddstr(bottomwin, inputbuf);
+           wmove(bottomwin, 0, x);
+           break;
+       case KEY_BACKSPACE:
+       case KEY_DC:
+       case 127:
+       case NANO_CONTROL_H:
+           if (strlen(inputbuf) > 0) {
+               if (x == (x_left + strlen(inputbuf)))
+                   inputbuf[strlen(inputbuf) - 1] = 0;
+               else if (x - x_left) {
+                   memmove(inputbuf + (x - x_left) - 1,
+                           inputbuf + (x - x_left),
+                           strlen(inputbuf) - (x - x_left));
+                   inputbuf[strlen(inputbuf) - 1] = 0;
+               }
+           }
+           blank_statusbar();
+           mvwaddstr(bottomwin, 0, 0, buf);
+           waddstr(bottomwin, inputbuf);
+       case KEY_LEFT:
+           if (x > strlen(buf))
+               x--;
+           wmove(bottomwin, 0, x);
+           break;
+       case KEY_UP:
+       case KEY_DOWN:
+           break;
+
+       case 27:
+           switch (kbinput = wgetch(edit)) {
+           case 79:
+               switch (kbinput = wgetch(edit)) {
+               case 70:
+                   x = x_left + strlen(inputbuf);
+                   blank_statusbar();
+                   mvwaddstr(bottomwin, 0, 0, buf);
+                   waddstr(bottomwin, inputbuf);
+                   wmove(bottomwin, 0, x);
+                   break;
+               case 72:
+                   x = x_left;
+                   blank_statusbar();
+                   mvwaddstr(bottomwin, 0, 0, buf);
+                   waddstr(bottomwin, inputbuf);
+                   wmove(bottomwin, 0, x);
+                   break;
+               }
+               break;
+           case 91:
+               switch (kbinput = wgetch(edit)) {
+               case 'C':
+                   if (x < xend)
+                       x++;
+                   wmove(bottomwin, 0, x);
+                   break;
+               case 'D':
+                   if (x > strlen(buf))
+                       x--;
+                   wmove(bottomwin, 0, x);
+                   break;
+               case 49:
+                   x = x_left;
+                   blank_statusbar();
+                   mvwaddstr(bottomwin, 0, 0, buf);
+                   waddstr(bottomwin, inputbuf);
+                   wmove(bottomwin, 0, x);
+                   goto skip_126;
+               case 51:
+                   if (strlen(inputbuf) > 0
+                       && (x - x_left) != strlen(inputbuf)) {
+                       memmove(inputbuf + (x - x_left),
+                               inputbuf + (x - x_left) + 1,
+                               strlen(inputbuf) - (x - x_left) - 1);
+                       inputbuf[strlen(inputbuf) - 1] = 0;
+                   }
+                   blank_statusbar();
+                   mvwaddstr(bottomwin, 0, 0, buf);
+                   waddstr(bottomwin, inputbuf);
+                   wmove(bottomwin, 0, x);
+                   goto skip_126;
+               case 52:
+                   x = x_left + strlen(inputbuf);
+                   blank_statusbar();
+                   mvwaddstr(bottomwin, 0, 0, buf);
+                   waddstr(bottomwin, inputbuf);
+                   wmove(bottomwin, 0, x);
+                   goto skip_126;
+                 skip_126:
+                   nodelay(edit, TRUE);
+                   kbinput = wgetch(edit);
+                   if (kbinput == 126 || kbinput == ERR)
+                       kbinput = -1;
+                   nodelay(edit, FALSE);
+                   break;
+               }
+           }
+           blank_statusbar();
+           mvwaddstr(bottomwin, 0, 0, buf);
+           waddstr(bottomwin, inputbuf);
+           wmove(bottomwin, 0, x);
+           break;
+
+
+       default:
+           if (kbinput < 32)
+               break;
+           strcpy(inputstr, inputbuf);
+           inputstr[x - strlen(buf)] = kbinput;
+           strcpy(&inputstr[x - strlen(buf) + 1],
+                  &inputbuf[x - strlen(buf)]);
+           strcpy(inputbuf, inputstr);
+           x++;
+
+           mvwaddstr(bottomwin, 0, 0, buf);
+           waddstr(bottomwin, inputbuf);
+           wmove(bottomwin, 0, x);
+
+#ifdef DEBUG
+           fprintf(stderr, _("input \'%c\' (%d)\n"), kbinput, kbinput);
+#endif
+       }
+       wrefresh(bottomwin);
+    }
+
+    strncpy(answer, inputbuf, 132);
+
+    noraw();
+    cbreak();
+    if (!strcmp(answer, ""))
+       return -2;
+    else
+       return 0;
+}
+
+void horizbar(WINDOW * win, int y)
+{
+    wattron(win, A_REVERSE);
+    mvwaddstr(win, 0, 0, hblank);
+    wattroff(win, A_REVERSE);
+}
+
+void titlebar(void)
+{
+    int namelen, space;
+
+    horizbar(topwin, 0);
+    wattron(topwin, A_REVERSE);
+    mvwaddstr(topwin, 0, 3, VERMSG);
+
+    space = COLS - strlen(VERMSG) - strlen(VERSION) - 21;
+
+    namelen = strlen(filename);
+
+    if (!strcmp(filename, ""))
+       mvwaddstr(topwin, 0, center_x - 6, _("New Buffer"));
+    else {
+       if (namelen > space) {
+           waddstr(topwin, _("  File: ..."));
+           waddstr(topwin, &filename[namelen - space]);
+       } else {
+           mvwaddstr(topwin, 0, center_x - (namelen / 2 + 1), "File: ");
+           waddstr(topwin, filename);
+       }
+    }
+    if (ISSET(MODIFIED))
+       mvwaddstr(topwin, 0, COLS - 10, _("Modified"));
+    wattroff(topwin, A_REVERSE);
+    wrefresh(topwin);
+    reset_cursor();
+}
+
+void onekey(char *keystroke, char *desc)
+{
+    char description[80];
+
+    snprintf(description, 12, " %-11s", desc);
+    wattron(bottomwin, A_REVERSE);
+    waddstr(bottomwin, keystroke);
+    wattroff(bottomwin, A_REVERSE);
+    waddstr(bottomwin, description);
+}
+
+void clear_bottomwin(void)
+{
+    if (ISSET(NO_HELP))
+       return;
+
+    mvwaddstr(bottomwin, 1, 0, hblank);
+    mvwaddstr(bottomwin, 2, 0, hblank);
+    wrefresh(bottomwin);
+}
+
+void bottombars(shortcut s[], int slen)
+{
+    int i, j, k;
+    char keystr[10];
+
+    if (ISSET(NO_HELP))
+       return;
+
+    /* Determine how many extra spaces are needed to fill the bottom of the screen */
+    k = COLS / 6 - 13;
+
+    clear_bottomwin();
+    wmove(bottomwin, 1, 0);
+    for (i = 0; i <= slen - 1; i += 2) {
+       sprintf(keystr, "^%c", s[i].val + 64);
+       onekey(keystr, s[i].desc);
+
+       for (j = 0; j < k; j++)
+           waddch(bottomwin, ' ');
+    }
+
+    wmove(bottomwin, 2, 0);
+    for (i = 1; i <= slen - 1; i += 2) {
+       sprintf(keystr, "^%c", s[i].val + 64);
+       onekey(keystr, s[i].desc);
+
+       for (j = 0; j < k; j++)
+           waddch(bottomwin, ' ');
+    }
+
+    wrefresh(bottomwin);
+
+}
+
+/* If modified is not already set, set it and update titlebar */
+void set_modified(void)
+{
+    if (!ISSET(MODIFIED)) {
+       SET(MODIFIED);
+       titlebar();
+       wrefresh(topwin);
+    }
+}
+
+#ifndef NANO_SMALL
+void add_marked_sameline(int begin, int end, filestruct * fileptr, int y)
+{
+    int col, actual_col = 0, begin_mapped = 0, end_mapped = 0;
+
+    if (current_x > COLS - 2) {
+       col = (COLS - 7) * (xplustabs() / (COLS - 7)) - 1;
+       actual_col = actual_x(fileptr, col);
+       begin_mapped = begin % (COLS - 7) + 1;
+       end_mapped = end % (COLS - 7) + 1;
+    } else {
+       actual_col = 0;
+       begin_mapped = begin;
+       end_mapped = end;
+    }
+
+    if (end > (COLS - 2) && ((begin / (COLS - 7)) != (end / (COLS - 7)))) {
+       if (current_x == begin) {
+           mvwaddnstr(edit, y, 0, &fileptr->data[actual_col],
+                      begin_mapped);
+           wattron(edit, A_REVERSE);
+           waddnstr(edit, &fileptr->data[begin], COLS - begin_mapped);
+           wattroff(edit, A_REVERSE);
+       } else {
+           wattron(edit, A_REVERSE);
+           mvwaddnstr(edit, y, 0, &fileptr->data[actual_col], end_mapped);
+           wattroff(edit, A_REVERSE);
+           waddnstr(edit, &fileptr->data[end], COLS - end_mapped);
+       }
+    } else {
+       mvwaddnstr(edit, y, 0, &fileptr->data[actual_col], begin_mapped);
+       wattron(edit, A_REVERSE);
+       waddnstr(edit, &fileptr->data[begin], end_mapped - begin_mapped);
+       wattroff(edit, A_REVERSE);
+       waddnstr(edit, &fileptr->data[end],
+                COLS - (end_mapped - begin_mapped));
+    }
+}
+#endif
+
+void edit_add(filestruct * fileptr, int yval, int xval, int start)
+{
+#ifndef NANO_SMALL
+    int col;
+
+    if (ISSET(MARK_ISSET)) {
+
+       /* Our horribly ugly marker code, which needs to be rewritten too :P */
+       if ((fileptr->lineno > mark_beginbuf->lineno
+            && fileptr->lineno > current->lineno)
+           || (fileptr->lineno < mark_beginbuf->lineno
+               && fileptr->lineno < current->lineno)) {
+
+           /* We're on a normal, unselected line */
+           mvwaddnstr(edit, yval, 0, fileptr->data, COLS);
+
+           if (strlenpt(fileptr->data) > COLS)
+               mvwaddch(edit, yval, COLS - 1, '$');
+       } else {
+
+           /* We're on selected text */
+           if (fileptr != mark_beginbuf && fileptr != current) {
+               wattron(edit, A_REVERSE);
+               mvwaddnstr(edit, yval, 0, fileptr->data, COLS);
+               if (strlenpt(fileptr->data) > COLS)
+                   mvwaddch(edit, yval, COLS - 1, '$');
+
+               wattroff(edit, A_REVERSE);
+           }
+           /* Special case, we're still on the same line we started marking */
+           else if (fileptr == mark_beginbuf && fileptr == current) {
+               if (current_x < mark_beginx) {
+                   add_marked_sameline(current_x, mark_beginx, fileptr,
+                                       yval);
+               } else {
+                   add_marked_sameline(mark_beginx, current_x, fileptr,
+                                       yval);
+               }
+
+           } else if (fileptr == mark_beginbuf) {
+               if (mark_beginbuf->lineno > current->lineno)
+                   wattron(edit, A_REVERSE);
+
+               mvwaddnstr(edit, yval, 0, fileptr->data, mark_beginx);
+
+               if (mark_beginbuf->lineno < current->lineno)
+                   wattron(edit, A_REVERSE);
+               else
+                   wattroff(edit, A_REVERSE);
+
+               waddnstr(edit, &fileptr->data[mark_beginx],
+                        COLS - xpt(fileptr, mark_beginx));
+
+               if (strlenpt(fileptr->data) > COLS)
+                   mvwaddch(edit, yval, COLS - 1, '$');
+
+               if (mark_beginbuf->lineno < current->lineno)
+                   wattroff(edit, A_REVERSE);
+
+           } else if (fileptr == current) {
+               if (mark_beginbuf->lineno < current->lineno)
+                   wattron(edit, A_REVERSE);
+
+               /* Thank GOD for waddnstr, this can now be much cleaner */
+               if (xplustabs() > COLS - 2) {
+                   col = (COLS - 7) * (xplustabs() / (COLS - 7));
+                   mvwaddnstr(edit, yval, 1,
+                              &fileptr->data[actual_x(current, col)],
+                              current_x % (COLS - 7) + 1);
+               } else
+                   mvwaddnstr(edit, yval, 0, fileptr->data, current_x);
+
+               if (mark_beginbuf->lineno > current->lineno)
+                   wattron(edit, A_REVERSE);
+               else
+                   wattroff(edit, A_REVERSE);
+
+
+               if (xplustabs() > COLS - 2) {
+                   mvwaddnstr(edit, yval,
+                              xpt(current,
+                                  (current_x % (COLS - 7) + 1)),
+                              &fileptr->data[current_x],
+                              COLS - current_x);
+               } else
+                   mvwaddnstr(edit, yval, xplustabs(),
+                              &fileptr->data[current_x],
+                              COLS - current_x);
+
+               if (strlenpt(fileptr->data) > COLS)
+                   mvwaddch(edit, yval, COLS - 1, '$');
+
+               if (mark_beginbuf->lineno > current->lineno)
+                   wattroff(edit, A_REVERSE);
+
+           }
+       }
+
+    } else
+#endif
+       mvwaddnstr(edit, yval, xval, &fileptr->data[start], COLS - xval);
+
+}
+
+/*
+ * Just update one line in the edit buffer 
+ *
+ * index gives is a place in the string to update starting from.
+ * Likely args are current_x or 0.
+ */
+void update_line(filestruct * fileptr, int index)
+{
+    filestruct *filetmp;
+    int line = 0, col = 0, actual_col = 0, x;
+
+    for (filetmp = edittop; filetmp != fileptr && filetmp != editbot;
+        filetmp = filetmp->next)
+       line++;
+
+    mvwaddstr(edit, line, 0, hblank);
+
+    if (current == fileptr && (x = xpt(current, index)) > COLS - 2) {
+
+       col = (COLS - 7) * (x / (COLS - 7));
+       actual_col = actual_x(filetmp, col);
+
+       edit_add(filetmp, line, 1, actual_col);
+       mvwaddch(edit, line, 0, '$');
+
+    } else
+       edit_add(filetmp, line, 0, 0);
+
+    if (strlenpt(&filetmp->data[actual_col]) > COLS)
+       mvwaddch(edit, line, COLS - 1, '$');
+
+}
+
+void center_cursor(void)
+{
+    current_y = editwinrows / 2;
+    wmove(edit, current_y, current_x);
+}
+
+/* Refresh the screen without changing the position of lines */
+void edit_refresh(void)
+{
+    int lines = 0, i = 0;
+    filestruct *temp, *hold = current;
+
+    if (current == NULL)
+       return;
+
+    temp = edittop;
+
+    while (lines <= editwinrows - 1 && lines <= totlines && temp != NULL) {
+       hold = temp;
+       update_line(temp, current_x);
+       temp = temp->next;
+       lines++;
+    }
+
+    if (lines <= editwinrows - 1)
+       while (lines <= editwinrows - 1) {
+           mvwaddstr(edit, lines, i, hblank);
+           lines++;
+       }
+    if (temp == NULL)
+       editbot = hold;
+    else
+       editbot = temp;
+}
+
+/*
+ * Nice generic routine to update the edit buffer given a pointer to the
+ * file struct =) 
+ */
+void edit_update(filestruct * fileptr)
+{
+
+    int lines = 0, i = 0;
+    filestruct *temp;
+
+    if (fileptr == NULL)
+       return;
+
+    temp = fileptr;
+    while (i <= editwinrows / 2 && temp->prev != NULL) {
+       i++;
+       temp = temp->prev;
+    }
+    edittop = temp;
+
+    while (lines <= editwinrows - 1 && lines <= totlines && temp != NULL
+          && temp != filebot) {
+       temp = temp->next;
+       lines++;
+    }
+    editbot = temp;
+
+    edit_refresh();
+}
+
+/* Now we want to update the screen using this struct as the top of the edit buffer */
+void edit_update_top(filestruct * fileptr)
+{
+    int i;
+    filestruct *temp = fileptr;
+
+    if (fileptr->next == NULL || fileptr == NULL)
+       return;
+
+    i = 0;
+    while (i <= editwinrows / 2 && temp->next != NULL) {
+       i++;
+       temp = temp->next;
+    }
+    edit_update(temp);
+}
+
+/* And also for the bottom... */
+void edit_update_bot(filestruct * fileptr)
+{
+    int i;
+    filestruct *temp = fileptr;
+
+    i = 0;
+    while (i <= editwinrows / 2 - 1 && temp->prev != NULL) {
+       i++;
+       temp = temp->prev;
+    }
+    edit_update(temp);
+}
+
+/* This function updates current based on where current_y is, reset_cursor 
+   does the opposite */
+void update_cursor(void)
+{
+    int i = 0;
+
+#ifdef DEBUG
+    fprintf(stderr, _("Moved to (%d, %d) in edit buffer\n"), current_y,
+           current_x);
+#endif
+
+    current = edittop;
+    while (i <= current_y - 1 && current->next != NULL) {
+       current = current->next;
+       i++;
+    }
+
+#ifdef DEBUG
+    fprintf(stderr, _("current->data = \"%s\"\n"), current->data);
+#endif
+
+}
+
+/*
+ * Ask a question on the statusbar.  Answer will be stored in answer
+ * global.  Returns -1 on aborted enter, -2 on a blank string, and 0
+ * otherwise, the valid shortcut key caught, Def is any editable text we
+ * want to put up by default.
+ */
+int statusq(shortcut s[], int slen, char *def, char *msg, ...)
+{
+    va_list ap;
+    char foo[133];
+    int ret;
+
+    bottombars(s, slen);
+
+    va_start(ap, msg);
+    vsnprintf(foo, 132, msg, ap);
+    strncat(foo, ": ", 132);
+    va_end(ap);
+
+    wattron(bottomwin, A_REVERSE);
+    ret = nanogetstr(foo, def, s, slen, (strlen(foo) + 3));
+    wattroff(bottomwin, A_REVERSE);
+
+    switch (ret) {
+
+    case NANO_FIRSTLINE_KEY:
+       do_first_line();
+       break;
+    case NANO_LASTLINE_KEY:
+       do_last_line();
+       break;
+    case NANO_CANCEL_KEY:
+       return -1;
+    default:
+       blank_statusbar_refresh();
+    }
+
+#ifdef DEBUG
+    fprintf(stderr, _("I got \"%s\"\n"), answer);
+#endif
+
+    return ret;
+}
+
+/*
+ * Ask a simple yes/no question on the statusbar.  Returns 1 for Y, 0 for
+ * N, 2 for All (if all is non-zero when passed in) and -1 for abort (^C)
+ */
+int do_yesno(int all, int leavecursor, char *msg, ...)
+{
+    va_list ap;
+    char foo[133];
+    int kbinput, ok = -1;
+
+    /* Write the bottom of the screen */
+    clear_bottomwin();
+    wattron(bottomwin, A_REVERSE);
+    blank_statusbar_refresh();
+    wattroff(bottomwin, A_REVERSE);
+
+    if (!ISSET(NO_HELP)) {
+       wmove(bottomwin, 1, 0);
+       onekey(_(" Y"), _("Yes"));
+       if (all)
+           onekey(_(" A"), _("All"));
+       wmove(bottomwin, 2, 0);
+       onekey(_(" N"), _("No"));
+       onekey(_("^C"), _("Cancel"));
+    }
+    va_start(ap, msg);
+    vsnprintf(foo, 132, msg, ap);
+    va_end(ap);
+    wattron(bottomwin, A_REVERSE);
+    mvwaddstr(bottomwin, 0, 0, foo);
+    wattroff(bottomwin, A_REVERSE);
+    wrefresh(bottomwin);
+
+    if (leavecursor == 1)
+       reset_cursor();
+
+    raw();
+
+    while (ok == -1) {
+       kbinput = wgetch(edit);
+
+       switch (kbinput) {
+       case 'Y':
+       case 'y':
+           ok = 1;
+           break;
+       case 'N':
+       case 'n':
+           ok = 0;
+           break;
+       case 'A':
+       case 'a':
+           if (all)
+               ok = 2;
+           break;
+       case NANO_CONTROL_C:
+           ok = -2;
+           break;
+       }
+    }
+    noraw();
+    cbreak();
+
+    /* Then blank the screen */
+    blank_statusbar_refresh();
+
+    if (ok == -2)
+       return -1;
+    else
+       return ok;
+}
+
+void statusbar(char *msg, ...)
+{
+    va_list ap;
+    char foo[133];
+    int start_x = 0;
+
+    va_start(ap, msg);
+    vsnprintf(foo, 132, msg, ap);
+    va_end(ap);
+
+    start_x = center_x - strlen(foo) / 2 - 1;
+
+    /* Blank out line */
+    blank_statusbar();
+
+    wmove(bottomwin, 0, start_x);
+
+    wattron(bottomwin, A_REVERSE);
+
+    waddstr(bottomwin, "[ ");
+    waddstr(bottomwin, foo);
+    waddstr(bottomwin, " ]");
+    wattroff(bottomwin, A_REVERSE);
+    wrefresh(bottomwin);
+
+    if (ISSET(CONSTUPDATE))
+       statblank = 1;
+    else
+       statblank = 25;
+}
+
+void display_main_list(void)
+{
+    bottombars(main_list, MAIN_VISIBLE);
+}
+
+int total_refresh(void)
+{
+    display_main_list();
+    clearok(edit, TRUE);
+    clearok(topwin, TRUE);
+    clearok(bottomwin, TRUE);
+    wnoutrefresh(edit);
+    wnoutrefresh(topwin);
+    wnoutrefresh(bottomwin);
+    doupdate();
+    clearok(edit, FALSE);
+    clearok(topwin, FALSE);
+    clearok(bottomwin, FALSE);
+
+    return 1;
+}
+
+void previous_line(void)
+{
+    if (current_y > 0)
+       current_y--;
+}
+
+int do_cursorpos(void)
+{
+    filestruct *fileptr;
+    float linepct, bytepct;
+    int i, tot = 0;
+
+    if (current == NULL || fileage == NULL)
+       return 0;
+
+    for (fileptr = fileage; fileptr != current && fileptr != NULL; fileptr = fileptr->next)
+       tot += strlen(fileptr->data) + 1;
+
+    if (fileptr == NULL)
+       return -1;
+
+    i = tot + current_x;;
+
+    for (fileptr = current->next; fileptr != NULL; fileptr = fileptr->next)
+       tot += strlen(fileptr->data) + 1;
+
+    /* FIXME - This is gardly elegant */
+/*    if (current == fileage && strlen(current->data) == 0)
+       i = 0;
+*/
+
+    if (totlines > 0)
+       linepct = 100 * current->lineno / totlines;
+    else
+       linepct = 0;
+
+    if (totsize > 0)
+       bytepct = 100 * i / totsize;
+    else
+       bytepct = 0;
+
+#ifdef DEBUG
+    fprintf(stderr, _("do_cursorpos: linepct = %f, bytepct = %f\n"),
+           linepct, bytepct);
+#endif
+
+    statusbar(_("line %d of %d (%.0f%%), character %d of %d (%.0f%%)"),
+             current->lineno, totlines, linepct, i, totsize, bytepct);
+    reset_cursor();
+    return 1;
+}
+
+/* Our broken, non-shortcut list compliant help function.
+   But hey, it's better than nothing, and it's dynamic! */
+int do_help(void)
+{
+#ifndef NANO_SMALL
+    char *ptr = help_text, *end;
+    int i, j, row = 0, page = 1, kbinput = 0, no_more = 0;
+    int no_help_flag = 0;
+
+    blank_edit();
+    curs_set(0);
+    blank_statusbar();
+
+    if (ISSET(NO_HELP)) {
+
+       no_help_flag = 1;
+        delwin (bottomwin);
+        bottomwin = newwin(3, COLS, LINES - 3, 0);
+       keypad(bottomwin, TRUE);
+        
+       editwinrows -= no_help ();
+        UNSET(NO_HELP);
+       bottombars(help_list, HELP_LIST_LEN);
+    }
+    else
+       bottombars(help_list, HELP_LIST_LEN);
+
+    do {
+       ptr = help_text;
+       switch (kbinput) {
+       case NANO_NEXTPAGE_KEY:
+       case NANO_NEXTPAGE_FKEY:
+       case KEY_NPAGE:
+           if (!no_more) {
+               blank_edit();
+               page++;
+           }
+           break;
+       case NANO_PREVPAGE_KEY:
+       case NANO_PREVPAGE_FKEY:
+       case KEY_PPAGE:
+           if (page > 1) {
+               no_more = 0;
+               blank_edit();
+               page--;
+           }
+           break;
+       }
+
+       /* Calculate where in the text we should be based on the page */
+       for (i = 1; i < page; i++) {
+           row = 0;
+           j = 0;
+           while (row < editwinrows && *ptr != '\0') {
+               if (*ptr == '\n' || j == COLS - 5) {
+                   j = 0;
+                   row++;
+               }
+               ptr++;
+               j++;
+           }
+       }
+
+       i = 0;
+       j = 0;
+       while (i < editwinrows && *ptr != '\0') {
+           end = ptr;
+           while (*end != '\n' && *end != '\0' && j != COLS - 5) {
+               end++;
+               j++;
+           }
+           if (j == COLS - 5) {
+
+               /* Don't print half a word if we've run of of space */
+               while (*end != ' ' && *end != '\0') {
+                   end--;
+                   j--;
+               }
+           }
+           mvwaddnstr(edit, i, 0, ptr, j);
+           j = 0;
+           i++;
+           if (*end == '\n')
+               end++;
+           ptr = end;
+       }
+       if (*ptr == '\0') {
+           no_more = 1;
+           continue;
+       }
+    } while ((kbinput = wgetch(edit)) != NANO_EXIT_KEY);
+
+    if (no_help_flag) {
+       werase(bottomwin);
+        wrefresh(bottomwin);
+       delwin (bottomwin);
+       SET(NO_HELP);
+       bottomwin = newwin(3 - no_help(), COLS, LINES - 3 + no_help(), 0);
+       keypad(bottomwin, TRUE);
+       editwinrows += no_help();
+    }
+    else
+       display_main_list();
+
+    curs_set(1);
+    edit_refresh();
+#else
+    nano_small_msg();
+#endif
+
+    return 1;
+}
+
+/* Dump the current file structure to stderr */
+void dump_buffer(filestruct * inptr)
+{
+#ifdef DEBUG
+    filestruct *fileptr;
+
+    if (inptr == fileage)
+       fprintf(stderr, _("Dumping file buffer to stderr...\n"));
+    else if (inptr == cutbuffer)
+       fprintf(stderr, _("Dumping cutbuffer to stderr...\n"));
+    else
+       fprintf(stderr, _("Dumping a buffer to stderr...\n"));
+
+    fileptr = inptr;
+    while (fileptr != NULL) {
+       fprintf(stderr, "(%ld) %s\n", fileptr->lineno, fileptr->data);
+       fflush(stderr);
+       fileptr = fileptr->next;
+    }
+#endif                         /* DEBUG */
+}
+
+void dump_buffer_reverse(filestruct * inptr)
+{
+#ifdef DEBUG
+    filestruct *fileptr;
+
+    fileptr = filebot;
+    while (fileptr != NULL) {
+       fprintf(stderr, "(%ld) %s\n", fileptr->lineno, fileptr->data);
+       fflush(stderr);
+       fileptr = fileptr->prev;
+    }
+#endif                         /* DEBUG */
+}