Initial revision

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@2 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
master
Chris Allegretta 2000-06-06 05:53:49 +00:00
commit a2ea193bd4
66 changed files with 23287 additions and 0 deletions

226
ABOUT-NLS Normal file
View File

@ -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.

15
AUTHORS Normal file
View File

@ -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.

36
BUGS Normal file
View File

@ -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).

340
COPYING Normal file
View File

@ -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.
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.)
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.
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.
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
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.

667
ChangeLog Normal file
View File

@ -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

182
INSTALL Normal file
View File

@ -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.

19
Makefile.am Normal file
View File

@ -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@

505
Makefile.in Normal file
View File

@ -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:

194
NEWS Normal file
View File

@ -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.

82
README Normal file
View File

@ -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)

14
TODO Normal file
View File

@ -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]

23
acconfig.h Normal file
View File

@ -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

708
aclocal.m4 vendored Normal file
View File

@ -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])

180
config.h.in Normal file
View File

@ -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

4537
configure vendored Executable file

File diff suppressed because it is too large Load Diff

149
configure.in Normal file
View File

@ -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])

379
cut.c Normal file
View File

@ -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;
}

328
global.c Normal file
View File

@ -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);
}

251
install-sh Executable file
View File

@ -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

1086
intl/ChangeLog Normal file

File diff suppressed because it is too large Load Diff

214
intl/Makefile.in Normal file
View File

@ -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:

1
intl/VERSION Normal file
View File

@ -0,0 +1 @@
GNU gettext library from gettext-0.10.35

203
intl/bindtextdom.c Normal file
View File

@ -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

262
intl/cat-compat.c Normal file
View File

@ -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

655
intl/dcgettext.c Normal file
View File

@ -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

59
intl/dgettext.c Normal file
View File

@ -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

198
intl/explodename.c Normal file
View File

@ -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;
}

216
intl/finddomain.c Normal file
View File

@ -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

70
intl/gettext.c Normal file
View File

@ -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

105
intl/gettext.h Normal file
View File

@ -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 */

89
intl/gettextP.h Normal file
View File

@ -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 */

59
intl/hash-string.h Normal file
View File

@ -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;
}

76
intl/intl-compat.c Normal file
View File

@ -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);
}

411
intl/l10nflist.c Normal file
View File

@ -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;
}
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;
}
/* 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

182
intl/libgettext.h Normal file
View File

@ -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

100
intl/linux-msg.sed Normal file
View File

@ -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

78
intl/loadinfo.h Normal file
View File

@ -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));

220
intl/loadmsgcat.c Normal file
View File

@ -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

438
intl/localealias.c Normal file
View File

@ -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
}

102
intl/po2tbl.sed.in Normal file
View File

@ -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

108
intl/textdomain.c Normal file
View File

@ -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

104
intl/xopen-msg.sed Normal file
View File

@ -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

190
missing Executable file
View File

@ -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

40
mkinstalldirs Executable file
View File

@ -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

97
nano.1 Normal file
View File

@ -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).

158
nano.1.html Normal file
View File

@ -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>

2640
nano.c Normal file

File diff suppressed because it is too large Load Diff

227
nano.h Normal file
View File

@ -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

0
po/ChangeLog Normal file
View File

248
po/Makefile.in.in Normal file
View File

@ -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:

11
po/POTFILES.in Normal file
View File

@ -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

215
po/cat-id-tbl.c Normal file
View File

@ -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;

BIN
po/de.gmo Normal file

Binary file not shown.

947
po/de.po Normal file
View File

@ -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"

BIN
po/es.gmo Normal file

Binary file not shown.

818
po/es.po Normal file
View File

@ -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"

BIN
po/fr.gmo Normal file

Binary file not shown.

830
po/fr.po Normal file
View File

@ -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"

BIN
po/it.gmo Normal file

Binary file not shown.

832
po/it.po Normal file
View File

@ -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"

793
po/nano.pot Normal file
View File

@ -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 ""

1
po/stamp-cat-id Normal file
View File

@ -0,0 +1 @@
timestamp

103
proto.h Normal file
View File

@ -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);

1
stamp-h.in Normal file
View File

@ -0,0 +1 @@
timestamp

81
utils.c Normal file
View File

@ -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);
}

1184
winio.c Normal file

File diff suppressed because it is too large Load Diff