Update nvi-1.79 to 2.1.1-4334a8297f
This is the gsoc-2011 project to clean up and backport multibyte support from other nvi forks in a form we can use. USE_WIDECHAR is on unless building for the rescue crunchgen. This should allow editing in the native locale encoding. USE_ICONV depends on make.conf having 'WITH_ICONV=YES' for now. This adds the ability to do things like edit a KOI8-R file while having $LANG set to (say) en_US.UTF-8. iconv is used to transcode the characters for display. Other points: * It uses gencat and catopen/etc instead of homegrown msg catalog stuff. * A lot of stuff has been trimmed out, eg: the perl and tcl bindings which we could never use in base anyway. * It uses ncursesw when in widechar mode. This could be interesting. GSoC info: http://www.google-melange.com/gsoc/proposal/review/google/gsoc2011/zy/1 Repo at: https://github.com/lichray/nvi2 Obtained from: Zhihao Yuan <lichray@gmail.com>
This commit is contained in:
commit
f0957ccae4
@ -1331,7 +1331,8 @@ build-tools: .MAKE
|
||||
usr.bin/awk \
|
||||
lib/libmagic \
|
||||
usr.bin/mkesdb_static \
|
||||
usr.bin/mkcsmapper_static
|
||||
usr.bin/mkcsmapper_static \
|
||||
usr.bin/vi/catalog
|
||||
${_+_}@${ECHODIR} "===> ${_tool} (obj,build-tools)"; \
|
||||
cd ${.CURDIR}/${_tool} && \
|
||||
${MAKE} DIRPRFX=${_tool}/ obj && \
|
||||
|
160
contrib/nvi/FAQ
160
contrib/nvi/FAQ
@ -1,160 +0,0 @@
|
||||
@(#)FAQ 8.13 (Berkeley) 10/14/96
|
||||
|
||||
Q: How can I get vi to display my character set?
|
||||
A: Vi uses the C library routine isprint(3) to determine if a character
|
||||
is printable, or should be displayed as an octal or hexadecimal value
|
||||
on the screen. Generally, if vi is displaying printable characters
|
||||
in octal/hexadecimal forms, your environment is not configured correctly.
|
||||
Try looking at the man pages that allow you to configure your locale.
|
||||
For example, to configure an ISO 8859-1 locale under Solaris using csh,
|
||||
you would do:
|
||||
|
||||
setenv LANG C
|
||||
setenv LC_CTYPE iso_8859_1
|
||||
|
||||
Other LC_CTYPE systems/values that I'm told work:
|
||||
|
||||
System Value
|
||||
====== =====
|
||||
FreeBSD lt_LN.ISO_8859-1
|
||||
HP-UX 9.X american.iso88591
|
||||
HP-UX 10.X en_US.iso88591
|
||||
SunOS 4.X iso_8859_1
|
||||
SunOS 5.X iso_8859_1
|
||||
|
||||
If there's no other solution, you can use the print and noprint edit
|
||||
options of vi to specify that a specific character is printable or not
|
||||
printable.
|
||||
|
||||
Q: My map won't work!
|
||||
A: One thing that you should immediately check if a vi map doesn't work
|
||||
is if depends on the final cursor position after a P or p command.
|
||||
Historic vi's were inconsistent as to the final position of the cursor,
|
||||
and, to make matter worse, the final cursor position also depended on
|
||||
whether the put text came from a named or unnamed buffer! Vi follows
|
||||
the POSIX 1003.2 standard on this one, and makes this consistent, always
|
||||
placing the cursor on the first character.
|
||||
|
||||
Q: I'm using ksh or csh as my vi edit option shell value, and file
|
||||
expansions don't work right!
|
||||
A: The problem may be in your ksh or csh startup files, e.g., .cshrc. Vi
|
||||
executes the shell to do name expansion, and the shell generally reads
|
||||
its startup files. If the startup files are not correctly configured
|
||||
for non-interactive use, e.g., they always echo a prompt to the screen,
|
||||
vi will be unable to parse the output and things will not work
|
||||
correctly.
|
||||
|
||||
Q: How does the iclower edit option differ from the ignorecase (i.e. ic)
|
||||
edit option?
|
||||
A: The difference is that the ignorecase edit option always ignores the
|
||||
case of letters in the Regular Expression (RE), and the iclower edit
|
||||
option only ignores the case if there are no upper-case letters in the
|
||||
RE. If any upper-case letters appear in the Regular Expression, then
|
||||
it will be treated case-sensitively, as if the ignorecase edit option
|
||||
was not set.
|
||||
|
||||
Q: When I edit binary files, vi appends a <newline> to the last line!
|
||||
A: This is historic practice for vi, and further, it's required by the
|
||||
POSIX 1003.2 standard. My intent is to provide a command line and/or
|
||||
edit option to turn this behavior off when I switch to version 2.0 of
|
||||
the Berkeley DB package.
|
||||
|
||||
Q: My cursor keys don't work when I'm in text input mode!
|
||||
A: A common problem over slow links is that the set of characters sent by
|
||||
the cursor keys don't arrive close enough together for vi to understand
|
||||
that they are a single keystroke, and not separate keystrokes. Try
|
||||
increasing the value of the escapetime edit option, which will cause
|
||||
vi to wait longer before deciding that the <escape> character that
|
||||
starts cursor key sequences doesn't have any characters following it.
|
||||
|
||||
Q: When I edit some files, vi seems to hang forever, and I have to kill it.
|
||||
A: Vi uses flock(2) and fcntl(2) to do file locking. When it attempts to
|
||||
acquired a lock for a file on an NFS mounted filesystem, it can hang
|
||||
for a very long (perhaps infinite) period of time. Turning off the
|
||||
"lock" edit option will keep vi from attempting to acquire any locks
|
||||
on the files you edit.
|
||||
|
||||
Q: When I compile vi I get lots of warnings about pointer assignments
|
||||
being incompatible!
|
||||
A: Vi is partially written to support wide characters. When this code
|
||||
interfaces with the code that doesn't yet support wide characters,
|
||||
the pointer types clash. This will hopefully be fixed in the near
|
||||
future, but I've been saying that for awhile, now.
|
||||
|
||||
Q: I get jumpy scrolling behavior in the screen!
|
||||
A: This is almost certainly a problem with the system's terminfo or
|
||||
termcap information for your terminal. If the terminfo/termcap entry
|
||||
doesn't have the settable scrolling region capabilities, or the more
|
||||
powerful scrolling commands, these behaviors can result. Historic
|
||||
implementations of vi, and some of the vi clones, don't suffer from
|
||||
this problem because they wrote their own screen support instead of
|
||||
using the curses library.
|
||||
|
||||
The solution is to find a good terminfo or termcap entry for your
|
||||
terminal, which will fix the problem for all of the applications on
|
||||
your system, not just vi. Eric Raymond maintains the freely
|
||||
redistributable termcap/terminfo entries. They can be downloaded
|
||||
from http://www.ccil.org/~esr/ncurses.html, or you can contact him
|
||||
at esr@snark.thyrsus.com.
|
||||
|
||||
Q: The entire screen repaints on every keystroke!
|
||||
A: Your system's curses implementation is broken. You should use the
|
||||
curses implementation provided with vi or a curses replacement such
|
||||
as ncurses. Eric Raymond is one of the maintainers of the freely
|
||||
redistributable ncurses package. You can download ncurses from
|
||||
http://www.ccil.org/~esr/ncurses.html, or you can contact him at
|
||||
esr@snark.thyrsus.com.
|
||||
|
||||
Q: When I use vi on a Sun console (terminal type sun-34) the screen
|
||||
is occasionally trashed, usually when exiting vi!
|
||||
A: The Sun console can't handle the 'al' capability of the termcap
|
||||
entry (the il1 capability of terminfo entries). If you delete that
|
||||
entry from your terminfo/termcap information everything should work
|
||||
correctly.
|
||||
|
||||
Q: I don't have a version of ctags (or I have ctags, but it doesn't tag
|
||||
nearly enough things)!
|
||||
A: There's a version of ctags available on the 4.4BSD-Lite distributions,
|
||||
as well as the FreeBSD, NetBSD, Linux and GNU distributions. Or, you
|
||||
might want to try Exuberant Ctags:
|
||||
|
||||
Title: Exuberant Ctags
|
||||
Version: 1.3
|
||||
Entered-date: 16JUN96
|
||||
Description:
|
||||
A better ctags which generates tags for all possible tag types:
|
||||
macro definitions, enumerated values (values inside enum{...}),
|
||||
function and method definitions, enum/struct/union tags, external
|
||||
function prototypes (optional), typedefs, and variable
|
||||
declarations. It is far less easily fooled by code containing #if
|
||||
preprocessor conditional constructs, using a conditional path
|
||||
selection algorithm to resolve complicated choices, and a
|
||||
fall-back algorithm when this one fails. Can also be used to print
|
||||
out a list of selected objects found in source files.
|
||||
Keywords: ctags, tags, exuberant
|
||||
Author: darren@sirsi.com (Darren Hiebert)
|
||||
darren@hiwaay.net (Darren Hiebert)
|
||||
Maintained-by: darren@sirsi.com (Darren Hiebert)
|
||||
darren@hiwaay.net (Darren Hiebert)
|
||||
Primary-site: sunsite.unc.edu /pub/Linux/devel/lang/c
|
||||
27kB ctags-1.3.tar.gz
|
||||
Alternate-site: ftp.halcyon.com /local/gvr
|
||||
27kB ctags-1.3.tar.gz
|
||||
Original-site:
|
||||
Platforms: UNIX, MSDOS, WindowsNT, Windows95, OS/2, Amiga
|
||||
Copying-policy: Public domain
|
||||
|
||||
Q: When I update a file I already have open, and use :e to reread it, I
|
||||
get nul's for the rest of the file!
|
||||
A: Your system's implementation of mmap(2) has a bug; you will have to
|
||||
exit vi and re-execute it.
|
||||
|
||||
Q: Where can I get cscope?
|
||||
A: Cscope is available on UNIXWare System V Release 4.0 variants such as
|
||||
Sun Solaris 2.x (/opt/SUNWspro/bin) and UNIXWare System V Release 4.1.
|
||||
|
||||
You can buy version 13.3 source with an unrestricted license for $400
|
||||
from AT&T Software Solutions by calling +1-800-462-8146. Binary
|
||||
redistribution of cscope is an additional $1500, one-time flat fee.
|
||||
|
||||
For more information, see http://www.unipress.com/att/new/cscope.html.
|
@ -1,128 +0,0 @@
|
||||
# @(#)LAYOUT 8.12 (Berkeley) 10/10/96
|
||||
|
||||
LAYOUT
|
||||
This file: the layout of the nvi sources.
|
||||
|
||||
LICENSE
|
||||
Nvi's copyright notice and conditions for redistribution.
|
||||
|
||||
README
|
||||
Welcome message and basic information.
|
||||
|
||||
build/
|
||||
The build/configuration directory for nvi. See build/README for
|
||||
more information.
|
||||
|
||||
catalog/
|
||||
Support for message catalogs for nvi. See catalog/README for more
|
||||
information.
|
||||
|
||||
cl/
|
||||
Source files for nvi's curses screen support.
|
||||
|
||||
clib/
|
||||
Replacement source files for C library functions.
|
||||
|
||||
common/
|
||||
Source files for pieces of code that are shared by ex and vi,
|
||||
e.g., searching and logging code or code translating line numbers
|
||||
into requests to the dbopen(3) database code. It also has the
|
||||
interface code for modifying "records" in the underlying database.
|
||||
|
||||
curses/
|
||||
A stripped-down replacement curses library. Do not try and use
|
||||
this library outside of nvi, many standard curses functions have
|
||||
been removed because nvi doesn't use them. See build/README for
|
||||
more information.
|
||||
|
||||
db/
|
||||
A stripped-down replacement DB library. Do not try and use this
|
||||
library outside of nvi, many standard DB functions have been
|
||||
removed because nvi doesn't use them. See db/README for more
|
||||
information.
|
||||
|
||||
docs/
|
||||
Ex/vi documentation, both current and historic.
|
||||
|
||||
USD.doc/
|
||||
[USD stands for "User's Supplementary Documents".]
|
||||
|
||||
edit/ Roff source for "Edit: A tutorial". This document
|
||||
was USD:14 in the 4.3BSD manuals, but was not
|
||||
distributed with 4.4BSD.
|
||||
|
||||
exref/ Roff source for "Ex Reference Manual -- Version
|
||||
3.7". This document was USD:16 in the 4.3BSD
|
||||
manuals, and USD tabbed 12 in the 4.4BSD manuals.
|
||||
|
||||
vi.man/ Roff source for a UNIX manual page for nex/nvi.
|
||||
An updated version of the 4.4BSD manual page.
|
||||
|
||||
vi.ref/ Roff source for the nex/nvi reference document.
|
||||
An updated version of the 4.4BSD document, USD
|
||||
tabbed 13.
|
||||
|
||||
vitut/ Roff source for "An Introduction to Display
|
||||
Editing with Vi". This document was USD:15 in
|
||||
the 4.3BSD manuals, but was not distributed with
|
||||
4.4BSD. It includes the historic "Vi Quick
|
||||
Reference" card.
|
||||
|
||||
|
||||
PostScript preformatted versions of the nex/nvi reference
|
||||
manual and manual page are in the files named with a ".ps"
|
||||
suffix, in their respective source directories. Flat text
|
||||
preformatted versions of the nex/nvi reference manual and
|
||||
manual page are in the files named with a ".txt" suffix,
|
||||
in their respective source directories.
|
||||
|
||||
changelog -- Log of changes from version to version.
|
||||
features -- Todo list, suggested features list.
|
||||
internals/
|
||||
autowrite -- Vi autowrite option discussion.
|
||||
context -- Previous context marks discussion.
|
||||
gdb.script -- GDB debugging scripts.
|
||||
input -- Vi maps, executable buffers, and input discussion.
|
||||
openmode -- Open mode behaviors.
|
||||
quoting -- Vi quoting discussion.
|
||||
structures -- Out-of-date nvi internal structure description.
|
||||
tutorial/ -- Historic vi tutorial(s), of unknown quality.
|
||||
|
||||
ex/
|
||||
The ex source code. Because vi has the colon command, lots of
|
||||
this code is used by vi. Generally, if functionality is shared
|
||||
by both ex and vi, it's in the ex directory. If it's vi only,
|
||||
it's in the vi directory. Files are generally named by the
|
||||
command(s) they support, but occasionally with a name that
|
||||
describes their functionality.
|
||||
|
||||
version.h -- Version information.
|
||||
|
||||
include/
|
||||
Replacement include files:
|
||||
|
||||
bitstring.h -- The 4.4BSD bitstring operations.
|
||||
sys/queue.h -- The 4.4BSD queue operations.
|
||||
|
||||
perl_api/
|
||||
Source code supporting the Perl scripting language for nvi.
|
||||
|
||||
perl_scripts/
|
||||
Scripts for Perl included with nvi.
|
||||
|
||||
regex/
|
||||
Henry Spencer's POSIX 1003.2 regular expression (RE) library.
|
||||
|
||||
tcl_api/
|
||||
Source code supporting the Tcl scripting language for nvi.
|
||||
|
||||
tcl_scripts/
|
||||
Scripts for Tcl included with nvi.
|
||||
|
||||
tk/
|
||||
Source files for nvi's Tk screen support.
|
||||
|
||||
init.tcl -- Vi startup tcl script.
|
||||
|
||||
vi/
|
||||
The vi source code.
|
@ -1,14 +1,19 @@
|
||||
The vi program is freely redistributable. You are welcome to copy, modify
|
||||
and share it with others under the conditions listed in this file. If any
|
||||
company (not any individual!) finds vi sufficiently useful that you would
|
||||
have purchased it, or if any company wishes to redistribute it, contributions
|
||||
to the authors would be appreciated.
|
||||
|
||||
/*-
|
||||
* $Id: LICENSE,v 8.18 2011/07/10 11:58:35 zy Exp $
|
||||
*/
|
||||
|
||||
The following are the copyrights and redistribution conditions that apply
|
||||
to this copy of the Vi software.
|
||||
|
||||
/*
|
||||
* Copyright (c) 1991, 1992, 1993, 1994
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
* Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996
|
||||
* Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
|
||||
* Keith Bostic. All rights reserved.
|
||||
* Copyright (c) 1999, 2000
|
||||
* Sven Verdoolaege. All rights reserved.
|
||||
* Copyright (c) 2011
|
||||
* Zhihao Yuan. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
@ -18,11 +23,7 @@ to the authors would be appreciated.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* 3. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
|
@ -1,31 +1,32 @@
|
||||
# @(#)README 8.147 (Berkeley) 10/19/96
|
||||
# $Id: README,v 9.0 2012/10/07 09:13:54 zy Exp $
|
||||
|
||||
This is the README for nex/nvi, a freely redistributable implementation
|
||||
of the ex/vi text editors originally distributed as part of the Fourth
|
||||
Berkeley Software Distribution (4BSD), by the University of California,
|
||||
Berkeley.
|
||||
This is version 2.1.1 (2012-10-07) of nex/nvi, a reimplementation of the ex/vi
|
||||
text editors originally distributed as part of the Fourth Berkeley
|
||||
Software Distribution (4BSD), by the University of California, Berkeley.
|
||||
|
||||
The source code for nex/nvi can be retrieved by using anonymous ftp to
|
||||
ftp.cs.berkeley.edu. The file ucb/4bsd/nvi.tar.gz is the gzip'd archive,
|
||||
of version 1.71 of nex/nvi. This version is believed to be stable and
|
||||
problem free. The file ucb/4bsd/nvi-###.ALPHA.tar.gz is a gzip'd archive
|
||||
of the current alpha-test release of nex/nvi. This version reflects the
|
||||
current development tree, and will be more likely to have problems.
|
||||
The directory layout is as follows:
|
||||
|
||||
See the file:
|
||||
build/README for information on building nvi.
|
||||
LAYOUT for a description of where everything is.
|
||||
LICENSE for the copyright and redistribution terms.
|
||||
LICENSE ....... Copyright, use and redistribution information.
|
||||
README ........ This file.
|
||||
build ......... Build directory.
|
||||
catalog ....... Message catalogs; see catalog/README.
|
||||
cl ............ Vi interface to the curses(3) library.
|
||||
common ........ Code shared by ex and vi.
|
||||
docs .......... Ex/vi documentation, both current and historic.
|
||||
ex ............ Ex source code.
|
||||
regex ......... Modified regex library with wide character support.
|
||||
vi ............ Vi source code.
|
||||
|
||||
If you have any questions about nex/nvi, problems with it, or concerns
|
||||
about the conditions for redistribution, please contact me:
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
|
||||
Keith Bostic +1-508-287-4781
|
||||
394 E. Riding Dr. bostic@bostic.com
|
||||
Carlisle, MA 01741
|
||||
USA
|
||||
o Nvi was written by Keith Bostic, and the last version is 1.79. After that,
|
||||
|
||||
Keith Bostic
|
||||
Sven Verdoolaege added the iconv support and the DB3 locking.
|
||||
|
||||
Jun-ichiro itojun Hagino developed the file encoding detection
|
||||
techniques in his nvi-m17n.
|
||||
|
||||
The following acknowledgments were written by Keith Bostic:
|
||||
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
o This software is several years old and is the product of many folks' work.
|
||||
@ -63,51 +64,3 @@ o From the original vi acknowledgements, by William Joy and Mark Horton:
|
||||
o And...
|
||||
The financial support of UUNET Communications Services is gratefully
|
||||
acknowledged.
|
||||
|
||||
=-=-=-=-=-=-=-=-=-=-=
|
||||
o Status:
|
||||
|
||||
This software is in beta test, and it's pretty stable. Almost all of the
|
||||
historic functionality in ex/vi is there, the only major missing pieces
|
||||
are open mode and the lisp edit option.
|
||||
|
||||
Nvi is largely 8-bit clean. This isn't difficult to fix, and was left in
|
||||
during initial development to keep things simple. Wide character support
|
||||
will be integrated at the same time that it is made fully 8-bit clean.
|
||||
|
||||
There aren't a lot of new features in nex/nvi, but there are a few things
|
||||
you might like. The "Additional Features" section of the reference work
|
||||
(docs/USD.doc/vi.ref/vi.ref.txt, docs/USD.doc/vi.ref/vi.ref.ps) has more
|
||||
information.
|
||||
|
||||
=-=-=-=-=-=-=-=-=-=-=
|
||||
o Debugging:
|
||||
|
||||
Code fixes are greatly appreciated, of course, but if you can't provide
|
||||
them, please email me as much information as you can as to how I might
|
||||
reproduce the bug, and I'll try to fix it locally. Stack traces of core
|
||||
dumps are only rarely helpful -- an example file with a set of keystrokes
|
||||
that causes the problem is almost invariably necessary. I know it's
|
||||
annoying, but simply playing with the bug until you can reproduce it at
|
||||
will, with minimal keystrokes, is immensely helpful to me.
|
||||
|
||||
Please include the following in the bug report;
|
||||
|
||||
o The version of nvi you're running (use :version to get it).
|
||||
o The row/column dimensions of the screen (80 x 32).
|
||||
o Unless you're confident that they're not part of the problem,
|
||||
your startup files (.exrc, .nexrc) and the environment variable
|
||||
(EXINIT, NEXINIT) values. (Cutting and pasting the output
|
||||
of ":set all" is usually sufficient.)
|
||||
|
||||
If you want to do your own debugging, recompile the program with DEBUG
|
||||
defined. (Configuring with --enable-debug will do this for you.) This
|
||||
turns on the additional command-line option -D, that takes either s or w
|
||||
as an argument. The option -Ds causes nvi to ignore the EXINIT and
|
||||
.exrc files on startup, and -Dw causes nvi to print out the process id
|
||||
and wait for you to enter a <carriage-return> to continue.
|
||||
|
||||
If you're running a memory checker (e.g. Purify) on nvi, you will first
|
||||
want to recompile everything with "-DPURIFY" set in the CFLAGS. This
|
||||
initializes allocated pages in the DB code, and free's allocated memory
|
||||
at the end of the nvi execution.
|
||||
|
@ -1,473 +0,0 @@
|
||||
# $Id: Embed.pm,v 1.17 1996/07/02 13:48:17 dougm Exp $
|
||||
require 5.002;
|
||||
|
||||
package ExtUtils::Embed;
|
||||
require Exporter;
|
||||
require FileHandle;
|
||||
use Config;
|
||||
use Getopt::Std;
|
||||
|
||||
#Only when we need them
|
||||
#require ExtUtils::MakeMaker;
|
||||
#require ExtUtils::Liblist;
|
||||
|
||||
use vars qw(@ISA @EXPORT $VERSION
|
||||
@Extensions $Verbose $lib_ext
|
||||
$opt_o $opt_s
|
||||
);
|
||||
use strict;
|
||||
|
||||
$VERSION = sprintf("%d.%02d", q$Revision: 1.17 $ =~ /(\d+)\.(\d+)/);
|
||||
#for the namespace change
|
||||
$Devel::embed::VERSION = "99.99";
|
||||
|
||||
sub Version { $VERSION; }
|
||||
|
||||
@ISA = qw(Exporter);
|
||||
@EXPORT = qw(&xsinit &ldopts
|
||||
&ccopts &ccflags &ccdlflags &perl_inc
|
||||
&xsi_header &xsi_protos &xsi_body);
|
||||
|
||||
#let's have Miniperl borrow from us instead
|
||||
#require ExtUtils::Miniperl;
|
||||
#*canon = \&ExtUtils::Miniperl::canon;
|
||||
|
||||
$Verbose = 0;
|
||||
$lib_ext = $Config{lib_ext} || '.a';
|
||||
|
||||
sub xsinit {
|
||||
my($file, $std, $mods) = @_;
|
||||
my($fh,@mods,%seen);
|
||||
$file ||= "perlxsi.c";
|
||||
|
||||
if (@_) {
|
||||
@mods = @$mods if $mods;
|
||||
}
|
||||
else {
|
||||
getopts('o:s:');
|
||||
$file = $opt_o if defined $opt_o;
|
||||
$std = $opt_s if defined $opt_s;
|
||||
@mods = @ARGV;
|
||||
}
|
||||
$std = 1 unless scalar @mods;
|
||||
|
||||
if ($file eq "STDOUT") {
|
||||
$fh = \*STDOUT;
|
||||
}
|
||||
else {
|
||||
$fh = new FileHandle "> $file";
|
||||
}
|
||||
|
||||
push(@mods, static_ext()) if defined $std;
|
||||
@mods = grep(!$seen{$_}++, @mods);
|
||||
|
||||
print $fh &xsi_header();
|
||||
print $fh "EXTERN_C void xs_init _((void));\n\n";
|
||||
print $fh &xsi_protos(@mods);
|
||||
|
||||
print $fh "\nEXTERN_C void\nxs_init()\n{\n";
|
||||
print $fh &xsi_body(@mods);
|
||||
print $fh "}\n";
|
||||
|
||||
}
|
||||
|
||||
sub xsi_header {
|
||||
return <<EOF;
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <EXTERN.h>
|
||||
#include <perl.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
# ifndef EXTERN_C
|
||||
# define EXTERN_C extern "C"
|
||||
# endif
|
||||
#else
|
||||
# ifndef EXTERN_C
|
||||
# define EXTERN_C extern
|
||||
# endif
|
||||
#endif
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
sub xsi_protos {
|
||||
my(@exts) = @_;
|
||||
my(@retval,%seen);
|
||||
|
||||
foreach $_ (@exts){
|
||||
my($pname) = canon('/', $_);
|
||||
my($mname, $cname);
|
||||
($mname = $pname) =~ s!/!::!g;
|
||||
($cname = $pname) =~ s!/!__!g;
|
||||
my($ccode) = "EXTERN_C void boot_${cname} _((CV* cv));\n";
|
||||
next if $seen{$ccode}++;
|
||||
push(@retval, $ccode);
|
||||
}
|
||||
return join '', @retval;
|
||||
}
|
||||
|
||||
sub xsi_body {
|
||||
my(@exts) = @_;
|
||||
my($pname,@retval,%seen);
|
||||
my($dl) = canon('/','DynaLoader');
|
||||
push(@retval, "\tdXSUB_SYS;\n") if $] > 5.002;
|
||||
push(@retval, "\tchar *file = __FILE__;\n\n");
|
||||
|
||||
foreach $_ (@exts){
|
||||
my($pname) = canon('/', $_);
|
||||
my($mname, $cname, $ccode);
|
||||
($mname = $pname) =~ s!/!::!g;
|
||||
($cname = $pname) =~ s!/!__!g;
|
||||
if ($pname eq $dl){
|
||||
# Must NOT install 'DynaLoader::boot_DynaLoader' as 'bootstrap'!
|
||||
# boot_DynaLoader is called directly in DynaLoader.pm
|
||||
$ccode = "\t/* DynaLoader is a special case */\n\tnewXS(\"${mname}::boot_${cname}\", boot_${cname}, file);\n";
|
||||
push(@retval, $ccode) unless $seen{$ccode}++;
|
||||
} else {
|
||||
$ccode = "\tnewXS(\"${mname}::bootstrap\", boot_${cname}, file);\n";
|
||||
push(@retval, $ccode) unless $seen{$ccode}++;
|
||||
}
|
||||
}
|
||||
return join '', @retval;
|
||||
}
|
||||
|
||||
sub static_ext {
|
||||
unless (scalar @Extensions) {
|
||||
@Extensions = sort split /\s+/, $Config{static_ext};
|
||||
unshift @Extensions, qw(DynaLoader);
|
||||
}
|
||||
@Extensions;
|
||||
}
|
||||
|
||||
sub ldopts {
|
||||
require ExtUtils::MakeMaker;
|
||||
require ExtUtils::Liblist;
|
||||
my($std,$mods,$link_args,$path) = @_;
|
||||
my(@mods,@link_args,@argv);
|
||||
my($dllib,$config_libs,@potential_libs,@path);
|
||||
local($") = ' ' unless $" eq ' ';
|
||||
my $MM = bless {} => 'MY';
|
||||
if (scalar @_) {
|
||||
@link_args = @$link_args if $link_args;
|
||||
@mods = @$mods if $mods;
|
||||
}
|
||||
else {
|
||||
@argv = @ARGV;
|
||||
#hmm
|
||||
while($_ = shift @argv) {
|
||||
/^-std$/ && do { $std = 1; next; };
|
||||
/^--$/ && do { @link_args = @argv; last; };
|
||||
/^-I(.*)/ && do { $path = $1 || shift @argv; next; };
|
||||
push(@mods, $_);
|
||||
}
|
||||
}
|
||||
$std = 1 unless scalar @link_args;
|
||||
@path = $path ? split(/:/, $path) : @INC;
|
||||
|
||||
push(@potential_libs, @link_args) if scalar @link_args;
|
||||
push(@potential_libs, $Config{libs}) if defined $std;
|
||||
|
||||
push(@mods, static_ext()) if $std;
|
||||
|
||||
my($mod,@ns,$root,$sub,$extra,$archive,@archives);
|
||||
print STDERR "Searching (@path) for archives\n" if $Verbose;
|
||||
foreach $mod (@mods) {
|
||||
@ns = split('::', $mod);
|
||||
$sub = $ns[-1];
|
||||
$root = $MM->catdir(@ns);
|
||||
|
||||
print STDERR "searching for '$sub${lib_ext}'\n" if $Verbose;
|
||||
foreach (@path) {
|
||||
next unless -e ($archive = $MM->catdir($_,"auto",$root,"$sub$lib_ext"));
|
||||
push @archives, $archive;
|
||||
if(-e ($extra = $MM->catdir($_,"auto",$root,"extralibs.ld"))) {
|
||||
local(*FH);
|
||||
if(open(FH, $extra)) {
|
||||
my($libs) = <FH>; chomp $libs;
|
||||
push @potential_libs, split /\s+/, $libs;
|
||||
}
|
||||
else {
|
||||
warn "Couldn't open '$extra'";
|
||||
}
|
||||
}
|
||||
last;
|
||||
}
|
||||
}
|
||||
#print STDERR "\@potential_libs = @potential_libs\n";
|
||||
|
||||
my($extralibs, $bsloadlibs, $ldloadlibs, $ld_run_path) =
|
||||
$MM->ext(join ' ',
|
||||
$MM->catdir("-L$Config{archlib}", "CORE"), " -lperl",
|
||||
@potential_libs);
|
||||
|
||||
my $ld_or_bs = $bsloadlibs || $ldloadlibs;
|
||||
print STDERR "bs: $bsloadlibs ** ld: $ldloadlibs" if $Verbose;
|
||||
my $linkage = "$Config{ldflags} @archives $ld_or_bs";
|
||||
print STDERR "ldopts: '$linkage'\n" if $Verbose;
|
||||
|
||||
return $linkage if scalar @_;
|
||||
print "$linkage\n";
|
||||
}
|
||||
|
||||
sub ccflags {
|
||||
print " $Config{ccflags} ";
|
||||
}
|
||||
|
||||
sub ccdlflags {
|
||||
print " $Config{ccdlflags} ";
|
||||
}
|
||||
|
||||
sub perl_inc {
|
||||
print " -I$Config{archlib}/CORE ";
|
||||
}
|
||||
|
||||
sub ccopts {
|
||||
ccflags;
|
||||
ccdlflags;
|
||||
perl_inc;
|
||||
}
|
||||
|
||||
sub canon {
|
||||
my($as, @ext) = @_;
|
||||
foreach(@ext) {
|
||||
# might be X::Y or lib/auto/X/Y/Y.a
|
||||
next if s!::!/!g;
|
||||
s:^(lib|ext)/(auto/)?::;
|
||||
s:/\w+\.\w+$::;
|
||||
}
|
||||
grep(s:/:$as:, @ext) if ($as ne '/');
|
||||
@ext;
|
||||
}
|
||||
|
||||
__END__
|
||||
|
||||
=head1 NAME
|
||||
|
||||
ExtUtils::Embed - Utilities for embedding Perl in C/C++ applications
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
|
||||
perl -MExtUtils::Embed -e xsinit
|
||||
perl -MExtUtils::Embed -e ldopts
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
ExtUtils::Embed provides utility functions for embedding a Perl interpreter
|
||||
and extensions in your C/C++ applications.
|
||||
Typically, an application B<Makefile> will invoke ExtUtils::Embed
|
||||
functions while building your application.
|
||||
|
||||
=head1 @EXPORT
|
||||
|
||||
ExtUtils::Embed exports the following functions:
|
||||
|
||||
L<xsinit()>, L<ldopts()>, L<ccopts()>, L<perl_inc()>, L<ccflags()>,
|
||||
L<ccdlflags()>, L<xsi_header()>, L<xsi_protos()>, L<xsi_body()>
|
||||
|
||||
=head1 FUNCTIONS
|
||||
|
||||
=item xsinit()
|
||||
|
||||
Generate C/C++ code for the XS intializer function.
|
||||
|
||||
When invoked as C<`perl -MExtUtils::Embed -e xsinit --`>
|
||||
the following options are recognized:
|
||||
|
||||
B<-o> <output filename> (Defaults to B<perlxsi.c>)
|
||||
|
||||
B<-o STDOUT> will print to STDOUT.
|
||||
|
||||
B<-std> (Write code for extensions that are linked with the current Perl.)
|
||||
|
||||
Any additional arguments are expected to be names of modules
|
||||
to generate code for.
|
||||
|
||||
When invoked with parameters the following are accepted and optional:
|
||||
|
||||
C<xsinit($filename,$std,[@modules])>
|
||||
|
||||
Where,
|
||||
|
||||
B<$filename> is equivalent to the B<-o> option.
|
||||
|
||||
B<$std> is boolean, equivalent to the B<-std> option.
|
||||
|
||||
B<[@modules]> is an array ref, same as additional arguments mentioned above.
|
||||
|
||||
=item Examples
|
||||
|
||||
|
||||
perl -MExtUtils::Embed -e xsinit -- -o xsinit.c Socket
|
||||
|
||||
|
||||
This will generate code with an B<xs_init> function that glues the perl B<Socket::bootstrap> function
|
||||
to the C B<boot_Socket> function and writes it to a file named "xsinit.c".
|
||||
|
||||
Note that B<DynaLoader> is a special case where it must call B<boot_DynaLoader> directly.
|
||||
|
||||
perl -MExtUtils::Embed -e xsinit
|
||||
|
||||
|
||||
This will generate code for linking with B<DynaLoader> and
|
||||
each static extension found in B<$Config{static_ext}>.
|
||||
The code is written to the default file name B<perlxsi.c>.
|
||||
|
||||
|
||||
perl -MExtUtils::Embed -e xsinit -- -o xsinit.c -std DBI DBD::Oracle
|
||||
|
||||
|
||||
Here, code is written for all the currently linked extensions along with code
|
||||
for B<DBI> and B<DBD::Oracle>.
|
||||
|
||||
If you have a working B<DynaLoader> then there is rarely any need to statically link in any
|
||||
other extensions.
|
||||
|
||||
=item ldopts()
|
||||
|
||||
Output arguments for linking the Perl library and extensions to your
|
||||
application.
|
||||
|
||||
When invoked as C<`perl -MExtUtils::Embed -e ldopts --`>
|
||||
the following options are recognized:
|
||||
|
||||
B<-std>
|
||||
|
||||
Output arguments for linking the Perl library and any extensions linked
|
||||
with the current Perl.
|
||||
|
||||
B<-I> <path1:path2>
|
||||
|
||||
Search path for ModuleName.a archives.
|
||||
Default path is B<@INC>.
|
||||
Library archives are expected to be found as
|
||||
B</some/path/auto/ModuleName/ModuleName.a>
|
||||
For example, when looking for B<Socket.a> relative to a search path,
|
||||
we should find B<auto/Socket/Socket.a>
|
||||
|
||||
When looking for B<DBD::Oracle> relative to a search path,
|
||||
we should find B<auto/DBD/Oracle/Oracle.a>
|
||||
|
||||
Keep in mind, you can always supply B</my/own/path/ModuleName.a>
|
||||
as an additional linker argument.
|
||||
|
||||
B<--> <list of linker args>
|
||||
|
||||
Additional linker arguments to be considered.
|
||||
|
||||
Any additional arguments found before the B<--> token
|
||||
are expected to be names of modules to generate code for.
|
||||
|
||||
When invoked with parameters the following are accepted and optional:
|
||||
|
||||
C<ldopts($std,[@modules],[@link_args],$path)>
|
||||
|
||||
Where,
|
||||
|
||||
B<$std> is boolean, equivalent to the B<-std> option.
|
||||
|
||||
B<[@modules]> is equivalent to additional arguments found before the B<--> token.
|
||||
|
||||
B<[@link_args]> is equivalent to arguments found after the B<--> token.
|
||||
|
||||
B<$path> is equivalent to the B<-I> option.
|
||||
|
||||
In addition, when ldopts is called with parameters, it will return the argument string
|
||||
rather than print it to STDOUT.
|
||||
|
||||
=item Examples
|
||||
|
||||
|
||||
perl -MExtUtils::Embed -e ldopts
|
||||
|
||||
|
||||
This will print arguments for linking with B<libperl.a>, B<DynaLoader> and
|
||||
extensions found in B<$Config{static_ext}>. This includes libraries
|
||||
found in B<$Config{libs}> and the first ModuleName.a library
|
||||
for each extension that is found by searching B<@INC> or the path
|
||||
specifed by the B<-I> option.
|
||||
In addition, when ModuleName.a is found, additional linker arguments
|
||||
are picked up from the B<extralibs.ld> file in the same directory.
|
||||
|
||||
|
||||
perl -MExtUtils::Embed -e ldopts -- -std Socket
|
||||
|
||||
|
||||
This will do the same as the above example, along with printing additional arguments for linking with the B<Socket> extension.
|
||||
|
||||
|
||||
perl -MExtUtils::Embed -e ldopts -- DynaLoader
|
||||
|
||||
|
||||
This will print arguments for linking with just the B<DynaLoader> extension
|
||||
and B<libperl.a>.
|
||||
|
||||
|
||||
perl -MExtUtils::Embed -e ldopts -- -std Msql -- -L/usr/msql/lib -lmsql
|
||||
|
||||
|
||||
Any arguments after the second '--' token are additional linker
|
||||
arguments that will be examined for potential conflict. If there is no
|
||||
conflict, the additional arguments will be part of the output.
|
||||
|
||||
|
||||
=item perl_inc()
|
||||
|
||||
For including perl header files this function simply prints:
|
||||
|
||||
-I $Config{archlib}/CORE
|
||||
|
||||
So, rather than having to say:
|
||||
|
||||
perl -MConfig -e 'print "-I $Config{archlib}/CORE"'
|
||||
|
||||
Just say:
|
||||
|
||||
perl -MExtUtils::Embed -e perl_inc
|
||||
|
||||
=item ccflags(), ccdlflags()
|
||||
|
||||
These functions simply print $Config{ccflags} and $Config{ccdlflags}
|
||||
|
||||
=item ccopts()
|
||||
|
||||
This function combines perl_inc(), ccflags() and ccdlflags() into one.
|
||||
|
||||
=item xsi_header()
|
||||
|
||||
This function simply returns a string defining the same B<EXTERN_C> macro as
|
||||
B<perlmain.c> along with #including B<perl.h> and B<EXTERN.h>.
|
||||
|
||||
=item xsi_protos(@modules)
|
||||
|
||||
This function returns a string of B<boot_$ModuleName> prototypes for each @modules.
|
||||
|
||||
=item xsi_body(@modules)
|
||||
|
||||
This function returns a string of calls to B<newXS()> that glue the module B<bootstrap>
|
||||
function to B<boot_ModuleName> for each @modules.
|
||||
|
||||
B<xsinit()> uses the xsi_* functions to generate most of it's code.
|
||||
|
||||
=head1 EXAMPLES
|
||||
|
||||
For examples on how to use B<ExtUtils::Embed> for building C/C++ applications
|
||||
with embedded perl, see the eg/ directory and the I<perlembed> man page.
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
the I<perlembed> man page
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Doug MacEachern <dougm@osf.org>
|
||||
|
||||
Based on ideas from Tim Bunce <Tim.Bunce@ig.co.uk> and
|
||||
B<minimod.pl> by Andreas Koenig <k@anna.in-berlin.de> and Tim Bunce.
|
||||
|
||||
=cut
|
||||
|
@ -1,630 +0,0 @@
|
||||
# @(#)Makefile.in 8.75 (Berkeley) 10/23/96
|
||||
|
||||
srcdir= @srcdir@/..
|
||||
CC= @CC@
|
||||
OPTFLAG=@OPTFLAG@
|
||||
CFLAGS= -c $(OPTFLAG) @CFLAGS@ -I. -I$(srcdir)/include @CPPFLAGS@ -DGTAGS
|
||||
LDFLAGS=@LDFLAGS@
|
||||
PERL= @vi_cv_path_perl@
|
||||
PERLLIB=@vi_cv_perllib@
|
||||
SHRPENV=@shrpenv@
|
||||
|
||||
# Objects
|
||||
COBJS= addbytes.o addch.o box.o clear.o clrtobot.o clrtoeol.o \
|
||||
cr_put.o ctrace.o cur_hash.o curses.o delch.o deleteln.o delwin.o \
|
||||
erase.o fullname.o getch.o getstr.o id_subwins.o idlok.o initscr.o \
|
||||
insch.o insertln.o longname.o move.o mvwin.o newwin.o overlay.o \
|
||||
overwrite.o putchar.o refresh.o scroll.o setterm.o standout.o \
|
||||
toucholap.o touchwin.o tscroll.o tstp.o tty.o unctrl.o waddnstr.o
|
||||
CLOBJS= cl_bsd.o cl_funcs.o cl_main.o cl_read.o cl_screen.o cl_term.o
|
||||
DBOBJS= db.o mpool.o \
|
||||
bt_close.o bt_conv.o bt_debug.o bt_delete.o bt_get.o bt_open.o \
|
||||
bt_overflow.o bt_page.o bt_put.o bt_search.o bt_seq.o \
|
||||
bt_split.o bt_utils.o \
|
||||
rec_close.o rec_delete.o rec_get.o rec_open.o rec_put.o \
|
||||
rec_search.o rec_seq.o rec_utils.o
|
||||
REOBJS= regcomp.o regerror.o regexec.o regfree.o
|
||||
TKOBJS= tk_funcs.o tk_main.o tk_read.o tk_screen.o tk_term.o tk_util.o
|
||||
VIOBJS= cut.o delete.o ex.o ex_abbrev.o ex_append.o ex_args.o ex_argv.o \
|
||||
ex_at.o ex_bang.o ex_cd.o ex_cmd.o ex_cscope.o ex_delete.o \
|
||||
ex_display.o ex_edit.o ex_equal.o ex_file.o ex_filter.o \
|
||||
ex_global.o ex_init.o ex_join.o ex_map.o ex_mark.o ex_mkexrc.o \
|
||||
ex_move.o ex_open.o ex_perl.o ex_preserve.o ex_print.o ex_put.o \
|
||||
ex_quit.o ex_read.o ex_screen.o ex_script.o ex_set.o ex_shell.o \
|
||||
ex_shift.o ex_source.o ex_stop.o ex_subst.o ex_tag.o ex_tcl.o \
|
||||
ex_txt.o ex_undo.o ex_usage.o ex_util.o ex_version.o ex_visual.o \
|
||||
ex_write.o ex_yank.o ex_z.o exf.o getc.o key.o line.o log.o main.o \
|
||||
mark.o msg.o options.o options_f.o put.o recover.o screen.o \
|
||||
search.o seq.o util.o v_at.o v_ch.o v_cmd.o v_delete.o v_ex.o \
|
||||
v_increment.o v_init.o v_itxt.o v_left.o v_mark.o v_match.o \
|
||||
v_paragraph.o v_put.o v_redraw.o v_replace.o v_right.o v_screen.o \
|
||||
v_scroll.o v_search.o v_section.o v_sentence.o v_status.o v_txt.o \
|
||||
v_ulcase.o v_undo.o v_util.o v_word.o v_xchar.o v_yank.o v_z.o \
|
||||
v_zexit.o vi.o vs_line.o vs_msg.o vs_refresh.o vs_relative.o \
|
||||
vs_smap.o vs_split.o
|
||||
|
||||
all: nvi @tknvi@
|
||||
|
||||
NVIALL= $(CLOBJS) $(VIOBJS) @cobjs@ @LIBOBJS@
|
||||
nvi nex: $(NVIALL)
|
||||
$(SHRPENV) $(CC) $(LDFLAGS) -o $@ $(NVIALL) @LIBS@
|
||||
-rm -f nex
|
||||
ln $@ nex
|
||||
|
||||
TKALL= $(TKOBJS) $(VIOBJS) @LIBOBJS@
|
||||
tknvi: $(TKALL)
|
||||
$(SHRPENV) $(CC) $(LDFLAGS) -o $@ $(TKALL) @TKLIBS@
|
||||
|
||||
chmod= @vi_cv_path_chmod@
|
||||
cp= @vi_cv_path_cp@
|
||||
ln= @vi_cv_path_ln@
|
||||
mkdir= @vi_cv_path_mkdir@
|
||||
rm= @vi_cv_path_rm@
|
||||
strip= @vi_cv_path_strip@
|
||||
|
||||
prefix= @prefix@
|
||||
bindir= @bindir@
|
||||
datadir=@datadir@
|
||||
mandir= @mandir@
|
||||
exec_prefix=@exec_prefix@
|
||||
|
||||
dmode= 755
|
||||
emode= 555
|
||||
fmode= 444
|
||||
|
||||
transform=@program_transform_name@
|
||||
|
||||
install: all install_common
|
||||
@echo "Installing vi, ex, view: $(bindir) ..."
|
||||
[ -d $(bindir) ] || \
|
||||
($(mkdir) $(bindir) && $(chmod) $(dmode) $(bindir))
|
||||
cd $(bindir) && $(rm) -f `echo vi | sed '$(transform)'`
|
||||
$(cp) nvi $(bindir)/`echo vi | sed '$(transform)'`
|
||||
cd $(bindir) && [ -f $(strip) ] && \
|
||||
$(strip) `echo vi | sed '$(transform)'`
|
||||
cd $(bindir) && $(chmod) $(emode) `echo vi | sed '$(transform)'`
|
||||
cd $(bindir) && $(rm) -f `echo ex | sed '$(transform)'`
|
||||
cd $(bindir) && $(rm) -f `echo view | sed '$(transform)'`
|
||||
cd $(bindir) && $(ln) \
|
||||
`echo vi | sed '$(transform)'` `echo ex | sed '$(transform)'`
|
||||
cd $(bindir) && $(ln) \
|
||||
`echo vi | sed '$(transform)'` `echo view | sed '$(transform)'`
|
||||
[ -d $(mandir) ] || \
|
||||
($(mkdir) $(mandir) && $(chmod) $(dmode) $(mandir))
|
||||
[ -d $(mandir)/cat1 ] || \
|
||||
($(mkdir) $(mandir)/cat1 && $(chmod) $(dmode) $(mandir)/cat1)
|
||||
@echo "Installing man pages: $(mandir) ..."
|
||||
cd $(mandir)/cat1 && $(rm) -f `echo vi.0 | sed '$(transform)'`
|
||||
$(cp) $(srcdir)/docs/USD.doc/vi.man/vi.0 \
|
||||
$(mandir)/cat1/`echo vi.0 | sed '$(transform)'`
|
||||
cd $(mandir)/cat1 && $(chmod) $(fmode) `echo vi.0 | sed '$(transform)'`
|
||||
cd $(mandir)/cat1 && $(rm) -f `echo ex.0 | sed '$(transform)'`
|
||||
cd $(mandir)/cat1 && $(rm) -f `echo view.0 | sed '$(transform)'`
|
||||
cd $(mandir)/cat1 && $(ln) \
|
||||
`echo vi.0 | sed '$(transform)'` `echo ex.0 | sed '$(transform)'`
|
||||
cd $(mandir)/cat1 && $(ln) \
|
||||
`echo vi.0 | sed '$(transform)'` `echo view.0 | sed '$(transform)'`
|
||||
[ -d $(mandir)/man1 ] || \
|
||||
($(mkdir) $(mandir)/man1 && $(chmod) $(dmode) $(mandir)/man1)
|
||||
cd $(mandir)/man1 && $(rm) -f `echo vi.1 | sed '$(transform)'`
|
||||
$(cp) $(srcdir)/docs/USD.doc/vi.man/vi.1 \
|
||||
$(mandir)/man1/`echo vi.1 | sed '$(transform)'`
|
||||
cd $(mandir)/man1 && $(chmod) $(fmode) `echo vi.1 | sed '$(transform)'`
|
||||
cd $(mandir)/man1 && $(rm) -f `echo ex.1 | sed '$(transform)'`
|
||||
cd $(mandir)/man1 && $(rm) -f `echo view.1 | sed '$(transform)'`
|
||||
cd $(mandir)/man1 && $(ln) \
|
||||
`echo vi.1 | sed '$(transform)'` `echo ex.1 | sed '$(transform)'`
|
||||
cd $(mandir)/man1 && $(ln) \
|
||||
`echo vi.1 | sed '$(transform)'` `echo view.1 | sed '$(transform)'`
|
||||
|
||||
cat= dutch english french german ru_SU.KOI8-R spanish swedish
|
||||
install_common:
|
||||
[ -f $(chmod) ]
|
||||
[ -f $(cp) ]
|
||||
[ -f $(ln) ]
|
||||
[ -f $(mkdir) ]
|
||||
[ -f $(rm) ]
|
||||
[ -d $(prefix) ] || \
|
||||
($(mkdir) $(prefix) && $(chmod) $(dmode) $(prefix))
|
||||
[ -d $(exec_prefix) ] || \
|
||||
($(mkdir) $(exec_prefix) && $(chmod) $(dmode) $(exec_prefix))
|
||||
[ -d $(datadir) ] || \
|
||||
($(mkdir) $(datadir) && $(chmod) $(dmode) $(datadir))
|
||||
$(rm) -rf $(datadir)/vi
|
||||
$(mkdir) $(datadir)/vi && $(chmod) $(dmode) $(datadir)/vi
|
||||
@echo "Installing message catalogs: $(datadir)/vi/catalog ..."
|
||||
$(mkdir) $(datadir)/vi/catalog && \
|
||||
$(chmod) $(dmode) $(datadir)/vi/catalog
|
||||
(cd $(srcdir)/catalog && $(cp) $(cat) $(datadir)/vi/catalog && \
|
||||
cd $(datadir)/vi/catalog && $(chmod) $(fmode) *)
|
||||
@echo "Installing Perl scripts: $(datadir)/vi/perl ..."
|
||||
$(mkdir) $(datadir)/vi/perl && $(chmod) $(dmode) $(datadir)/vi/perl
|
||||
[ -f VI.pm ] && $(cp) VI.pm $(datadir)/vi/perl && \
|
||||
cd $(datadir)/vi/perl && $(chmod) $(fmode) VI.pm)
|
||||
(cd $(srcdir)/perl_scripts && $(cp) *.pl $(datadir)/vi/perl && \
|
||||
cd $(datadir)/vi/perl && $(chmod) $(fmode) *.pl)
|
||||
@echo "Installing Tcl scripts: $(datadir)/vi/tcl ..."
|
||||
$(mkdir) $(datadir)/vi/tcl && $(chmod) $(dmode) $(datadir)/vi/tcl
|
||||
(cd $(srcdir)/tcl_scripts && $(cp) *.tcl $(datadir)/vi/tcl && \
|
||||
cd $(datadir)/vi/tcl && $(chmod) $(fmode) *.tcl)
|
||||
@echo "Installing recover script: $(datadir)/vi/recover ..."
|
||||
($(cp) recover $(datadir)/vi/recover && \
|
||||
$(chmod) $(emode) $(datadir)/vi/recover)
|
||||
|
||||
uninstall:
|
||||
$(rm) -rf $(datadir)/vi
|
||||
cd $(bindir) && $(rm) -f `echo ex | sed '$(transform)'`
|
||||
cd $(bindir) && $(rm) -f `echo vi | sed '$(transform)'`
|
||||
cd $(bindir) && $(rm) -f `echo view | sed '$(transform)'`
|
||||
cd $(mandir)/cat1 && $(rm) -f `echo ex.0 | sed '$(transform)'`
|
||||
cd $(mandir)/cat1 && $(rm) -f `echo vi.0 | sed '$(transform)'`
|
||||
cd $(mandir)/cat1 && $(rm) -f `echo view.0 | sed '$(transform)'`
|
||||
cd $(mandir)/man1 && $(rm) -f `echo ex.1 | sed '$(transform)'`
|
||||
cd $(mandir)/man1 && $(rm) -f `echo vi.1 | sed '$(transform)'`
|
||||
cd $(mandir)/man1 && $(rm) -f `echo view.1 | sed '$(transform)'`
|
||||
|
||||
docs:
|
||||
cd $(srcdir)/docs/USD.doc/vi.ref && $(MAKE)
|
||||
cd $(srcdir)/docs/USD.doc/vi.man && $(MAKE)
|
||||
cd $(srcdir)/docs/USD.doc/edit && $(MAKE)
|
||||
cd $(srcdir)/docs/USD.doc/exref && $(MAKE)
|
||||
cd $(srcdir)/docs/USD.doc/vitut && $(MAKE)
|
||||
|
||||
clean:
|
||||
-rm -f *.core *.o memcpy.c perl.c
|
||||
-rm -f nex nvi tknvi core
|
||||
-rm -f $(COBJS) $(CLOBJS) $(DBOBJS) $(REOBJS)
|
||||
-rm -f $(TKOBJS) $(VIOBJS)
|
||||
|
||||
cleandocs:
|
||||
cd $(srcdir)/docs/USD.doc/vi.ref && $(MAKE) clean
|
||||
cd $(srcdir)/docs/USD.doc/vi.man && $(MAKE) clean
|
||||
cd $(srcdir)/docs/USD.doc/edit && $(MAKE) clean
|
||||
cd $(srcdir)/docs/USD.doc/exref && $(MAKE) clean
|
||||
cd $(srcdir)/docs/USD.doc/vitut && $(MAKE) clean
|
||||
|
||||
distclean maintainer-clean realclean: clean cleandocs
|
||||
-rm -f Makefile config.cache config.h config.log config.status
|
||||
-rm -f pathnames.h port.h
|
||||
|
||||
# Vi curses sources.
|
||||
cl_bsd.o: $(srcdir)/cl/cl_bsd.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
cl_funcs.o: $(srcdir)/cl/cl_funcs.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
cl_main.o: $(srcdir)/cl/cl_main.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
cl_read.o: $(srcdir)/cl/cl_read.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
cl_screen.o: $(srcdir)/cl/cl_screen.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
cl_term.o: $(srcdir)/cl/cl_term.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
|
||||
# Vi Tk sources.
|
||||
tk_funcs.o: $(srcdir)/tk/tk_funcs.c
|
||||
$(CC) $(CFLAGS) @XINCS@ $?
|
||||
tk_main.o: $(srcdir)/tk/tk_main.c
|
||||
$(CC) $(CFLAGS) @XINCS@ $?
|
||||
tk_read.o: $(srcdir)/tk/tk_read.c
|
||||
$(CC) $(CFLAGS) @XINCS@ $?
|
||||
tk_screen.o: $(srcdir)/tk/tk_screen.c
|
||||
$(CC) $(CFLAGS) @XINCS@ $?
|
||||
tk_term.o: $(srcdir)/tk/tk_term.c
|
||||
$(CC) $(CFLAGS) @XINCS@ $?
|
||||
tk_util.o: $(srcdir)/tk/tk_util.c
|
||||
$(CC) $(CFLAGS) @XINCS@ $?
|
||||
|
||||
# Vi Tcl/Perl interpreter sources.
|
||||
api.o: $(srcdir)/common/api.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
perl.c: $(srcdir)/perl_api/perl.xs $(srcdir)/perl_api/typemap
|
||||
echo "#define _PATH_PERLSCRIPTS \"$(datadir)/vi/perl\"" > $@
|
||||
$(PERL) $(PERLLIB)/ExtUtils/xsubpp -typemap \
|
||||
$(PERLLIB)/ExtUtils/typemap $(srcdir)/perl_api/perl.xs >> $@
|
||||
($(PERL) -ne 'print "sub $$1 {\$$curscr->$$1(\@_)}\n" \
|
||||
if /newXS\("VI::([^":]*)"/;' $@ ; echo "1;") > VI.pm
|
||||
perl.o: perl.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
perlsfio.o: $(srcdir)/perl_api/perlsfio.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
tcl.o: $(srcdir)/tcl_api/tcl.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
|
||||
# Vi sources.
|
||||
cut.o: $(srcdir)/common/cut.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
delete.o: $(srcdir)/common/delete.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
exf.o: $(srcdir)/common/exf.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
key.o: $(srcdir)/common/key.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
line.o: $(srcdir)/common/line.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
log.o: $(srcdir)/common/log.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
main.o: $(srcdir)/common/main.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
mark.o: $(srcdir)/common/mark.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
msg.o: $(srcdir)/common/msg.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
options.o: $(srcdir)/common/options.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
options_f.o: $(srcdir)/common/options_f.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
put.o: $(srcdir)/common/put.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
screen.o: $(srcdir)/common/screen.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
search.o: $(srcdir)/common/search.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
seq.o: $(srcdir)/common/seq.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
recover.o: $(srcdir)/common/recover.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
util.o: $(srcdir)/common/util.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex.o: $(srcdir)/ex/ex.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_abbrev.o: $(srcdir)/ex/ex_abbrev.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_append.o: $(srcdir)/ex/ex_append.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_args.o: $(srcdir)/ex/ex_args.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_argv.o: $(srcdir)/ex/ex_argv.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_at.o: $(srcdir)/ex/ex_at.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_bang.o: $(srcdir)/ex/ex_bang.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_cd.o: $(srcdir)/ex/ex_cd.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_cmd.o: $(srcdir)/ex/ex_cmd.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_cscope.o: $(srcdir)/ex/ex_cscope.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_delete.o: $(srcdir)/ex/ex_delete.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_digraph.o: $(srcdir)/ex/ex_digraph.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_display.o: $(srcdir)/ex/ex_display.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_edit.o: $(srcdir)/ex/ex_edit.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_equal.o: $(srcdir)/ex/ex_equal.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_file.o: $(srcdir)/ex/ex_file.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_filter.o: $(srcdir)/ex/ex_filter.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_global.o: $(srcdir)/ex/ex_global.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_init.o: $(srcdir)/ex/ex_init.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_join.o: $(srcdir)/ex/ex_join.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_map.o: $(srcdir)/ex/ex_map.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_mark.o: $(srcdir)/ex/ex_mark.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_mkexrc.o: $(srcdir)/ex/ex_mkexrc.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_move.o: $(srcdir)/ex/ex_move.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_open.o: $(srcdir)/ex/ex_open.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_perl.o: $(srcdir)/ex/ex_perl.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_preserve.o: $(srcdir)/ex/ex_preserve.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_print.o: $(srcdir)/ex/ex_print.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_put.o: $(srcdir)/ex/ex_put.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_quit.o: $(srcdir)/ex/ex_quit.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_read.o: $(srcdir)/ex/ex_read.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_screen.o: $(srcdir)/ex/ex_screen.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_script.o: $(srcdir)/ex/ex_script.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_set.o: $(srcdir)/ex/ex_set.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_shell.o: $(srcdir)/ex/ex_shell.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_shift.o: $(srcdir)/ex/ex_shift.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_source.o: $(srcdir)/ex/ex_source.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_stop.o: $(srcdir)/ex/ex_stop.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_subst.o: $(srcdir)/ex/ex_subst.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_tag.o: $(srcdir)/ex/ex_tag.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_tcl.o: $(srcdir)/ex/ex_tcl.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_txt.o: $(srcdir)/ex/ex_txt.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_undo.o: $(srcdir)/ex/ex_undo.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_usage.o: $(srcdir)/ex/ex_usage.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_util.o: $(srcdir)/ex/ex_util.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_version.o: $(srcdir)/ex/ex_version.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_visual.o: $(srcdir)/ex/ex_visual.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_write.o: $(srcdir)/ex/ex_write.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_yank.o: $(srcdir)/ex/ex_yank.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
ex_z.o: $(srcdir)/ex/ex_z.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
getc.o: $(srcdir)/vi/getc.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
v_at.o: $(srcdir)/vi/v_at.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
v_ch.o: $(srcdir)/vi/v_ch.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
v_cmd.o: $(srcdir)/vi/v_cmd.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
v_delete.o: $(srcdir)/vi/v_delete.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
v_ex.o: $(srcdir)/vi/v_ex.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
v_increment.o: $(srcdir)/vi/v_increment.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
v_init.o: $(srcdir)/vi/v_init.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
v_itxt.o: $(srcdir)/vi/v_itxt.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
v_left.o: $(srcdir)/vi/v_left.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
v_mark.o: $(srcdir)/vi/v_mark.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
v_match.o: $(srcdir)/vi/v_match.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
v_paragraph.o: $(srcdir)/vi/v_paragraph.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
v_put.o: $(srcdir)/vi/v_put.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
v_redraw.o: $(srcdir)/vi/v_redraw.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
v_replace.o: $(srcdir)/vi/v_replace.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
v_right.o: $(srcdir)/vi/v_right.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
v_screen.o: $(srcdir)/vi/v_screen.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
v_scroll.o: $(srcdir)/vi/v_scroll.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
v_search.o: $(srcdir)/vi/v_search.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
v_section.o: $(srcdir)/vi/v_section.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
v_sentence.o: $(srcdir)/vi/v_sentence.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
v_status.o: $(srcdir)/vi/v_status.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
v_txt.o: $(srcdir)/vi/v_txt.c
|
||||
$(CC) -c @no_op_OPTFLAG@ @CFLAGS@ -I. -I$(srcdir)/include @CPPFLAGS@ $?
|
||||
v_ulcase.o: $(srcdir)/vi/v_ulcase.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
v_undo.o: $(srcdir)/vi/v_undo.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
v_util.o: $(srcdir)/vi/v_util.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
v_word.o: $(srcdir)/vi/v_word.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
v_xchar.o: $(srcdir)/vi/v_xchar.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
v_yank.o: $(srcdir)/vi/v_yank.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
v_z.o: $(srcdir)/vi/v_z.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
v_zexit.o: $(srcdir)/vi/v_zexit.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
vi.o: $(srcdir)/vi/vi.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
vs_line.o: $(srcdir)/vi/vs_line.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
vs_msg.o: $(srcdir)/vi/vs_msg.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
vs_refresh.o: $(srcdir)/vi/vs_refresh.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
vs_relative.o: $(srcdir)/vi/vs_relative.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
vs_smap.o: $(srcdir)/vi/vs_smap.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
vs_split.o: $(srcdir)/vi/vs_split.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
|
||||
addbytes.o: $(srcdir)/curses/addbytes.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
addch.o: $(srcdir)/curses/addch.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
box.o: $(srcdir)/curses/box.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
clear.o: $(srcdir)/curses/clear.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
clrtobot.o: $(srcdir)/curses/clrtobot.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
clrtoeol.o: $(srcdir)/curses/clrtoeol.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
cr_put.o: $(srcdir)/curses/cr_put.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
ctrace.o: $(srcdir)/curses/ctrace.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
cur_hash.o: $(srcdir)/curses/cur_hash.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
curses.o: $(srcdir)/curses/curses.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
delch.o: $(srcdir)/curses/delch.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
deleteln.o: $(srcdir)/curses/deleteln.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
delwin.o: $(srcdir)/curses/delwin.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
erase.o: $(srcdir)/curses/erase.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
fullname.o: $(srcdir)/curses/fullname.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
getch.o: $(srcdir)/curses/getch.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
getstr.o: $(srcdir)/curses/getstr.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
id_subwins.o: $(srcdir)/curses/id_subwins.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
idlok.o: $(srcdir)/curses/idlok.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
initscr.o: $(srcdir)/curses/initscr.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
insch.o: $(srcdir)/curses/insch.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
insertln.o: $(srcdir)/curses/insertln.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
longname.o: $(srcdir)/curses/longname.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
move.o: $(srcdir)/curses/move.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
mvwin.o: $(srcdir)/curses/mvwin.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
newwin.o: $(srcdir)/curses/newwin.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
overlay.o: $(srcdir)/curses/overlay.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
overwrite.o: $(srcdir)/curses/overwrite.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
putchar.o: $(srcdir)/curses/putchar.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
refresh.o: $(srcdir)/curses/refresh.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
scroll.o: $(srcdir)/curses/scroll.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
setterm.o: $(srcdir)/curses/setterm.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
standout.o: $(srcdir)/curses/standout.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
toucholap.o: $(srcdir)/curses/toucholap.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
touchwin.o: $(srcdir)/curses/touchwin.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
tscroll.o: $(srcdir)/curses/tscroll.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
tstp.o: $(srcdir)/curses/tstp.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
tty.o: $(srcdir)/curses/tty.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
unctrl.o: $(srcdir)/curses/unctrl.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
waddnstr.o: $(srcdir)/curses/waddnstr.c
|
||||
$(CC) -D_CURSES_PRIVATE $(CFLAGS) $?
|
||||
|
||||
# DB sources.
|
||||
db.o: $(srcdir)/db/db/db.c
|
||||
$(CC) -D__DBINTERFACE_PRIVATE $(CFLAGS) $?
|
||||
mpool.o: $(srcdir)/db/mpool/mpool.c
|
||||
$(CC) -D__DBINTERFACE_PRIVATE $(CFLAGS) -I$(srcdir)/db/mpool $?
|
||||
bt_close.o: $(srcdir)/db/btree/bt_close.c
|
||||
$(CC) -D__DBINTERFACE_PRIVATE $(CFLAGS) -I$(srcdir)/db/btree $?
|
||||
bt_conv.o: $(srcdir)/db/btree/bt_conv.c
|
||||
$(CC) -D__DBINTERFACE_PRIVATE $(CFLAGS) -I$(srcdir)/db/btree $?
|
||||
bt_debug.o: $(srcdir)/db/btree/bt_debug.c
|
||||
$(CC) -D__DBINTERFACE_PRIVATE $(CFLAGS) -I$(srcdir)/db/btree $?
|
||||
bt_delete.o: $(srcdir)/db/btree/bt_delete.c
|
||||
$(CC) -D__DBINTERFACE_PRIVATE $(CFLAGS) -I$(srcdir)/db/btree $?
|
||||
bt_get.o: $(srcdir)/db/btree/bt_get.c
|
||||
$(CC) -D__DBINTERFACE_PRIVATE $(CFLAGS) -I$(srcdir)/db/btree $?
|
||||
bt_open.o: $(srcdir)/db/btree/bt_open.c
|
||||
$(CC) -D__DBINTERFACE_PRIVATE $(CFLAGS) -I$(srcdir)/db/btree $?
|
||||
bt_overflow.o: $(srcdir)/db/btree/bt_overflow.c
|
||||
$(CC) -D__DBINTERFACE_PRIVATE $(CFLAGS) -I$(srcdir)/db/btree $?
|
||||
bt_page.o: $(srcdir)/db/btree/bt_page.c
|
||||
$(CC) -D__DBINTERFACE_PRIVATE $(CFLAGS) -I$(srcdir)/db/btree $?
|
||||
bt_put.o: $(srcdir)/db/btree/bt_put.c
|
||||
$(CC) -D__DBINTERFACE_PRIVATE $(CFLAGS) -I$(srcdir)/db/btree $?
|
||||
bt_search.o: $(srcdir)/db/btree/bt_search.c
|
||||
$(CC) -D__DBINTERFACE_PRIVATE $(CFLAGS) -I$(srcdir)/db/btree $?
|
||||
bt_seq.o: $(srcdir)/db/btree/bt_seq.c
|
||||
$(CC) -D__DBINTERFACE_PRIVATE $(CFLAGS) -I$(srcdir)/db/btree $?
|
||||
bt_split.o: $(srcdir)/db/btree/bt_split.c
|
||||
$(CC) -D__DBINTERFACE_PRIVATE $(CFLAGS) -I$(srcdir)/db/btree $?
|
||||
bt_utils.o: $(srcdir)/db/btree/bt_utils.c
|
||||
$(CC) -D__DBINTERFACE_PRIVATE $(CFLAGS) -I$(srcdir)/db/btree $?
|
||||
rec_close.o: $(srcdir)/db/recno/rec_close.c
|
||||
$(CC) -D__DBINTERFACE_PRIVATE $(CFLAGS) -I$(srcdir)/db/recno $?
|
||||
rec_delete.o: $(srcdir)/db/recno/rec_delete.c
|
||||
$(CC) -D__DBINTERFACE_PRIVATE $(CFLAGS) -I$(srcdir)/db/recno $?
|
||||
rec_get.o: $(srcdir)/db/recno/rec_get.c
|
||||
$(CC) -D__DBINTERFACE_PRIVATE $(CFLAGS) -I$(srcdir)/db/recno $?
|
||||
rec_open.o: $(srcdir)/db/recno/rec_open.c
|
||||
$(CC) -D__DBINTERFACE_PRIVATE $(CFLAGS) -I$(srcdir)/db/recno $?
|
||||
rec_put.o: $(srcdir)/db/recno/rec_put.c
|
||||
$(CC) -D__DBINTERFACE_PRIVATE $(CFLAGS) -I$(srcdir)/db/recno $?
|
||||
rec_search.o: $(srcdir)/db/recno/rec_search.c
|
||||
$(CC) -D__DBINTERFACE_PRIVATE $(CFLAGS) -I$(srcdir)/db/recno $?
|
||||
rec_seq.o: $(srcdir)/db/recno/rec_seq.c
|
||||
$(CC) -D__DBINTERFACE_PRIVATE $(CFLAGS) -I$(srcdir)/db/recno $?
|
||||
rec_utils.o: $(srcdir)/db/recno/rec_utils.c
|
||||
$(CC) -D__DBINTERFACE_PRIVATE $(CFLAGS) -I$(srcdir)/db/recno $?
|
||||
|
||||
# Regular Expressions sources.
|
||||
regcomp.o: $(srcdir)/regex/regcomp.c
|
||||
$(CC) -D__REGEX_PRIVATE $(CFLAGS) $?
|
||||
regerror.o: $(srcdir)/regex/regerror.c
|
||||
$(CC) -D__REGEX_PRIVATE $(CFLAGS) $?
|
||||
regexec.o: $(srcdir)/regex/regexec.c
|
||||
$(CC) -D__REGEX_PRIVATE $(CFLAGS) $?
|
||||
regfree.o: $(srcdir)/regex/regfree.c
|
||||
$(CC) -D__REGEX_PRIVATE $(CFLAGS) $?
|
||||
|
||||
# Random replacement and workaround sources.
|
||||
addnstr.o: $(srcdir)/clib/addnstr.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
bsearch.o: $(srcdir)/clib/bsearch.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
env.o: $(srcdir)/clib/env.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
fchmod.o: $(srcdir)/clib/fchmod.c
|
||||
$(CC) $(CFLAGS) $(INC) $?
|
||||
gethostname.o: $(srcdir)/clib/gethostname.c
|
||||
$(CC) $(CFLAGS) $(INC) $?
|
||||
getopt.o: $(srcdir)/clib/getopt.c
|
||||
$(CC) $(CFLAGS) $(INC) $?
|
||||
memchr.o: $(srcdir)/clib/memchr.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
memcpy.o: $(srcdir)/clib/memmove.c
|
||||
$(cp) $? memcpy.c
|
||||
$(CC) $(CFLAGS) -DMEMCOPY memcpy.c
|
||||
memmove.o: $(srcdir)/clib/memmove.c
|
||||
$(CC) $(CFLAGS) -DMEMMOVE $?
|
||||
memset.o: $(srcdir)/clib/memset.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
mkstemp.o: $(srcdir)/clib/mkstemp.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
mmap.o: $(srcdir)/clib/mmap.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
realloc.o: $(srcdir)/clib/realloc.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
snprintf.o: $(srcdir)/clib/snprintf.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
strdup.o: $(srcdir)/clib/strdup.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
strerror.o: $(srcdir)/clib/strerror.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
strpbrk.o: $(srcdir)/clib/strpbrk.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
strsep.o: $(srcdir)/clib/strsep.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
strtol.o: $(srcdir)/clib/strtol.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
strtoul.o: $(srcdir)/clib/strtoul.c
|
||||
$(CC) $(CFLAGS) $?
|
||||
vsnprintf.o: $(srcdir)/clib/vsnprintf.c
|
||||
$(CC) $(CFLAGS) $?
|
@ -1,369 +0,0 @@
|
||||
# @(#)README 8.26 (Berkeley) 10/19/96
|
||||
|
||||
Nvi uses the GNU autoconf program for configuration and compilation. You
|
||||
should enter:
|
||||
|
||||
configure
|
||||
make
|
||||
|
||||
and nvi will configure the system and build one or two binaries: nvi and
|
||||
tknvi. You can use any path to the configure script, e.g., to build for
|
||||
an x86 architecture, I suggest that you do:
|
||||
|
||||
mkdir build.x86
|
||||
cd build.x86
|
||||
../build/configure
|
||||
make
|
||||
|
||||
There are options that you can specify to the configure command. See
|
||||
the next section for a description of these options.
|
||||
|
||||
If you want to rebuild or reconfigure nvi, for example, because you change
|
||||
your mind as to the curses library that you want to use, create a new
|
||||
directory and reconfigure it using "configure" and whatever options you
|
||||
choose, don't try to selectively edit the files.
|
||||
|
||||
By default, nvi is installed as "vi", with hard links to "ex" and "view".
|
||||
To install them using different names, use the configure program options.
|
||||
For example, to install them as "nvi", "nex" and "nview", use:
|
||||
|
||||
configure --program-prefix=n
|
||||
|
||||
See the section below on installation for details.
|
||||
|
||||
Note, if you're building nvi on a LynxOS system, you should read the
|
||||
README.LynxOS file in this directory for additional build instructions
|
||||
that are specific to that operating system.
|
||||
|
||||
If you have trouble with this procedure, send email to the addresses
|
||||
listed in ../README. In that email, please provide a complete script
|
||||
of the output for all of the above commands that you entered.
|
||||
|
||||
=-=-=-=-=-=-=
|
||||
NVI'S OPTIONS TO THE CONFIGURE PROGRAM
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
|
||||
There are many options that you can enter to the configuration program.
|
||||
To see a complete list of the options, enter "configure --help". Only
|
||||
a few of them are nvi specific. These options are as follows:
|
||||
|
||||
--disable-curses DON'T use the nvi-provided curses routines.
|
||||
--disable-db DON'T use the nvi-provided DB routines.
|
||||
--disable-re DON'T use the nvi-provided RE routines.
|
||||
--enable-debug Build a debugging version.
|
||||
--enable-perlinterp Include a Perl interpreter in vi.
|
||||
--enable-tclinterp Include a Tk/Tcl interpreter in vi.
|
||||
--enable-tknvi Build a Tk/Tcl front-end for vi.
|
||||
|
||||
disable-curses:
|
||||
By default, nvi loads its own implementation of the curses
|
||||
routines (which are a stripped-down version of the 4.4BSD curses
|
||||
library). If you have your own curses library implementation and
|
||||
you want to use it instead, enter:
|
||||
|
||||
--disable-curses
|
||||
|
||||
as an argument to configure, and the curses routines will be taken
|
||||
from whatever libraries you load. Note: System V based curses
|
||||
implementations are usually broken. See the last section of this
|
||||
README for further information about nvi and the curses library.
|
||||
|
||||
disable-db:
|
||||
By default, nvi loads its own versions of the Berkeley DB routines
|
||||
(which are a stripped-down version of DB 1.85). If you have your
|
||||
own version of the Berkeley DB routines and you want to use them
|
||||
instead, enter:
|
||||
|
||||
--disable-db
|
||||
|
||||
as an argument to configure, and the DB routines will be taken
|
||||
from whatever libraries you load. Make sure that the DB routines
|
||||
you use are at least version 1.85 or later.
|
||||
|
||||
disable-re:
|
||||
By default, nvi loads its own versions of the POSIX 1003.2 Regular
|
||||
Expression routines (which are Henry Spencer's implementation).
|
||||
If your C library contains an implementation of the POSIX 1003.2
|
||||
RE routines (note, this is NOT the same as the historic UNIX RE
|
||||
routines), and you want to use them instead, enter:
|
||||
|
||||
--disable-re
|
||||
|
||||
as an argument to configure, and the RE routines will be taken
|
||||
from whatever libraries you load. Please ensure that your RE
|
||||
routines implement Henry Spencer's extensions for doing vi-style
|
||||
"word" searches.
|
||||
|
||||
enable-debug:
|
||||
If you want to build nvi with no optimization (i.e. without -O
|
||||
as a compiler flag), with -g as a compiler flag, and with DEBUG
|
||||
defined during compilation, enter:
|
||||
|
||||
--enable-debug
|
||||
|
||||
as an argument to configure.
|
||||
|
||||
enable-perlinterp:
|
||||
If you have the Perl 5 libraries and you want to compile in the
|
||||
Perl interpreter, enter:
|
||||
|
||||
--enable-perlinterp
|
||||
|
||||
as an argument to configure. (Note: this is NOT possible with
|
||||
Perl 4, or even with Perl 5 versions earlier than 5.002.)
|
||||
|
||||
enable-tclinterp:
|
||||
If you have the Tk/Tcl libraries and you want to compile in the
|
||||
Tcl/Tk interpreter, enter:
|
||||
|
||||
--enable-tclinterp
|
||||
|
||||
as an argument to configure. If your Tk/Tcl include files and
|
||||
libraries aren't in the standard library and include locations,
|
||||
see the next section of this README file for more information.
|
||||
|
||||
enable-tknvi:
|
||||
If you have the Tk/Tcl libraries and you want to build the Tcl/Tk
|
||||
nvi front-end, enter:
|
||||
|
||||
--enable-tknvi
|
||||
|
||||
as an argument to configure. If your Tk/Tcl include files and
|
||||
libraries aren't in the standard library and include locations,
|
||||
see the next section of this README file for more information.
|
||||
|
||||
=-=-=-=-=-=-=
|
||||
ADDING OR CHANGING COMPILERS, OR COMPILE OR LOAD LINE FLAGS
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
|
||||
If you want to use a specific compiler, specify the CC environment
|
||||
variable before running configure. For example:
|
||||
|
||||
env CC=gcc configure
|
||||
|
||||
Using anything other than the native compiler will almost certainly
|
||||
mean that you'll want to check the compile and load line flags, too.
|
||||
|
||||
If you want to specify additional load line flags, specify the ADDLDFLAGS
|
||||
environment variable before running configure. For example:
|
||||
|
||||
env ADDLDFLAGS="-Q" configure
|
||||
|
||||
would specify the -Q flag in the load line when the nvi programs are
|
||||
loaded.
|
||||
|
||||
If you don't want configure to use the default load line flags for the
|
||||
system, specify the LDFLAGS environment variable before running configure.
|
||||
For example:
|
||||
|
||||
env LDFLAGS="-32" configure
|
||||
|
||||
will cause configure to set the load line flags to "-32", and not set
|
||||
them based on the current system.
|
||||
|
||||
If you want to specify additional compile line flags, specify the
|
||||
ADDCPPFLAGS environment variable before running configure. For example:
|
||||
|
||||
env ADDCPPFLAGS="-I../foo" configure
|
||||
|
||||
would cause the compiler to be passed the -I../foo flag when compiling
|
||||
test programs during configuration as well as when building nvi object
|
||||
files.
|
||||
|
||||
If you don't want configure to use the default compile line flags for the
|
||||
system, specify the CPPFLAGS environment variable before running configure.
|
||||
For example:
|
||||
|
||||
env CPPFLAGS="-I.." configure
|
||||
|
||||
will cause configure to use "-I.." as the compile line flags instead of
|
||||
the default values.
|
||||
|
||||
=-=-=-=-=-=-=
|
||||
ADDING LIBRARIES AND INCLUDE FILES
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
|
||||
If the Tk/Tcl or any other include files or libraries are in non-standard
|
||||
places on your system, you will need to specify the directory path where
|
||||
they can be found.
|
||||
|
||||
If you want to specify additional library paths, set the ADDLIBS environment
|
||||
variable before running configure. For example:
|
||||
|
||||
env ADDLIBS="-L/a/b -L/e/f -ldb" configure
|
||||
|
||||
would specify two additional directories to search for libraries, /a/b
|
||||
and /e/f, and one additional library to load, "db".
|
||||
|
||||
If you want to specify additional include paths, specify the ADDCPPFLAGS
|
||||
environment variable before running configure. For example:
|
||||
|
||||
env ADDCPPFLAGS="-I/usr/local/include" LIBS="-ldb" configure
|
||||
|
||||
would search /usr/local/include for include files, as well as load the db
|
||||
library as described above.
|
||||
|
||||
As a final example, let's say that you've downloaded ncurses from the net
|
||||
and you've built it in a directory named ncurses which is at the same
|
||||
level in the filesystem hierarchy as nvi. You would enter something like:
|
||||
|
||||
env ADDCPPFLAGS="-I../../ncurses/include" \
|
||||
ADDLIBS="-L../../ncurses/libraries" configure
|
||||
|
||||
to cause nvi to look for the curses include files and the curses library
|
||||
in the ncurses environment.
|
||||
|
||||
Notes:
|
||||
Make sure that you prepend -L to any library directory names, and
|
||||
that you prepend -I to any include file directory names! Also,
|
||||
make sure that you quote the paths as shown above, i.e. with
|
||||
single or double quotes around the values you're specifying for
|
||||
ADDCPPFLAGS and ADDLIBS.
|
||||
|
||||
=-=-=-=-=-=
|
||||
You should NOT need to add any libraries or include files to load
|
||||
the Perl5 interpreter. The configure script will obtain that
|
||||
information directly from the Perl5 program. This means that the
|
||||
configure script must be able to find perl in its path. It looks
|
||||
for "perl5" first, and then "perl". If you're building a Perl
|
||||
interpreter and neither is found, it's a fatal error.
|
||||
|
||||
=-=-=-=-=-=
|
||||
You do not need to specify additional libraries to load Tk/Tcl,
|
||||
Perl or curses, as the nvi configuration script adds the
|
||||
appropriate libraries to the load line whenever you specify
|
||||
--enable-tknvi or other Perl or Tk/Tcl related option, or build
|
||||
the Tk/Tcl or curses version of nvi. The library names that are
|
||||
automatically loaded are as follows:
|
||||
|
||||
for Perl: -lperl
|
||||
for Tk/Tcl: -ltk -ltcl -lm
|
||||
for curses: -lcurses
|
||||
|
||||
In addition, the configure script loads:
|
||||
|
||||
... the X libraries when loading the Tk/Tcl libraries,
|
||||
if they exist.
|
||||
|
||||
... the -ltermcap or -ltermlib libraries when loading
|
||||
any curses library, if they exist.
|
||||
|
||||
=-=-=-=-=-=
|
||||
The env command is available on most systems, and simply sets one
|
||||
or more environment variables before running a command. If the
|
||||
env command is not available to you, you can set the environment
|
||||
variables in your shell before running configure. For example,
|
||||
in sh or ksh, you could do:
|
||||
|
||||
ADDLIBS="-L/a/b -L/e/f -ldb" configure
|
||||
|
||||
and in csh or tcsh, you could do:
|
||||
|
||||
setenv ADDLIBS "-L/a/b -L/e/f -ldb"
|
||||
configure
|
||||
|
||||
See your shell manual page for further information.
|
||||
|
||||
=-=-=-=-=-=-=
|
||||
INSTALLING NVI
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
|
||||
Nvi installs the following files into the following locations, with
|
||||
the following default values:
|
||||
|
||||
Variables: Default value:
|
||||
prefix /usr/local
|
||||
exec_prefix $(prefix)
|
||||
bindir $(prefix)/bin
|
||||
datadir $(prefix)/share
|
||||
mandir $(prefix)/man
|
||||
|
||||
File(s): Default location
|
||||
----------------------------------------
|
||||
vi $(bindir)/vi
|
||||
vi.1 $(mandir)/man1/vi.1
|
||||
vi.0 $(mandir)/cat1/vi.0
|
||||
Perl scripts $(datadir)/vi/perl/
|
||||
Tcl scripts $(datadir)/vi/tcl/
|
||||
Message Catalogs $(datadir)/vi/catalog/
|
||||
|
||||
Notes:
|
||||
There are two hard links to the vi program, named ex and view.
|
||||
Similarly, there are two hard links to the unformatted vi manual
|
||||
page, named ex.1 and view.1, and two hard links to the formatted
|
||||
manual page, named ex.0 and view.0. These links are created when
|
||||
the program and man pages are installed.
|
||||
|
||||
If you want to install vi, ex, view and the man pages as nvi, nex,
|
||||
nview, use the configure option --program-prefix=n. Other, more
|
||||
complex transformations are possible -- use configure --help to
|
||||
see more options.
|
||||
|
||||
To move the entire installation tree somewhere besides /usr/local,
|
||||
change the value of both "exec_prefix" and "prefix". To move the
|
||||
binaries to a different place, change the value of "bindir".
|
||||
Similarly, to put the datafiles (the message catalogs, Perl and
|
||||
Tcl scripts) or the man pages in a different place, change the
|
||||
value of "datadir" or "mandir". These values can be changed as
|
||||
part of configuration:
|
||||
|
||||
configure --exec_prefix=/usr/contrib --prefix=/usr/share
|
||||
|
||||
or when doing the install itself:
|
||||
|
||||
make exec_prefix=/usr/contrib prefix=/usr/contrib install
|
||||
|
||||
The datafile directory (e.g., /usr/local/share/vi by default) is
|
||||
completely removed and then recreated as part of the installation
|
||||
process.
|
||||
|
||||
=-=-=-=-=-=-=
|
||||
NVI AND THE CURSES LIBRARY
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
|
||||
The major portability problem for nvi is selecting a curses library.
|
||||
Unfortunately, it is common to find broken versions of curses -- the
|
||||
original System V curses was broken, resulting in all vendors whose
|
||||
implementations are derived from System V having broken implementations
|
||||
in turn.
|
||||
|
||||
For this reason, BY DEFAULT, nvi uses the stripped-down curses library
|
||||
that's included in its distribution. Of course, it would be preferable
|
||||
to use the vendor's curses library, or one of the newer implementations
|
||||
of curses, e.g., ncurses.
|
||||
|
||||
To use the vendor's curses library, specify the:
|
||||
|
||||
--disable-curses
|
||||
|
||||
argument to the configure command. If you use the vendor's or other
|
||||
curses library, and you see any of the following symptoms:
|
||||
|
||||
+ Core dumps in curses routines.
|
||||
+ Missing routines when compiling.
|
||||
+ Repainting the wrong characters on the screen.
|
||||
+ Displaying inverse video in the wrong places.
|
||||
+ Failure to reset your terminal to the correct modes on exit.
|
||||
|
||||
you have a broken curses implementation, and you should reconfigure nvi
|
||||
to use another curses library or the curses library provided with nvi.
|
||||
|
||||
There are two alternative sources for curses libraries:
|
||||
|
||||
#1: Compile the 4BSD curses library from any of the recent BSD
|
||||
releases: FreeBSD, NetBSD or 4.4BSD-Lite release 2. These
|
||||
libraries should be able to support nvi.
|
||||
|
||||
#2: Retrieve and build the ncurses library. This library is not
|
||||
recommended unreservedly, at least for now, for two reasons.
|
||||
First, it can't be built on any system where the compiler
|
||||
doesn't support function prototypes. Second, it currently has
|
||||
a few bugs in its support for nvi. It mostly works, but it's
|
||||
still not quite right.
|
||||
|
||||
One final note. If you see the following symptoms:
|
||||
|
||||
+ Line-by-line screen repainting instead of scrolling.
|
||||
|
||||
it usually means that your termcap or terminfo information is insufficient
|
||||
for the terminal.
|
@ -1,320 +0,0 @@
|
||||
README.LynxOS
|
||||
=============
|
||||
|
||||
Written by Ronald F. Guilmette <rfg@monkeys.com>
|
||||
|
||||
Last modified Wed Aug 14 23:10:07 PDT 1996
|
||||
------------------------------------------
|
||||
|
||||
0. Introduction
|
||||
---------------
|
||||
|
||||
This file describes how to build and install the Berkeley nvi editor for
|
||||
the LynxOS 2.4.0 operating system.
|
||||
|
||||
LynxOS 2.4.0 is available for a variety of different hardware platforms, in
|
||||
particular, x86, m680x0, Sparc, and PowerPC. I have successfully built nvi
|
||||
on all four of these flavors of LynxOS by following the procedures given in
|
||||
this file.
|
||||
|
||||
Note that these procedures may not work on versions of LynxOS prior to 2.4.0.
|
||||
(As I understand it, a good deal of work went into making the 2.4.0 release
|
||||
more POSIX-compliant, and I have no idea what build glitches, if any, you
|
||||
might encounter if you try to build nvi on a pre-2.4.0 version of LynxOS.)
|
||||
|
||||
There are basically four steps to configuring, building, and installing nvi
|
||||
on LynxOS, namely:
|
||||
|
||||
1. Get setup to use the proper C compiler.
|
||||
2. Replace your installed `tr' program.
|
||||
3. Fix your system include files.
|
||||
4. Do a normal configure, build, and install of nvi.
|
||||
|
||||
These steps are described in separate sections below.
|
||||
|
||||
1. Get Setup to Use the Proper C Compiler
|
||||
------------------------------------------
|
||||
|
||||
The first step when building nvi on LynxOS is to set your $PATH environment
|
||||
variable properly so that the gcc 2.x compiler appears first on your path,
|
||||
prior to the older (and less robust) gcc 1.xx compiler (typically installed
|
||||
as /bin/gcc) and/or the old Lynx proprietary C compiler (typically installed
|
||||
as /bin/cc), both of which may also be present on your system.
|
||||
|
||||
Note that for most operating systems, the configure script for nvi tries
|
||||
to use whatever compiler you have installed (and in your $PATH) as "cc",
|
||||
however in the special case of LynxOS, the configure script will auto-
|
||||
matically try to find a "gcc" program on your $PATH in preference to a
|
||||
compiler called "cc". If the nvi configure script only find a compiler
|
||||
called "cc", that's OK. It will still try to see if that is really just
|
||||
the GNU C compiler installed under the name "cc".
|
||||
|
||||
Regardless of the name however (be it "gcc" or "cc") the first C compiler
|
||||
in your $PATH should be some _recent_ (i.e. 2.0 or later) version of the
|
||||
GNU C compiler... and the nvi configure script now checks that this is the
|
||||
case, and fails if it isn't.
|
||||
|
||||
Oddly enough, LynxOS 2.4.0 (and some prior versions) shipped with as many
|
||||
as three different C compilers installed, so it is important to set your
|
||||
$PATH environment variable carfully in order to get the proper C compiler
|
||||
to appear first in your $PATH. You want to avoid having either the /bin/gcc
|
||||
compiler or the /bin/cc compiler be the first C compiler in your $PATH.
|
||||
|
||||
To make sure that the GNU C version 2.x compiler which was shipped with your
|
||||
LynxOS system appears first on your path, you will need to either set your
|
||||
$PATH variable (for sh/bash/ksh users) or your $path variable (for csh/tcsh
|
||||
users). You can, of course, just do this at the shell command prompt, but
|
||||
it is probably better to actually edit this change into your .profile file
|
||||
(for sh/bash/ksh users) or into your .cshrc file (for csh/tcsh users).
|
||||
|
||||
The pathname of the directory that contains the GNU C version 2.x compiler
|
||||
is (unfortunately) dependent upon the exact type of LynxOS system you have.
|
||||
|
||||
For LynxOS 2.4.0 on x86 systems, gcc 2.x is located in:
|
||||
|
||||
/cygnus/94q4-lynxos-x86/bin
|
||||
|
||||
For LynxOS 2.4.0 on m680x0 systems, gcc 2.x is located in:
|
||||
|
||||
/cygnus/94q4-lynxos-68k/bin
|
||||
|
||||
For LynxOS 2.4.0 on Sparc systems, gcc 2.x is located in:
|
||||
|
||||
/cygnus/94q4-lynxos-usparc/bin
|
||||
|
||||
For LynxOS 2.4.0 on PowerPC systems, gcc 2.x is located in:
|
||||
|
||||
/cygnus/95q2-lynxos-ppc/bin
|
||||
|
||||
(Note also that these locations may change in LynxOS 2.5.x and beyond.)
|
||||
|
||||
Anyway, it is imperative that you setup your $PATH environment variable
|
||||
(*before* you do the configure step for nvi) so that the GNU C version 2.x
|
||||
compiler appears in your $PATH before either the /bin/cc or /bin/gcc
|
||||
compilers (if present). If you fail to do this, the configure step for
|
||||
nvi will fail, because the compiler script actually checks (now) that the
|
||||
compiler you are using (if your are on a LynxOS system) is gcc 2.0 or
|
||||
later.
|
||||
|
||||
To make absolutely sure that you will be configuring and building nvi with
|
||||
the proper C compiler (i.e. the GNU C version 2.x compiler on your system)
|
||||
you should add the directory name listed above for your specific system type
|
||||
to your $PATH setting in your $HOME/.profile file. (For csh/tcsh users, you
|
||||
will instead want to add the relevant directory name to the setting of your
|
||||
$path variable in your ~/.cshrc file.) Once you have added the proper direc-
|
||||
tory name (from the list given above) to your $HOME/.profile file (or to your
|
||||
~/.cshrc file, if you are using csh or tcsh) you should log out completely
|
||||
and then log back into the system just to make sure your new $PATH/$path
|
||||
setting takes effect properly.
|
||||
|
||||
When you finish making this adjustment to your $PATH (or $path), the most
|
||||
up-to-date version of gcc on your system should be available to you as the
|
||||
first `gcc' program on your $PATH. You should verify that this is indeed the
|
||||
case simply by typing `gcc -v' and then checking the version number reported
|
||||
by the compiler. It should say either "2.6-94q4" or (on PowerPC systems) it
|
||||
should say "2.6-95q2". If you don't get these results, try again to set your
|
||||
$PATH (or $path) until you do. You won't be able to build nvi until you are
|
||||
properly setup to use gcc version 2.0 or later.
|
||||
|
||||
Performing the steps shown above will insure that your subsequent configura-
|
||||
tion and build steps for nvi will make use of the most up-to-date version of
|
||||
gcc that was shipped with your Lynx operating system. (Note that the versions
|
||||
of gcc which are currently shipping with LynxOS 2.4.0 are also somewhat out-
|
||||
of-date themselves, but they are still quite a bit newer and more bug-free
|
||||
and ANSI conformant that those other two C compilers, /bin/cc and /bin/gcc,
|
||||
which also ship with LynxOS 2.4.0.)
|
||||
|
||||
(Note: At present, LynxOS version 2.4.0 is the latest officially released
|
||||
version of LynxOS, and all of the above information is accurate and correct
|
||||
for LynxOS 2.4.0 as of the time of this writing. However it is rumored that
|
||||
future releases of LynxOS may provide a still newer version of gcc, and that
|
||||
it may be located in the /usr/bin directory. Thus, if you are building nvi
|
||||
for some LynxOS version later than 2.4.0, you may wish to check and see if
|
||||
your system has a program called /usr/bin/gcc, and use that version of gcc,
|
||||
if available, rather than the one suggested above.)
|
||||
|
||||
2. Replace Your Installed `tr' Program
|
||||
---------------------------------------
|
||||
|
||||
The `tr' program which comes bundled with LynxOS 2.4.0 (as /bin/tr) has a
|
||||
somewhat obscure bug which just happens to be tickled by almost all GNU
|
||||
`autoconf' generated `configure' scripts (including the one that nowadays
|
||||
comes bundled with nvi). Using the stock /bin/tr program on LynxOS when
|
||||
executing such `configure' scripts _will_ cause these scripts to malfunction
|
||||
in various ways. It is therefore imperative that you replace your LynxOS
|
||||
/bin/tr program with a properly working version of the `tr' command _before_
|
||||
you even try to configure nvi. (You can tell if your `tr' program has the
|
||||
bug by executng the command "echo ab- | tr ab- ABC". If this yields the
|
||||
string "Ab-" then you have the bug. If it yields "ABC" then you don't.)
|
||||
|
||||
You can obtain sources for a working version of the `tr' command as part of
|
||||
the GNU `textutils' package (the latest version of which, at the time of this
|
||||
writing, is 1.19). The GNU textutils package is available for downloading
|
||||
from prep.ai.mit.edu in the pub/gnu directory. Look for the file named
|
||||
textutils-1.19.tar.gz, or an even more recent version of textutils, if one
|
||||
is available. Fetch it, gunzip it, untar it, and follow the directions in
|
||||
the INSTALL file included in the tar file to build and install the entire
|
||||
textutils set of utility programs (which includes a working `tr' program).
|
||||
Then just make sure that the GNU version of `tr' appears on your $PATH
|
||||
_before_ the LynxOS version of `tr' (i.e. /bin/tr). Be sure to do this
|
||||
step _before_ you start to configure nvi.
|
||||
|
||||
When building the textutils set of programs, I suggest that you use the most
|
||||
up-to-date C compiler available on your system (as described above). Also,
|
||||
note that it will be important for you to AVOID using the -O (optimize)
|
||||
compiler option when building the GNU textutils package, even if you are
|
||||
using the most up-to-date version of gcc which shipped with your system.
|
||||
If you try to use -O when building the textutils package on an x86 with
|
||||
the Cygnus 94q4 C compiler, you will end up with a `tr' program which will
|
||||
malfunction even worse than the one you are trying to replace! If you use
|
||||
-O when building the textutils package on LynxOS on the PowerPC (using the
|
||||
Cygnus 95q2 C compiler) you will just get yourself a compiler crash. So
|
||||
just don't use -O when building textutils. You can avoid using -O by in-
|
||||
voking make in the textutils directory as follows:
|
||||
|
||||
make CFLAGS="-g"
|
||||
|
||||
(Note: At present, LynxOS version 2.4.0 is the latest officially released
|
||||
version of LynxOS, and all of the above information is accurate and correct
|
||||
for LynxOS 2.4.0 as of the time of this writing. However it is rumored that
|
||||
the bug in the /bin/tr program will be fixed in future releases of LynxOS,
|
||||
so if you have a version of LynxOS later than 2.4.0, you may wish to check
|
||||
and see if your /bin/tr program even has the problematic bug before bothering
|
||||
with all of this.)
|
||||
|
||||
|
||||
3. Fix Your System Include Files
|
||||
---------------------------------
|
||||
|
||||
If you are building nvi on a PowerPC system, it is also important that you
|
||||
apply the patches given at the end of this file to your /usr/include files.
|
||||
(Note that you will have to be root in order to do this.) Two of the patches
|
||||
included below fix a pair of serious bugs in the /usr/include/stdarg.h file
|
||||
on the PowerPC, and you really _do_ want to have these bugs fixed anyway,
|
||||
because without these fixes, anything that you compile which uses <stdarg.h>
|
||||
will very likely malfunction at run-time.
|
||||
|
||||
Regardless of which LynxOS platform you are using (i.e. x86, PowerPC, Sparc,
|
||||
or m680x0) you may want to apply all of the system include files patches that
|
||||
are included below anyway. Doing so will clean up a few minor problems with
|
||||
the relevant system include files (i.e. <stdarg.h>, <ioctl.h>, and <wait.h>)
|
||||
and this step will also prevent a few warnings which you would otherwise get
|
||||
during the build of nvi.
|
||||
|
||||
You can apply all of the patches given at the end of this file simply by
|
||||
doing the following:
|
||||
|
||||
su root
|
||||
cd /usr/include
|
||||
/bin/patch < this-file
|
||||
|
||||
Where `this-file' is the actual full pathname of the file you are now reading,
|
||||
wherever it may reside on your own system.
|
||||
|
||||
(Note: At present, LynxOS version 2.4.0 is the latest officially released
|
||||
version of LynxOS, and all of the above information is accurate and correct
|
||||
for LynxOS 2.4.0 as of the time of this writing. However it is rumored that
|
||||
future releases of LynxOS may incorporate some or all of the important system
|
||||
include file fixes provided below. Thus, if you are building nvi for some
|
||||
LynxOS version later than 2.4.0, you should probably go ahead and try to
|
||||
apply the patches given below to your system include files, and then just
|
||||
don't worry about it if these patches seem to have already been applied.)
|
||||
|
||||
|
||||
4. A Brief Note about Sendmail
|
||||
-------------------------------
|
||||
|
||||
I should mention also that LynxOS does not normally ship with the `sendmail'
|
||||
mail transfer program installed, either under /usr/lib/ or anywhere else for
|
||||
that matter. This isn't really a big problem, but nvi normally wants and
|
||||
expects to have a sendmail program available so that it can send users notifi-
|
||||
cations (by mail) whenever a partially edited file is preserved by the editor
|
||||
in response to a sudden system crash, a sudden system shutdown, or an unexpect-
|
||||
ed serial-line hangup. You can configure and build nvi without any sendmail
|
||||
program installed on your system, but you will get warnings about its absence
|
||||
when you are doing the initial configure step prior to actually building nvi.
|
||||
If you want to have a fully-functional nvi which does send out notification
|
||||
messages (by mail) whenever partially edited files are preserved during a
|
||||
serial line hangup or system crash, then you should get the BSD sendmail
|
||||
sources (via ftp from ftp.cs.berkeley.edu), build and install sendmail, and
|
||||
then reconfigure, rebuild, and reinstall nvi.
|
||||
|
||||
Please contact me at the E-mail address below if you experience any problems in
|
||||
building or using nvi on LynxOS. I make no guarrantees, but I may be willing
|
||||
to try to help.
|
||||
|
||||
Ron Guilmette
|
||||
Roseville, California
|
||||
<rfg@monkeys.com>
|
||||
August 14, 1996
|
||||
|
||||
|
||||
cut here for LynxOS 2.4.0 system include files patches
|
||||
-----------------------------------------------------------------------------
|
||||
*** wait.h Fri Apr 26 10:02:45 1996
|
||||
--- wait.h Sun May 19 05:36:50 1996
|
||||
***************
|
||||
*** 94,104 ****
|
||||
/* Function prototypes */
|
||||
#ifndef __LYNXOS
|
||||
- #ifdef _POSIX_SOURCE
|
||||
extern pid_t wait _AP((int *));
|
||||
extern pid_t waitpid _AP((pid_t, int *, int));
|
||||
! #else
|
||||
! extern int wait _AP((union wait *));
|
||||
! extern int waitpid _AP((int, union wait *, int));
|
||||
! extern int wait3 _AP((union wait *, int, struct rusage *));
|
||||
#endif
|
||||
#endif /* !__LYNXOS */
|
||||
--- 94,101 ----
|
||||
/* Function prototypes */
|
||||
#ifndef __LYNXOS
|
||||
extern pid_t wait _AP((int *));
|
||||
extern pid_t waitpid _AP((pid_t, int *, int));
|
||||
! #ifndef _POSIX_SOURCE
|
||||
! extern int wait3 _AP((int *, int, struct rusage *));
|
||||
#endif
|
||||
#endif /* !__LYNXOS */
|
||||
*** ioctl.h Fri Apr 26 16:50:51 1996
|
||||
--- ioctl.h Sat May 18 17:55:16 1996
|
||||
***************
|
||||
*** 572,576 ****
|
||||
|
||||
#ifndef __LYNXOS
|
||||
! extern int ioctl _AP((int, int, char *));
|
||||
#endif
|
||||
|
||||
--- 572,576 ----
|
||||
|
||||
#ifndef __LYNXOS
|
||||
! extern int ioctl _AP((int, int, ...));
|
||||
#endif
|
||||
|
||||
*** stdarg.h Fri Apr 26 16:51:02 1996
|
||||
--- stdarg.h Sat May 18 19:34:13 1996
|
||||
***************
|
||||
*** 88,92 ****
|
||||
(((sizeof(TYPE) + sizeof(int) - 1) / sizeof(int)) * sizeof(int))
|
||||
|
||||
! #define va_start(AP, LASTARG) (AP = ((char *) __builtin_next_arg ()))
|
||||
|
||||
void va_end(va_list); /* Defined in libgcc.a */
|
||||
--- 88,92 ----
|
||||
(((sizeof(TYPE) + sizeof(int) - 1) / sizeof(int)) * sizeof(int))
|
||||
|
||||
! #define va_start(AP, LASTARG) (AP = ((char *) __builtin_next_arg (LASTARG)))
|
||||
|
||||
void va_end(va_list); /* Defined in libgcc.a */
|
||||
***************
|
||||
*** 162,166 ****
|
||||
(((sizeof(TYPE) + sizeof(int) - 1) / sizeof(int)) * sizeof(int))
|
||||
|
||||
! #define va_start(AP, LASTARG) (AP = ((char *) __builtin_next_arg ()))
|
||||
|
||||
void va_end(va_list); /* Defined in libgcc.a */
|
||||
--- 162,166 ----
|
||||
(((sizeof(TYPE) + sizeof(int) - 1) / sizeof(int)) * sizeof(int))
|
||||
|
||||
! #define va_start(AP, LASTARG) (AP = ((char *) __builtin_next_arg (LASTARG)))
|
||||
|
||||
void va_end(va_list); /* Defined in libgcc.a */
|
@ -1,82 +0,0 @@
|
||||
/* @(#)acconfig.h 8.18 (Berkeley) 7/2/96 */
|
||||
|
||||
/* Define to `int' if <sys/types.h> doesn't define. */
|
||||
#undef ssize_t
|
||||
|
||||
/* Define if you want a debugging version. */
|
||||
#undef DEBUG
|
||||
|
||||
/* Define if you have a System V-style (broken) gettimeofday. */
|
||||
#undef HAVE_BROKEN_GETTIMEOFDAY
|
||||
|
||||
/* Define if you have a Ultrix-style (broken) vdisable. */
|
||||
#undef HAVE_BROKEN_VDISABLE
|
||||
|
||||
/* Define if you have a BSD version of curses. */
|
||||
#undef HAVE_BSD_CURSES
|
||||
|
||||
/* Define if you have the curses(3) addnstr function. */
|
||||
#undef HAVE_CURSES_ADDNSTR
|
||||
|
||||
/* Define if you have the curses(3) beep function. */
|
||||
#undef HAVE_CURSES_BEEP
|
||||
|
||||
/* Define if you have the curses(3) flash function. */
|
||||
#undef HAVE_CURSES_FLASH
|
||||
|
||||
/* Define if you have the curses(3) idlok function. */
|
||||
#undef HAVE_CURSES_IDLOK
|
||||
|
||||
/* Define if you have the curses(3) keypad function. */
|
||||
#undef HAVE_CURSES_KEYPAD
|
||||
|
||||
/* Define if you have the curses(3) newterm function. */
|
||||
#undef HAVE_CURSES_NEWTERM
|
||||
|
||||
/* Define if you have the curses(3) setupterm function. */
|
||||
#undef HAVE_CURSES_SETUPTERM
|
||||
|
||||
/* Define if you have the curses(3) tigetstr/tigetnum functions. */
|
||||
#undef HAVE_CURSES_TIGETSTR
|
||||
|
||||
/* Define if you have the DB __hash_open call in the C library. */
|
||||
#undef HAVE_DB_HASH_OPEN
|
||||
|
||||
/* Define if you have the chsize(2) system call. */
|
||||
#undef HAVE_FTRUNCATE_CHSIZE
|
||||
|
||||
/* Define if you have the ftruncate(2) system call. */
|
||||
#undef HAVE_FTRUNCATE_FTRUNCATE
|
||||
|
||||
/* Define if you have fcntl(2) style locking. */
|
||||
#undef HAVE_LOCK_FCNTL
|
||||
|
||||
/* Define if you have flock(2) style locking. */
|
||||
#undef HAVE_LOCK_FLOCK
|
||||
|
||||
/* Define if you want to compile in the Perl interpreter. */
|
||||
#undef HAVE_PERL_INTERP
|
||||
|
||||
/* Define if your Perl is at least 5.003_01. */
|
||||
#undef HAVE_PERL_5_003_01
|
||||
|
||||
/* Define if you have the Berkeley style revoke(2) system call. */
|
||||
#undef HAVE_REVOKE
|
||||
|
||||
/* Define if you have the Berkeley style strsep(3) function. */
|
||||
#undef HAVE_STRSEP
|
||||
|
||||
/* Define if you have <sys/mman.h> */
|
||||
#undef HAVE_SYS_MMAN_H
|
||||
|
||||
/* Define if you have <sys/select.h> */
|
||||
#undef HAVE_SYS_SELECT_H
|
||||
|
||||
/* Define if you have the System V style pty calls. */
|
||||
#undef HAVE_SYS5_PTY
|
||||
|
||||
/* Define if you want to compile in the Tcl interpreter. */
|
||||
#undef HAVE_TCL_INTERP
|
||||
|
||||
/* Define if your sprintf returns a pointer, not a length. */
|
||||
#undef SPRINTF_RET_CHARPNT
|
17
contrib/nvi/build/aclocal.m4
vendored
17
contrib/nvi/build/aclocal.m4
vendored
@ -1,17 +0,0 @@
|
||||
AC_DEFUN(AM_SANITY_CHECK_CC,
|
||||
[dnl Derived from macros from Bruno Haible and from Cygnus.
|
||||
AC_MSG_CHECKING([whether the compiler ($CC $CFLAGS $LDFLAGS) actually works])
|
||||
AC_LANG_SAVE
|
||||
AC_LANG_C
|
||||
AC_TRY_RUN([main() { exit(0); }],
|
||||
am_cv_prog_cc_works=yes, am_cv_prog_cc_works=no,
|
||||
dnl When crosscompiling, just try linking.
|
||||
AC_TRY_LINK([], [], am_cv_prog_cc_works=yes,
|
||||
am_cv_prog_cc_works=no))
|
||||
AC_LANG_RESTORE
|
||||
case "$am_cv_prog_cc_works" in
|
||||
*no) AC_MSG_ERROR([Installation or configuration problem: C compiler cannot create executables.]) ;;
|
||||
*yes) ;;
|
||||
esac
|
||||
AC_MSG_RESULT(yes)
|
||||
])dnl
|
571
contrib/nvi/build/config.guess
vendored
571
contrib/nvi/build/config.guess
vendored
@ -1,571 +0,0 @@
|
||||
#! /bin/sh
|
||||
# Attempt to guess a canonical system name.
|
||||
# Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file 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.
|
||||
#
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# Written by Per Bothner <bothner@cygnus.com>.
|
||||
# The master version of this file is at the FSF in /home/gd/gnu/lib.
|
||||
#
|
||||
# This script attempts to guess a canonical system name similar to
|
||||
# config.sub. If it succeeds, it prints the system name on stdout, and
|
||||
# exits with 0. Otherwise, it exits with 1.
|
||||
#
|
||||
# The plan is that this can be called by configure scripts if you
|
||||
# don't specify an explicit system type (host/target name).
|
||||
#
|
||||
# Only a few systems have been added to this list; please add others
|
||||
# (but try to keep the structure clean).
|
||||
#
|
||||
|
||||
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
|
||||
# (ghazi@noc.rutgers.edu 8/24/94.)
|
||||
if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
|
||||
PATH=$PATH:/.attbin ; export PATH
|
||||
fi
|
||||
|
||||
UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
|
||||
UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
|
||||
UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
|
||||
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
|
||||
|
||||
trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15
|
||||
|
||||
# Note: order is significant - the case branches are not exclusive.
|
||||
|
||||
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||
alpha:OSF1:V*:*)
|
||||
# After 1.2, OSF1 uses "V1.3" for uname -r.
|
||||
echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^V//'`
|
||||
exit 0 ;;
|
||||
alpha:OSF1:*:*)
|
||||
# 1.2 uses "1.2" for uname -r.
|
||||
echo alpha-dec-osf${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
21064:Windows_NT:50:3)
|
||||
echo alpha-dec-winnt3.5
|
||||
exit 0 ;;
|
||||
amiga:NetBSD:*:*)
|
||||
echo m68k-cbm-netbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
|
||||
echo arm-acorn-riscix${UNAME_RELEASE}
|
||||
exit 0;;
|
||||
Pyramid*:OSx*:*:*)
|
||||
if test "`(/bin/universe) 2>/dev/null`" = att ; then
|
||||
echo pyramid-pyramid-sysv3
|
||||
else
|
||||
echo pyramid-pyramid-bsd
|
||||
fi
|
||||
exit 0 ;;
|
||||
sun4*:SunOS:5.*:*)
|
||||
echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||
exit 0 ;;
|
||||
i86pc:SunOS:5.*:*)
|
||||
echo i386-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||
exit 0 ;;
|
||||
sun4*:SunOS:6*:*)
|
||||
# According to config.sub, this is the proper way to canonicalize
|
||||
# SunOS6. Hard to guess exactly what SunOS6 will be like, but
|
||||
# it's likely to be more like Solaris than SunOS4.
|
||||
echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||
exit 0 ;;
|
||||
sun4*:SunOS:*:*)
|
||||
case "`/usr/bin/arch -k`" in
|
||||
Series*|S4*)
|
||||
UNAME_RELEASE=`uname -v`
|
||||
;;
|
||||
esac
|
||||
# Japanese Language versions have a version number like `4.1.3-JL'.
|
||||
echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
|
||||
exit 0 ;;
|
||||
sun3*:SunOS:*:*)
|
||||
echo m68k-sun-sunos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
atari*:NetBSD:*:*)
|
||||
echo m68k-atari-netbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
sun3*:NetBSD:*:*)
|
||||
echo m68k-sun-netbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
mac68k:NetBSD:*:*)
|
||||
echo m68k-apple-netbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
RISC*:ULTRIX:*:*)
|
||||
echo mips-dec-ultrix${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
VAX*:ULTRIX*:*:*)
|
||||
echo vax-dec-ultrix${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
mips:*:4*:UMIPS)
|
||||
echo mips-mips-riscos4sysv
|
||||
exit 0 ;;
|
||||
mips:*:5*:RISCos)
|
||||
echo mips-mips-riscos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
m88k:CX/UX:7*:*)
|
||||
echo m88k-harris-cxux7
|
||||
exit 0 ;;
|
||||
m88k:*:4*:R4*)
|
||||
echo m88k-motorola-sysv4
|
||||
exit 0 ;;
|
||||
m88k:*:3*:R3*)
|
||||
echo m88k-motorola-sysv3
|
||||
exit 0 ;;
|
||||
AViiON:dgux:*:*)
|
||||
if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \
|
||||
-o ${TARGET_BINARY_INTERFACE}x = x ] ; then
|
||||
echo m88k-dg-dgux${UNAME_RELEASE}
|
||||
else
|
||||
echo m88k-dg-dguxbcs${UNAME_RELEASE}
|
||||
fi
|
||||
exit 0 ;;
|
||||
M88*:DolphinOS:*:*) # DolphinOS (SVR3)
|
||||
echo m88k-dolphin-sysv3
|
||||
exit 0 ;;
|
||||
M88*:*:R3*:*)
|
||||
# Delta 88k system running SVR3
|
||||
echo m88k-motorola-sysv3
|
||||
exit 0 ;;
|
||||
XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
|
||||
echo m88k-tektronix-sysv3
|
||||
exit 0 ;;
|
||||
Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
|
||||
echo m68k-tektronix-bsd
|
||||
exit 0 ;;
|
||||
*:IRIX*:*:*)
|
||||
echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
|
||||
exit 0 ;;
|
||||
????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
|
||||
echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
|
||||
exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
|
||||
i?86:AIX:*:*)
|
||||
echo i386-ibm-aix
|
||||
exit 0 ;;
|
||||
*:AIX:2:3)
|
||||
if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
|
||||
sed 's/^ //' << EOF >dummy.c
|
||||
#include <sys/systemcfg.h>
|
||||
|
||||
main()
|
||||
{
|
||||
if (!__power_pc())
|
||||
exit(1);
|
||||
puts("powerpc-ibm-aix3.2.5");
|
||||
exit(0);
|
||||
}
|
||||
EOF
|
||||
${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
|
||||
rm -f dummy.c dummy
|
||||
echo rs6000-ibm-aix3.2.5
|
||||
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
|
||||
echo rs6000-ibm-aix3.2.4
|
||||
else
|
||||
echo rs6000-ibm-aix3.2
|
||||
fi
|
||||
exit 0 ;;
|
||||
*:AIX:*:4)
|
||||
if /usr/sbin/lsattr -EHl proc0 | grep POWER >/dev/null 2>&1; then
|
||||
IBM_ARCH=rs6000
|
||||
else
|
||||
IBM_ARCH=powerpc
|
||||
fi
|
||||
if [ -x /usr/bin/oslevel ] ; then
|
||||
IBM_REV=`/usr/bin/oslevel`
|
||||
else
|
||||
IBM_REV=4.${UNAME_RELEASE}
|
||||
fi
|
||||
echo ${IBM_ARCH}-ibm-aix${IBM_REV}
|
||||
exit 0 ;;
|
||||
*:AIX:*:*)
|
||||
echo rs6000-ibm-aix
|
||||
exit 0 ;;
|
||||
ibmrt:4.4BSD:*|romp-ibm:BSD:*)
|
||||
echo romp-ibm-bsd4.4
|
||||
exit 0 ;;
|
||||
ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and
|
||||
echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
|
||||
exit 0 ;; # report: romp-ibm BSD 4.3
|
||||
*:BOSX:*:*)
|
||||
echo rs6000-bull-bosx
|
||||
exit 0 ;;
|
||||
DPX/2?00:B.O.S.:*:*)
|
||||
echo m68k-bull-sysv3
|
||||
exit 0 ;;
|
||||
9000/[34]??:4.3bsd:1.*:*)
|
||||
echo m68k-hp-bsd
|
||||
exit 0 ;;
|
||||
hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
|
||||
echo m68k-hp-bsd4.4
|
||||
exit 0 ;;
|
||||
9000/[3478]??:HP-UX:*:*)
|
||||
case "${UNAME_MACHINE}" in
|
||||
9000/31? ) HP_ARCH=m68000 ;;
|
||||
9000/[34]?? ) HP_ARCH=m68k ;;
|
||||
9000/7?? | 9000/8?[79] ) HP_ARCH=hppa1.1 ;;
|
||||
9000/8?? ) HP_ARCH=hppa1.0 ;;
|
||||
esac
|
||||
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
|
||||
echo ${HP_ARCH}-hp-hpux${HPUX_REV}
|
||||
exit 0 ;;
|
||||
3050*:HI-UX:*:*)
|
||||
sed 's/^ //' << EOF >dummy.c
|
||||
#include <unistd.h>
|
||||
int
|
||||
main ()
|
||||
{
|
||||
long cpu = sysconf (_SC_CPU_VERSION);
|
||||
/* The order matters, because CPU_IS_HP_MC68K erroneously returns
|
||||
true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
|
||||
results, however. */
|
||||
if (CPU_IS_PA_RISC (cpu))
|
||||
{
|
||||
switch (cpu)
|
||||
{
|
||||
case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
|
||||
case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
|
||||
case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
|
||||
default: puts ("hppa-hitachi-hiuxwe2"); break;
|
||||
}
|
||||
}
|
||||
else if (CPU_IS_HP_MC68K (cpu))
|
||||
puts ("m68k-hitachi-hiuxwe2");
|
||||
else puts ("unknown-hitachi-hiuxwe2");
|
||||
exit (0);
|
||||
}
|
||||
EOF
|
||||
${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
|
||||
rm -f dummy.c dummy
|
||||
echo unknown-hitachi-hiuxwe2
|
||||
exit 0 ;;
|
||||
9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
|
||||
echo hppa1.1-hp-bsd
|
||||
exit 0 ;;
|
||||
9000/8??:4.3bsd:*:*)
|
||||
echo hppa1.0-hp-bsd
|
||||
exit 0 ;;
|
||||
hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
|
||||
echo hppa1.1-hp-osf
|
||||
exit 0 ;;
|
||||
hp8??:OSF1:*:*)
|
||||
echo hppa1.0-hp-osf
|
||||
exit 0 ;;
|
||||
parisc*:Lites*:*:*)
|
||||
echo hppa1.1-hp-lites
|
||||
exit 0 ;;
|
||||
C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
|
||||
echo c1-convex-bsd
|
||||
exit 0 ;;
|
||||
C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
|
||||
if getsysinfo -f scalar_acc
|
||||
then echo c32-convex-bsd
|
||||
else echo c2-convex-bsd
|
||||
fi
|
||||
exit 0 ;;
|
||||
C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
|
||||
echo c34-convex-bsd
|
||||
exit 0 ;;
|
||||
C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
|
||||
echo c38-convex-bsd
|
||||
exit 0 ;;
|
||||
C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
|
||||
echo c4-convex-bsd
|
||||
exit 0 ;;
|
||||
CRAY*X-MP:*:*:*)
|
||||
echo xmp-cray-unicos
|
||||
exit 0 ;;
|
||||
CRAY*Y-MP:*:*:*)
|
||||
echo ymp-cray-unicos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
CRAY*C90:*:*:*)
|
||||
echo c90-cray-unicos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
CRAY-2:*:*:*)
|
||||
echo cray2-cray-unicos
|
||||
exit 0 ;;
|
||||
hp3[0-9][05]:NetBSD:*:*)
|
||||
echo m68k-hp-netbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
i?86:BSD/386:*:* | *:BSD/OS:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
*:FreeBSD:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
|
||||
exit 0 ;;
|
||||
*:NetBSD:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
||||
exit 0 ;;
|
||||
*:GNU:*:*)
|
||||
echo `echo ${UNAME_MACHINE}|sed -e 's,/.*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
|
||||
exit 0 ;;
|
||||
*:Linux:*:*)
|
||||
# The BFD linker knows what the default object file format is, so
|
||||
# first see if it will tell us.
|
||||
ld_help_string=`ld --help 2>&1`
|
||||
if echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: elf_i?86"; then
|
||||
echo "${UNAME_MACHINE}-unknown-linux" ; exit 0
|
||||
elif echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: i?86linux"; then
|
||||
echo "${UNAME_MACHINE}-unknown-linuxaout" ; exit 0
|
||||
elif echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: i?86coff"; then
|
||||
echo "${UNAME_MACHINE}-unknown-linuxcoff" ; exit 0
|
||||
elif test "${UNAME_MACHINE}" = "alpha" ; then
|
||||
echo alpha-unknown-linux ; exit 0
|
||||
else
|
||||
# Either a pre-BFD a.out linker (linuxoldld) or one that does not give us
|
||||
# useful --help. Gcc wants to distinguish between linuxoldld and linuxaout.
|
||||
test ! -d /usr/lib/ldscripts/. \
|
||||
&& echo "${UNAME_MACHINE}-unknown-linuxoldld" && exit 0
|
||||
# Determine whether the default compiler is a.out or elf
|
||||
cat >dummy.c <<EOF
|
||||
main(argc, argv)
|
||||
int argc;
|
||||
char *argv[];
|
||||
{
|
||||
#ifdef __ELF__
|
||||
printf ("%s-unknown-linux\n", argv[1]);
|
||||
#else
|
||||
printf ("%s-unknown-linuxaout\n", argv[1]);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
EOF
|
||||
${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0
|
||||
rm -f dummy.c dummy
|
||||
fi ;;
|
||||
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions
|
||||
# are messed up and put the nodename in both sysname and nodename.
|
||||
i?86:DYNIX/ptx:4*:*)
|
||||
echo i386-sequent-sysv4
|
||||
exit 0 ;;
|
||||
i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
|
||||
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
|
||||
echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
|
||||
else
|
||||
echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}
|
||||
fi
|
||||
exit 0 ;;
|
||||
i?86:*:3.2:*)
|
||||
if test -f /usr/options/cb.name; then
|
||||
UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
|
||||
echo ${UNAME_MACHINE}-unknown-isc$UNAME_REL
|
||||
elif /bin/uname -X 2>/dev/null >/dev/null ; then
|
||||
UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
|
||||
(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
|
||||
echo ${UNAME_MACHINE}-unknown-sco$UNAME_REL
|
||||
else
|
||||
echo ${UNAME_MACHINE}-unknown-sysv32
|
||||
fi
|
||||
exit 0 ;;
|
||||
Intel:Mach:3*:*)
|
||||
echo i386-unknown-mach3
|
||||
exit 0 ;;
|
||||
paragon:*:*:*)
|
||||
echo i860-intel-osf1
|
||||
exit 0 ;;
|
||||
i860:*:4.*:*) # i860-SVR4
|
||||
if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
|
||||
echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
|
||||
else # Add other i860-SVR4 vendors below as they are discovered.
|
||||
echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
|
||||
fi
|
||||
exit 0 ;;
|
||||
mini*:CTIX:SYS*5:*)
|
||||
# "miniframe"
|
||||
echo m68010-convergent-sysv
|
||||
exit 0 ;;
|
||||
M680?0:*:R3V[567]*:*)
|
||||
test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
|
||||
3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0)
|
||||
uname -p 2>/dev/null | grep 86 >/dev/null \
|
||||
&& echo i486-ncr-sysv4.3 && exit 0 ;;
|
||||
3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
|
||||
uname -p 2>/dev/null | grep 86 >/dev/null \
|
||||
&& echo i486-ncr-sysv4 && exit 0 ;;
|
||||
m68*:LynxOS:2.*:*)
|
||||
echo m68k-unknown-lynxos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
mc68*:UNIX_System_V:4.*:*)
|
||||
echo m68k-atari-sysv4
|
||||
exit 0 ;;
|
||||
i?86:LynxOS:2.*:*)
|
||||
echo i386-unknown-lynxos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
TSUNAMI:LynxOS:2.*:* | uSPARC2:LynxOS:2.*:*)
|
||||
echo sparc-unknown-lynxos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
PowerPC:LynxOS:2.*:*)
|
||||
echo powerpc-unknown-lynxos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
RM*:SINIX-*:*:*)
|
||||
echo mips-sni-sysv4
|
||||
exit 0 ;;
|
||||
*FTX*)
|
||||
echo i860-stratus-sysv4
|
||||
exit 0 ;;
|
||||
*:SINIX-*:*:*)
|
||||
if uname -p 2>/dev/null >/dev/null ; then
|
||||
UNAME_MACHINE=`(uname -p) 2>/dev/null`
|
||||
echo ${UNAME_MACHINE}-sni-sysv4
|
||||
else
|
||||
echo ns32k-sni-sysv
|
||||
fi
|
||||
exit 0 ;;
|
||||
mc68*:A/UX:*:*)
|
||||
echo m68k-apple-aux${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
esac
|
||||
|
||||
#echo '(No uname command or uname output not recognized.)' 1>&2
|
||||
#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
|
||||
|
||||
cat >dummy.c <<EOF
|
||||
#ifdef _SEQUENT_
|
||||
# include <sys/types.h>
|
||||
# include <sys/utsname.h>
|
||||
#endif
|
||||
main ()
|
||||
{
|
||||
#if defined (sony)
|
||||
#if defined (MIPSEB)
|
||||
/* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
|
||||
I don't know.... */
|
||||
printf ("mips-sony-bsd\n"); exit (0);
|
||||
#else
|
||||
#include <sys/param.h>
|
||||
printf ("m68k-sony-newsos%s\n",
|
||||
#ifdef NEWSOS4
|
||||
"4"
|
||||
#else
|
||||
""
|
||||
#endif
|
||||
); exit (0);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined (__arm) && defined (__acorn) && defined (__unix)
|
||||
printf ("arm-acorn-riscix"); exit (0);
|
||||
#endif
|
||||
|
||||
#if defined (hp300) && !defined (hpux)
|
||||
printf ("m68k-hp-bsd\n"); exit (0);
|
||||
#endif
|
||||
|
||||
#if defined (NeXT)
|
||||
#if !defined (__ARCHITECTURE__)
|
||||
#define __ARCHITECTURE__ "m68k"
|
||||
#endif
|
||||
int version;
|
||||
version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
|
||||
printf ("%s-next-nextstep%s\n", __ARCHITECTURE__, version==2 ? "2" : "3");
|
||||
exit (0);
|
||||
#endif
|
||||
|
||||
#if defined (MULTIMAX) || defined (n16)
|
||||
#if defined (UMAXV)
|
||||
printf ("ns32k-encore-sysv\n"); exit (0);
|
||||
#else
|
||||
#if defined (CMU)
|
||||
printf ("ns32k-encore-mach\n"); exit (0);
|
||||
#else
|
||||
printf ("ns32k-encore-bsd\n"); exit (0);
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined (__386BSD__)
|
||||
printf ("i386-unknown-bsd\n"); exit (0);
|
||||
#endif
|
||||
|
||||
#if defined (sequent)
|
||||
#if defined (i386)
|
||||
printf ("i386-sequent-dynix\n"); exit (0);
|
||||
#endif
|
||||
#if defined (ns32000)
|
||||
printf ("ns32k-sequent-dynix\n"); exit (0);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined (_SEQUENT_)
|
||||
struct utsname un;
|
||||
|
||||
uname(&un);
|
||||
|
||||
if (strncmp(un.version, "V2", 2) == 0) {
|
||||
printf ("i386-sequent-ptx2\n"); exit (0);
|
||||
}
|
||||
if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
|
||||
printf ("i386-sequent-ptx1\n"); exit (0);
|
||||
}
|
||||
printf ("i386-sequent-ptx\n"); exit (0);
|
||||
|
||||
#endif
|
||||
|
||||
#if defined (vax)
|
||||
#if !defined (ultrix)
|
||||
printf ("vax-dec-bsd\n"); exit (0);
|
||||
#else
|
||||
printf ("vax-dec-ultrix\n"); exit (0);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined (alliant) && defined (i860)
|
||||
printf ("i860-alliant-bsd\n"); exit (0);
|
||||
#endif
|
||||
|
||||
exit (1);
|
||||
}
|
||||
EOF
|
||||
|
||||
${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy && rm dummy.c dummy && exit 0
|
||||
rm -f dummy.c dummy
|
||||
|
||||
# Apollos put the system type in the environment.
|
||||
|
||||
test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
|
||||
|
||||
# Convex versions that predate uname can use getsysinfo(1)
|
||||
|
||||
if [ -x /usr/convex/getsysinfo ]
|
||||
then
|
||||
case `getsysinfo -f cpu_type` in
|
||||
c1*)
|
||||
echo c1-convex-bsd
|
||||
exit 0 ;;
|
||||
c2*)
|
||||
if getsysinfo -f scalar_acc
|
||||
then echo c32-convex-bsd
|
||||
else echo c2-convex-bsd
|
||||
fi
|
||||
exit 0 ;;
|
||||
c34*)
|
||||
echo c34-convex-bsd
|
||||
exit 0 ;;
|
||||
c38*)
|
||||
echo c38-convex-bsd
|
||||
exit 0 ;;
|
||||
c4*)
|
||||
echo c4-convex-bsd
|
||||
exit 0 ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
#echo '(Unable to guess system type)' 1>&2
|
||||
|
||||
exit 1
|
@ -1,179 +0,0 @@
|
||||
/* config.h.in. Generated automatically from configure.in by autoheader. */
|
||||
|
||||
/* Define to empty if the keyword does not work. */
|
||||
#undef const
|
||||
|
||||
/* Define if you have a working `mmap' system call. */
|
||||
#undef HAVE_MMAP
|
||||
|
||||
/* Define if your struct stat has st_blksize. */
|
||||
#undef HAVE_ST_BLKSIZE
|
||||
|
||||
/* Define if you have <vfork.h>. */
|
||||
#undef HAVE_VFORK_H
|
||||
|
||||
/* Define to `int' if <sys/types.h> doesn't define. */
|
||||
#undef mode_t
|
||||
|
||||
/* Define to `long' if <sys/types.h> doesn't define. */
|
||||
#undef off_t
|
||||
|
||||
/* Define to `int' if <sys/types.h> doesn't define. */
|
||||
#undef pid_t
|
||||
|
||||
/* Define to `unsigned' if <sys/types.h> doesn't define. */
|
||||
#undef size_t
|
||||
|
||||
/* Define if you have the ANSI C header files. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
/* Define if your <sys/time.h> declares struct tm. */
|
||||
#undef TM_IN_SYS_TIME
|
||||
|
||||
/* Define vfork as fork if vfork does not work. */
|
||||
#undef vfork
|
||||
|
||||
/* Define if your processor stores words with the most significant
|
||||
byte first (like Motorola and SPARC, unlike Intel and VAX). */
|
||||
#undef WORDS_BIGENDIAN
|
||||
|
||||
/* Define to `int' if <sys/types.h> doesn't define. */
|
||||
#undef ssize_t
|
||||
|
||||
/* Define if you want a debugging version. */
|
||||
#undef DEBUG
|
||||
|
||||
/* Define if you have a System V-style (broken) gettimeofday. */
|
||||
#undef HAVE_BROKEN_GETTIMEOFDAY
|
||||
|
||||
/* Define if you have a Ultrix-style (broken) vdisable. */
|
||||
#undef HAVE_BROKEN_VDISABLE
|
||||
|
||||
/* Define if you have a BSD version of curses. */
|
||||
#undef HAVE_BSD_CURSES
|
||||
|
||||
/* Define if you have the curses(3) addnstr function. */
|
||||
#undef HAVE_CURSES_ADDNSTR
|
||||
|
||||
/* Define if you have the curses(3) beep function. */
|
||||
#undef HAVE_CURSES_BEEP
|
||||
|
||||
/* Define if you have the curses(3) flash function. */
|
||||
#undef HAVE_CURSES_FLASH
|
||||
|
||||
/* Define if you have the curses(3) idlok function. */
|
||||
#undef HAVE_CURSES_IDLOK
|
||||
|
||||
/* Define if you have the curses(3) keypad function. */
|
||||
#undef HAVE_CURSES_KEYPAD
|
||||
|
||||
/* Define if you have the curses(3) newterm function. */
|
||||
#undef HAVE_CURSES_NEWTERM
|
||||
|
||||
/* Define if you have the curses(3) setupterm function. */
|
||||
#undef HAVE_CURSES_SETUPTERM
|
||||
|
||||
/* Define if you have the curses(3) tigetstr/tigetnum functions. */
|
||||
#undef HAVE_CURSES_TIGETSTR
|
||||
|
||||
/* Define if you have the chsize(2) system call. */
|
||||
#undef HAVE_FTRUNCATE_CHSIZE
|
||||
|
||||
/* Define if you have the ftruncate(2) system call. */
|
||||
#undef HAVE_FTRUNCATE_FTRUNCATE
|
||||
|
||||
/* Define if you have fcntl(2) style locking. */
|
||||
#undef HAVE_LOCK_FCNTL
|
||||
|
||||
/* Define if you have flock(2) style locking. */
|
||||
#undef HAVE_LOCK_FLOCK
|
||||
|
||||
/* Define if you want to compile in the Perl interpreter. */
|
||||
#undef HAVE_PERL_INTERP
|
||||
|
||||
/* Define if your Perl is at least 5.003_01. */
|
||||
#undef HAVE_PERL_5_003_01
|
||||
|
||||
/* Define if you have the Berkeley style revoke(2) system call. */
|
||||
#undef HAVE_REVOKE
|
||||
|
||||
/* Define if you have <sys/mman.h> */
|
||||
#undef HAVE_SYS_MMAN_H
|
||||
|
||||
/* Define if you have <sys/select.h> */
|
||||
#undef HAVE_SYS_SELECT_H
|
||||
|
||||
/* Define if you have the System V style pty calls. */
|
||||
#undef HAVE_SYS5_PTY
|
||||
|
||||
/* Define if you want to compile in the Tcl interpreter. */
|
||||
#undef HAVE_TCL_INTERP
|
||||
|
||||
/* Define if your sprintf returns a pointer, not a length. */
|
||||
#undef SPRINTF_RET_CHARPNT
|
||||
|
||||
/* Define if you have the bsearch function. */
|
||||
#undef HAVE_BSEARCH
|
||||
|
||||
/* Define if you have the gethostname function. */
|
||||
#undef HAVE_GETHOSTNAME
|
||||
|
||||
/* Define if you have the getopt function. */
|
||||
#undef HAVE_GETOPT
|
||||
|
||||
/* Define if you have the getpagesize function. */
|
||||
#undef HAVE_GETPAGESIZE
|
||||
|
||||
/* Define if you have the memchr function. */
|
||||
#undef HAVE_MEMCHR
|
||||
|
||||
/* Define if you have the memcpy function. */
|
||||
#undef HAVE_MEMCPY
|
||||
|
||||
/* Define if you have the memmove function. */
|
||||
#undef HAVE_MEMMOVE
|
||||
|
||||
/* Define if you have the memset function. */
|
||||
#undef HAVE_MEMSET
|
||||
|
||||
/* Define if you have the mkstemp function. */
|
||||
#undef HAVE_MKSTEMP
|
||||
|
||||
/* Define if you have the mmap function. */
|
||||
#undef HAVE_MMAP
|
||||
|
||||
/* Define if you have the select function. */
|
||||
#undef HAVE_SELECT
|
||||
|
||||
/* Define if you have the setenv function. */
|
||||
#undef HAVE_SETENV
|
||||
|
||||
/* Define if you have the snprintf function. */
|
||||
#undef HAVE_SNPRINTF
|
||||
|
||||
/* Define if you have the strdup function. */
|
||||
#undef HAVE_STRDUP
|
||||
|
||||
/* Define if you have the strerror function. */
|
||||
#undef HAVE_STRERROR
|
||||
|
||||
/* Define if you have the strpbrk function. */
|
||||
#undef HAVE_STRPBRK
|
||||
|
||||
/* Define if you have the strsep function. */
|
||||
#undef HAVE_STRSEP
|
||||
|
||||
/* Define if you have the strtol function. */
|
||||
#undef HAVE_STRTOL
|
||||
|
||||
/* Define if you have the strtoul function. */
|
||||
#undef HAVE_STRTOUL
|
||||
|
||||
/* Define if you have the unsetenv function. */
|
||||
#undef HAVE_UNSETENV
|
||||
|
||||
/* Define if you have the valloc function. */
|
||||
#undef HAVE_VALLOC
|
||||
|
||||
/* Define if you have the vsnprintf function. */
|
||||
#undef HAVE_VSNPRINTF
|
872
contrib/nvi/build/config.sub
vendored
872
contrib/nvi/build/config.sub
vendored
@ -1,872 +0,0 @@
|
||||
#! /bin/sh
|
||||
# Configuration validation subroutine script, version 1.1.
|
||||
# Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
|
||||
# This file is (in principle) common to ALL GNU software.
|
||||
# The presence of a machine in this file suggests that SOME GNU software
|
||||
# can handle that machine. It does not imply ALL GNU software can.
|
||||
#
|
||||
# This file 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.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# Configuration subroutine to validate and canonicalize a configuration type.
|
||||
# Supply the specified configuration type as an argument.
|
||||
# If it is invalid, we print an error message on stderr and exit with code 1.
|
||||
# Otherwise, we print the canonical config type on stdout and succeed.
|
||||
|
||||
# This file is supposed to be the same for all GNU packages
|
||||
# and recognize all the CPU types, system types and aliases
|
||||
# that are meaningful with *any* GNU software.
|
||||
# Each package is responsible for reporting which valid configurations
|
||||
# it does not support. The user should be able to distinguish
|
||||
# a failure to support a valid configuration from a meaningless
|
||||
# configuration.
|
||||
|
||||
# The goal of this file is to map all the various variations of a given
|
||||
# machine specification into a single specification in the form:
|
||||
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
|
||||
# It is wrong to echo any other type of specification.
|
||||
|
||||
if [ x$1 = x ]
|
||||
then
|
||||
echo Configuration name missing. 1>&2
|
||||
echo "Usage: $0 CPU-MFR-OPSYS" 1>&2
|
||||
echo "or $0 ALIAS" 1>&2
|
||||
echo where ALIAS is a recognized configuration type. 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# First pass through any local machine types.
|
||||
case $1 in
|
||||
*local*)
|
||||
echo $1
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
|
||||
# Separate what the user gave into CPU-COMPANY and OS (if any).
|
||||
basic_machine=`echo $1 | sed 's/-[^-]*$//'`
|
||||
if [ $basic_machine != $1 ]
|
||||
then os=`echo $1 | sed 's/.*-/-/'`
|
||||
else os=; fi
|
||||
|
||||
### Let's recognize common machines as not being operating systems so
|
||||
### that things like config.sub decstation-3100 work. We also
|
||||
### recognize some manufacturers as not being operating systems, so we
|
||||
### can provide default operating systems below.
|
||||
case $os in
|
||||
-sun*os*)
|
||||
# Prevent following clause from handling this invalid input.
|
||||
;;
|
||||
-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
|
||||
-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
|
||||
-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
|
||||
-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
|
||||
-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
|
||||
-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp )
|
||||
os=
|
||||
basic_machine=$1
|
||||
;;
|
||||
-hiux*)
|
||||
os=-hiuxwe2
|
||||
;;
|
||||
-sco4)
|
||||
os=-sco3.2v4
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
|
||||
;;
|
||||
-sco3.2.[4-9]*)
|
||||
os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
|
||||
;;
|
||||
-sco3.2v[4-9]*)
|
||||
# Don't forget version if it is 3.2v4 or newer.
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
|
||||
;;
|
||||
-sco*)
|
||||
os=-sco3.2v2
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
|
||||
;;
|
||||
-isc)
|
||||
os=-isc2.2
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
|
||||
;;
|
||||
-clix*)
|
||||
basic_machine=clipper-intergraph
|
||||
;;
|
||||
-isc*)
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
|
||||
;;
|
||||
-lynx*)
|
||||
os=-lynxos
|
||||
;;
|
||||
-ptx*)
|
||||
basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
|
||||
;;
|
||||
-windowsnt*)
|
||||
os=`echo $os | sed -e 's/windowsnt/winnt/'`
|
||||
;;
|
||||
esac
|
||||
|
||||
# Decode aliases for certain CPU-COMPANY combinations.
|
||||
case $basic_machine in
|
||||
# Recognize the basic CPU types without company name.
|
||||
# Some are omitted here because they have special meanings below.
|
||||
tahoe | i[345]86 | i860 | m68k | m68000 | m88k | ns32k | arm \
|
||||
| arme[lb] | pyramid \
|
||||
| tron | a29k | 580 | i960 | h8300 | hppa1.0 | hppa1.1 \
|
||||
| alpha | we32k | ns16k | clipper | sparclite | i370 | sh \
|
||||
| powerpc | powerpcle | sparc64 | 1750a | dsp16xx | mips64 | mipsel \
|
||||
| pdp11 | mips64el | mips64orion | mips64orionel \
|
||||
| sparc)
|
||||
basic_machine=$basic_machine-unknown
|
||||
;;
|
||||
# Object if more than one company name word.
|
||||
*-*-*)
|
||||
echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
|
||||
exit 1
|
||||
;;
|
||||
# Recognize the basic CPU types with company name.
|
||||
vax-* | tahoe-* | i[345]86-* | i860-* | m68k-* | m68000-* | m88k-* \
|
||||
| sparc-* | ns32k-* | fx80-* | arm-* | c[123]* \
|
||||
| mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* | power-* \
|
||||
| none-* | 580-* | cray2-* | h8300-* | i960-* | xmp-* | ymp-* \
|
||||
| hppa1.0-* | hppa1.1-* | alpha-* | we32k-* | cydra-* | ns16k-* \
|
||||
| pn-* | np1-* | xps100-* | clipper-* | orion-* | sparclite-* \
|
||||
| pdp11-* | sh-* | powerpc-* | powerpcle-* | sparc64-* | mips64-* | mipsel-* \
|
||||
| mips64el-* | mips64orion-* | mips64orionel-*)
|
||||
;;
|
||||
# Recognize the various machine names and aliases which stand
|
||||
# for a CPU type and a company and sometimes even an OS.
|
||||
3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
|
||||
basic_machine=m68000-att
|
||||
;;
|
||||
3b*)
|
||||
basic_machine=we32k-att
|
||||
;;
|
||||
alliant | fx80)
|
||||
basic_machine=fx80-alliant
|
||||
;;
|
||||
altos | altos3068)
|
||||
basic_machine=m68k-altos
|
||||
;;
|
||||
am29k)
|
||||
basic_machine=a29k-none
|
||||
os=-bsd
|
||||
;;
|
||||
amdahl)
|
||||
basic_machine=580-amdahl
|
||||
os=-sysv
|
||||
;;
|
||||
amiga | amiga-*)
|
||||
basic_machine=m68k-cbm
|
||||
;;
|
||||
amigados)
|
||||
basic_machine=m68k-cbm
|
||||
os=-amigados
|
||||
;;
|
||||
amigaunix | amix)
|
||||
basic_machine=m68k-cbm
|
||||
os=-sysv4
|
||||
;;
|
||||
apollo68)
|
||||
basic_machine=m68k-apollo
|
||||
os=-sysv
|
||||
;;
|
||||
balance)
|
||||
basic_machine=ns32k-sequent
|
||||
os=-dynix
|
||||
;;
|
||||
convex-c1)
|
||||
basic_machine=c1-convex
|
||||
os=-bsd
|
||||
;;
|
||||
convex-c2)
|
||||
basic_machine=c2-convex
|
||||
os=-bsd
|
||||
;;
|
||||
convex-c32)
|
||||
basic_machine=c32-convex
|
||||
os=-bsd
|
||||
;;
|
||||
convex-c34)
|
||||
basic_machine=c34-convex
|
||||
os=-bsd
|
||||
;;
|
||||
convex-c38)
|
||||
basic_machine=c38-convex
|
||||
os=-bsd
|
||||
;;
|
||||
cray | ymp)
|
||||
basic_machine=ymp-cray
|
||||
os=-unicos
|
||||
;;
|
||||
cray2)
|
||||
basic_machine=cray2-cray
|
||||
os=-unicos
|
||||
;;
|
||||
crds | unos)
|
||||
basic_machine=m68k-crds
|
||||
;;
|
||||
da30 | da30-*)
|
||||
basic_machine=m68k-da30
|
||||
;;
|
||||
decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
|
||||
basic_machine=mips-dec
|
||||
;;
|
||||
delta | 3300 | motorola-3300 | motorola-delta \
|
||||
| 3300-motorola | delta-motorola)
|
||||
basic_machine=m68k-motorola
|
||||
;;
|
||||
delta88)
|
||||
basic_machine=m88k-motorola
|
||||
os=-sysv3
|
||||
;;
|
||||
dpx20 | dpx20-*)
|
||||
basic_machine=rs6000-bull
|
||||
os=-bosx
|
||||
;;
|
||||
dpx2* | dpx2*-bull)
|
||||
basic_machine=m68k-bull
|
||||
os=-sysv3
|
||||
;;
|
||||
ebmon29k)
|
||||
basic_machine=a29k-amd
|
||||
os=-ebmon
|
||||
;;
|
||||
elxsi)
|
||||
basic_machine=elxsi-elxsi
|
||||
os=-bsd
|
||||
;;
|
||||
encore | umax | mmax)
|
||||
basic_machine=ns32k-encore
|
||||
;;
|
||||
fx2800)
|
||||
basic_machine=i860-alliant
|
||||
;;
|
||||
genix)
|
||||
basic_machine=ns32k-ns
|
||||
;;
|
||||
gmicro)
|
||||
basic_machine=tron-gmicro
|
||||
os=-sysv
|
||||
;;
|
||||
h3050r* | hiux*)
|
||||
basic_machine=hppa1.1-hitachi
|
||||
os=-hiuxwe2
|
||||
;;
|
||||
h8300hms)
|
||||
basic_machine=h8300-hitachi
|
||||
os=-hms
|
||||
;;
|
||||
harris)
|
||||
basic_machine=m88k-harris
|
||||
os=-sysv3
|
||||
;;
|
||||
hp300-*)
|
||||
basic_machine=m68k-hp
|
||||
;;
|
||||
hp300bsd)
|
||||
basic_machine=m68k-hp
|
||||
os=-bsd
|
||||
;;
|
||||
hp300hpux)
|
||||
basic_machine=m68k-hp
|
||||
os=-hpux
|
||||
;;
|
||||
hp9k2[0-9][0-9] | hp9k31[0-9])
|
||||
basic_machine=m68000-hp
|
||||
;;
|
||||
hp9k3[2-9][0-9])
|
||||
basic_machine=m68k-hp
|
||||
;;
|
||||
hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7)
|
||||
basic_machine=hppa1.1-hp
|
||||
;;
|
||||
hp9k8[0-9][0-9] | hp8[0-9][0-9])
|
||||
basic_machine=hppa1.0-hp
|
||||
;;
|
||||
i370-ibm* | ibm*)
|
||||
basic_machine=i370-ibm
|
||||
os=-mvs
|
||||
;;
|
||||
# I'm not sure what "Sysv32" means. Should this be sysv3.2?
|
||||
i[345]86v32)
|
||||
basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
|
||||
os=-sysv32
|
||||
;;
|
||||
i[345]86v4*)
|
||||
basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
|
||||
os=-sysv4
|
||||
;;
|
||||
i[345]86v)
|
||||
basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
|
||||
os=-sysv
|
||||
;;
|
||||
i[345]86sol2)
|
||||
basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
|
||||
os=-solaris2
|
||||
;;
|
||||
iris | iris4d)
|
||||
basic_machine=mips-sgi
|
||||
case $os in
|
||||
-irix*)
|
||||
;;
|
||||
*)
|
||||
os=-irix4
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
isi68 | isi)
|
||||
basic_machine=m68k-isi
|
||||
os=-sysv
|
||||
;;
|
||||
m88k-omron*)
|
||||
basic_machine=m88k-omron
|
||||
;;
|
||||
mac | macintosh)
|
||||
basic_machine=m68k-apple
|
||||
;;
|
||||
magnum | m3230)
|
||||
basic_machine=mips-mips
|
||||
os=-sysv
|
||||
;;
|
||||
merlin)
|
||||
basic_machine=ns32k-utek
|
||||
os=-sysv
|
||||
;;
|
||||
miniframe)
|
||||
basic_machine=m68000-convergent
|
||||
;;
|
||||
mips3*-*)
|
||||
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
|
||||
;;
|
||||
mips3*)
|
||||
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
|
||||
;;
|
||||
ncr3000)
|
||||
basic_machine=i486-ncr
|
||||
os=-sysv4
|
||||
;;
|
||||
news | news700 | news800 | news900)
|
||||
basic_machine=m68k-sony
|
||||
os=-newsos
|
||||
;;
|
||||
news1000)
|
||||
basic_machine=m68030-sony
|
||||
os=-newsos
|
||||
;;
|
||||
news-3600 | risc-news)
|
||||
basic_machine=mips-sony
|
||||
os=-newsos
|
||||
;;
|
||||
next | m*-next )
|
||||
basic_machine=m68k-next
|
||||
case $os in
|
||||
-nextstep* )
|
||||
;;
|
||||
-ns2*)
|
||||
os=-nextstep2
|
||||
;;
|
||||
*)
|
||||
os=-nextstep3
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
nh3000)
|
||||
basic_machine=m68k-harris
|
||||
os=-cxux
|
||||
;;
|
||||
nh[45]000)
|
||||
basic_machine=m88k-harris
|
||||
os=-cxux
|
||||
;;
|
||||
nindy960)
|
||||
basic_machine=i960-intel
|
||||
os=-nindy
|
||||
;;
|
||||
np1)
|
||||
basic_machine=np1-gould
|
||||
;;
|
||||
pa-hitachi)
|
||||
basic_machine=hppa1.1-hitachi
|
||||
os=-hiuxwe2
|
||||
;;
|
||||
paragon)
|
||||
basic_machine=i860-intel
|
||||
os=-osf
|
||||
;;
|
||||
pbd)
|
||||
basic_machine=sparc-tti
|
||||
;;
|
||||
pbb)
|
||||
basic_machine=m68k-tti
|
||||
;;
|
||||
pc532 | pc532-*)
|
||||
basic_machine=ns32k-pc532
|
||||
;;
|
||||
pentium | p5 | p6)
|
||||
# We don't have specific support for the Intel Pentium (p6) followon yet, so just call it a Pentium
|
||||
basic_machine=i586-intel
|
||||
;;
|
||||
pentium-* | p5-* | p6-*)
|
||||
# We don't have specific support for the Intel Pentium (p6) followon yet, so just call it a Pentium
|
||||
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
k5)
|
||||
# We don't have specific support for AMD's K5 yet, so just call it a Pentium
|
||||
basic_machine=i586-amd
|
||||
;;
|
||||
nexen)
|
||||
# We don't have specific support for Nexgen yet, so just call it a Pentium
|
||||
basic_machine=i586-nexgen
|
||||
;;
|
||||
pn)
|
||||
basic_machine=pn-gould
|
||||
;;
|
||||
power) basic_machine=rs6000-ibm
|
||||
;;
|
||||
ppc) basic_machine=powerpc-unknown
|
||||
;;
|
||||
ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
ppcle | powerpclittle | ppc-le | powerpc-little)
|
||||
basic_machine=powerpcle-unknown
|
||||
;;
|
||||
ppcle-* | powerpclittle-*)
|
||||
basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
ps2)
|
||||
basic_machine=i386-ibm
|
||||
;;
|
||||
rm[46]00)
|
||||
basic_machine=mips-siemens
|
||||
;;
|
||||
rtpc | rtpc-*)
|
||||
basic_machine=romp-ibm
|
||||
;;
|
||||
sequent)
|
||||
basic_machine=i386-sequent
|
||||
;;
|
||||
sh)
|
||||
basic_machine=sh-hitachi
|
||||
os=-hms
|
||||
;;
|
||||
sps7)
|
||||
basic_machine=m68k-bull
|
||||
os=-sysv2
|
||||
;;
|
||||
spur)
|
||||
basic_machine=spur-unknown
|
||||
;;
|
||||
sun2)
|
||||
basic_machine=m68000-sun
|
||||
;;
|
||||
sun2os3)
|
||||
basic_machine=m68000-sun
|
||||
os=-sunos3
|
||||
;;
|
||||
sun2os4)
|
||||
basic_machine=m68000-sun
|
||||
os=-sunos4
|
||||
;;
|
||||
sun3os3)
|
||||
basic_machine=m68k-sun
|
||||
os=-sunos3
|
||||
;;
|
||||
sun3os4)
|
||||
basic_machine=m68k-sun
|
||||
os=-sunos4
|
||||
;;
|
||||
sun4os3)
|
||||
basic_machine=sparc-sun
|
||||
os=-sunos3
|
||||
;;
|
||||
sun4os4)
|
||||
basic_machine=sparc-sun
|
||||
os=-sunos4
|
||||
;;
|
||||
sun4sol2)
|
||||
basic_machine=sparc-sun
|
||||
os=-solaris2
|
||||
;;
|
||||
sun3 | sun3-*)
|
||||
basic_machine=m68k-sun
|
||||
;;
|
||||
sun4)
|
||||
basic_machine=sparc-sun
|
||||
;;
|
||||
sun386 | sun386i | roadrunner)
|
||||
basic_machine=i386-sun
|
||||
;;
|
||||
symmetry)
|
||||
basic_machine=i386-sequent
|
||||
os=-dynix
|
||||
;;
|
||||
tower | tower-32)
|
||||
basic_machine=m68k-ncr
|
||||
;;
|
||||
udi29k)
|
||||
basic_machine=a29k-amd
|
||||
os=-udi
|
||||
;;
|
||||
ultra3)
|
||||
basic_machine=a29k-nyu
|
||||
os=-sym1
|
||||
;;
|
||||
vaxv)
|
||||
basic_machine=vax-dec
|
||||
os=-sysv
|
||||
;;
|
||||
vms)
|
||||
basic_machine=vax-dec
|
||||
os=-vms
|
||||
;;
|
||||
vxworks960)
|
||||
basic_machine=i960-wrs
|
||||
os=-vxworks
|
||||
;;
|
||||
vxworks68)
|
||||
basic_machine=m68k-wrs
|
||||
os=-vxworks
|
||||
;;
|
||||
vxworks29k)
|
||||
basic_machine=a29k-wrs
|
||||
os=-vxworks
|
||||
;;
|
||||
xmp)
|
||||
basic_machine=xmp-cray
|
||||
os=-unicos
|
||||
;;
|
||||
xps | xps100)
|
||||
basic_machine=xps100-honeywell
|
||||
;;
|
||||
none)
|
||||
basic_machine=none-none
|
||||
os=-none
|
||||
;;
|
||||
|
||||
# Here we handle the default manufacturer of certain CPU types. It is in
|
||||
# some cases the only manufacturer, in others, it is the most popular.
|
||||
mips)
|
||||
basic_machine=mips-mips
|
||||
;;
|
||||
romp)
|
||||
basic_machine=romp-ibm
|
||||
;;
|
||||
rs6000)
|
||||
basic_machine=rs6000-ibm
|
||||
;;
|
||||
vax)
|
||||
basic_machine=vax-dec
|
||||
;;
|
||||
pdp11)
|
||||
basic_machine=pdp11-dec
|
||||
;;
|
||||
we32k)
|
||||
basic_machine=we32k-att
|
||||
;;
|
||||
sparc)
|
||||
basic_machine=sparc-sun
|
||||
;;
|
||||
cydra)
|
||||
basic_machine=cydra-cydrome
|
||||
;;
|
||||
orion)
|
||||
basic_machine=orion-highlevel
|
||||
;;
|
||||
orion105)
|
||||
basic_machine=clipper-highlevel
|
||||
;;
|
||||
*)
|
||||
echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# Here we canonicalize certain aliases for manufacturers.
|
||||
case $basic_machine in
|
||||
*-digital*)
|
||||
basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
|
||||
;;
|
||||
*-commodore*)
|
||||
basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
|
||||
# Decode manufacturer-specific aliases for certain operating systems.
|
||||
|
||||
if [ x"$os" != x"" ]
|
||||
then
|
||||
case $os in
|
||||
# -solaris* is a basic system type, with this one exception.
|
||||
-solaris1 | -solaris1.*)
|
||||
os=`echo $os | sed -e 's|solaris1|sunos4|'`
|
||||
;;
|
||||
-solaris)
|
||||
os=-solaris2
|
||||
;;
|
||||
-unixware* | svr4*)
|
||||
os=-sysv4
|
||||
;;
|
||||
-gnu/linux*)
|
||||
os=`echo $os | sed -e 's|gnu/linux|linux|'`
|
||||
;;
|
||||
# First accept the basic system types.
|
||||
# The portable systems comes first.
|
||||
# Each alternative MUST END IN A *, to match a version number.
|
||||
# -sysv* is not here because it comes later, after sysvr4.
|
||||
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
|
||||
| -vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[345]* \
|
||||
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
|
||||
| -amigados* | -msdos* | -newsos* | -unicos* | -aos* \
|
||||
| -nindy* | -vxworks* | -ebmon* | -hms* | -mvs* | -clix* \
|
||||
| -riscos* | -linux* | -uniplus* | -iris* | -rtu* | -xenix* \
|
||||
| -hiux* | -386bsd* | -netbsd* | -freebsd* | -riscix* \
|
||||
| -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \
|
||||
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
|
||||
| -udi* | -eabi* | -lites* )
|
||||
# Remember, each alternative MUST END IN *, to match a version number.
|
||||
;;
|
||||
-aux*)
|
||||
;;
|
||||
-sunos5*)
|
||||
os=`echo $os | sed -e 's|sunos5|solaris2|'`
|
||||
;;
|
||||
-sunos6*)
|
||||
os=`echo $os | sed -e 's|sunos6|solaris3|'`
|
||||
;;
|
||||
-osfrose*)
|
||||
os=-osfrose
|
||||
;;
|
||||
-osf*)
|
||||
os=-osf
|
||||
;;
|
||||
-utek*)
|
||||
os=-bsd
|
||||
;;
|
||||
-dynix*)
|
||||
os=-bsd
|
||||
;;
|
||||
-acis*)
|
||||
os=-aos
|
||||
;;
|
||||
-ctix* | -uts*)
|
||||
os=-sysv
|
||||
;;
|
||||
# Preserve the version number of sinix5.
|
||||
-sinix5.*)
|
||||
os=`echo $os | sed -e 's|sinix|sysv|'`
|
||||
;;
|
||||
-sinix*)
|
||||
os=-sysv4
|
||||
;;
|
||||
-triton*)
|
||||
os=-sysv3
|
||||
;;
|
||||
-oss*)
|
||||
os=-sysv3
|
||||
;;
|
||||
-svr4)
|
||||
os=-sysv4
|
||||
;;
|
||||
-svr3)
|
||||
os=-sysv3
|
||||
;;
|
||||
-sysvr4)
|
||||
os=-sysv4
|
||||
;;
|
||||
# This must come after -sysvr4.
|
||||
-sysv*)
|
||||
;;
|
||||
-xenix)
|
||||
os=-xenix
|
||||
;;
|
||||
-none)
|
||||
;;
|
||||
*)
|
||||
# Get rid of the `-' at the beginning of $os.
|
||||
os=`echo $os | sed 's/[^-]*-//'`
|
||||
echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
else
|
||||
|
||||
# Here we handle the default operating systems that come with various machines.
|
||||
# The value should be what the vendor currently ships out the door with their
|
||||
# machine or put another way, the most popular os provided with the machine.
|
||||
|
||||
# Note that if you're going to try to match "-MANUFACTURER" here (say,
|
||||
# "-sun"), then you have to tell the case statement up towards the top
|
||||
# that MANUFACTURER isn't an operating system. Otherwise, code above
|
||||
# will signal an error saying that MANUFACTURER isn't an operating
|
||||
# system, and we'll never get to this point.
|
||||
|
||||
case $basic_machine in
|
||||
*-acorn)
|
||||
os=-riscix1.2
|
||||
;;
|
||||
arm*-semi)
|
||||
os=-aout
|
||||
;;
|
||||
pdp11-*)
|
||||
os=-none
|
||||
;;
|
||||
*-dec | vax-*)
|
||||
os=-ultrix4.2
|
||||
;;
|
||||
m68*-apollo)
|
||||
os=-domain
|
||||
;;
|
||||
i386-sun)
|
||||
os=-sunos4.0.2
|
||||
;;
|
||||
m68000-sun)
|
||||
os=-sunos3
|
||||
# This also exists in the configure program, but was not the
|
||||
# default.
|
||||
# os=-sunos4
|
||||
;;
|
||||
*-tti) # must be before sparc entry or we get the wrong os.
|
||||
os=-sysv3
|
||||
;;
|
||||
sparc-* | *-sun)
|
||||
os=-sunos4.1.1
|
||||
;;
|
||||
*-ibm)
|
||||
os=-aix
|
||||
;;
|
||||
*-hp)
|
||||
os=-hpux
|
||||
;;
|
||||
*-hitachi)
|
||||
os=-hiux
|
||||
;;
|
||||
i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
|
||||
os=-sysv
|
||||
;;
|
||||
*-cbm)
|
||||
os=-amigados
|
||||
;;
|
||||
*-dg)
|
||||
os=-dgux
|
||||
;;
|
||||
*-dolphin)
|
||||
os=-sysv3
|
||||
;;
|
||||
m68k-ccur)
|
||||
os=-rtu
|
||||
;;
|
||||
m88k-omron*)
|
||||
os=-luna
|
||||
;;
|
||||
*-sequent)
|
||||
os=-ptx
|
||||
;;
|
||||
*-crds)
|
||||
os=-unos
|
||||
;;
|
||||
*-ns)
|
||||
os=-genix
|
||||
;;
|
||||
i370-*)
|
||||
os=-mvs
|
||||
;;
|
||||
*-next)
|
||||
os=-nextstep3
|
||||
;;
|
||||
*-gould)
|
||||
os=-sysv
|
||||
;;
|
||||
*-highlevel)
|
||||
os=-bsd
|
||||
;;
|
||||
*-encore)
|
||||
os=-bsd
|
||||
;;
|
||||
*-sgi)
|
||||
os=-irix
|
||||
;;
|
||||
*-siemens)
|
||||
os=-sysv4
|
||||
;;
|
||||
*-masscomp)
|
||||
os=-rtu
|
||||
;;
|
||||
*)
|
||||
os=-none
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Here we handle the case where we know the os, and the CPU type, but not the
|
||||
# manufacturer. We pick the logical manufacturer.
|
||||
vendor=unknown
|
||||
case $basic_machine in
|
||||
*-unknown)
|
||||
case $os in
|
||||
-riscix*)
|
||||
vendor=acorn
|
||||
;;
|
||||
-sunos*)
|
||||
vendor=sun
|
||||
;;
|
||||
-aix*)
|
||||
vendor=ibm
|
||||
;;
|
||||
-hpux*)
|
||||
vendor=hp
|
||||
;;
|
||||
-hiux*)
|
||||
vendor=hitachi
|
||||
;;
|
||||
-unos*)
|
||||
vendor=crds
|
||||
;;
|
||||
-dgux*)
|
||||
vendor=dg
|
||||
;;
|
||||
-luna*)
|
||||
vendor=omron
|
||||
;;
|
||||
-genix*)
|
||||
vendor=ns
|
||||
;;
|
||||
-mvs*)
|
||||
vendor=ibm
|
||||
;;
|
||||
-ptx*)
|
||||
vendor=sequent
|
||||
;;
|
||||
-vxworks*)
|
||||
vendor=wrs
|
||||
;;
|
||||
-aux*)
|
||||
vendor=apple
|
||||
;;
|
||||
esac
|
||||
basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
|
||||
;;
|
||||
esac
|
||||
|
||||
echo $basic_machine$os
|
4446
contrib/nvi/build/configure
vendored
4446
contrib/nvi/build/configure
vendored
File diff suppressed because it is too large
Load Diff
@ -1,725 +0,0 @@
|
||||
dnl @(#)configure.in 8.134 (Berkeley) 10/15/96
|
||||
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
AC_INIT(../common/main.c)
|
||||
AC_CONFIG_HEADER(config.h)
|
||||
|
||||
dnl Configure setup.
|
||||
AC_PROG_INSTALL()
|
||||
AC_CANONICAL_HOST
|
||||
AC_ARG_PROGRAM()
|
||||
|
||||
dnl If the user wants a debugging environment, set OPTFLAG now. (Some
|
||||
dnl compilers won't mix optimizing and debug flags.)
|
||||
AC_MSG_CHECKING(if --enable-debug option specified)
|
||||
AC_ARG_ENABLE(debug,
|
||||
[ --enable-debug Build a debugging version.],
|
||||
[vi_cv_debug="yes"], [vi_cv_debug="no"])
|
||||
if test "$vi_cv_debug" = yes; then
|
||||
AC_DEFINE(DEBUG)
|
||||
OPTFLAG=${OPTFLAG-"-g"}
|
||||
no_op_OPTFLAG=${no_op_OPTFLAG-"-g"}
|
||||
fi
|
||||
AC_MSG_RESULT($vi_cv_debug)
|
||||
|
||||
dnl This is where we handle stuff that autoconf can't handle.
|
||||
dnl XXX
|
||||
dnl Don't override anything if it's already set from the environment.
|
||||
|
||||
dnl Compiler, preprocessor and load flags.
|
||||
dnl AUX: -ZP disables _BSD_SOURCE et al, but enables POSIX at link time.
|
||||
dnl LynxOS: We check for gcc 2.x or better, the gcc 1 that was shipped with
|
||||
dnl LynxOS historically wasn't good enough.
|
||||
AC_SUBST(CPPFLAGS)
|
||||
case "$host_os" in
|
||||
aix3.2.5) OPTFLAG=${OPTFLAG-"-O"};;
|
||||
aix4.1*) CFLAGS=${CFLAGS-"-qstrict"}
|
||||
OPTFLAG=${OPTFLAG-"-O3"};;
|
||||
aux*) CPPFLAGS=${CPPFLAGS-"-ZP -D_BSD_SOURCE -D_SYSV_SOURCE -D_AUX_SOURCE"}
|
||||
LDFLAGS=${LDFLAGS-"-ZP"}
|
||||
OPTFLAG=${OPTFLAG-"-O"};;
|
||||
bsd4.4) OPTFLAG=${OPTFLAG-"-O2"};;
|
||||
bsdi*) CC=${CC-"shlicc"}
|
||||
OPTFLAG=${OPTFLAG-"-O2"};;
|
||||
irix6*) OPTFLAG=${OPTFLAG-"-O2"};;
|
||||
irix*) OPTFLAG=${OPTFLAG-"-O2"};;
|
||||
lynxos*) AC_PROG_CC()
|
||||
AC_MSG_CHECKING([for GNU C (gcc) version 2.x])
|
||||
ac_cv_gcc_vers=`${CC-cc} -v 2>&1 | \
|
||||
grep "gcc version " | sed 's/.*version //'`
|
||||
ac_cv_gcc_major=`echo "$ac_cv_gcc_vers" | sed 's/\..*//'`
|
||||
if test "$ac_cv_gcc_major" = "2" ; then
|
||||
AC_MSG_RESULT(yes)
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
echo "Fatal error: Nvi requires gcc 2.x to build on LynxOS."
|
||||
echo "See build/README.LynxOS for more information."
|
||||
exit 1
|
||||
fi;;
|
||||
nextstep3) CPPFLAGS=${CPPFLAGS-"-w -pipe -posix"}
|
||||
LDFLAGS=${LDFLAGS-"-posix"}
|
||||
OPTFLAG=${OPTFLAG-"-O9"};;
|
||||
osf*) CFLAGS=${CFLAGS-"-Olimit 1000"};;
|
||||
solaris*) no_op_OPTFLAG=${no_op_OPTFLAG-""};;
|
||||
sunos*) no_op_OPTFLAG=${no_op_OPTFLAG-""};;
|
||||
esac
|
||||
|
||||
dnl The default compiler is cc.
|
||||
AC_SUBST(CC)
|
||||
CC=${CC-cc}
|
||||
|
||||
dnl The default OPTFLAG is -O
|
||||
AC_SUBST(OPTFLAG)
|
||||
OPTFLAG=${OPTFLAG-"-O"}
|
||||
|
||||
dnl The SunOS/Solaris compiler can't optimize vi/v_txt.c; the symptom is
|
||||
dnl that the command 35i==<esc> turns into an infinite loop.
|
||||
AC_SUBST(no_op_OPTFLAG)
|
||||
no_op_OPTFLAG=${no_op_OPTFLAG-"$OPTFLAG"}
|
||||
|
||||
dnl Libraries.
|
||||
case "$host_os" in
|
||||
bsdi2.1) LIBS=${LIBS-"-lipc"};;
|
||||
dgux*) LIBS=${LIBS-"-ldgc"};;
|
||||
irix6*) LIBS=${LIBS-"-lbsd"};;
|
||||
irix*) LIBS=${LIBS-"-lc_s -lbsd"};;
|
||||
isc*) LIBS=${LIBS-"-lcposix -linet"};;
|
||||
netbsd1*) LIBS=${LIBS-"-lcrypt"};;
|
||||
ptx*) LIBS=${LIBS-"-lseq -linet -lsocket"};;
|
||||
sco3.2*) LIBS=${LIBS-"-lsocket"};;
|
||||
sinix*) LIBS=${LIBS-"-lelf -lc"};;
|
||||
solaris*) LIBS=${LIBS-"-lsocket -lnsl -ldl"}
|
||||
RLIBS=yes;;
|
||||
wgs*) LIBS=${LIBS-"-lnsl"};;
|
||||
esac
|
||||
|
||||
dnl A/UX has a broken getopt(3), strpbrk(3).
|
||||
case "$host_os" in
|
||||
aux*) LIBOBJS="getopt.o strpbrk.o $LIBOBJS";;
|
||||
esac
|
||||
|
||||
dnl Ultrix has a broken POSIX.1 VDISABLE value.
|
||||
case "$host_os" in
|
||||
ultrix*) AC_DEFINE(HAVE_BROKEN_VDISABLE);;
|
||||
esac
|
||||
|
||||
dnl The user may have additional CPP information.
|
||||
CPPFLAGS="$ADDCPPFLAGS $CPPFLAGS"
|
||||
|
||||
dnl The user may have additional load line information.
|
||||
LDFLAGS="$ADDLDFLAGS $LDFLAGS"
|
||||
|
||||
dnl The user may have additional library information.
|
||||
LIBS="$ADDLIBS $LIBS"
|
||||
|
||||
dnl Check to see if it's going to work.
|
||||
AM_SANITY_CHECK_CC
|
||||
|
||||
dnl Checks for programs.
|
||||
PATH="$PATH:/usr/bin:/usr/sbin:/sbin:/etc:/usr/etc:/usr/lib:/usr/ucblib:"
|
||||
|
||||
dnl Check for the shell path.
|
||||
AC_PATH_PROG(vi_cv_path_shell, sh, no)
|
||||
if test "$vi_cv_path_shell" = no; then
|
||||
echo "Fatal error: the shell utility not found."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
dnl Check for the sendmail path.
|
||||
AC_PATH_PROG(vi_cv_path_sendmail, sendmail, no)
|
||||
if test "$vi_cv_path_sendmail" = no; then
|
||||
echo "WARNING: The sendmail utility was not found!"
|
||||
echo "WARNING: Users will not be told of saved files."
|
||||
fi
|
||||
|
||||
dnl Check for the perl5/perl path.
|
||||
AC_SUBST(vi_cv_path_perl)
|
||||
AC_PATH_PROGS(vi_cv_path_perl, perl5 perl, no)
|
||||
|
||||
dnl Check for the "preserve" path.
|
||||
dnl Historically, nvi has used /var/tmp/vi.recover. The Linux filesystem
|
||||
dnl standard (FSSTND) uses /var/preserve; we add the vi.recover directory
|
||||
dnl beneath it so that we don't have name collisions with other editors.
|
||||
dnl Other systems have /var/preserve as well, so we test first for an already
|
||||
dnl existing name, and then use the first one that's writeable.
|
||||
AC_SUBST(vi_cv_path_preserve)
|
||||
AC_MSG_CHECKING(for preserve directory)
|
||||
AC_CACHE_VAL(vi_cv_path_preserve, [dnl
|
||||
dirlist="/var/preserve /var/tmp /usr/tmp"
|
||||
vi_cv_path_preserve=no
|
||||
for i in $dirlist; do
|
||||
if test -d $i/vi.recover; then
|
||||
vi_cv_path_preserve=$i/vi.recover
|
||||
break;
|
||||
fi
|
||||
done
|
||||
if test "$vi_cv_path_preserve" = no; then
|
||||
for i in $dirlist; do
|
||||
if test -d $i -a -w $i; then
|
||||
vi_cv_path_preserve=$i/vi.recover
|
||||
break;
|
||||
fi
|
||||
done
|
||||
|
||||
fi])
|
||||
if test "$vi_cv_path_preserve" = no; then
|
||||
echo "Fatal error: no writeable preserve directory found."
|
||||
exit 1
|
||||
fi
|
||||
AC_MSG_RESULT($vi_cv_path_preserve)
|
||||
|
||||
dnl Check for programs used for installation
|
||||
AC_PATH_PROG(vi_cv_path_chmod, chmod, missing_chmod)
|
||||
AC_PATH_PROG(vi_cv_path_cp, cp, missing_cp)
|
||||
AC_PATH_PROG(vi_cv_path_ln, ln, missing_ln)
|
||||
AC_PATH_PROG(vi_cv_path_mkdir, mkdir, missing_mkdir)
|
||||
AC_PATH_PROG(vi_cv_path_rm, rm, missing_rm)
|
||||
AC_PATH_PROG(vi_cv_path_strip, strip, missing_strip)
|
||||
|
||||
dnl Checks for libraries.
|
||||
dnl Find the X libraries and includes.
|
||||
AC_PATH_X
|
||||
AC_SUBST(XINCS)
|
||||
if test "$no_x" != yes; then
|
||||
if test "X$x_libraries" != "X"; then
|
||||
if test "X$RLIBS" = "Xyes"; then
|
||||
XLIBS="-R$x_libraries -L$x_libraries $XLIBS"
|
||||
else
|
||||
XLIBS="-L$x_libraries $XLIBS"
|
||||
fi
|
||||
fi
|
||||
XLIBS="$XLIBS -lX11"
|
||||
if test "X$x_includes" != "X"; then
|
||||
XINCS="-I$x_includes"
|
||||
fi
|
||||
fi
|
||||
|
||||
dnl If the user wants a Perl interpreter in nvi, load it.
|
||||
AC_SUBST(shrpenv)
|
||||
AC_SUBST(vi_cv_perllib)
|
||||
AC_MSG_CHECKING(if --enable-perlinterp option specified)
|
||||
AC_ARG_ENABLE(perlinterp,
|
||||
[ --enable-perlinterp Include a Perl interpreter in vi.],
|
||||
[vi_cv_perlinterp="yes"], [vi_cv_perlinterp="no"])
|
||||
AC_MSG_RESULT($vi_cv_perlinterp)
|
||||
if test "$vi_cv_perlinterp" = "yes"; then
|
||||
if test "$vi_cv_path_perl" = no; then
|
||||
echo "Fatal error: no perl5 utility found."
|
||||
exit 1
|
||||
fi
|
||||
$vi_cv_path_perl -e 'require 5.002' || {
|
||||
echo "Fatal error: perl5 must be version 5.002 or later."
|
||||
exit 1
|
||||
}
|
||||
$vi_cv_path_perl -e 'close(STDERR);require 5.003_01' &&
|
||||
AC_DEFINE(HAVE_PERL_5_003_01)
|
||||
|
||||
eval `$vi_cv_path_perl -V:shrpenv`
|
||||
if test "X$shrpenv" = "XUNKNOWN"; then # pre 5.003_04
|
||||
shrpenv=""
|
||||
fi
|
||||
vi_cv_perllib=`$vi_cv_path_perl -MConfig -e 'print $Config{privlib}'`
|
||||
perlcppflags=`$vi_cv_path_perl -Mlib=$srcdir -MExtUtils::Embed \
|
||||
-e 'ccflags;perl_inc'`
|
||||
if test "X$perlcppflags" != "X"; then
|
||||
CPPFLAGS="$perlcppflags $CPPFLAGS"
|
||||
fi
|
||||
perllibs=`cd $srcdir;$vi_cv_path_perl -MExtUtils::Embed \
|
||||
-e 'ldopts'`
|
||||
if test "X$perllibs" != "X"; then
|
||||
LIBS="$perllibs $LIBS"
|
||||
fi
|
||||
perlldflags=`cd $srcdir;$vi_cv_path_perl -MExtUtils::Embed \
|
||||
-e 'ccdlflags'`
|
||||
if test "X$perlldflags" != "X"; then
|
||||
LDFLAGS="$perlldflags $LDFLAGS"
|
||||
fi
|
||||
LIBOBJS="perl.o perlsfio.o $LIBOBJS"
|
||||
AC_DEFINE(HAVE_PERL_INTERP)
|
||||
fi
|
||||
|
||||
dnl If the user wants a Tk/Tcl front-end for nvi, build it.
|
||||
AC_SUBST(tknvi)
|
||||
AC_SUBST(TKLIBS)
|
||||
AC_MSG_CHECKING(if --enable-tknvi option specified)
|
||||
AC_ARG_ENABLE(tknvi,
|
||||
[ --enable-tknvi Build a Tk/Tcl front-end for vi.],
|
||||
[vi_cv_tknvi="yes"], [vi_cv_tknvi="no"])
|
||||
AC_MSG_RESULT($vi_cv_tknvi)
|
||||
if test "$vi_cv_tknvi" = "yes"; then
|
||||
tknvi=tknvi
|
||||
TKLIBS="-ltk -ltcl -lm $XLIBS $LIBS"
|
||||
fi
|
||||
|
||||
dnl If the user wants a Tk/Tcl interpreter in nvi, load it.
|
||||
AC_MSG_CHECKING(if --enable-tclinterp option specified)
|
||||
AC_ARG_ENABLE(tclinterp,
|
||||
[ --enable-tclinterp Include a Tk/Tcl interpreter in vi.],
|
||||
[vi_cv_tclinterp="yes"], [vi_cv_tclinterp="no"])
|
||||
AC_MSG_RESULT($vi_cv_tclinterp)
|
||||
if test "$vi_cv_tclinterp" = "yes"; then
|
||||
LIBOBJS="tcl.o $LIBOBJS"
|
||||
LIBS="-ltk -ltcl -lm $XLIBS $LIBS"
|
||||
AC_DEFINE(HAVE_TCL_INTERP)
|
||||
fi
|
||||
|
||||
dnl Make sure that we can find a Tk/Tcl library.
|
||||
if test "$vi_cv_tknvi" = "yes" || test "$vi_cv_tclinterp" = "yes"; then
|
||||
AC_CHECK_LIB(tcl, main,
|
||||
[vi_cv_tkfatal="no"], [vi_cv_tkfatal="yes"], -ltk -lm)
|
||||
if test "$vi_cv_tkfatal" = "yes"; then
|
||||
echo "Fatal error: no Tk/Tcl library; see the section"
|
||||
echo "ADDING LIBRARIES AND INCLUDE FILES in the README file."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
dnl Both Tcl/Tk and Perl interpreters need the vi api code.
|
||||
if test "$vi_cv_tclinterp" = yes || test "$vi_cv_perlinterp" = yes; then
|
||||
LIBOBJS="api.o $LIBOBJS"
|
||||
fi
|
||||
|
||||
dnl Check for the termcap/termlib library. Compile in nvi's curses routines
|
||||
dnl unless the user specifies otherwise. These two checks must occur in the
|
||||
dnl current order, and -lcurses must be loaded before -ltermcap/-ltermlib.
|
||||
AC_CHECK_LIB(termlib, tgetent,
|
||||
[vi_cv_termlib=-ltermlib], [vi_cv_termlib=no])
|
||||
if test "$vi_cv_termlib" = no; then
|
||||
AC_CHECK_LIB(termcap, tgetent,
|
||||
[vi_cv_termlib=-ltermcap], [vi_cv_termlib=no])
|
||||
fi
|
||||
if test "$vi_cv_termlib" != no; then
|
||||
LIBS="$vi_cv_termlib $LIBS"
|
||||
fi
|
||||
AC_SUBST(cobjs)
|
||||
AC_MSG_CHECKING(if --disable-curses option specified)
|
||||
AC_ARG_ENABLE(curses,
|
||||
[ --disable-curses DON'T use the nvi-provided curses routines.],
|
||||
[vi_cv_curses="other curses"], [vi_cv_curses="bundled curses"])
|
||||
AC_MSG_RESULT($vi_cv_curses)
|
||||
case "$vi_cv_curses" in
|
||||
"bundled curses")
|
||||
CPPFLAGS="-I\$(srcdir)/curses $CPPFLAGS"
|
||||
cobjs="\$(COBJS)";;
|
||||
"other curses")
|
||||
LIBS="-lcurses $LIBS";;
|
||||
esac
|
||||
|
||||
dnl Checks for header files.
|
||||
AC_MSG_CHECKING(for sys/mman.h)
|
||||
AC_CACHE_VAL(vi_cv_include_sys_mman, [dnl
|
||||
AC_TRY_CPP([#include <sys/mman.h>],
|
||||
[vi_cv_include_sys_mman=yes], [vi_cv_include_sys_mman=no])])
|
||||
if test "$vi_cv_include_sys_mman" = yes; then
|
||||
AC_DEFINE(HAVE_SYS_MMAN_H)
|
||||
fi
|
||||
AC_MSG_RESULT($vi_cv_include_sys_mman)
|
||||
|
||||
AC_MSG_CHECKING(for sys/select.h)
|
||||
AC_CACHE_VAL(vi_cv_include_sys_select, [dnl
|
||||
AC_TRY_CPP([#include <sys/select.h>],
|
||||
[vi_cv_include_sys_select=yes], [vi_cv_include_sys_select=no])])
|
||||
if test "$vi_cv_include_sys_select" = yes; then
|
||||
AC_DEFINE(HAVE_SYS_SELECT_H)
|
||||
fi
|
||||
AC_MSG_RESULT($vi_cv_include_sys_select)
|
||||
|
||||
dnl Checks for typedefs, structures, and compiler characteristics.
|
||||
AC_CHECK_TYPE(ssize_t, int)
|
||||
AC_C_BIGENDIAN
|
||||
AC_C_CONST
|
||||
AC_STRUCT_ST_BLKSIZE
|
||||
AC_TYPE_MODE_T
|
||||
AC_TYPE_OFF_T
|
||||
AC_TYPE_PID_T
|
||||
AC_TYPE_SIZE_T
|
||||
AC_STRUCT_TM
|
||||
|
||||
dnl Checks for library functions.
|
||||
AC_CHECK_FUNCS(bsearch gethostname getopt memchr memcpy memmove memset)
|
||||
AC_REPLACE_FUNCS(bsearch gethostname getopt memchr memcpy memmove memset)
|
||||
AC_CHECK_FUNCS(mkstemp mmap snprintf strdup strerror strpbrk strtol)
|
||||
AC_REPLACE_FUNCS(mkstemp mmap snprintf strdup strerror strpbrk strtol)
|
||||
AC_CHECK_FUNCS(strtoul vsnprintf)
|
||||
AC_REPLACE_FUNCS(strtoul vsnprintf)
|
||||
|
||||
AC_CHECK_FUNCS(select)
|
||||
AC_CHECK_FUNCS(setenv, [need_env=no], [need_env=yes])
|
||||
AC_CHECK_FUNCS(strsep, [need_strsep=no], [need_strsep=yes])
|
||||
AC_CHECK_FUNCS(unsetenv,, [need_env=yes])
|
||||
|
||||
AC_FUNC_MMAP
|
||||
AC_FUNC_VFORK
|
||||
|
||||
dnl If we needed setenv or unsetenv, add in the clib/env.c replacement file.
|
||||
if test "$need_env" = yes; then
|
||||
LIBOBJS="env.o $LIBOBJS"
|
||||
fi
|
||||
|
||||
dnl If we need strsep, add it and define it so we get a prototype.
|
||||
if test "$need_strsep" = yes; then
|
||||
LIBOBJS="strsep.o $LIBOBJS"
|
||||
fi
|
||||
|
||||
dnl Check for fcntl/flock
|
||||
dnl Use flock preferentially, since it has cleaner semantics and won't
|
||||
dnl hang up the editor.
|
||||
dnl XXX
|
||||
dnl Ultrix has a broken fcntl, but a working flock.
|
||||
dnl IRIX and DGUX have a broken flock, but working fcntl.
|
||||
AC_MSG_CHECKING(for fcntl/flock)
|
||||
AC_CACHE_VAL(vi_cv_lock, [dnl
|
||||
vi_cv_lock=none
|
||||
case "$host_os" in
|
||||
dgux*);;
|
||||
irix*);;
|
||||
*)
|
||||
AC_TRY_LINK([#include <fcntl.h>], [flock(0, 0);],
|
||||
[vi_cv_lock=flock]);;
|
||||
esac
|
||||
if test "$vi_cv_lock" = none; then
|
||||
AC_TRY_LINK([#include <fcntl.h>], [fcntl(0, F_SETLK, 0);],
|
||||
[vi_cv_lock=fcntl])
|
||||
fi])
|
||||
|
||||
if test "$vi_cv_lock" = flock; then
|
||||
AC_DEFINE(HAVE_LOCK_FLOCK)
|
||||
fi
|
||||
if test "$vi_cv_lock" = fcntl; then
|
||||
AC_DEFINE(HAVE_LOCK_FCNTL)
|
||||
fi
|
||||
AC_MSG_RESULT($vi_cv_lock)
|
||||
|
||||
dnl Check for ftruncate/chsize
|
||||
AC_MSG_CHECKING(for ftruncate/chsize)
|
||||
AC_CACHE_VAL(vi_cv_ftruncate, [dnl
|
||||
AC_TRY_LINK([#include <unistd.h>], [ftruncate(0, 0);],
|
||||
[vi_cv_ftruncate=ftruncate],
|
||||
AC_TRY_LINK([#include <unistd.h>], [chsize(0, 0);],
|
||||
[vi_cv_ftruncate=chsize], [vi_cv_ftruncate=no]))])
|
||||
if test "$vi_cv_ftruncate" = ftruncate; then
|
||||
AC_DEFINE(HAVE_FTRUNCATE_FTRUNCATE)
|
||||
fi
|
||||
if test "$vi_cv_ftruncate" = chsize; then
|
||||
AC_DEFINE(HAVE_FTRUNCATE_CHSIZE)
|
||||
fi
|
||||
if test "$vi_cv_ftruncate" = no; then
|
||||
echo
|
||||
echo "Fatal error: no file truncation system call."
|
||||
exit 1
|
||||
fi
|
||||
AC_MSG_RESULT($vi_cv_ftruncate)
|
||||
|
||||
dnl Check for the tigetstr/tigetnum functions.
|
||||
AC_MSG_CHECKING(for tigetstr/tigetnum)
|
||||
AC_CACHE_VAL(vi_cv_have_curses_tigetstr, [dnl
|
||||
AC_TRY_LINK([#include <curses.h>], [tigetstr(0);],
|
||||
[vi_cv_have_curses_tigetstr=yes],
|
||||
[vi_cv_have_curses_tigetstr=no])])
|
||||
if test "$vi_cv_have_curses_tigetstr" = yes; then
|
||||
AC_DEFINE(HAVE_CURSES_TIGETSTR)
|
||||
fi
|
||||
AC_MSG_RESULT($vi_cv_have_curses_tigetstr)
|
||||
|
||||
dnl Check for potentially missing curses functions in system or user-specified
|
||||
dnl libraries. We also have to guess at whether the specified library is a
|
||||
dnl BSD or System V style curses. Use the newterm function, all System V
|
||||
dnl curses implementations have it, none, as far as I know, of the BSD ones do.
|
||||
if test "$vi_cv_curses" = "bundled curses"; then
|
||||
AC_DEFINE(HAVE_BSD_CURSES)
|
||||
AC_DEFINE(HAVE_CURSES_ADDNSTR)
|
||||
AC_DEFINE(HAVE_CURSES_IDLOK)
|
||||
else
|
||||
dnl Check for the addnstr function.
|
||||
AC_MSG_CHECKING(for addnstr)
|
||||
AC_CACHE_VAL(vi_cv_have_curses_addnstr, [dnl
|
||||
AC_TRY_LINK([#include <curses.h>], [addnstr(0, 0);],
|
||||
[vi_cv_have_curses_addnstr=yes],
|
||||
[vi_cv_have_curses_addnstr=no])])
|
||||
if test "$vi_cv_have_curses_addnstr" = yes; then
|
||||
AC_DEFINE(HAVE_CURSES_ADDNSTR)
|
||||
fi
|
||||
AC_MSG_RESULT($vi_cv_have_curses_addnstr)
|
||||
|
||||
dnl Check for the beep function.
|
||||
AC_MSG_CHECKING(for beep)
|
||||
AC_CACHE_VAL(vi_cv_have_curses_beep, [dnl
|
||||
AC_TRY_LINK([#include <curses.h>], [beep();],
|
||||
[vi_cv_have_curses_beep=yes],
|
||||
[vi_cv_have_curses_beep=no])])
|
||||
if test "$vi_cv_have_curses_beep" = yes; then
|
||||
AC_DEFINE(HAVE_CURSES_BEEP)
|
||||
fi
|
||||
AC_MSG_RESULT($vi_cv_have_curses_beep)
|
||||
|
||||
dnl Check for the flash function.
|
||||
AC_MSG_CHECKING(for flash)
|
||||
AC_CACHE_VAL(vi_cv_have_curses_flash, [dnl
|
||||
AC_TRY_LINK([#include <curses.h>], [flash();],
|
||||
[vi_cv_have_curses_flash=yes],
|
||||
[vi_cv_have_curses_flash=no])])
|
||||
if test "$vi_cv_have_curses_flash" = yes; then
|
||||
AC_DEFINE(HAVE_CURSES_FLASH)
|
||||
fi
|
||||
AC_MSG_RESULT($vi_cv_have_curses_flash)
|
||||
|
||||
dnl Check for the idlok function.
|
||||
AC_MSG_CHECKING(for idlok)
|
||||
AC_CACHE_VAL(vi_cv_have_curses_idlok, [dnl
|
||||
AC_TRY_LINK([#include <curses.h>], [idlok(0, 0);],
|
||||
[vi_cv_have_curses_idlok=yes],
|
||||
[vi_cv_have_curses_idlok=no])])
|
||||
if test "$vi_cv_have_curses_idlok" = yes; then
|
||||
AC_DEFINE(HAVE_CURSES_IDLOK)
|
||||
fi
|
||||
AC_MSG_RESULT($vi_cv_have_curses_idlok)
|
||||
|
||||
dnl Check for the keypad function.
|
||||
AC_MSG_CHECKING(for keypad)
|
||||
AC_CACHE_VAL(vi_cv_have_curses_keypad, [dnl
|
||||
AC_TRY_LINK([#include <curses.h>], [keypad(0, 0);],
|
||||
[vi_cv_have_curses_keypad=yes],
|
||||
[vi_cv_have_curses_keypad=no])])
|
||||
if test "$vi_cv_have_curses_keypad" = yes; then
|
||||
AC_DEFINE(HAVE_CURSES_KEYPAD)
|
||||
fi
|
||||
AC_MSG_RESULT($vi_cv_have_curses_keypad)
|
||||
|
||||
dnl Check for the newterm function.
|
||||
AC_MSG_CHECKING(for newterm)
|
||||
AC_CACHE_VAL(vi_cv_have_curses_newterm, [dnl
|
||||
AC_TRY_LINK([#include <curses.h>], [newterm(0, 0, 0);],
|
||||
[vi_cv_have_curses_newterm=yes],
|
||||
[vi_cv_have_curses_newterm=no])])
|
||||
if test "$vi_cv_have_curses_newterm" = yes; then
|
||||
AC_DEFINE(HAVE_CURSES_NEWTERM)
|
||||
fi
|
||||
AC_MSG_RESULT($vi_cv_have_curses_newterm)
|
||||
|
||||
if test "$vi_cv_have_curses_newterm" = no; then
|
||||
AC_DEFINE(HAVE_BSD_CURSES)
|
||||
fi
|
||||
fi
|
||||
|
||||
dnl Check for the setupterm function. We make this check regardless of
|
||||
dnl using the system library, because it may be part of the underlying
|
||||
dnl termcap/termlib support, and we want to use the local one.
|
||||
AC_MSG_CHECKING(for setupterm)
|
||||
AC_CACHE_VAL(vi_cv_have_curses_setupterm, [dnl
|
||||
AC_TRY_LINK([#include <curses.h>], [setupterm(0, 0, 0);],
|
||||
[vi_cv_have_curses_setupterm=yes],
|
||||
[vi_cv_have_curses_setupterm=no])])
|
||||
if test "$vi_cv_have_curses_setupterm" = yes; then
|
||||
AC_DEFINE(HAVE_CURSES_SETUPTERM)
|
||||
fi
|
||||
AC_MSG_RESULT($vi_cv_have_curses_setupterm)
|
||||
|
||||
dnl Some moron decided to drop off an argument from the gettimeofday call,
|
||||
dnl without changing the name.
|
||||
AC_MSG_CHECKING(for broken gettimeofday system call)
|
||||
AC_CACHE_VAL(vi_cv_gettimeofday, [dnl
|
||||
AC_TRY_LINK([#include <sys/types.h>
|
||||
#include <sys/time.h>], [gettimeofday(0, 0);],
|
||||
[vi_cv_gettimeofday=okay], [vi_cv_gettimeofday=broken])])
|
||||
if test "$vi_cv_gettimeofday" = broken; then
|
||||
AC_DEFINE(HAVE_BROKEN_GETTIMEOFDAY)
|
||||
fi
|
||||
AC_MSG_RESULT($vi_cv_gettimeofday)
|
||||
|
||||
dnl Check for which version of openpty to use, System V or Berkeley.
|
||||
AC_MSG_CHECKING(for System V pty calls)
|
||||
AC_CACHE_VAL(vi_cv_sys5_pty, [dnl
|
||||
AC_TRY_LINK(, [grantpt(0);],
|
||||
[vi_cv_sys5_pty=yes], [vi_cv_sys5_pty=no])])
|
||||
if test "$vi_cv_sys5_pty" = yes; then
|
||||
AC_DEFINE(HAVE_SYS5_PTY)
|
||||
fi
|
||||
AC_MSG_RESULT($vi_cv_sys5_pty)
|
||||
|
||||
dnl Check for the revoke system call.
|
||||
AC_MSG_CHECKING(for revoke system call)
|
||||
AC_CACHE_VAL(vi_cv_revoke, [dnl
|
||||
AC_TRY_LINK(, [revoke("a");],
|
||||
[vi_cv_revoke=yes], [vi_cv_revoke=no])])
|
||||
if test "$vi_cv_revoke" = yes; then
|
||||
AC_DEFINE(HAVE_REVOKE)
|
||||
fi
|
||||
AC_MSG_RESULT($vi_cv_revoke)
|
||||
|
||||
dnl Some versions of sprintf return a pointer to the first argument instead
|
||||
dnl of a character count. We assume that the return value of snprintf and
|
||||
dnl vsprintf etc. will be the same as sprintf, and check the easy one.
|
||||
AC_MSG_CHECKING(for int type sprintf return value)
|
||||
AC_CACHE_VAL(vi_cv_sprintf_count, [dnl
|
||||
AC_TRY_RUN([main(){char buf[20]; exit(sprintf(buf, "XXX") != 3);}],
|
||||
[vi_cv_sprintf_count=yes], [vi_cv_sprintf_count=no])])
|
||||
if test "$vi_cv_sprintf_count" = no; then
|
||||
AC_DEFINE(SPRINTF_RET_CHARPNT)
|
||||
fi
|
||||
AC_MSG_RESULT($vi_cv_sprintf_count)
|
||||
|
||||
dnl We compile in nvi's DB routines unless the user specifies otherwise.
|
||||
AC_MSG_CHECKING(if --disable-db option specified)
|
||||
AC_ARG_ENABLE(db,
|
||||
[ --disable-db DON'T use the nvi-provided DB routines.],
|
||||
[vi_cv_db_lib="other DB"], [vi_cv_db_lib="bundled DB"])
|
||||
AC_MSG_RESULT($vi_cv_db_lib)
|
||||
case "$vi_cv_db_lib" in
|
||||
"bundled DB")
|
||||
CPPFLAGS="-I\$(srcdir)/db/include $CPPFLAGS"
|
||||
LIBOBJS="\$(DBOBJS) $LIBOBJS";;
|
||||
"other DB")
|
||||
;;
|
||||
esac
|
||||
|
||||
dnl We compile in nvi's RE routines unless the user specifies otherwise.
|
||||
AC_MSG_CHECKING(if --disable-re option specified)
|
||||
AC_ARG_ENABLE(re,
|
||||
[ --disable-re DON'T use the nvi-provided RE routines.],
|
||||
[vi_cv_re_lib="other RE"], [vi_cv_re_lib="bundled RE"])
|
||||
AC_MSG_RESULT($vi_cv_re_lib)
|
||||
case "$vi_cv_re_lib" in
|
||||
"bundled RE")
|
||||
CPPFLAGS="-I\$(srcdir)/regex $CPPFLAGS"
|
||||
LIBOBJS="\$(REOBJS) $LIBOBJS";;
|
||||
"other RE")
|
||||
;;
|
||||
esac
|
||||
|
||||
dnl Check for the standard shorthand types.
|
||||
AC_SUBST(u_char_decl)
|
||||
AC_MSG_CHECKING(for u_char)
|
||||
AC_CACHE_VAL(vi_cv_uchar, [dnl
|
||||
AC_TRY_COMPILE([#include <sys/types.h>], u_char foo;,
|
||||
[vi_cv_uchar=yes], [vi_cv_uchar=no])])
|
||||
AC_MSG_RESULT($vi_cv_uchar)
|
||||
if test "$vi_cv_uchar" = no; then
|
||||
u_char_decl="typedef unsigned char u_char;"
|
||||
fi
|
||||
|
||||
AC_SUBST(u_short_decl)
|
||||
AC_MSG_CHECKING(for u_short)
|
||||
AC_CACHE_VAL(vi_cv_ushort, [dnl
|
||||
AC_TRY_COMPILE([#include <sys/types.h>], u_short foo;,
|
||||
[vi_cv_ushort=yes], [vi_cv_ushort=no])])
|
||||
AC_MSG_RESULT($vi_cv_ushort)
|
||||
if test "$vi_cv_ushort" = no; then
|
||||
u_short_decl="typedef unsigned short u_short;"
|
||||
fi
|
||||
|
||||
AC_SUBST(u_int_decl)
|
||||
AC_MSG_CHECKING(for u_int)
|
||||
AC_CACHE_VAL(vi_cv_uint, [dnl
|
||||
AC_TRY_COMPILE([#include <sys/types.h>], u_int foo;,
|
||||
[vi_cv_uint=yes], [vi_cv_uint=no])])
|
||||
AC_MSG_RESULT($vi_cv_uint)
|
||||
if test "$vi_cv_uint" = no; then
|
||||
u_int_decl="typedef unsigned int u_int;"
|
||||
fi
|
||||
|
||||
AC_SUBST(u_long_decl)
|
||||
AC_MSG_CHECKING(for u_long)
|
||||
AC_CACHE_VAL(vi_cv_ulong, [dnl
|
||||
AC_TRY_COMPILE([#include <sys/types.h>], u_long foo;,
|
||||
[vi_cv_ulong=yes], [vi_cv_ulong=no])])
|
||||
AC_MSG_RESULT($vi_cv_ulong)
|
||||
if test "$vi_cv_ulong" = no; then
|
||||
u_long_decl="typedef unsigned long u_long;"
|
||||
fi
|
||||
|
||||
dnl DB/Vi use specific integer sizes.
|
||||
AC_SUBST(u_int8_decl)
|
||||
AC_MSG_CHECKING(for u_int8_t)
|
||||
AC_CACHE_VAL(vi_cv_uint8, [dnl
|
||||
AC_TRY_COMPILE([#include <sys/types.h>], u_int8_t foo;,
|
||||
[vi_cv_uint8=yes],
|
||||
AC_TRY_RUN([main(){exit(sizeof(unsigned char) != 1);}],
|
||||
[vi_cv_uint8="unsigned char"], [vi_cv_uint8=no]))])
|
||||
AC_MSG_RESULT($vi_cv_uint8)
|
||||
if test "$vi_cv_uint8" = no; then
|
||||
echo
|
||||
echo "Fatal error: no unsigned, 8-bit integral type."
|
||||
exit 1
|
||||
fi
|
||||
if test "$vi_cv_uint8" != yes; then
|
||||
u_int8_decl="typedef $vi_cv_uint8 u_int8_t;"
|
||||
fi
|
||||
|
||||
AC_SUBST(u_int16_decl)
|
||||
AC_MSG_CHECKING(for u_int16_t)
|
||||
AC_CACHE_VAL(vi_cv_uint16, [dnl
|
||||
AC_TRY_COMPILE([#include <sys/types.h>], u_int16_t foo;,
|
||||
[vi_cv_uint16=yes],
|
||||
AC_TRY_RUN([main(){exit(sizeof(unsigned short) != 2);}],
|
||||
[vi_cv_uint16="unsigned short"],
|
||||
AC_TRY_RUN([main(){exit(sizeof(unsigned int) != 2);}],
|
||||
[vi_cv_uint16="unsigned int"], [vi_cv_uint16=no])))])
|
||||
AC_MSG_RESULT($vi_cv_uint16)
|
||||
if test "$vi_cv_uint16" = no; then
|
||||
echo
|
||||
echo "Fatal error: no unsigned, 16-bit integral type."
|
||||
exit 1
|
||||
fi
|
||||
if test "$vi_cv_uint16" != yes; then
|
||||
u_int16_decl="typedef $vi_cv_uint16 u_int16_t;"
|
||||
fi
|
||||
|
||||
AC_SUBST(int16_decl)
|
||||
AC_MSG_CHECKING(for int16_t)
|
||||
AC_CACHE_VAL(vi_cv_int16, [dnl
|
||||
AC_TRY_COMPILE([#include <sys/types.h>], int16_t foo;,
|
||||
[vi_cv_int16=yes],
|
||||
AC_TRY_RUN([main(){exit(sizeof(short) != 2);}],
|
||||
[vi_cv_int16="short"],
|
||||
AC_TRY_RUN([main(){exit(sizeof(int) != 2);}],
|
||||
[vi_cv_int16="int"], [vi_cv_int16=no])))])
|
||||
AC_MSG_RESULT($vi_cv_int16)
|
||||
if test "$vi_cv_int16" = no; then
|
||||
echo
|
||||
echo "Fatal error: no signed, 16-bit integral type."
|
||||
exit 1
|
||||
fi
|
||||
if test "$vi_cv_int16" != yes; then
|
||||
int16_decl="typedef $vi_cv_int16 int16_t;"
|
||||
fi
|
||||
|
||||
AC_SUBST(u_int32_decl)
|
||||
AC_MSG_CHECKING(for u_int32_t)
|
||||
AC_CACHE_VAL(vi_cv_uint32, [dnl
|
||||
AC_TRY_COMPILE([#include <sys/types.h>], u_int32_t foo;,
|
||||
[vi_cv_uint32=yes],
|
||||
AC_TRY_RUN([main(){exit(sizeof(unsigned int) != 4);}],
|
||||
[vi_cv_uint32="unsigned int"],
|
||||
AC_TRY_RUN([main(){exit(sizeof(unsigned long) != 4);}],
|
||||
[vi_cv_uint32="unsigned long"], [vi_cv_uint32=no])))])
|
||||
AC_MSG_RESULT($vi_cv_uint32)
|
||||
if test "$vi_cv_uint32" = no; then
|
||||
echo
|
||||
echo "Fatal error: no unsigned, 32-bit integral type."
|
||||
exit 1
|
||||
fi
|
||||
if test "$vi_cv_uint32" != yes; then
|
||||
u_int32_decl="typedef $vi_cv_uint32 u_int32_t;"
|
||||
fi
|
||||
|
||||
AC_SUBST(int32_decl)
|
||||
AC_MSG_CHECKING(for int32_t)
|
||||
AC_CACHE_VAL(vi_cv_int32, [dnl
|
||||
AC_TRY_COMPILE([#include <sys/types.h>], int32_t foo;,
|
||||
[vi_cv_int32=yes],
|
||||
AC_TRY_RUN([main(){exit(sizeof(int) != 4);}],
|
||||
[vi_cv_int32="int"],
|
||||
AC_TRY_RUN([main(){exit(sizeof(long) != 4);}],
|
||||
[vi_cv_int32="long"], [vi_cv_int32=no])))])
|
||||
AC_MSG_RESULT($vi_cv_int32)
|
||||
if test "$vi_cv_int32" = no; then
|
||||
echo
|
||||
echo "Fatal error: no signed, 32-bit integral type."
|
||||
exit 1
|
||||
fi
|
||||
if test "$vi_cv_int32" != yes; then
|
||||
int32_decl="typedef $vi_cv_int32 int32_t;"
|
||||
fi
|
||||
|
||||
AC_OUTPUT(Makefile port.h:port.h.in
|
||||
pathnames.h:pathnames.h.in recover:recover.in)
|
@ -1,84 +0,0 @@
|
||||
#! /bin/sh
|
||||
# @(#)distrib 8.11 (Berkeley) 10/23/96
|
||||
|
||||
# Clean
|
||||
#make -f Makefile.in clean
|
||||
#rm -f configure config.h.in
|
||||
|
||||
# Build autoconf structure.
|
||||
echo "Running autoheader"
|
||||
autoheader 2>&1 | sed '/warning: AC_TRY_RUN called without default/d'
|
||||
chmod 444 config.h.in
|
||||
echo "Running autoconf"
|
||||
autoconf 2>&1 | sed '/warning: AC_TRY_RUN called without default/d'
|
||||
chmod 555 configure config.guess config.sub install-sh
|
||||
|
||||
# Build include files.
|
||||
f=../include/cl_extern.h
|
||||
echo "Building $f"
|
||||
rm -f $f
|
||||
sed -n "s/^ \* PUBLIC: \(.*\)/\1/p" ../cl/*.c > $f
|
||||
chmod 444 $f
|
||||
|
||||
f=../include/com_extern.h
|
||||
echo "Building $f"
|
||||
rm -f $f
|
||||
sed -n "s/^ \* PUBLIC: \(.*\)/\1/p" ../clib/*.c ../common/*.c > $f
|
||||
chmod 444 $f
|
||||
|
||||
f=../include/ex_def.h
|
||||
echo "Building $f"
|
||||
rm -f $f
|
||||
awk -f ../ex/ex.awk ../ex/ex_cmd.c > $f
|
||||
chmod 444 $f
|
||||
|
||||
f=../include/ex_extern.h
|
||||
echo "Building $f"
|
||||
rm -f $f
|
||||
sed -n "s/^ \* PUBLIC: \(.*\)/\1/p" ../ex/*.c > $f
|
||||
chmod 444 $f
|
||||
|
||||
if [ -d ../ip ]; then
|
||||
f=../include/ip_extern.h
|
||||
echo "Building $f"
|
||||
rm -f $f
|
||||
sed -n "s/^ \* PUBLIC: \(.*\)/\1/p" ../ip/*.c > $f
|
||||
chmod 444 $f
|
||||
fi
|
||||
|
||||
f=../include/options_def.h
|
||||
echo "Building $f"
|
||||
rm -f $f
|
||||
awk -f ../common/options.awk ../common/options.c > $f
|
||||
chmod 444 $f
|
||||
|
||||
f=../include/perl_extern.h
|
||||
echo "Building $f"
|
||||
rm -f $f
|
||||
sed -n "s/^ \* PUBLIC: \(.*\)/\1/p" ../perl_api/*.xs ../perl_api/*.c > $f
|
||||
chmod 444 $f
|
||||
|
||||
f=../include/tcl_extern.h
|
||||
echo "Building $f"
|
||||
rm -f $f
|
||||
sed -n "s/^ \* PUBLIC: \(.*\)/\1/p" ../tcl_api/*.c > $f
|
||||
chmod 444 $f
|
||||
|
||||
f=../include/tk_extern.h
|
||||
echo "Building $f"
|
||||
rm -f $f
|
||||
sed -n "s/^ \* PUBLIC: \(.*\)/\1/p" ../tk/*.c > $f
|
||||
chmod 444 $f
|
||||
|
||||
f=../include/vi_extern.h
|
||||
echo "Building $f"
|
||||
rm -f $f
|
||||
sed -n "s/^ \* PUBLIC: \(.*\)/\1/p" ../vi/*.c > $f
|
||||
chmod 444 $f
|
||||
|
||||
# Build tags files.
|
||||
echo "Building tags files"
|
||||
rm -f tags
|
||||
ctags -w -d ../cl/*.[ch] ../common/*.[ch] ../ex/*.[ch] ../perl_api/*.[ch] \
|
||||
../tcl_api/*.[ch] ../tk/*.[ch] ../vi/*.[ch]
|
||||
chmod 444 tags
|
@ -1,238 +0,0 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# install - install a program, script, or datafile
|
||||
# This comes from X11R5.
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
|
||||
# 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}"
|
||||
|
||||
tranformbasename=""
|
||||
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=:
|
||||
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
|
@ -1,45 +0,0 @@
|
||||
/* @(#)pathnames.h.in 8.4 (Berkeley) 6/26/96 */
|
||||
|
||||
#ifndef _PATH_BSHELL
|
||||
#define _PATH_BSHELL "@vi_cv_path_shell@"
|
||||
#endif
|
||||
|
||||
#ifndef _PATH_EXRC
|
||||
#define _PATH_EXRC ".exrc"
|
||||
#endif
|
||||
|
||||
#ifndef _PATH_MSGCAT
|
||||
#define _PATH_MSGCAT "./"
|
||||
#endif
|
||||
|
||||
#ifndef _PATH_NEXRC
|
||||
#define _PATH_NEXRC ".nexrc"
|
||||
#endif
|
||||
|
||||
#ifndef _PATH_PRESERVE
|
||||
#define _PATH_PRESERVE "@vi_cv_path_preserve@"
|
||||
#endif
|
||||
|
||||
#ifndef _PATH_SYSV_PTY
|
||||
#define _PATH_SYSV_PTY "/dev/ptmx"
|
||||
#endif
|
||||
|
||||
#ifndef _PATH_SENDMAIL
|
||||
#define _PATH_SENDMAIL "@vi_cv_path_sendmail@"
|
||||
#endif
|
||||
|
||||
#ifndef _PATH_SYSEXRC
|
||||
#define _PATH_SYSEXRC "/etc/vi.exrc"
|
||||
#endif
|
||||
|
||||
#ifndef _PATH_TAGS
|
||||
#define _PATH_TAGS "tags"
|
||||
#endif
|
||||
|
||||
#ifndef _PATH_TMP
|
||||
#define _PATH_TMP "/tmp"
|
||||
#endif
|
||||
|
||||
#ifndef _PATH_TTY
|
||||
#define _PATH_TTY "/dev/tty"
|
||||
#endif
|
@ -1,185 +0,0 @@
|
||||
/* @(#)port.h.in 8.13 (Berkeley) 6/12/96 */
|
||||
|
||||
/*
|
||||
* Declare the basic types, if they aren't already declared. Named and
|
||||
* some system's db.h files protect them with __BIT_TYPES_DEFINED__.
|
||||
*/
|
||||
#ifndef __BIT_TYPES_DEFINED__
|
||||
#define __BIT_TYPES_DEFINED__
|
||||
@u_int8_decl@
|
||||
@int16_decl@
|
||||
@u_int16_decl@
|
||||
@int32_decl@
|
||||
@u_int32_decl@
|
||||
#endif
|
||||
|
||||
@u_char_decl@
|
||||
@u_short_decl@
|
||||
@u_int_decl@
|
||||
@u_long_decl@
|
||||
|
||||
/*
|
||||
* XXX
|
||||
* Handle function prototypes. This steps on name space that vi doesn't
|
||||
* control, but all of the other solutions are worse.
|
||||
*/
|
||||
#undef __P
|
||||
#if defined(__STDC__) || defined(__cplusplus)
|
||||
#define __P(protos) protos /* ANSI C prototypes */
|
||||
#else
|
||||
#define __P(protos) () /* K&R C preprocessor */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* XXX
|
||||
* Some versions of System V changed the number of arguments to gettimeofday
|
||||
* without changing the name.
|
||||
*/
|
||||
#ifdef HAVE_BROKEN_GETTIMEOFDAY
|
||||
#define gettimeofday(tv, tz) gettimeofday(tv)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* XXX
|
||||
* If we don't have mmap, we fake it with read and write, but we'll
|
||||
* still need the header information.
|
||||
*/
|
||||
#ifndef HAVE_SYS_MMAN_H
|
||||
#define MAP_SHARED 1 /* share changes */
|
||||
#define MAP_PRIVATE 2 /* changes are private */
|
||||
#define PROT_READ 0x1 /* pages can be read */
|
||||
#define PROT_WRITE 0x2 /* pages can be written */
|
||||
#define PROT_EXEC 0x4 /* pages can be executed */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* XXX
|
||||
* POSIX 1003.1 names for file descriptors.
|
||||
*/
|
||||
#ifndef STDERR_FILENO
|
||||
#define STDIN_FILENO 0 /* ANSI C #defines */
|
||||
#define STDOUT_FILENO 1
|
||||
#define STDERR_FILENO 2
|
||||
#endif
|
||||
|
||||
/*
|
||||
* XXX
|
||||
* POSIX 1003.1 names for seek settings.
|
||||
*/
|
||||
#ifndef SEEK_END
|
||||
#define SEEK_SET 0 /* POSIX 1003.1 seek values */
|
||||
#define SEEK_CUR 1
|
||||
#define SEEK_END 2
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Hack _POSIX_VDISABLE to \377 since Ultrix doesn't honor _POSIX_VDISABLE
|
||||
* (treats it as ^@). The symptom is that the ^@ keystroke immediately
|
||||
* drops core.
|
||||
*/
|
||||
#ifdef HAVE_BROKEN_VDISABLE
|
||||
#undef _POSIX_VDISABLE
|
||||
#define _POSIX_VDISABLE ((unsigned char)'\377')
|
||||
#endif
|
||||
|
||||
/*
|
||||
* XXX
|
||||
* POSIX 1003.1 tty disabling character.
|
||||
*/
|
||||
#ifndef _POSIX_VDISABLE
|
||||
#define _POSIX_VDISABLE 0 /* Some systems used 0. */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* XXX
|
||||
* 4.4BSD extension to only set the software termios bits.
|
||||
*/
|
||||
#ifndef TCSASOFT /* 4.4BSD extension. */
|
||||
#define TCSASOFT 0
|
||||
#endif
|
||||
|
||||
/*
|
||||
* XXX
|
||||
* POSIX 1003.1 maximum path length.
|
||||
*/
|
||||
#ifndef MAXPATHLEN
|
||||
#ifdef PATH_MAX
|
||||
#define MAXPATHLEN PATH_MAX
|
||||
#else
|
||||
#define MAXPATHLEN 1024
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* XXX
|
||||
* MIN, MAX, historically in <sys/param.h>
|
||||
*/
|
||||
#ifndef MAX
|
||||
#define MAX(_a,_b) ((_a)<(_b)?(_b):(_a))
|
||||
#endif
|
||||
#ifndef MIN
|
||||
#define MIN(_a,_b) ((_a)<(_b)?(_a):(_b))
|
||||
#endif
|
||||
|
||||
/*
|
||||
* XXX
|
||||
* "DB" isn't always portable, and we want the private information.
|
||||
*/
|
||||
#define DB L__DB
|
||||
#undef pgno_t /* IRIX has its own version. */
|
||||
#define pgno_t L__db_pgno_t
|
||||
|
||||
/*
|
||||
* XXX
|
||||
* 4.4BSD extension to provide lock values in the open(2) call.
|
||||
*/
|
||||
#ifndef O_EXLOCK
|
||||
#define O_EXLOCK 0
|
||||
#endif
|
||||
|
||||
#ifndef O_SHLOCK
|
||||
#define O_SHLOCK 0
|
||||
#endif
|
||||
|
||||
/*
|
||||
* XXX
|
||||
* POSIX 1003.1 bad file format errno.
|
||||
*/
|
||||
#ifndef EFTYPE
|
||||
#define EFTYPE EINVAL
|
||||
#endif
|
||||
|
||||
/*
|
||||
* XXX
|
||||
* POSIX 1003.2 RE length limit.
|
||||
*/
|
||||
#ifndef _POSIX2_RE_DUP_MAX
|
||||
#define _POSIX2_RE_DUP_MAX 255
|
||||
#endif
|
||||
|
||||
/*
|
||||
* XXX
|
||||
* 4.4BSD extension to determine if a program dropped core from the exit
|
||||
* status.
|
||||
*/
|
||||
#ifndef WCOREDUMP
|
||||
#define WCOREDUMP(a) 0
|
||||
#endif
|
||||
|
||||
/*
|
||||
* XXX
|
||||
* Endian-ness of the machine.
|
||||
*/
|
||||
#if !defined(LITTLE_ENDIAN)
|
||||
#define LITTLE_ENDIAN 1234
|
||||
#endif
|
||||
#if !defined(BIG_ENDIAN)
|
||||
#define BIG_ENDIAN 4321
|
||||
#endif
|
||||
#if !defined(BYTE_ORDER)
|
||||
#if WORDS_BIGENDIAN == 1
|
||||
#define BYTE_ORDER BIG_ENDIAN
|
||||
#else
|
||||
#define BYTE_ORDER LITTLE_ENDIAN
|
||||
#endif
|
||||
#endif
|
@ -1,49 +0,0 @@
|
||||
#!/bin/sh -
|
||||
#
|
||||
# @(#)recover.in 8.8 (Berkeley) 10/10/96
|
||||
#
|
||||
# Script to recover nvi edit sessions.
|
||||
|
||||
RECDIR="@vi_cv_path_preserve@"
|
||||
SENDMAIL="@vi_cv_path_sendmail@"
|
||||
|
||||
echo 'Recovering nvi editor sessions.'
|
||||
|
||||
# Check editor backup files.
|
||||
vibackup=`echo $RECDIR/vi.*`
|
||||
if [ "$vibackup" != "$RECDIR/vi.*" ]; then
|
||||
for i in $vibackup; do
|
||||
# Only test files that are readable.
|
||||
if test ! -r $i; then
|
||||
continue
|
||||
fi
|
||||
|
||||
# Unmodified nvi editor backup files either have the
|
||||
# execute bit set or are zero length. Delete them.
|
||||
if test -x $i -o ! -s $i; then
|
||||
rm $i
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
# It is possible to get incomplete recovery files, if the editor crashes
|
||||
# at the right time.
|
||||
virecovery=`echo $RECDIR/recover.*`
|
||||
if [ "$virecovery" != "$RECDIR/recover.*" ]; then
|
||||
for i in $virecovery; do
|
||||
# Only test files that are readable.
|
||||
if test ! -r $i; then
|
||||
continue
|
||||
fi
|
||||
|
||||
# Delete any recovery files that are zero length, corrupted,
|
||||
# or that have no corresponding backup file. Else send mail
|
||||
# to the user.
|
||||
recfile=`awk '/^X-vi-recover-path:/{print $2}' < $i`
|
||||
if test -n "$recfile" -a -s "$recfile"; then
|
||||
$SENDMAIL -t < $i
|
||||
else
|
||||
rm $i
|
||||
fi
|
||||
done
|
||||
fi
|
@ -1,58 +0,0 @@
|
||||
ADDCPPFLAGS
|
||||
ADDLDFLAGS
|
||||
ADDLIBS
|
||||
CPPFLAGS
|
||||
FreeBSD
|
||||
LDFLAGS
|
||||
LIBS
|
||||
Lite
|
||||
NVI
|
||||
NVI'S
|
||||
NetBSD
|
||||
Nvi
|
||||
POSIX
|
||||
Perl
|
||||
README
|
||||
Tcl
|
||||
Tk
|
||||
asnvi
|
||||
asvi
|
||||
autoconf
|
||||
bindir
|
||||
cd
|
||||
contrib
|
||||
csh
|
||||
datadir
|
||||
datafiles
|
||||
db
|
||||
distclean
|
||||
env
|
||||
filesystem
|
||||
foo
|
||||
gcc
|
||||
ksh
|
||||
lcurses
|
||||
ldb
|
||||
lm
|
||||
lperl
|
||||
ltcl
|
||||
ltermcap
|
||||
ltermlib
|
||||
ltk
|
||||
mandir
|
||||
mkdir
|
||||
ncurses
|
||||
nex
|
||||
nvi
|
||||
nview
|
||||
perl
|
||||
perlinterp
|
||||
setenv
|
||||
sh
|
||||
tcl
|
||||
tclinterp
|
||||
tcsh
|
||||
terminfo
|
||||
tknvi
|
||||
usr
|
||||
vi
|
@ -1,7 +1,8 @@
|
||||
# @(#)Makefile 8.29 (Berkeley) 10/19/96
|
||||
# $Id: Makefile,v 9.0 2012/10/19 15:13:11 zy Exp $
|
||||
|
||||
CAT= dutch english french german polish ru_SU.KOI8-R spanish swedish
|
||||
FILES= ../cl/*.c ../common/*.c ../ex/*.c ../tk/*.c ../vi/*.c
|
||||
CAT= dutch english french german polish ru_RU.KOI8-R spanish swedish \
|
||||
uk_UA.KOI8-U zh_CN.GB2312
|
||||
FILES= ../cl/*.c ../common/*.c ../ex/*.c ../vi/*.c
|
||||
|
||||
all: dump ${CAT}
|
||||
|
||||
@ -18,13 +19,10 @@ ${CAT}: english.base
|
||||
print "DUPLICATE MESSAGE NUMBER " $$1; \
|
||||
exit 1; \
|
||||
} \
|
||||
for (; nline < $$1; ++nline) \
|
||||
print ""; \
|
||||
print $0; \
|
||||
}' | \
|
||||
sed -e '1s/^/VI_MESSAGE_CATALOG/' \
|
||||
-e '/"/s/^[^"]*"//' \
|
||||
-e '1!s/"$$/X/' > $@; \
|
||||
sed -e '1s/^/$$set 1~$$quote "~/; 1y/~/\n/' | \
|
||||
gencat $@ /dev/stdin; \
|
||||
chmod 444 $@; \
|
||||
if grep DUPLICATE $@ > /dev/null; then \
|
||||
grep DUPLICATE $@; \
|
||||
@ -34,7 +32,8 @@ ${CAT}: english.base
|
||||
fi
|
||||
|
||||
CHK= dutch.check english.check french.check german.check \
|
||||
polish.check ru_SU.KOI8-R.check spanish.check swedish.check
|
||||
polish.check ru_RU.KOI8-R.check spanish.check swedish.check \
|
||||
uk_UA.KOI8-U.check zh_CN.GB2312.check
|
||||
check: ${CHK}
|
||||
${CHK}: ${CAT}
|
||||
@echo "... $@"; \
|
||||
@ -63,19 +62,14 @@ ${CHK}: ${CAT}
|
||||
echo "Duplicate messages, both id and message (this is okay):"; \
|
||||
sed '/^$$/d' < $$f.base | sort | uniq -c | \
|
||||
awk '$$1 != 1 { print $$0 }' | sort -n; \
|
||||
echo =========================; \
|
||||
echo "Duplicate messages, just message (this is okay):"; \
|
||||
sed '/^$$/d' < $$f | sort | uniq -c | \
|
||||
awk '$$1 != 1 { print $$0 }' | sort -n; \
|
||||
echo =========================) > $@
|
||||
|
||||
english.base: dump ${FILES} #Makefile
|
||||
./dump ${FILES} |\
|
||||
sed -e '/|/!d' \
|
||||
-e 's/|/ "/' \
|
||||
-e 's/^"//' \
|
||||
-e 's/\\"/"/g' |\
|
||||
sort -n > $@
|
||||
-e 's/^"//' |\
|
||||
sort -nu > $@
|
||||
|
||||
dump: dump.c
|
||||
${CC} -O -o dump dump.c
|
||||
|
@ -1,15 +1,9 @@
|
||||
# @(#)README 8.4 (Berkeley) 11/22/94
|
||||
# $Id: README,v 9.0 2012/10/19 17:06:15 zy Exp $
|
||||
|
||||
Generally, all non-system error and informational messages in nvi are
|
||||
catalog messages, i.e. they can be tailored to a specific langauge.
|
||||
Command strings, usage strings, system errors and other "known text"
|
||||
are not. It would certainly be possible to internationalize all the
|
||||
text strings in nvi, but it's unclear that it's the right thing to do.
|
||||
|
||||
First, there's no portable way to do message catalogs. The System V
|
||||
scheme is a reasonable choice, but none of the 4BSD derived systems
|
||||
support it. So, catalogs are completely implemented within nvi, and
|
||||
don't require any library support.
|
||||
Command strings, usage strings, system errors and other 'known text'
|
||||
are not.
|
||||
|
||||
Message catalogs in nvi are fairly simple. Every catalog message
|
||||
consists of two parts -- an initial number followed by a pipe (`|')
|
||||
@ -33,19 +27,7 @@ For example:
|
||||
|
||||
msgq(sp, M_ERR, "002|Error: %d %x", arg1, arg2);
|
||||
|
||||
is a format string that displays two arguments. It is possible, however,
|
||||
to reorder the arguments or to not display all of them. The convention
|
||||
nvi uses is the System V printf(3) convention, i.e. "%[0-9]*$" is the name
|
||||
of a specific, numbered argument. For example:
|
||||
|
||||
msgq(sp, M_ERR, "002|Error: %2$d %1$x", arg1, arg2);
|
||||
|
||||
displays the arguments in reverse order.
|
||||
|
||||
If the system supports this convention in its library printf routines
|
||||
(as specified by the test #define NL_ARGMAX), nvi uses those routines.
|
||||
Otherwise, there is some serious magic going on in common/msg.c to make
|
||||
this all work.
|
||||
is a format string that displays two arguments.
|
||||
|
||||
Arguments to the msgq function are required to contain ONLY printable
|
||||
characters. No further translation is done by the msgq routine before
|
||||
@ -54,14 +36,16 @@ displaying the message on the screen. For example, in the msgq call:
|
||||
msgq(sp, M_ERR, "003|File: %s", file_name);
|
||||
|
||||
"file_name" must contain only printable characters. The routine
|
||||
msg_print() returns a printable version of a string in allocated
|
||||
memory. For example:
|
||||
msg_print() returns a printable version of a string; the third argument
|
||||
indicates whether the string needs to be freed. For example:
|
||||
|
||||
char *p;
|
||||
int nf;
|
||||
|
||||
p = msg_print(sp, file_name);
|
||||
msgq(sp, M_ERR, M("003", "File: %s"), p);
|
||||
FREE_SPACE(sp, p, 0);
|
||||
p = msg_print(sp, file_name, &nf);
|
||||
msgq(sp, M_ERR, "003|File: %s", p);
|
||||
if (nf)
|
||||
FREE_SPACE(sp, p, 0);
|
||||
|
||||
makes sure that "file_name" is printable before calling the msgq
|
||||
routine.
|
||||
@ -71,63 +55,40 @@ routine.
|
||||
The message catalogs themselves are maintained in two files. The first
|
||||
is the "base file" which contains two fields, a record number and the
|
||||
message itself. All base files are named using the convention
|
||||
"vi_<language>.base", e.g. the English one is "vi_english.base". For
|
||||
"<language>.base", e.g. the English one is "english.base". For
|
||||
example:
|
||||
|
||||
002 "Unable to create temporary file"
|
||||
003 "Warning: %s is not a regular file"
|
||||
004 "%s already locked, session is read-only"
|
||||
005 "%s: remove"
|
||||
006 "%s: close"
|
||||
007 "%s: remove"
|
||||
008 "%s: remove"
|
||||
009 "Read-only file, not written; use ! to override"
|
||||
010 "Read-only file, not written"
|
||||
002 "Line length overflow"
|
||||
003 "unable to delete line %lu"
|
||||
004 "unable to append to line %lu"
|
||||
005 "unable to insert at line %lu"
|
||||
006 "unable to store line %lu"
|
||||
007 "unable to get last line"
|
||||
|
||||
are the first few lines of the current vi_english.base file. Note that
|
||||
message #1 is missing -- the first message of each catalog is a special
|
||||
one, so that nvi can recognize message catalog files. It's added by the
|
||||
Makefile script that creates the second version of the message catalog.
|
||||
are the first few lines of the current english.base file.
|
||||
|
||||
The second file is the file used by nvi to access messages, and is a list
|
||||
of the messages, one per line:
|
||||
Before this file being converted to the second file, the POSIX formatted
|
||||
message catalog file, by gencat(1), two lines:
|
||||
|
||||
VI_MESSAGE_CATALOG
|
||||
Unable to create temporary fileX
|
||||
Warning: %s is not a regular fileX
|
||||
%s already locked, session is read-onlyX
|
||||
%s: removeX
|
||||
%s: closeX
|
||||
%s: removeX
|
||||
%s: removeX
|
||||
Read-only file, not written; use ! to overrideX
|
||||
Read-only file, not writtenX
|
||||
$set 1
|
||||
$quote "
|
||||
|
||||
Note that all messages have had a trailing 'X' character appended. This
|
||||
is to provide nvi a place to store a trailing nul for the message so that
|
||||
C library routines that expect one won't be disappointed.
|
||||
will be inserted before the base text to setup the set_id and the quote
|
||||
character. So the double-quote needs to be escaped by a backslash to be
|
||||
included in a message; same as the backslash itself.
|
||||
|
||||
These files are named for their language, e.g. "vi_english". The second
|
||||
files are automatically created from the first files.
|
||||
These files are named for their language, e.g. "english". However, a
|
||||
locale(1) name is also recommended.
|
||||
|
||||
To create a new catalog for nvi:
|
||||
|
||||
Copy the file vi_english.base to a file that you can modify , e.g. "cp
|
||||
vi_english.base vi_german.base". For each of the messages in the file,
|
||||
replace the message with the string that you want to use. To find out
|
||||
what the arguments to a message are, I'm afraid you'll have to search
|
||||
the source code for the message number. You can find them fairly quickly
|
||||
by doing:
|
||||
Copy the file english.base to a file that you can modify , e.g. "cp
|
||||
english.base german.base". For each of the messages in the file,
|
||||
replace the message with the string that you want to use. If you have
|
||||
doubts about the meaning of a message, just email me.
|
||||
|
||||
cd ..; egrep '123\|' */*.[chys]
|
||||
|
||||
I'm sorry that there's not an easier way, but I couldn't think of
|
||||
anything that wasn't a lot of work.
|
||||
|
||||
If, for some reason, you don't have the file vi_english.base, or you
|
||||
have new sources for which you want to create a new base catalog, you
|
||||
can create it by running the command "make english" in the catalog
|
||||
directory.
|
||||
A latest english.base can be created from source by running the command
|
||||
"make english" in the catalog/ directory.
|
||||
|
||||
Once you've translated all of the strings, then add your catalog to the
|
||||
"CAT=" line of the Makefile, and run the command "make catalog". This
|
||||
@ -156,11 +117,11 @@ a single place.
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
||||
To select a catalog when running nvi, set the "msgcat" option. If the
|
||||
value of this option ends with a '/', it is treated as the name of a
|
||||
directory that contains a message catalog "vi_XXXX", where XXXX is the
|
||||
value of the LANG environmental variable, if it's set, or the value of
|
||||
the LC_MESSAGES environmental variable if it's not. If neither of those
|
||||
environmental variables are set, or if the option doesn't end in a '/',
|
||||
the option is treated as the full path name of the message catalog to use.
|
||||
directory that contains a message catalog "$LC_MESSAGES", which is set
|
||||
through the LC_MESSAGES environment variable but returned by setlocale(3).
|
||||
Check the output of locale(1) to validate such a value. If the option
|
||||
doesn't end in a '/', the option is treated as the full path name of the
|
||||
message catalog to use.
|
||||
|
||||
If any messages are missing from the catalog, the backup text (English)
|
||||
is used instead.
|
||||
|
@ -105,10 +105,10 @@ main(argc, argv)
|
||||
for (; *argv != NULL; ++argv) {
|
||||
if ((fp = fopen(*argv, "r")) == NULL) {
|
||||
perror(*argv);
|
||||
exit (1);
|
||||
return (1);
|
||||
}
|
||||
parse(fp);
|
||||
(void)fclose(fp);
|
||||
}
|
||||
exit (0);
|
||||
return (0);
|
||||
}
|
||||
|
@ -1,317 +0,0 @@
|
||||
VI_MESSAGE_CATALOG
|
||||
regel te langX
|
||||
kan regel %lu niet verwijderenX
|
||||
kan niet toevoegen aan regel %luX
|
||||
kan niet invoegen vooraan regel %luX
|
||||
kan regel %lu niet opslaanX
|
||||
kan laatste regel niet lezenX
|
||||
Fout: kan regel %lu niet vindenX
|
||||
log bestandX
|
||||
Er vindt geen logging plaats, kan wijzigingen niet ongedaan makenX
|
||||
geen wijzigingen om ongedaan te makenX
|
||||
Er vindt geen logging plaats, kan wijzigingen niet ongedaan makenX
|
||||
Er vindt geen logging plaats, herhaling niet mogelijkX
|
||||
geen wijzigingen om te herhalenX
|
||||
%s/%d: schrijven naar log misluktX
|
||||
Vi's standaard invoer en uitvoer moeten aan een terminal gekoppeld zijnX
|
||||
Merk %s: niet gezetX
|
||||
Merk %s: de regel is verwijderdX
|
||||
Merk %s: de cursor positie bestaat niet meerX
|
||||
Fout: X
|
||||
nieuw bestandX
|
||||
naam veranderdX
|
||||
gewijzigdX
|
||||
ongewijzigdX
|
||||
NIET BEVEILIGDX
|
||||
niet schrijfbaarX
|
||||
regel %lu uit %lu [%ld%%]X
|
||||
leeg bestandX
|
||||
regel %luX
|
||||
Het bestand %s is geen message catalogX
|
||||
Niet in staat om de standaard %s optie in te stellenX
|
||||
Gebruik: %sX
|
||||
set: optie %s onbekend: 'set all' laat alle opties zienX
|
||||
set: [no]%s optie kan geen waarde hebbenX
|
||||
set: %s optie moet een waarde hebbenX
|
||||
set: %s optie: %sX
|
||||
set: %s optie: %s: getal is te grootX
|
||||
set: %s optie: %s is een ongeldige waardeX
|
||||
set: %s optie moet een waarde hebbenX
|
||||
Te weinig kolommen op het scherm, minder dan %dX
|
||||
Aantal kolommen te groot, meer dan %dX
|
||||
Te weinig regels op het scherm, minder dan %dX
|
||||
Aantal regels te groot, meer dan %dX
|
||||
De lisp optie is niet ondersteundX
|
||||
messages niet uitgeschakeld: %sX
|
||||
messages niet geactiveerd: %sX
|
||||
|
||||
De paragraph optie moet karakter paren bevattenX
|
||||
De section optie moet karakter paren bevattenX
|
||||
|
||||
|
||||
|
||||
De standaard buffer is leegX
|
||||
Buffer %s is leegX
|
||||
Bestanden met newlines in de naam kunnen niet hersteld wordenX
|
||||
Wijzigingen kunnen niet ongedaan gemaakt worden als deze sessie misluktX
|
||||
Bestand wordt gecopieerd voor herstel...X
|
||||
Herstel mechanisme werkt niet: %sX
|
||||
Wijzigingen kunnen niet ongedaan gemaakt worden als deze sessie misluktX
|
||||
Kon bestand niet veilig stellen: %sX
|
||||
Bestand wordt gecopieerd voor herstel...X
|
||||
Informatie met betrekking tot gebruiker nummer %u niet gevondenX
|
||||
Kan herstel bestand niet beveiligenX
|
||||
herstel buffer overgelopenX
|
||||
herstel bestandX
|
||||
%s: verminkt herstel bestandX
|
||||
%s: verminkt herstel bestandX
|
||||
U heeft geen bestand genaamd %s te herstellenX
|
||||
U kan eerdere versies van dit bestand herstellenX
|
||||
U kan nog meer bestanden herstellenX
|
||||
kan geen email versturen: %sX
|
||||
Bestand leeg; niets om te doorzoekenX
|
||||
Einde van het bestand bereikt zonder dat het patroon gevonden isX
|
||||
Geen vorig zoek patroonX
|
||||
Patroon niet gevondenX
|
||||
Begin van het bestand bereikt zonder dat het patroon gevonden isX
|
||||
Zoek-operatie omgeslagenX
|
||||
Bezig met zoeken...X
|
||||
Geen niet-printbaar karakter gevondenX
|
||||
Onbekend commandoX
|
||||
|
||||
Commando niet beschikbaar in ex modeX
|
||||
Aantal mag niet nul zijnX
|
||||
%s: ongeldige regel aanduidingX
|
||||
Interne fout in syntax tabel (%s: %s)X
|
||||
Gebruik: %sX
|
||||
%s: tijdelijke buffer niet vrijgegevenX
|
||||
Vlag offset voor regel 1X
|
||||
Vlag offset voorbij bestands eindeX
|
||||
bestand/scherm veranderd tijdens uitvoeren van @ in een blokX
|
||||
bestand/scherm veranderd tijdens uitvoeren van globaal/v commandoX
|
||||
Ex commando mislukt: rest van commando(s) genegeerdX
|
||||
Ex commando mislukt: gemappede toetsen genegeerdX
|
||||
Het tweede adres is kleiner dan het eersteX
|
||||
Geen merk naam opgegevenX
|
||||
\\ niet gevolgd door / of ?X
|
||||
Referentie aan een regel nummer kleiner dan 0X
|
||||
Het %s commando is onbekendX
|
||||
Adres waarde te grootX
|
||||
Adres waarde te kleinX
|
||||
Ongeldige adres combinatieX
|
||||
Ongeldig adres: slechts %lu regels in het bestand aanwezigX
|
||||
Ongeldig adres: het bestand is leegX
|
||||
Het %s commando staat het adres 0 niet toeX
|
||||
Geen afkortingen om weer te gevenX
|
||||
Afkortingen moeten eindigen met een "woord" letterX
|
||||
Afkortingen mogen geen tabulaties of spaties bevattenX
|
||||
Afkortingen mogen geen woord/niet-woord karakters mengen, behalve aan het eindeX
|
||||
"%s" is geen afkortingX
|
||||
Vi commando mislukt: gemappede toetsen genegeerdX
|
||||
Dit is het laatste bestandX
|
||||
Dit is het eerste bestandX
|
||||
Dit is het eerste bestandX
|
||||
lijst met bestanden is leegX
|
||||
Geen voorgaand commando om "!" te vervangenX
|
||||
Geen bestandsnaam voor %%X
|
||||
Geen bestandsnaam voor #X
|
||||
Fout: execl: %sX
|
||||
I/O fout: %sX
|
||||
Bestand gewijzigd sinds laatste schrijfactie; schrijf het weg of gebruik ! om het te forcerenX
|
||||
Kan uw home directory niet vindenX
|
||||
Nieuwe huidige directory: %sX
|
||||
Geen cut buffers aanwezigX
|
||||
Het %s commando kan niet gebruikt worden in een globaal of v commandoX
|
||||
%s/%s: niet gelezen: noch U noch root is de eigenaarX
|
||||
%s/%s: niet gelezen: U bent niet de eigenaarX
|
||||
%s/%s: niet gelezen: kan gewijzigd worden door andere gebruikersX
|
||||
%s: niet gelezen: noch U noch root is de eigenaar"X
|
||||
%s: niet gelezen: U bent niet de eigenaarX
|
||||
%s: niet gelezen: kan gewijzigd worden door andere gebruikersX
|
||||
Geen volgende regel om samen te voegenX
|
||||
Geen input map entriesX
|
||||
Geen command map entriesX
|
||||
Het %s karakter kan niet ge-remapped wordenX
|
||||
"%s" is niet gemappedX
|
||||
Merk naam moet een enkel karakter zijnX
|
||||
%s bestaat al, niet weggeschreven; gebruik ! om het te forcerenX
|
||||
Nieuw .exrc bestand: %s. X
|
||||
doel regel ligt in het blokX
|
||||
Het open commando vereist dat de open optie actief isX
|
||||
Het open commando is nog niet ondersteundX
|
||||
Kan dit bestand niet veilig stellenX
|
||||
Bestand veilig gesteldX
|
||||
%s resulteert in te veel bestandsnamenX
|
||||
Alleen echte bestanden en named pipes kunnen gelezen wordenX
|
||||
%s: lees beveiliging niet beschikbaarX
|
||||
Bezig met lezen...X
|
||||
%s: %lu regels, %lu karaktersX
|
||||
Geen achtergrond schermen aanwezigX
|
||||
Het script commando is alleen beschikbaar in vi modeX
|
||||
Geen comando om uit te voerenX
|
||||
shiftwidth optie op 0 gezetX
|
||||
Count te grootX
|
||||
Count te kleinX
|
||||
Reguliere expressie opgegeven; r vlag heeft geen betekenisX
|
||||
De #, l en p vlaggen kunnen niet gecombineerd worden met de c vlag in vi modeX
|
||||
Geen match gevondenX
|
||||
Geen voorafgaande tag aanwezigX
|
||||
Minder dan %s elementen op de tags stapel; gebruik :display t[ags]X
|
||||
Geen bestand genaamd %s op de tags stapel; gebruik :display t[ags]X
|
||||
Kies Enter om door te gaan: X
|
||||
%s: tag niet gevondenX
|
||||
%s: verminkte tag in %sX
|
||||
%s: Het regel nummer van deze tag is voorbij het einde van het bestandX
|
||||
De tags stapel is leegX
|
||||
%s: zoek patroon niet gevondenX
|
||||
%d andere bestanden te wijzigenX
|
||||
Buffer %s is leegX
|
||||
Bevestig wijziging? [n]X
|
||||
OnderbrokenX
|
||||
Geen voorafgaande buffer om uit te voerenX
|
||||
Geen vorige reguliere expressieX
|
||||
Het %s commando vereist dat er een bestand geladen isX
|
||||
Gebruik: %sX
|
||||
Het visual commando vereist dat de open optie actief isX
|
||||
|
||||
Leeg bestandX
|
||||
Geen voorafgaand F, f, T of t zoek commandoX
|
||||
%s niet gevondenX
|
||||
Geen voorafgaand bestand te bewerkenX
|
||||
Cursor niet op een getalX
|
||||
Getal wordt te grootX
|
||||
Getal wordt te kleinX
|
||||
Geen overeenkomstig karakter op deze regelX
|
||||
Overeenkomstig karakter niet gevondenX
|
||||
Geen karakters te vervangenX
|
||||
Geen ander scherm aanwezigX
|
||||
Karakters achter het zoek patroon, de regel offset, en/of het z commandoX
|
||||
Geen voorafgaand zoek patroonX
|
||||
Zoekopdracht na omslag teruggekeerd op originele positieX
|
||||
Afkorting overschrijdt expansie limiet: karakters genegeerdX
|
||||
Ongeldig karakter; quote to enterX
|
||||
Reeds aan het begin van de invoerX
|
||||
Niet meer karakters te verwijderenX
|
||||
Verplaatsing voorbij het einde van het bestandX
|
||||
Verplaatsing voorbij het einde van de regelX
|
||||
Cursor niet verplaatstX
|
||||
Reeds aan het begin van het bestandX
|
||||
Verplaatsing voorbij het begin van het bestandX
|
||||
Reeds in de eerste kolomX
|
||||
Buffers moeten voor het commando opgegeven wordenX
|
||||
Reeds bij het einde van het bestandX
|
||||
Reeds bij het einde van de regelX
|
||||
%s is geen vi commandoX
|
||||
Gebruik: %sX
|
||||
Geen karakters te verwijderenX
|
||||
Het Q commando vereist de ex terminal interfaceX
|
||||
Geen commando om te herhalenX
|
||||
Het bestand is leegX
|
||||
%s mag niet gebruikt worden als een verplaatsings commandoX
|
||||
Al in commando modeX
|
||||
Cursor niet in een woordX
|
||||
|
||||
Windows optie waarde is te groot, maximum is %uX
|
||||
ToevoegenX
|
||||
VeranderenX
|
||||
CommandoX
|
||||
InvoegenX
|
||||
VervangenX
|
||||
Verplaatsing voorbij het eind van het schermX
|
||||
Verplaatsing voorbij het begin van het schermX
|
||||
Scherm moet meer dan %d regels hebben om het te kunnen splitsenX
|
||||
Er zijn geen achtergrond schermenX
|
||||
Er is geen achtergrond scherm waarin U bestand %s aan het bewerken bentX
|
||||
U kan uw enige scherm niet in de achtergrond zettenX
|
||||
Het scherm kan slechts verkleind worden tot %d regelsX
|
||||
Het scherm kan niet kleinerX
|
||||
Het scherm kan niet groterX
|
||||
|
||||
Dit scherm kan niet gesuspend wordenX
|
||||
Onderbroken: gemappede toetsen genegeerdX
|
||||
vi: tijdelijke buffer niet vrijgegevenX
|
||||
Deze terminal heeft geen %s toetsX
|
||||
Er kan slechts een buffer opgegeven wordenX
|
||||
Getal groter dan %luX
|
||||
OnderbrokenX
|
||||
Aanmaken van tijdelijk bestand is misluktX
|
||||
Waarschuwing: %s is geen regulier bestandX
|
||||
%s is al geopend, bestand is in deze sessie niet schrijfbaarX
|
||||
%s: verwijdering misluktX
|
||||
%s: sluiting misluktX
|
||||
%s: verwijdering misluktX
|
||||
%s: verwijdering misluktX
|
||||
Bestand niet schrijfbaar, niet weggeschreven; gebruik ! om het te forcerenX
|
||||
Bestand niet schrijfbaar, niet weggeschrevenX
|
||||
%s bestaat al, niet weggeschreven; gebruik ! om het te forcerenX
|
||||
%s bestaat al, niet weggeschrevenX
|
||||
Gebruik ! om een incompleet bestand weg te schrijvenX
|
||||
Bestand incompleet, niet weggeschrevenX
|
||||
%s: bestand op disk nieuwer dan deze versie; gebruik ! om het te forcerenX
|
||||
%s: bestand op disk nieuwer dan deze versieX
|
||||
%s: schrijf beveiliging niet beschikbaarX
|
||||
Bezig met schrijven...X
|
||||
%s: WAARSCHUWING: BESTAND INCOMPLEETX
|
||||
Reeds op de eerste tag van deze groepX
|
||||
%s: nieuw bestand: %lu regels, %lu karaktersX
|
||||
%s: %lu regels, %lu karaktersX
|
||||
%s resulteert in te veel bestandsnamenX
|
||||
%s: geen normaal bestandX
|
||||
%s: U bent niet de eigenaarX
|
||||
%s: kan gewijzigd worden door andere gebruikersX
|
||||
Bestand gewijzigd sinds laatste schrijfactie; schrijf het weg of gebruik ! om het te forcerenX
|
||||
Bestand gewijzigd sinds laatste schrijfactie; schrijf het weg of gebruik :edit! om het te forcerenX
|
||||
Bestand gewijzigd sinds laatste schrijfactie; schrijf het weg of gebruik ! om het te forcerenX
|
||||
Tijdelijk bestand; exit negeert wijzigingenX
|
||||
Bestand niet schrijfbaar, wijzigingen niet automatisch weggeschrevenX
|
||||
log opnieuw gestartX
|
||||
Bevestig? [ynq]X
|
||||
Druk op een toets om door te gaan: X
|
||||
Druk op een toets om door te gaan [: voor meer ex commandos]: X
|
||||
Druk op een toets om door te gaan [q om te stoppen]: X
|
||||
Deze vorm van %s vereist de ex terminal interfaceX
|
||||
Entering ex input mode.X
|
||||
Commando mislukt, nog geen bestand geladen.X
|
||||
doorgaan?X
|
||||
Onverwacht character eventX
|
||||
Onverwacht end-of-file eventX
|
||||
Geen match gevonden voor dit patroonX
|
||||
Onverwacht interrupt eventX
|
||||
Onverwacht quit eventX
|
||||
Onverwacht repaint eventX
|
||||
Reeds op de laatste tag van deze groepX
|
||||
Het %s command vereist de ex terminal interfaceX
|
||||
Deze vorm van %s is niet ondersteund als de secure edit optie actief isX
|
||||
Onverwacht string eventX
|
||||
Onverwacht timeout eventX
|
||||
Onverwacht write eventX
|
||||
|
||||
Shell expansies zijn niet ondersteund als de secure edit optie actief isX
|
||||
Het %s commando is niet ondersteund als de secure edit optie actief isX
|
||||
set: %s mag niet uitgezet wordenX
|
||||
Scherm te klein.X
|
||||
toegevoegdX
|
||||
gewijzigdX
|
||||
verwijderdX
|
||||
samengevoegdX
|
||||
verplaatstX
|
||||
verschovenX
|
||||
gebufferdX
|
||||
regelX
|
||||
regelsX
|
||||
Vi was niet geladen met een Tcl interpreterX
|
||||
Bestand gewijzigd sinds het de laatste keer weg is geschreven.X
|
||||
Shell expansie misluktX
|
||||
Geen %s edit optie opgegevenX
|
||||
Vi was niet geladen met een Perl interpreterX
|
||||
Geen ex commando om uit te voerenX
|
||||
Kies <CR> om commando uit te voeren, :q om te stoppenX
|
||||
Gebruik "cscope help" voor uitlegX
|
||||
Nog geen cscope connectie aanwezigX
|
||||
%s: onbekend zoek type: gebruik een van %sX
|
||||
%d: onbekende cscope sessieX
|
||||
set: de %s optie mag nooit aangezet wordenX
|
||||
set: de %s optie mag nooit op 0 gezet wordenX
|
||||
%s: toegevoegd: %lu regels, %lu karaktersX
|
||||
Onverwacht resize eventX
|
||||
%d bestanden te wijzigenX
|
@ -43,8 +43,7 @@
|
||||
044 "De lisp optie is niet ondersteund"
|
||||
045 "messages niet uitgeschakeld: %s"
|
||||
046 "messages niet geactiveerd: %s"
|
||||
048 "De paragraph optie moet karakter paren bevatten"
|
||||
049 "De section optie moet karakter paren bevatten"
|
||||
047 "De %s optie moet karakter paren bevatten"
|
||||
053 "De standaard buffer is leeg"
|
||||
054 "Buffer %s is leeg"
|
||||
055 "Bestanden met newlines in de naam kunnen niet hersteld worden"
|
||||
@ -97,16 +96,16 @@
|
||||
103 "Ongeldig adres: het bestand is leeg"
|
||||
104 "Het %s commando staat het adres 0 niet toe"
|
||||
105 "Geen afkortingen om weer te geven"
|
||||
106 "Afkortingen moeten eindigen met een "woord" letter"
|
||||
106 "Afkortingen moeten eindigen met een \"woord\" letter"
|
||||
107 "Afkortingen mogen geen tabulaties of spaties bevatten"
|
||||
108 "Afkortingen mogen geen woord/niet-woord karakters mengen, behalve aan het einde"
|
||||
109 ""%s" is geen afkorting"
|
||||
109 "\"%s\" is geen afkorting"
|
||||
110 "Vi commando mislukt: gemappede toetsen genegeerd"
|
||||
111 "Dit is het laatste bestand"
|
||||
112 "Dit is het eerste bestand"
|
||||
113 "Dit is het eerste bestand"
|
||||
114 "lijst met bestanden is leeg"
|
||||
115 "Geen voorgaand commando om "!" te vervangen"
|
||||
115 "Geen voorgaand commando om \"!\" te vervangen"
|
||||
116 "Geen bestandsnaam voor %%"
|
||||
117 "Geen bestandsnaam voor #"
|
||||
118 "Fout: execl: %s"
|
||||
@ -119,14 +118,14 @@
|
||||
125 "%s/%s: niet gelezen: noch U noch root is de eigenaar"
|
||||
126 "%s/%s: niet gelezen: U bent niet de eigenaar"
|
||||
127 "%s/%s: niet gelezen: kan gewijzigd worden door andere gebruikers"
|
||||
128 "%s: niet gelezen: noch U noch root is de eigenaar""
|
||||
128 "%s: niet gelezen: noch U noch root is de eigenaar"
|
||||
129 "%s: niet gelezen: U bent niet de eigenaar"
|
||||
130 "%s: niet gelezen: kan gewijzigd worden door andere gebruikers"
|
||||
131 "Geen volgende regel om samen te voegen"
|
||||
132 "Geen input map entries"
|
||||
133 "Geen command map entries"
|
||||
134 "Het %s karakter kan niet ge-remapped worden"
|
||||
135 ""%s" is niet gemapped"
|
||||
135 "\"%s\" is niet gemapped"
|
||||
136 "Merk naam moet een enkel karakter zijn"
|
||||
137 "%s bestaat al, niet weggeschreven; gebruik ! om het te forceren"
|
||||
138 "Nieuw .exrc bestand: %s. "
|
||||
@ -296,7 +295,7 @@
|
||||
306 "Vi was niet geladen met een Perl interpreter"
|
||||
307 "Geen ex commando om uit te voeren"
|
||||
308 "Kies <CR> om commando uit te voeren, :q om te stoppen"
|
||||
309 "Gebruik "cscope help" voor uitleg"
|
||||
309 "Gebruik \"cscope help\" voor uitleg"
|
||||
310 "Nog geen cscope connectie aanwezig"
|
||||
311 "%s: onbekend zoek type: gebruik een van %s"
|
||||
312 "%d: onbekende cscope sessie"
|
||||
|
@ -1,37 +0,0 @@
|
||||
Unused message id's (this is okay):
|
||||
001
|
||||
047
|
||||
050
|
||||
051
|
||||
052
|
||||
081
|
||||
176
|
||||
213
|
||||
229
|
||||
288
|
||||
=========================
|
||||
MISSING ERROR MESSAGES (Please add!):
|
||||
=========================
|
||||
Extra error messages (just delete them):
|
||||
=========================
|
||||
MESSAGES WITH THE SAME MESSAGE ID's (FIX!):
|
||||
=========================
|
||||
Duplicate messages, both id and message (this is okay):
|
||||
=========================
|
||||
Duplicate messages, just message (this is okay):
|
||||
2 %s bestaat al, niet weggeschreven; gebruik ! om het te forcerenX
|
||||
2 %s resulteert in te veel bestandsnamenX
|
||||
2 %s: %lu regels, %lu karaktersX
|
||||
2 %s: verminkt herstel bestandX
|
||||
2 Bestand wordt gecopieerd voor herstel...X
|
||||
2 Buffer %s is leegX
|
||||
2 Dit is het eerste bestandX
|
||||
2 Er vindt geen logging plaats, kan wijzigingen niet ongedaan makenX
|
||||
2 OnderbrokenX
|
||||
2 Wijzigingen kunnen niet ongedaan gemaakt worden als deze sessie misluktX
|
||||
2 gewijzigdX
|
||||
2 set: %s optie moet een waarde hebbenX
|
||||
3 %s: verwijdering misluktX
|
||||
3 Bestand gewijzigd sinds laatste schrijfactie; schrijf het weg of gebruik ! om het te forcerenX
|
||||
4 Gebruik: %sX
|
||||
=========================
|
@ -1,317 +0,0 @@
|
||||
VI_MESSAGE_CATALOG
|
||||
Line length overflowX
|
||||
unable to delete line %luX
|
||||
unable to append to line %luX
|
||||
unable to insert at line %luX
|
||||
unable to store line %luX
|
||||
unable to get last lineX
|
||||
Error: unable to retrieve line %luX
|
||||
Log fileX
|
||||
Logging not being performed, undo not possibleX
|
||||
No changes to undoX
|
||||
Logging not being performed, undo not possibleX
|
||||
Logging not being performed, roll-forward not possibleX
|
||||
No changes to re-doX
|
||||
%s/%d: log put errorX
|
||||
Vi's standard input and output must be a terminalX
|
||||
Mark %s: not setX
|
||||
Mark %s: the line was deletedX
|
||||
Mark %s: cursor position no longer existsX
|
||||
Error: X
|
||||
new fileX
|
||||
name changedX
|
||||
modifiedX
|
||||
unmodifiedX
|
||||
UNLOCKEDX
|
||||
readonlyX
|
||||
line %lu of %lu [%ld%%]X
|
||||
empty fileX
|
||||
line %luX
|
||||
The file %s is not a message catalogX
|
||||
Unable to set default %s optionX
|
||||
Usage: %sX
|
||||
set: no %s option: 'set all' gives all option valuesX
|
||||
set: [no]%s option doesn't take a valueX
|
||||
set: %s option isn't a booleanX
|
||||
set: %s option: %sX
|
||||
set: %s option: %s: value overflowX
|
||||
set: %s option: %s is an illegal numberX
|
||||
set: %s option isn't a booleanX
|
||||
Screen columns too small, less than %dX
|
||||
Screen columns too large, greater than %dX
|
||||
Screen lines too small, less than %dX
|
||||
Screen lines too large, greater than %dX
|
||||
The lisp option is not implementedX
|
||||
messages not turned off: %sX
|
||||
messages not turned on: %sX
|
||||
|
||||
The paragraph option must be in two character groupsX
|
||||
The section option must be in two character groupsX
|
||||
|
||||
|
||||
|
||||
The default buffer is emptyX
|
||||
Buffer %s is emptyX
|
||||
Files with newlines in the name are unrecoverableX
|
||||
Modifications not recoverable if the session failsX
|
||||
Copying file for recovery...X
|
||||
Preservation failed: %sX
|
||||
Modifications not recoverable if the session failsX
|
||||
File backup failed: %sX
|
||||
Copying file for recovery...X
|
||||
Information on user id %u not foundX
|
||||
Unable to lock recovery fileX
|
||||
Recovery file buffer overrunX
|
||||
Recovery fileX
|
||||
%s: malformed recovery fileX
|
||||
%s: malformed recovery fileX
|
||||
No files named %s, readable by you, to recoverX
|
||||
There are older versions of this file for you to recoverX
|
||||
There are other files for you to recoverX
|
||||
not sending email: %sX
|
||||
File empty; nothing to searchX
|
||||
Reached end-of-file without finding the patternX
|
||||
No previous search patternX
|
||||
Pattern not foundX
|
||||
Reached top-of-file without finding the patternX
|
||||
Search wrappedX
|
||||
Searching...X
|
||||
No non-printable character foundX
|
||||
Unknown command nameX
|
||||
|
||||
%s: command not available in ex modeX
|
||||
Count may not be zeroX
|
||||
%s: bad line specificationX
|
||||
Internal syntax table error (%s: %s)X
|
||||
Usage: %sX
|
||||
%s: temporary buffer not releasedX
|
||||
Flag offset to before line 1X
|
||||
Flag offset past end-of-fileX
|
||||
@ with range running when the file/screen changedX
|
||||
Global/v command running when the file/screen changedX
|
||||
Ex command failed: pending commands discardedX
|
||||
Ex command failed: mapped keys discardedX
|
||||
The second address is smaller than the firstX
|
||||
No mark name suppliedX
|
||||
\\ not followed by / or ?X
|
||||
Reference to a line number less than 0X
|
||||
The %s command is unknownX
|
||||
Address value overflowX
|
||||
Address value underflowX
|
||||
Illegal address combinationX
|
||||
Illegal address: only %lu lines in the fileX
|
||||
Illegal address: the file is emptyX
|
||||
The %s command doesn't permit an address of 0X
|
||||
No abbreviations to displayX
|
||||
Abbreviations must end with a "word" characterX
|
||||
Abbreviations may not contain tabs or spacesX
|
||||
Abbreviations may not mix word/non-word characters, except at the endX
|
||||
"%s" is not an abbreviationX
|
||||
Vi command failed: mapped keys discardedX
|
||||
No more files to editX
|
||||
No previous files to editX
|
||||
No previous files to rewindX
|
||||
No file list to displayX
|
||||
No previous command to replace "!"X
|
||||
No filename to substitute for %%X
|
||||
No filename to substitute for #X
|
||||
Error: execl: %sX
|
||||
I/O error: %sX
|
||||
File modified since last complete write; write or use ! to overrideX
|
||||
Unable to find home directory locationX
|
||||
New current directory: %sX
|
||||
No cut buffers to displayX
|
||||
The %s command can't be used as part of a global or v commandX
|
||||
%s/%s: not sourced: not owned by you or rootX
|
||||
%s/%s: not sourced: not owned by youX
|
||||
%s/%s: not sourced: writeable by a user other than the ownerX
|
||||
%s: not sourced: not owned by you or rootX
|
||||
%s: not sourced: not owned by youX
|
||||
%s: not sourced: writeable by a user other than the ownerX
|
||||
No following lines to joinX
|
||||
No input map entriesX
|
||||
No command map entriesX
|
||||
The %s character may not be remappedX
|
||||
"%s" isn't currently mappedX
|
||||
Mark names must be a single characterX
|
||||
%s exists, not written; use ! to overrideX
|
||||
New exrc file: %sX
|
||||
Destination line is inside move rangeX
|
||||
The open command requires that the open option be setX
|
||||
The open command is not yet implementedX
|
||||
Preservation of this file not possibleX
|
||||
File preservedX
|
||||
%s: expanded into too many file namesX
|
||||
Only regular files and named pipes may be readX
|
||||
%s: read lock was unavailableX
|
||||
Reading...X
|
||||
%s: %lu lines, %lu charactersX
|
||||
No background screens to displayX
|
||||
The script command is only available in vi modeX
|
||||
No command to executeX
|
||||
shiftwidth option set to 0X
|
||||
Count overflowX
|
||||
Count underflowX
|
||||
Regular expression specified; r flag meaninglessX
|
||||
The #, l and p flags may not be combined with the c flag in vi modeX
|
||||
No match foundX
|
||||
No previous tag enteredX
|
||||
Less than %s entries on the tags stack; use :display t[ags]X
|
||||
No file %s on the tags stack to return to; use :display t[ags]X
|
||||
Press Enter to continue: X
|
||||
%s: tag not foundX
|
||||
%s: corrupted tag in %sX
|
||||
%s: the tag's line number is past the end of the fileX
|
||||
The tags stack is emptyX
|
||||
%s: search pattern not foundX
|
||||
%d more files to editX
|
||||
Buffer %s is emptyX
|
||||
Confirm change? [n]X
|
||||
InterruptedX
|
||||
No previous buffer to executeX
|
||||
No previous regular expressionX
|
||||
The %s command requires that a file have already been read inX
|
||||
Usage: %sX
|
||||
The visual command requires that the open option be setX
|
||||
|
||||
Empty fileX
|
||||
No previous F, f, T or t searchX
|
||||
%s not foundX
|
||||
No previous file to editX
|
||||
Cursor not in a numberX
|
||||
Resulting number too largeX
|
||||
Resulting number too smallX
|
||||
No match character on this lineX
|
||||
Matching character not foundX
|
||||
No characters to replaceX
|
||||
No other screen to switch toX
|
||||
Characters after search string, line offset and/or z commandX
|
||||
No previous search patternX
|
||||
Search wrapped to original positionX
|
||||
Abbreviation exceeded expansion limit: characters discardedX
|
||||
Illegal character; quote to enterX
|
||||
Already at the beginning of the insertX
|
||||
No more characters to eraseX
|
||||
Movement past the end-of-fileX
|
||||
Movement past the end-of-lineX
|
||||
No cursor movement madeX
|
||||
Already at the beginning of the fileX
|
||||
Movement past the beginning of the fileX
|
||||
Already in the first columnX
|
||||
Buffers should be specified before the commandX
|
||||
Already at end-of-fileX
|
||||
Already at end-of-lineX
|
||||
%s isn't a vi commandX
|
||||
Usage: %sX
|
||||
No characters to deleteX
|
||||
The Q command requires the ex terminal interfaceX
|
||||
No command to repeatX
|
||||
The file is emptyX
|
||||
%s may not be used as a motion commandX
|
||||
Already in command modeX
|
||||
Cursor not in a wordX
|
||||
|
||||
Windows option value is too large, max is %uX
|
||||
AppendX
|
||||
ChangeX
|
||||
CommandX
|
||||
InsertX
|
||||
ReplaceX
|
||||
Movement past the end-of-screenX
|
||||
Movement past the beginning-of-screenX
|
||||
Screen must be larger than %d lines to splitX
|
||||
There are no background screensX
|
||||
There's no background screen editing a file named %sX
|
||||
You may not background your only displayed screenX
|
||||
The screen can only shrink to %d rowsX
|
||||
The screen cannot shrinkX
|
||||
The screen cannot growX
|
||||
|
||||
This screen may not be suspendedX
|
||||
Interrupted: mapped keys discardedX
|
||||
vi: temporary buffer not releasedX
|
||||
This terminal has no %s keyX
|
||||
Only one buffer may be specifiedX
|
||||
Number larger than %luX
|
||||
InterruptedX
|
||||
Unable to create temporary fileX
|
||||
Warning: %s is not a regular fileX
|
||||
%s already locked, session is read-onlyX
|
||||
%s: removeX
|
||||
%s: closeX
|
||||
%s: removeX
|
||||
%s: removeX
|
||||
Read-only file, not written; use ! to overrideX
|
||||
Read-only file, not writtenX
|
||||
%s exists, not written; use ! to overrideX
|
||||
%s exists, not writtenX
|
||||
Partial file, not written; use ! to overrideX
|
||||
Partial file, not writtenX
|
||||
%s: file modified more recently than this copy; use ! to overrideX
|
||||
%s: file modified more recently than this copyX
|
||||
%s: write lock was unavailableX
|
||||
Writing...X
|
||||
%s: WARNING: FILE TRUNCATEDX
|
||||
Already at the first tag of this groupX
|
||||
%s: new file: %lu lines, %lu charactersX
|
||||
%s: %lu lines, %lu charactersX
|
||||
%s expanded into too many file namesX
|
||||
%s: not a regular fileX
|
||||
%s: not owned by youX
|
||||
%s: accessible by a user other than the ownerX
|
||||
File modified since last complete write; write or use ! to overrideX
|
||||
File modified since last complete write; write or use :edit! to overrideX
|
||||
File modified since last complete write; write or use ! to overrideX
|
||||
File is a temporary; exit will discard modificationsX
|
||||
File readonly, modifications not auto-writtenX
|
||||
Log restartedX
|
||||
confirm? [ynq]X
|
||||
Press any key to continue: X
|
||||
Press any key to continue [: to enter more ex commands]: X
|
||||
Press any key to continue [q to quit]: X
|
||||
That form of %s requires the ex terminal interfaceX
|
||||
Entering ex input mode.X
|
||||
Command failed, no file read in yet.X
|
||||
cont?X
|
||||
Unexpected character eventX
|
||||
Unexpected end-of-file eventX
|
||||
No matches for queryX
|
||||
Unexpected interrupt eventX
|
||||
Unexpected quit eventX
|
||||
Unexpected repaint eventX
|
||||
Already at the last tag of this groupX
|
||||
The %s command requires the ex terminal interfaceX
|
||||
That form of %s is not supported when the secure edit option is setX
|
||||
Unexpected string eventX
|
||||
Unexpected timeout eventX
|
||||
Unexpected write eventX
|
||||
|
||||
Shell expansions not supported when the secure edit option is setX
|
||||
The %s command is not supported when the secure edit option is setX
|
||||
set: the %s option may not be turned offX
|
||||
Display too small.X
|
||||
addedX
|
||||
changedX
|
||||
deletedX
|
||||
joinedX
|
||||
movedX
|
||||
shiftedX
|
||||
yankedX
|
||||
lineX
|
||||
linesX
|
||||
Vi was not loaded with a Tcl interpreterX
|
||||
File modified since last write.X
|
||||
Shell expansion failedX
|
||||
No %s edit option specifiedX
|
||||
Vi was not loaded with a Perl interpreterX
|
||||
No ex command to executeX
|
||||
Enter <CR> to execute a command, :q to exitX
|
||||
Use "cscope help" for helpX
|
||||
No cscope connections runningX
|
||||
%s: unknown search type: use one of %sX
|
||||
%d: no such cscope sessionX
|
||||
set: the %s option may never be turned onX
|
||||
set: the %s option may never be set to 0X
|
||||
%s: appended: %lu lines, %lu charactersX
|
||||
Unexpected resize eventX
|
||||
%d files to editX
|
@ -1,309 +0,0 @@
|
||||
002 "Line length overflow"
|
||||
003 "unable to delete line %lu"
|
||||
004 "unable to append to line %lu"
|
||||
005 "unable to insert at line %lu"
|
||||
006 "unable to store line %lu"
|
||||
007 "unable to get last line"
|
||||
008 "Error: unable to retrieve line %lu"
|
||||
009 "Log file"
|
||||
010 "Logging not being performed, undo not possible"
|
||||
011 "No changes to undo"
|
||||
012 "Logging not being performed, undo not possible"
|
||||
013 "Logging not being performed, roll-forward not possible"
|
||||
014 "No changes to re-do"
|
||||
015 "%s/%d: log put error"
|
||||
016 "Vi's standard input and output must be a terminal"
|
||||
017 "Mark %s: not set"
|
||||
018 "Mark %s: the line was deleted"
|
||||
019 "Mark %s: cursor position no longer exists"
|
||||
020 "Error: "
|
||||
021 "new file"
|
||||
022 "name changed"
|
||||
023 "modified"
|
||||
024 "unmodified"
|
||||
025 "UNLOCKED"
|
||||
026 "readonly"
|
||||
027 "line %lu of %lu [%ld%%]"
|
||||
028 "empty file"
|
||||
029 "line %lu"
|
||||
030 "The file %s is not a message catalog"
|
||||
031 "Unable to set default %s option"
|
||||
032 "Usage: %s"
|
||||
033 "set: no %s option: 'set all' gives all option values"
|
||||
034 "set: [no]%s option doesn't take a value"
|
||||
035 "set: %s option isn't a boolean"
|
||||
036 "set: %s option: %s"
|
||||
037 "set: %s option: %s: value overflow"
|
||||
038 "set: %s option: %s is an illegal number"
|
||||
039 "set: %s option isn't a boolean"
|
||||
040 "Screen columns too small, less than %d"
|
||||
041 "Screen columns too large, greater than %d"
|
||||
042 "Screen lines too small, less than %d"
|
||||
043 "Screen lines too large, greater than %d"
|
||||
044 "The lisp option is not implemented"
|
||||
045 "messages not turned off: %s"
|
||||
046 "messages not turned on: %s"
|
||||
048 "The paragraph option must be in two character groups"
|
||||
049 "The section option must be in two character groups"
|
||||
053 "The default buffer is empty"
|
||||
054 "Buffer %s is empty"
|
||||
055 "Files with newlines in the name are unrecoverable"
|
||||
056 "Modifications not recoverable if the session fails"
|
||||
057 "Copying file for recovery..."
|
||||
058 "Preservation failed: %s"
|
||||
059 "Modifications not recoverable if the session fails"
|
||||
060 "File backup failed: %s"
|
||||
061 "Copying file for recovery..."
|
||||
062 "Information on user id %u not found"
|
||||
063 "Unable to lock recovery file"
|
||||
064 "Recovery file buffer overrun"
|
||||
065 "Recovery file"
|
||||
066 "%s: malformed recovery file"
|
||||
067 "%s: malformed recovery file"
|
||||
068 "No files named %s, readable by you, to recover"
|
||||
069 "There are older versions of this file for you to recover"
|
||||
070 "There are other files for you to recover"
|
||||
071 "not sending email: %s"
|
||||
072 "File empty; nothing to search"
|
||||
073 "Reached end-of-file without finding the pattern"
|
||||
074 "No previous search pattern"
|
||||
075 "Pattern not found"
|
||||
076 "Reached top-of-file without finding the pattern"
|
||||
077 "Search wrapped"
|
||||
078 "Searching..."
|
||||
079 "No non-printable character found"
|
||||
080 "Unknown command name"
|
||||
082 "%s: command not available in ex mode"
|
||||
083 "Count may not be zero"
|
||||
084 "%s: bad line specification"
|
||||
085 "Internal syntax table error (%s: %s)"
|
||||
086 "Usage: %s"
|
||||
087 "%s: temporary buffer not released"
|
||||
088 "Flag offset to before line 1"
|
||||
089 "Flag offset past end-of-file"
|
||||
090 "@ with range running when the file/screen changed"
|
||||
091 "Global/v command running when the file/screen changed"
|
||||
092 "Ex command failed: pending commands discarded"
|
||||
093 "Ex command failed: mapped keys discarded"
|
||||
094 "The second address is smaller than the first"
|
||||
095 "No mark name supplied"
|
||||
096 "\\ not followed by / or ?"
|
||||
097 "Reference to a line number less than 0"
|
||||
098 "The %s command is unknown"
|
||||
099 "Address value overflow"
|
||||
100 "Address value underflow"
|
||||
101 "Illegal address combination"
|
||||
102 "Illegal address: only %lu lines in the file"
|
||||
103 "Illegal address: the file is empty"
|
||||
104 "The %s command doesn't permit an address of 0"
|
||||
105 "No abbreviations to display"
|
||||
106 "Abbreviations must end with a "word" character"
|
||||
107 "Abbreviations may not contain tabs or spaces"
|
||||
108 "Abbreviations may not mix word/non-word characters, except at the end"
|
||||
109 ""%s" is not an abbreviation"
|
||||
110 "Vi command failed: mapped keys discarded"
|
||||
111 "No more files to edit"
|
||||
112 "No previous files to edit"
|
||||
113 "No previous files to rewind"
|
||||
114 "No file list to display"
|
||||
115 "No previous command to replace "!""
|
||||
116 "No filename to substitute for %%"
|
||||
117 "No filename to substitute for #"
|
||||
118 "Error: execl: %s"
|
||||
119 "I/O error: %s"
|
||||
120 "File modified since last complete write; write or use ! to override"
|
||||
121 "Unable to find home directory location"
|
||||
122 "New current directory: %s"
|
||||
123 "No cut buffers to display"
|
||||
124 "The %s command can't be used as part of a global or v command"
|
||||
125 "%s/%s: not sourced: not owned by you or root"
|
||||
126 "%s/%s: not sourced: not owned by you"
|
||||
127 "%s/%s: not sourced: writeable by a user other than the owner"
|
||||
128 "%s: not sourced: not owned by you or root"
|
||||
129 "%s: not sourced: not owned by you"
|
||||
130 "%s: not sourced: writeable by a user other than the owner"
|
||||
131 "No following lines to join"
|
||||
132 "No input map entries"
|
||||
133 "No command map entries"
|
||||
134 "The %s character may not be remapped"
|
||||
135 ""%s" isn't currently mapped"
|
||||
136 "Mark names must be a single character"
|
||||
137 "%s exists, not written; use ! to override"
|
||||
138 "New exrc file: %s"
|
||||
139 "Destination line is inside move range"
|
||||
140 "The open command requires that the open option be set"
|
||||
141 "The open command is not yet implemented"
|
||||
142 "Preservation of this file not possible"
|
||||
143 "File preserved"
|
||||
144 "%s: expanded into too many file names"
|
||||
145 "Only regular files and named pipes may be read"
|
||||
146 "%s: read lock was unavailable"
|
||||
147 "Reading..."
|
||||
148 "%s: %lu lines, %lu characters"
|
||||
149 "No background screens to display"
|
||||
150 "The script command is only available in vi mode"
|
||||
151 "No command to execute"
|
||||
152 "shiftwidth option set to 0"
|
||||
153 "Count overflow"
|
||||
154 "Count underflow"
|
||||
155 "Regular expression specified; r flag meaningless"
|
||||
156 "The #, l and p flags may not be combined with the c flag in vi mode"
|
||||
157 "No match found"
|
||||
158 "No previous tag entered"
|
||||
159 "Less than %s entries on the tags stack; use :display t[ags]"
|
||||
160 "No file %s on the tags stack to return to; use :display t[ags]"
|
||||
161 "Press Enter to continue: "
|
||||
162 "%s: tag not found"
|
||||
163 "%s: corrupted tag in %s"
|
||||
164 "%s: the tag's line number is past the end of the file"
|
||||
165 "The tags stack is empty"
|
||||
166 "%s: search pattern not found"
|
||||
167 "%d more files to edit"
|
||||
168 "Buffer %s is empty"
|
||||
169 "Confirm change? [n]"
|
||||
170 "Interrupted"
|
||||
171 "No previous buffer to execute"
|
||||
172 "No previous regular expression"
|
||||
173 "The %s command requires that a file have already been read in"
|
||||
174 "Usage: %s"
|
||||
175 "The visual command requires that the open option be set"
|
||||
177 "Empty file"
|
||||
178 "No previous F, f, T or t search"
|
||||
179 "%s not found"
|
||||
180 "No previous file to edit"
|
||||
181 "Cursor not in a number"
|
||||
182 "Resulting number too large"
|
||||
183 "Resulting number too small"
|
||||
184 "No match character on this line"
|
||||
185 "Matching character not found"
|
||||
186 "No characters to replace"
|
||||
187 "No other screen to switch to"
|
||||
188 "Characters after search string, line offset and/or z command"
|
||||
189 "No previous search pattern"
|
||||
190 "Search wrapped to original position"
|
||||
191 "Abbreviation exceeded expansion limit: characters discarded"
|
||||
192 "Illegal character; quote to enter"
|
||||
193 "Already at the beginning of the insert"
|
||||
194 "No more characters to erase"
|
||||
195 "Movement past the end-of-file"
|
||||
196 "Movement past the end-of-line"
|
||||
197 "No cursor movement made"
|
||||
198 "Already at the beginning of the file"
|
||||
199 "Movement past the beginning of the file"
|
||||
200 "Already in the first column"
|
||||
201 "Buffers should be specified before the command"
|
||||
202 "Already at end-of-file"
|
||||
203 "Already at end-of-line"
|
||||
204 "%s isn't a vi command"
|
||||
205 "Usage: %s"
|
||||
206 "No characters to delete"
|
||||
207 "The Q command requires the ex terminal interface"
|
||||
208 "No command to repeat"
|
||||
209 "The file is empty"
|
||||
209 "The file is empty"
|
||||
210 "%s may not be used as a motion command"
|
||||
211 "Already in command mode"
|
||||
212 "Cursor not in a word"
|
||||
214 "Windows option value is too large, max is %u"
|
||||
215 "Append"
|
||||
216 "Change"
|
||||
217 "Command"
|
||||
218 "Insert"
|
||||
219 "Replace"
|
||||
220 "Movement past the end-of-screen"
|
||||
221 "Movement past the beginning-of-screen"
|
||||
222 "Screen must be larger than %d lines to split"
|
||||
223 "There are no background screens"
|
||||
224 "There's no background screen editing a file named %s"
|
||||
225 "You may not background your only displayed screen"
|
||||
226 "The screen can only shrink to %d rows"
|
||||
227 "The screen cannot shrink"
|
||||
228 "The screen cannot grow"
|
||||
230 "This screen may not be suspended"
|
||||
231 "Interrupted: mapped keys discarded"
|
||||
232 "vi: temporary buffer not released"
|
||||
233 "This terminal has no %s key"
|
||||
234 "Only one buffer may be specified"
|
||||
235 "Number larger than %lu"
|
||||
236 "Interrupted"
|
||||
237 "Unable to create temporary file"
|
||||
238 "Warning: %s is not a regular file"
|
||||
239 "%s already locked, session is read-only"
|
||||
240 "%s: remove"
|
||||
241 "%s: close"
|
||||
242 "%s: remove"
|
||||
243 "%s: remove"
|
||||
244 "Read-only file, not written; use ! to override"
|
||||
245 "Read-only file, not written"
|
||||
246 "%s exists, not written; use ! to override"
|
||||
247 "%s exists, not written"
|
||||
248 "Partial file, not written; use ! to override"
|
||||
249 "Partial file, not written"
|
||||
250 "%s: file modified more recently than this copy; use ! to override"
|
||||
251 "%s: file modified more recently than this copy"
|
||||
252 "%s: write lock was unavailable"
|
||||
253 "Writing..."
|
||||
254 "%s: WARNING: FILE TRUNCATED"
|
||||
255 "Already at the first tag of this group"
|
||||
256 "%s: new file: %lu lines, %lu characters"
|
||||
257 "%s: %lu lines, %lu characters"
|
||||
258 "%s expanded into too many file names"
|
||||
259 "%s: not a regular file"
|
||||
260 "%s: not owned by you"
|
||||
261 "%s: accessible by a user other than the owner"
|
||||
262 "File modified since last complete write; write or use ! to override"
|
||||
263 "File modified since last complete write; write or use :edit! to override"
|
||||
264 "File modified since last complete write; write or use ! to override"
|
||||
265 "File is a temporary; exit will discard modifications"
|
||||
266 "File readonly, modifications not auto-written"
|
||||
267 "Log restarted"
|
||||
268 "confirm? [ynq]"
|
||||
269 "Press any key to continue: "
|
||||
270 "Press any key to continue [: to enter more ex commands]: "
|
||||
271 "Press any key to continue [q to quit]: "
|
||||
272 "That form of %s requires the ex terminal interface"
|
||||
273 "Entering ex input mode."
|
||||
274 "Command failed, no file read in yet."
|
||||
275 " cont?"
|
||||
276 "Unexpected character event"
|
||||
277 "Unexpected end-of-file event"
|
||||
278 "No matches for query"
|
||||
279 "Unexpected interrupt event"
|
||||
280 "Unexpected quit event"
|
||||
281 "Unexpected repaint event"
|
||||
282 "Already at the last tag of this group"
|
||||
283 "The %s command requires the ex terminal interface"
|
||||
284 "That form of %s is not supported when the secure edit option is set"
|
||||
285 "Unexpected string event"
|
||||
286 "Unexpected timeout event"
|
||||
287 "Unexpected write event"
|
||||
289 "Shell expansions not supported when the secure edit option is set"
|
||||
290 "The %s command is not supported when the secure edit option is set"
|
||||
291 "set: the %s option may not be turned off"
|
||||
292 "Display too small."
|
||||
293 "added"
|
||||
294 "changed"
|
||||
295 "deleted"
|
||||
296 "joined"
|
||||
297 "moved"
|
||||
298 "shifted"
|
||||
299 "yanked"
|
||||
300 "line"
|
||||
301 "lines"
|
||||
302 "Vi was not loaded with a Tcl interpreter"
|
||||
303 "File modified since last write."
|
||||
304 "Shell expansion failed"
|
||||
304 "Shell expansion failed"
|
||||
305 "No %s edit option specified"
|
||||
306 "Vi was not loaded with a Perl interpreter"
|
||||
307 "No ex command to execute"
|
||||
308 "Enter <CR> to execute a command, :q to exit"
|
||||
309 "Use "cscope help" for help"
|
||||
310 "No cscope connections running"
|
||||
311 "%s: unknown search type: use one of %s"
|
||||
312 "%d: no such cscope session"
|
||||
313 "set: the %s option may never be turned on"
|
||||
314 "set: the %s option may never be set to 0"
|
||||
315 "%s: appended: %lu lines, %lu characters"
|
||||
316 "Unexpected resize event"
|
||||
317 "%d files to edit"
|
@ -1,36 +0,0 @@
|
||||
Unused message id's (this is okay):
|
||||
001
|
||||
047
|
||||
050
|
||||
051
|
||||
052
|
||||
081
|
||||
176
|
||||
229
|
||||
288
|
||||
=========================
|
||||
MISSING ERROR MESSAGES (Please add!):
|
||||
=========================
|
||||
Extra error messages (just delete them):
|
||||
=========================
|
||||
MESSAGES WITH THE SAME MESSAGE ID's (FIX!):
|
||||
=========================
|
||||
Duplicate messages, both id and message (this is okay):
|
||||
2 209 "The file is empty"
|
||||
2 304 "Shell expansion failed"
|
||||
=========================
|
||||
Duplicate messages, just message (this is okay):
|
||||
2 %s exists, not written; use ! to overrideX
|
||||
2 %s: %lu lines, %lu charactersX
|
||||
2 %s: malformed recovery fileX
|
||||
2 Buffer %s is emptyX
|
||||
2 Copying file for recovery...X
|
||||
2 InterruptedX
|
||||
2 Logging not being performed, undo not possibleX
|
||||
2 Modifications not recoverable if the session failsX
|
||||
2 No previous search patternX
|
||||
2 set: %s option isn't a booleanX
|
||||
3 %s: removeX
|
||||
3 File modified since last complete write; write or use ! to overrideX
|
||||
4 Usage: %sX
|
||||
=========================
|
@ -1,317 +0,0 @@
|
||||
VI_MESSAGE_CATALOG
|
||||
Dépassement de longueur de ligneX
|
||||
impossible de supprimer la ligne %luX
|
||||
impossible d'ajouter à la ligne %luX
|
||||
impossible d'insérer devant la ligne %luX
|
||||
impossible de stocker la ligne %luX
|
||||
impossible d'obtenir la dernière ligneX
|
||||
Erreur : impossible de récupérer la ligne %luX
|
||||
Fichier journalX
|
||||
Aucune journalisation n'étant effectuée, impossible d'annulerX
|
||||
Aucune action à annulerX
|
||||
Aucune journalisation n'étant effectuée, impossible d'annulerX
|
||||
Aucune journalisation n'étant effectuée, reprise actualisée impossibleX
|
||||
Aucune action à refaireX
|
||||
%s/%d : Erreur d'écriture de journalX
|
||||
L'entrée et la sortie Vi standards doivent être un terminalX
|
||||
Marque %s : non définieX
|
||||
Marque %s : la ligne a été suppriméeX
|
||||
Marque %s : la position du curseur n'existe plusX
|
||||
Erreur : X
|
||||
nouveau fichierX
|
||||
le nom a changéX
|
||||
modifiéX
|
||||
non modifiéX
|
||||
DÉVERROUILLÉX
|
||||
lecture seuleX
|
||||
ligne %lu de %lu [%ld%%]X
|
||||
fichier videX
|
||||
ligne %luX
|
||||
Ce fichier %s n'est pas un catalogue de messagesX
|
||||
Impossible de configurer option %s par défautX
|
||||
Utilisation : %sX
|
||||
Définition : pas d'option %s : 'set all' donne toutes les valeurs optionnellesX
|
||||
Définition : option [no]%s ne prend pas de valeurX
|
||||
Définition : l'option %s n'est pas booléenneX
|
||||
Définition : option %s : %sX
|
||||
Définition : option %s : %s : Dépassement de valeurX
|
||||
Définition : option %s : %s n'est pas un nombre valideX
|
||||
Définition : l'option %s n'est pas booléenneX
|
||||
Les colonnes de l'écran sont trop petites, inférieures à %dX
|
||||
Les colonnes de l'écran sont trop grandes, supérieures à %dX
|
||||
Les lignes de l'écran sont trop courtes, inférieures à %dX
|
||||
Les lignes de l'écran sont trop longues, supérieures à %dX
|
||||
L'option lisp n'est pas implémentéeX
|
||||
Les messages ne sont pas désactivés : %sX
|
||||
Les messages ne sont pas activés : %sX
|
||||
|
||||
L'option de paragraphe doit être en groupe de deux caractèresX
|
||||
L'option de section doit être en groupe de deux caractèresX
|
||||
|
||||
|
||||
|
||||
Le tampon par défaut est videX
|
||||
Le tampon %s est videX
|
||||
Les fichiers dont le nom contient des caractères de saut de ligne sont irrécupérablesX
|
||||
Impossible de récupérer les modifications si la session échoueX
|
||||
Copie en cours du fichier pour récupération...X
|
||||
La préservation a échoué : %sX
|
||||
Impossible de récupérer les modifications si la session échoueX
|
||||
La sauvegarde du fichier a échoué : %sX
|
||||
Copie en cours du fichier pour récupération...X
|
||||
Les renseignements sur l'identité %u de l'utilisateur sont introuvablesX
|
||||
Impossible de verrouiller le fichier de récupérationX
|
||||
Débordement de tampon du fichier de récupérationX
|
||||
Fichier de récupérationX
|
||||
%s : Fichier de récupération malforméX
|
||||
%s : Fichier de récupération malforméX
|
||||
Aucun fichier nommé %s à récupérer, que vous puissiez lireX
|
||||
Il existe des versions récupérables antérieures à ce fichierX
|
||||
Vous avez d'autres fichiers à récupérerX
|
||||
pas d'envoi d'email : %sX
|
||||
Fichier vide, rien à rechercherX
|
||||
Fin de fichier atteinte sans trouver le motifX
|
||||
Pas de motif de recherche précédentX
|
||||
Motif introuvableX
|
||||
Début du fichier atteint sans trouver le motifX
|
||||
La recherche est revenue à son point de départX
|
||||
Recherche en cours...X
|
||||
Caractère non-imprimable introuvableX
|
||||
Nom de commande inconnuX
|
||||
|
||||
%s : Commande non disponible en ex modeX
|
||||
Le compteur ne peut être zéroX
|
||||
%s : mauvaise spécification de ligneX
|
||||
Erreur de tableau de syntaxe interne (%s: %s)X
|
||||
Utilisation : %sX
|
||||
%s : tampon temporaire non libéréX
|
||||
Décalage de drapeau hors de la ligne 1X
|
||||
Décalage de drapeau hors de la fin du fichierX
|
||||
@ avec plage, en cours d'exécution quand le fichier/l'écran a changéX
|
||||
Commande Global/v en cours d'exécution quand le fichier/l'écran a changéX
|
||||
La commande ex a échoué : commandes en attente abandonnéesX
|
||||
La commande ex a échoué : les touches affectées sont abandonnéesX
|
||||
La deuxième adresse est plus petite que la premièreX
|
||||
Aucun nom de marque fourniX
|
||||
\\ non suivi par / ou ?X
|
||||
Référence à un numéro de ligne inférieure à 0X
|
||||
La commande %s est inconnueX
|
||||
Dépassement de la valeur adresseX
|
||||
Dépassement négatif de la valeur adresseX
|
||||
Combinaison d'adresse non valideX
|
||||
Adresse non valide : il n'y a que %lu lignes dans ce fichierX
|
||||
Adresse non valide : le fichier est videX
|
||||
La commande %s ne permet pas une adresse de 0X
|
||||
Pas d'abréviations à afficherX
|
||||
Les abréviations doivent finir par un caractère"motX
|
||||
Les abréviations ne peuvent pas contenir de tabulations ni d'espacesX
|
||||
Les abréviations ne peuvent pas contenir un mélange de caractères mot/non-mot, sauf à la finX
|
||||
"%s" n'est pas une abréviationX
|
||||
La commande Vi a échoué : Les touches affectées ont été abandonnéesX
|
||||
Plus de fichiers à éditerX
|
||||
Pas de fichiers précédents à éditerX
|
||||
Pas de fichiers précédents à rembobinerX
|
||||
Pas de liste de fichiers à afficherX
|
||||
Pas de commande précédente à remplacer"!"X
|
||||
Pas de nom de fichier à substituer à %%X
|
||||
Pas de nom de fichier à substituer à #X
|
||||
Erreur : execl : %sX
|
||||
Erreur E/S : %sX
|
||||
Fichier modifié depuis la dernière écriture complète ; écrire ou utiliser ! pour outrepasserX
|
||||
Impossible de trouver l'emplacement du répertoire d'origineX
|
||||
Nouveau répertoire en cours : %sX
|
||||
Pas de tampon de coupure à afficherX
|
||||
La commande %s ne peut pas être utilisée à l'intérieur d'une commande globale ou commande vX
|
||||
%s/%s : échec de source : ni vous ni le super-utilisateur n'êtes les propriétaires X
|
||||
%s/%s : échec de source : vous n'êtes pas le propriétaireX
|
||||
%s/%s : échec de source : peut être écrit par un utilisateur autre que le propriétaireX
|
||||
%s : échec de source : ni vous ni le super-utilisateur n'êtes les propriétairesX
|
||||
%s : échec de source : vous n'êtes pas le propriétaireX
|
||||
%s : échec de source : peut être écrit par un utilisateur autre que le propriétaireX
|
||||
Pas de lignes suivantes à joindreX
|
||||
Pas d'entrées de mappage d'entréeX
|
||||
Pas d'entrées de mappage de commandesX
|
||||
Le caractère %s ne peut pas être remappéX
|
||||
"%s" n'est pas actuellement mappéX
|
||||
Les noms de marque ne doivent avoir qu'un caractèreX
|
||||
%s existe, non enregistré; utiliser ! pour outrepasserX
|
||||
Nouveau fichier exrc : %sX
|
||||
La ligne de destination est à l'intérieur de la plage à déplacerX
|
||||
La commande ouverte nécessite que l'option ouverte soit définieX
|
||||
La commande ouverte n'est pas encore implémentéeX
|
||||
La préservation de ce fichier est impossibleX
|
||||
Fichier préservéX
|
||||
%s: étendu dans trop de noms de fichiersX
|
||||
Vous ne pouvez lire que les fichiers standards et les canaux de transmission nommésX
|
||||
%s: Interdiction de lecture non disponibleX
|
||||
Lecture en cours...X
|
||||
%s: %lu lignes, %lu caractèresX
|
||||
Pas d'écrans d'arrière-plan à afficherX
|
||||
La commande script n'est disponible qu'en mode viX
|
||||
Pas de commande à exécuterX
|
||||
Option de largeur de décalage définie sur 0X
|
||||
Compter dépassementX
|
||||
Compter dépassement négatifX
|
||||
Expression standard spécifiée; drapeau r superfluX
|
||||
Vous ne pouvez pas en mode vi, combiner les drapeaux #, l et p avec le drapeau cX
|
||||
Aucune correspondance trouvéeX
|
||||
Aucune marque précédente entréeX
|
||||
Moins de %s entrées dans la pile de marques ; utilisez t[ags]X
|
||||
Pas de fichier %s vers lequel retourner dans la pile de marques ; utiliser : affichage t[ags]X
|
||||
Appuyez sur Entrée pour continuer :X
|
||||
%s : marque introuvableX
|
||||
%s : marque corrompue en %sX
|
||||
%s : le numéro de ligne de la marque dépasse la fin du fichierX
|
||||
La pile de marques est videX
|
||||
%s : motif de recherche introuvableX
|
||||
%d fichiers supplémentaires à éditerX
|
||||
Le tampon %s est vide
|
||||
Confirmer les changements ? [n]X
|
||||
InterrompuX
|
||||
Pas de tampon précédent à exécuterX
|
||||
Pas d'expression standard précédenteX
|
||||
La commande %s nécessite qu'un fichier ait déjà été lu en mémoireX
|
||||
Utilisation : %sX
|
||||
La commande visual nécessite que l'option open soit définieX
|
||||
|
||||
Fichier videX
|
||||
Pas de recherche précédente F, f, T ou tX
|
||||
%s introuvableX
|
||||
Pas de fichier précédent à éditerX
|
||||
Le curseur n'est pas dans un nombreX
|
||||
Le nombre obtenu est trop grandX
|
||||
Le nombre obtenu est trop petitX
|
||||
Pas de correspondance de caractère sur cette ligneX
|
||||
Caractère correspondant introuvableX
|
||||
Pas de caractères à remplacerX
|
||||
Pas d'autre écran vers lequel basculerX
|
||||
Caractères après la chaîne de recherche, décalage de ligne et/ou commande zX
|
||||
Pas de motif de recherche précédentX
|
||||
La recherche est revenue à son point de départX
|
||||
L'abréviation a dépassé la limite de l'expansion : caractères abandonnésX
|
||||
Caractère non valide ; guillemet pour saisirX
|
||||
Déjà au début de l'insertionX
|
||||
Plus de caractères à effacerX
|
||||
Déplacement hors de fin de fichierX
|
||||
Déplacement hors de fin de ligneX
|
||||
Aucun mouvement de curseur n'a été effectuéX
|
||||
Déjà au début du fichierX
|
||||
Déplacement hors du début du fichierX
|
||||
Déjà dans la première colonneX
|
||||
Les tampons doivent être spécifiés avant la commandeX
|
||||
Déjà à la fin du fichierX
|
||||
Déjà à la fin de la ligneX
|
||||
%s n'est pas une commande viX
|
||||
Utilisation : %sX
|
||||
Pas de caractères à supprimerX
|
||||
La commande Q nécessite une interface terminal exX
|
||||
Pas de commande à répéterX
|
||||
Le fichier est videX
|
||||
Vous ne pouvez pas utiliser %s comme commande de déplacementX
|
||||
Déjà en mode commandeX
|
||||
Le curseur n'est pas dans un motX
|
||||
|
||||
Valeur optionnelle de fenêtre trop grande, maximum est %uX
|
||||
AjouterX
|
||||
ChangerX
|
||||
CommandeX
|
||||
InsérerX
|
||||
RemplacerX
|
||||
Déplacement hors de la fin d'écranX
|
||||
Déplacement hors du début d'écranX
|
||||
L'écran doit être supérieur à %d lignes pour se fractionnerX
|
||||
Il n'y a pas d'écran d'arrière-planX
|
||||
Il n'y a pas d'écran d'arrière-plan qui édite un fichier nommé %sX
|
||||
Vous ne pouvez pas mettre à l'arrière-plan votre seul écran affichéX
|
||||
L'écran ne peut être réduit qu'à %d rangsX
|
||||
L'écran n'est pas auto-réductibleX
|
||||
L'écran n'est pas auto-extensibleX
|
||||
|
||||
Vous ne pouvez pas mettre cet écran en attenteX
|
||||
Interrompu : les touches affectées ont été abandonnéesX
|
||||
vi : le tampon temporaire n' a pas été libéréX
|
||||
Ce terminal n'a pas de touche %sX
|
||||
Vous ne pouvez spécifier qu'un seul tamponX
|
||||
Nombre supérieur à %luX
|
||||
InterrompuX
|
||||
Impossible de créer un fichier temporaireX
|
||||
Avertissement : %s n'est pas un fichier standardX
|
||||
%s déjà verrouillé, session en lecture seuleX
|
||||
%s: supprimerX
|
||||
%s: fermerX
|
||||
%s: supprimerX
|
||||
%s: supprimerX
|
||||
Fichier en lecture seule, non écrit, utiliser ! pour outrepasserX
|
||||
Fichier en lecture seule, non écritX
|
||||
%s existe, non écrit; utiliser ! pour outrepasserX
|
||||
%s existe, non écritX
|
||||
Fichier partiel, non écrit; utiliser ! pour outrepasserX
|
||||
Fichier partiel, non écritX
|
||||
%s: fichier modifié plus récemment que cet exemplaire; utiliser ! pour outrepasserX
|
||||
%s: fichier modifié plus récemment que cet exemplaireX
|
||||
%s: interdiction d'écriture non disponibleX
|
||||
Ecriture en cours...X
|
||||
%s: AVERTISSEMENT : FICHIER TRONQUÉX
|
||||
Première marque de ce groupe déjà atteinteX
|
||||
%s: nouveau fichier : %lu lignes, %lu caractèresX
|
||||
%s: %lu lignes, %lu caractèresX
|
||||
%s étendue à trop de noms de fichiersX
|
||||
%s: pas un fichier standardX
|
||||
%s: ne vous appartient pasX
|
||||
%s: accessible par un utilisateur autre que son propriétaireX
|
||||
Fichier modifé depuis la dernière écriture complète ; écrire ou utiliser ! pour outrepasser X
|
||||
Fichier modifé depuis la dernière écriture complète ; écrire ou utiliser :edit! pour outrepasserX
|
||||
Fichier modifé depuis la dernière écriture complète ; écrire ou utiliser ! pour outrepasserX
|
||||
Fichier temporaire ; quitter annulera les modificationsX
|
||||
Fichier en lecture seule ; les modifications ne sont pas écrites automatiquementX
|
||||
Journal redémarréX
|
||||
confirmer ? [ynq]X
|
||||
Appuyez sur n'importe quelle touche pour continuer : X
|
||||
Appuyez sur n'importe quelle touche pour continuer [: pour entrer plus de commandes ex] : X
|
||||
Appuyez sur n'importe quelle touche pour continuer [q pour Quitter]: X
|
||||
Cette forme de %s nécessite l'interface de terminal exX
|
||||
Entrée de mode entrée ex.X
|
||||
La commande a échoué, aucun fichier n'a encore été lu.X
|
||||
cont?X
|
||||
Evénement imprévu de caractèreX
|
||||
Evénement imprévu de fin-de-fichierX
|
||||
Pas de correspondances pour cette requêteX
|
||||
Evénement imprévu d'interruptionX
|
||||
Evénement quitter imprévuX
|
||||
Evénement imprévu de rafraîchissementX
|
||||
La dernière marque de ce groupe a déjà été atteinteX
|
||||
La commande %s nécessite l'interface de terminal exX
|
||||
Cette forme de %s n'est pas reconnue quand l'option d'édition protégée est activéeX
|
||||
Evénement imprévu de chaîneX
|
||||
Evénement imprévu de délai impartiX
|
||||
Evénement d'écriture imprévuX
|
||||
|
||||
Les expansions du shell ne sont pas reconnues quand l'option d'édition protégée est activéeX
|
||||
La commande %s n'est pas reconnue quand l'option d'édition protégée est activéeX
|
||||
Définition : l'option %s ne peut pas être désactivéeX
|
||||
Affichage trop petit.X
|
||||
ajoutéX
|
||||
changéX
|
||||
suppriméX
|
||||
jointX
|
||||
déplacéX
|
||||
décaléX
|
||||
coupéX
|
||||
ligneX
|
||||
lignesX
|
||||
Vi n'a pas été chargé avec un interprétateur TclX
|
||||
Ficher modifié depuis le dernier enregistrement.X
|
||||
L'expansion du shell a échouéX
|
||||
Pas d'option d'édition %s spécifiéeX
|
||||
Vi n'a pas été chargé avec un interprétateur PerlX
|
||||
Pas de commande ex à exécuterX
|
||||
Entrez <CR> pour exécuter une commande, :q pour quitterX
|
||||
Utiliser "cscope help" pour obtenir de l'aideX
|
||||
Aucune connexion cscope n'est lancéeX
|
||||
%s : type de recherche inconnu : utiliser un des %sX
|
||||
%d : Il n'existe pas de telle session cscopeX
|
||||
Définition : l'option %s ne peut jamais être activéeX
|
||||
Définition : l'option %s ne peut jamais être définie sur 0X
|
||||
%s: joints : %lu lignes, %lu caractèresX
|
||||
événement imprévu de redimensionnementX
|
||||
%d fichiers à éditerX
|
@ -43,8 +43,7 @@
|
||||
044 "L'option lisp n'est pas implémentée"
|
||||
045 "Les messages ne sont pas désactivés : %s"
|
||||
046 "Les messages ne sont pas activés : %s"
|
||||
048 "L'option de paragraphe doit être en groupe de deux caractères"
|
||||
049 "L'option de section doit être en groupe de deux caractères"
|
||||
047 "L'option de %s doit être en groupe de deux caractères"
|
||||
053 "Le tampon par défaut est vide"
|
||||
054 "Le tampon %s est vide"
|
||||
055 "Les fichiers dont le nom contient des caractères de saut de ligne sont irrécupérables"
|
||||
@ -97,16 +96,16 @@
|
||||
103 "Adresse non valide : le fichier est vide"
|
||||
104 "La commande %s ne permet pas une adresse de 0"
|
||||
105 "Pas d'abréviations à afficher"
|
||||
106 "Les abréviations doivent finir par un caractère"mot"
|
||||
106 "Les abréviations doivent finir par un caractère \"mot\""
|
||||
107 "Les abréviations ne peuvent pas contenir de tabulations ni d'espaces"
|
||||
108 "Les abréviations ne peuvent pas contenir un mélange de caractères mot/non-mot, sauf à la fin"
|
||||
109 ""%s" n'est pas une abréviation"
|
||||
109 "\"%s\" n'est pas une abréviation"
|
||||
110 "La commande Vi a échoué : Les touches affectées ont été abandonnées"
|
||||
111 "Plus de fichiers à éditer"
|
||||
112 "Pas de fichiers précédents à éditer"
|
||||
113 "Pas de fichiers précédents à rembobiner"
|
||||
114 "Pas de liste de fichiers à afficher"
|
||||
115 "Pas de commande précédente à remplacer"!""
|
||||
115 "Pas de commande précédente à remplacer \"!\""
|
||||
116 "Pas de nom de fichier à substituer à %%"
|
||||
117 "Pas de nom de fichier à substituer à #"
|
||||
118 "Erreur : execl : %s"
|
||||
@ -126,7 +125,7 @@
|
||||
132 "Pas d'entrées de mappage d'entrée"
|
||||
133 "Pas d'entrées de mappage de commandes"
|
||||
134 "Le caractère %s ne peut pas être remappé"
|
||||
135 ""%s" n'est pas actuellement mappé"
|
||||
135 "\"%s\" n'est pas actuellement mappé"
|
||||
136 "Les noms de marque ne doivent avoir qu'un caractère"
|
||||
137 "%s existe, non enregistré; utiliser ! pour outrepasser"
|
||||
138 "Nouveau fichier exrc : %s"
|
||||
@ -200,7 +199,6 @@
|
||||
207 "La commande Q nécessite une interface terminal ex"
|
||||
208 "Pas de commande à répéter"
|
||||
209 "Le fichier est vide"
|
||||
209 "Le fichier est vide"
|
||||
210 "Vous ne pouvez pas utiliser %s comme commande de déplacement"
|
||||
211 "Déjà en mode commande"
|
||||
212 "Le curseur n'est pas dans un mot"
|
||||
@ -293,12 +291,11 @@
|
||||
302 "Vi n'a pas été chargé avec un interprétateur Tcl"
|
||||
303 "Ficher modifié depuis le dernier enregistrement."
|
||||
304 "L'expansion du shell a échoué"
|
||||
304 "L'expansion du shell a échoué"
|
||||
305 "Pas d'option d'édition %s spécifiée"
|
||||
306 "Vi n'a pas été chargé avec un interprétateur Perl"
|
||||
307 "Pas de commande ex à exécuter"
|
||||
308 "Entrez <CR> pour exécuter une commande, :q pour quitter"
|
||||
309 "Utiliser "cscope help" pour obtenir de l'aide"
|
||||
309 "Utiliser \"cscope help\" pour obtenir de l'aide"
|
||||
310 "Aucune connexion cscope n'est lancée"
|
||||
311 "%s : type de recherche inconnu : utiliser un des %s"
|
||||
312 "%d : Il n'existe pas de telle session cscope"
|
||||
|
@ -1,34 +0,0 @@
|
||||
Unused message id's (this is okay):
|
||||
001
|
||||
047
|
||||
050
|
||||
051
|
||||
052
|
||||
081
|
||||
176
|
||||
229
|
||||
288
|
||||
=========================
|
||||
MISSING ERROR MESSAGES (Please add!):
|
||||
=========================
|
||||
Extra error messages (just delete them):
|
||||
=========================
|
||||
MESSAGES WITH THE SAME MESSAGE ID's (FIX!):
|
||||
=========================
|
||||
Duplicate messages, both id and message (this is okay):
|
||||
2 209 "Le fichier est vide"
|
||||
2 304 "L'expansion du shell a ‚chou‚"
|
||||
=========================
|
||||
Duplicate messages, just message (this is okay):
|
||||
2 %s : Fichier de r‚cup‚ration malform‚X
|
||||
2 %s: %lu lignes, %lu caractŠresX
|
||||
2 Aucune connexion n'‚tant effectu‚e, impossible d'annulerX
|
||||
2 Copie en cours du fichier pour r‚cup‚ration...X
|
||||
2 D‚finition : l'option %s n'est pas bool‚enneX
|
||||
2 Impossible de r‚cup‚rer les modifications si la session ‚choueX
|
||||
2 InterrompuX
|
||||
2 La recherche est revenue … son point de d‚partX
|
||||
2 Pas de motif de recherche pr‚c‚dentX
|
||||
3 %s: supprimerX
|
||||
4 Utilisation : %sX
|
||||
=========================
|
@ -1,317 +0,0 @@
|
||||
VI_MESSAGE_CATALOG
|
||||
Zeilenlaengen UeberlaufX
|
||||
kann Zeile %lu nicht loeschenX
|
||||
kann an Zeile %lu nicht anfuegenX
|
||||
kann in Zeile %lu nicht einfuegenX
|
||||
kann Zeile %lu nicht speichernX
|
||||
kann letzte Zeile nicht lesenX
|
||||
Fehler: kann Zeile %lu nicht wiederherstellenX
|
||||
ProtokolldateiX
|
||||
Keine Protokollierung aktiv, rueckgaengig machen nicht moeglichX
|
||||
Keine Aenderungen rueckgaengig zu machenX
|
||||
Keine Protokollierung aktiv, rueckgaengig machen nicht moeglichX
|
||||
Keine Protokollierung aktiv, Wiederholung von Aenderungen nicht moeglichX
|
||||
Keine Aenderungen zu wiederholenX
|
||||
%s/%d: ProtokollschreibfehlerX
|
||||
Vi's Standardein- und ausgabe muss ein Terminal seinX
|
||||
Marke %s: nicht gesetztX
|
||||
Marke %s: die Zeile wurde geloeschtX
|
||||
Marke %s: Cursorposition existiert nicht mehrX
|
||||
Fehler: X
|
||||
neue DateiX
|
||||
Name geaendertX
|
||||
geaendertX
|
||||
nicht geaendertX
|
||||
NICHT GELOCKEDX
|
||||
nur zum LesenX
|
||||
Zeile %lu von %lu [%ld%%]X
|
||||
leere DateiX
|
||||
Zeile %luX
|
||||
Die Datei %s ist kein MeldungskatalogX
|
||||
Setzen der Voreinstellung fuer %s Option nicht moeglichX
|
||||
Benutzung: %sX
|
||||
set: keine %s Option: 'set all' zeigt alle Optionen mit Werten anX
|
||||
set: der [no]%s Option kann kein Wert zugewiesen werdenX
|
||||
set: %s ist keine boolsche OptionX
|
||||
set: %s Option: %sX
|
||||
set: %s Option: %s: Wert UeberlaufX
|
||||
set: %s Option: %s ist eine ungueltige ZahlX
|
||||
set: %s ist keine boolsche OptionX
|
||||
Anzeige hat zu wenig Spalten, weniger als %dX
|
||||
Anzeige hat zu viele Spalten, mehr als %dX
|
||||
Anzeige hat zu wenig Zeilen, weniger als %dX
|
||||
Anzeige hat zu viele Zeilen, mehr als %dX
|
||||
Die lisp Option ist nicht implementiertX
|
||||
Messages nicht abgeschalten: %sX
|
||||
Messages nicht eingeschalten: %sX
|
||||
|
||||
Die paragraph Option muss Gruppen zu zwei Zeichen enthaltenX
|
||||
Die section Option muss Gruppen zu zwei Zeichen enthaltenX
|
||||
|
||||
|
||||
|
||||
Der Standardpuffer ist leerX
|
||||
Puffer %s ist leerX
|
||||
Dateien mit newlines im Namen sind nicht wiederherstellbarX
|
||||
Aenderungen nicht wiederherstellbar falls die Editorsitzung schief gehtX
|
||||
kopiere Datei fuer Wiederherstellung ...X
|
||||
Rettungsmechanismus funktioniert nicht: %sX
|
||||
Aenderungen nicht wiederherstellbar falls die Editorsitzung schief gehtX
|
||||
Sicherung der Datei gescheitert: %sX
|
||||
kopiere Datei fuer Wiederherstellung ...X
|
||||
Informationen ueber den Benutzer mit id %u nicht gefundenX
|
||||
Wiederherstellungsdatei kann nicht gesperrt werdenX
|
||||
Puffer der Wiederherstellungsdatei uebergelaufenX
|
||||
WiederherstellungsdateiX
|
||||
%s: Wiederherstellungsdatei hat falsches FormatX
|
||||
%s: Wiederherstellungsdatei hat falsches FormatX
|
||||
Keine von Ihnen lesbaren Dateien mit Namen %s zum WiederherstellenX
|
||||
Es gibt aeltere Versionen dieser Datei von Ihnen zum WiederherstellenX
|
||||
Sie haben noch andere Dateien zum WiederherstellenX
|
||||
schicke keine email: %sX
|
||||
Datei leer; nichts zu suchenX
|
||||
Dateiende erreicht, ohne das Suchmuster zu findenX
|
||||
Kein altes SuchmusterX
|
||||
Suchmuster nicht gefundenX
|
||||
Dateianfang erreicht, ohne das Suchmuster zu findenX
|
||||
Suche umgeschlagenX
|
||||
suche ...X
|
||||
Keine nichtdruckbaren Zeichen gefundenX
|
||||
Unbekannter KommandonameX
|
||||
|
||||
%s: Kommando im ex Modus nicht verfuegbarX
|
||||
Count darf nicht Null seinX
|
||||
%s: falsche ZeilenangabeX
|
||||
Interner Syntaxtabellenfehler (%s: %s)X
|
||||
Benutzung: %sX
|
||||
%s: temporaerer Puffer nicht freigegebenX
|
||||
Flagoffset vor Zeile 1X
|
||||
Flagoffset hinter dem DateiendeX
|
||||
@ mit Bereich lief als Datei/Anzeige geaendert wurdeX
|
||||
globales oder v-Kommando lief als Datei/Anzeige geaendert wurdeX
|
||||
Ex Kommando misslungen: restliche Kommandoeingabe ignoriertX
|
||||
Ex Kommando misslungen: umdefinierte Tasten ungueltigX
|
||||
Die zweite Adresse ist kleiner als die ersteX
|
||||
Kein Markenname angegebenX
|
||||
\\ ohne folgenden / oder ?X
|
||||
Referenz auf eine negative ZeilennummerX
|
||||
Das Kommando %s ist unbekanntX
|
||||
Adresswert zu grossX
|
||||
Adresswert zu kleinX
|
||||
Ungueltige AdresskombinationX
|
||||
Ungueltige Adresse: nur %lu Zeilen in der DateiX
|
||||
Ungueltige Adresse: die Datei ist leerX
|
||||
Das Kommando %s erlaubt keine Adresse 0X
|
||||
Keine Abkuerzungen zum AnzeigenX
|
||||
Abkuerzungen muessen mit einem "Wort"-Zeichen endenX
|
||||
Abkuerzungen duerfen keine Tabulator- oder Leerzeichen enthaltenX
|
||||
In Abkuerzungen duerfen ausser am Ende Wort- und Nicht-Wort-Zeichen nicht gemischt werdenX
|
||||
"%s" ist keine AbkuerzungX
|
||||
Vi Kommando misslungen: umdefinierte Tasten ungueltigX
|
||||
Keine weiteren Dateien zu edierenX
|
||||
Keine vorhergehenden Dateien zu edierenX
|
||||
Keine vorhergehenden Dateien fuer rewindX
|
||||
Keine Dateiliste zum AnzeigenX
|
||||
Kein vorhergehendes Kommando um "!" zu ersetzenX
|
||||
Kein Dateiname fuer %%X
|
||||
Kein Dateiname fuer #X
|
||||
Fehler: execl: %sX
|
||||
I/O Fehler: %sX
|
||||
Datei wurde seit dem letzten vollstaendigen Schreiben geaendert; schreibe oder verwende ! zum ignorierenX
|
||||
Kann Homedirectory nicht bestimmenX
|
||||
Neues aktuelles Directory: %sX
|
||||
Keine Puffer anzuzeigenX
|
||||
Das Kommando %s kann nicht als Teil eines global oder v Kommandos verwendet werdenX
|
||||
%s/%s: nicht gelesen: gehoehrt weder Ihnen noch rootX
|
||||
%s/%s: nicht gelesen: gehoehrt nicht IhnenX
|
||||
%s/%s: nicht gelesen: anderer Benutzer als Eigentuemer hat SchreibrechtX
|
||||
%s: nicht gelesen: gehoehrt weder Ihnen noch rootX
|
||||
%s: nicht gelesen: gehoehrt nicht IhnenX
|
||||
%s: nicht gelesen: anderer Benutzer als Eigentuemer hat SchreibrechtX
|
||||
Keine folgenden Zeilen zum VerbindenX
|
||||
Kein Eingabe-Map EintragX
|
||||
Kein Kommando-Map EintragX
|
||||
Das %s Zeichen kann nicht umgemappt werdenX
|
||||
"%s" ist momentan nicht gemapptX
|
||||
Markennamen muessen einzelne Buchstaben seinX
|
||||
%s existiert, nicht geschrieben; verwende ! zum UeberschreibenX
|
||||
Neue .exrc Datei: %s. X
|
||||
Zielzeile ist innerhalb des VerschiebebereichsX
|
||||
Das open Kommando verlangt, dass die open Option gesetzt istX
|
||||
Das open Kommando ist nocht nicht implementiertX
|
||||
Rettung dieser Datei nicht moeglichX
|
||||
Datei gerettetX
|
||||
%s wurde in zu viele Dateinamen expandiertX
|
||||
Nur regulaere Dateien und named pipes koennen gelesen werdenX
|
||||
%s: Lesesperrung war nicht moeglichX
|
||||
lese ...X
|
||||
%s: %lu Zeilen, %lu ZeichenX
|
||||
Keine Hintegrundanzeigen vorhandenX
|
||||
Das script Kommando ist nur im vi Modus verfuegbarX
|
||||
Kein Kommando auszufuehrenX
|
||||
shiftwidth Option auf 0 gesetztX
|
||||
Count ueberlaufX
|
||||
Count unterlaufX
|
||||
Regulaerer Ausdruck angegeben; r Flag bedeutungslosX
|
||||
Die #, l und p Flags koennen im vi Modus nicht mit dem c Flag kombiniert werdenX
|
||||
Keine Uebereinstimmung gefundenX
|
||||
Kein vorhergehender 'tag' angegebenX
|
||||
Weniger als %s Eintraege auf dem 'tag'-Stack; verwende :display t[ags]X
|
||||
Keine Datei namens %s auf dem 'tag'-Stack; verwende :display t[ags]X
|
||||
Druecke Enter um fortzufahren: X
|
||||
%s: 'tag' nicht gefundenX
|
||||
%s: kaputter 'tag' in %sX
|
||||
%s: die Zeilennummer des 'tag' ist hinter dem DateiendeX
|
||||
Der 'tag' Stack ist leerX
|
||||
%s: Suchmuster nicht gefundenX
|
||||
%d weitere Dateien zu edierenX
|
||||
Puffer %s ist leerX
|
||||
Bestaetige Aenderung [n]X
|
||||
Unterbrochen.X
|
||||
Kein vorhergehender Puffer zum AusfuehrenX
|
||||
Kein vorhergehender regulaerer AusdruckX
|
||||
Das Kommando %s verlangt, dass bereits eine Datei eingelesen wurdeX
|
||||
Benutzung: %sX
|
||||
Das visual Kommando verlangt dass die open Option gesetzt istX
|
||||
|
||||
Leere DateiX
|
||||
Keine vorhergehende F, f, T oder t SucheX
|
||||
%s nicht gefundenX
|
||||
Keine vorhergehende Datei zu edierenX
|
||||
Cursor nicht auf einer ZahlX
|
||||
Sich ergebende Zahl ist zu grossX
|
||||
Sich ergebende Zahl ist zu kleinX
|
||||
Kein korrespondierendes Zeichen in dieser ZeileX
|
||||
Korrespondierendes Zeichen nicht gefundenX
|
||||
Keine Zeichen zu ersetzenX
|
||||
Keine andere Anzeige zum HinschaltenX
|
||||
Zeichen nach Suchmuster, Zeilenoffset und/oder z KommandoX
|
||||
Kein altes SuchmusterX
|
||||
Suche zur urspruenglichen Position umgeschlagenX
|
||||
Abkuerzung ueberschreitet Expansionsgrenze: Zeichen weggelassenX
|
||||
Nicht erlaubtes Zeichen; maskiere zum EingebenX
|
||||
Bereits am Anfang der EingabeX
|
||||
Keine weiteren Zeichen zu loeschenX
|
||||
Bewegung hinter das DateiendeX
|
||||
Bewegung hinter das ZeilenendeX
|
||||
Keine Cursorbewegung gemachtX
|
||||
Bereits am DateianfangX
|
||||
Bewegung vor den DateianfangX
|
||||
Bereits in der ersten SpalteX
|
||||
Puffer sollen vor dem Kommando angegeben werdenX
|
||||
Bereits am DateiendeX
|
||||
Bereits am ZeilenendeX
|
||||
%s ist kein vi KommandoX
|
||||
Benutzung: %sX
|
||||
Keine Zeichen zu loeschenX
|
||||
Das Q Kommando benoetigt das ex Terminal InterfaceX
|
||||
Kein Kommando zu wiederholenX
|
||||
Die Datei ist leerX
|
||||
%s kann nicht als Bewegungskommando verwendet werdenX
|
||||
Bereits im Kommando-ModusX
|
||||
Cursor nicht auf einem WortX
|
||||
|
||||
Wert der Window Option ist zu gross, max ist %uX
|
||||
AnfuegenX
|
||||
AendernX
|
||||
KommandoX
|
||||
EinfuegenX
|
||||
ErsetzenX
|
||||
Bewegung hinter das AnzeigenendeX
|
||||
Bewegung vor den AnzeigenanfangX
|
||||
Anzeige muss zum Zerlegen groesser als %d seinX
|
||||
Keine Hintergrundanzeigen vorhandenX
|
||||
Es gibt keine Hintergrundanzeige die eine Datei namens %s ediertX
|
||||
Die einzige dargestellte Anzeige kann nicht in den Hintergrund gebracht werdenX
|
||||
Die Anzeige kann nur auf %d Zeilen verkleinert werdenX
|
||||
Die Anzeige kann nicht verkleinert werdenX
|
||||
Die Anzeige kann nicht vergroessert werdenX
|
||||
|
||||
Diese Anzeige kann nicht gestopped werdenX
|
||||
Unterbrochen: umdefinierte Tasten ungueltigX
|
||||
vi: temporaerer Puffer nicht freigegebenX
|
||||
Dieses Terminal hat keine %s TasteX
|
||||
es kann nur ein Puffer angegeben werdenX
|
||||
Zahl groesser als %luX
|
||||
UnterbrochenX
|
||||
Nicht moeglich temporaere Datei anzulegenX
|
||||
Warnung: %s ist keine regulaere DateiX
|
||||
%s ist bereits gesperrt, nur-lese EditorsitzungX
|
||||
%s: loeschenX
|
||||
%s: schliessenX
|
||||
%s: loeschenX
|
||||
%s: loeschenX
|
||||
Nur-lese Datei, nicht geschrieben; verwende ! zum UeberschreibenX
|
||||
Nur-lese Datei, nicht geschriebenX
|
||||
%s existiert, nicht geschrieben; verwende ! zum UeberschreibenX
|
||||
%s existiert, nicht geschriebenX
|
||||
Teil der Datei, nicht geschrieben; verwende ! zum UeberschreibenX
|
||||
Teil der Datei, nicht geschriebenX
|
||||
%s: Datei wurde spaeter als diese Kopie veraendert; verwende ! zum UeberschreibenX
|
||||
%s: Datei wurde spaeter als diese Kopie veraendertX
|
||||
%s: Schreibsperrung war nicht moeglichX
|
||||
schreibe ...X
|
||||
%s: WARNUNG: DATEI ABGESCHNITTENX
|
||||
Bereits am ersten 'tag' dieser GruppeX
|
||||
%s: neue Datei: %lu Zeilen, %lu ZeichenX
|
||||
%s: %lu Zeilen, %lu ZeichenX
|
||||
%s wurde in zu viele Dateinamen expandiertX
|
||||
%s: keine regulaere DateiX
|
||||
%s: gehoehrt nicht IhnenX
|
||||
%s: anderer Benutzer als Eigentuemer hat ZugriffX
|
||||
Datei wurde seit dem letzten vollstaendigen Schreiben geaendert; schreibe oder verwende ! zum ignorierenX
|
||||
Datei wurde seit dem letzten vollstaendigen Schreiben geaendert; schreibe oder verwende :edit! zum ignorierenX
|
||||
Datei wurde seit dem letzten vollstaendigen Schreiben geaendert; schreibe oder verwende ! zum ignorierenX
|
||||
Datei ist temporaer; beim Verlassen gehen die Aenderungen verlorenX
|
||||
Nur-lese Datei, Aenderungen werden nicht automatisch geschriebenX
|
||||
Portokollierung neu begonnenX
|
||||
bestaetigen [ynq]X
|
||||
Druecke beliebige Taste um fortzufahrenX
|
||||
Druecke beliebige Taste um fortzufahren [: um weitere Kommandos einzugeben]: X
|
||||
Druecke beliebige Taste um fortzufahren [q zum Verlassen]: X
|
||||
Diese Form von %s benoetigt das ex Terminal-InterfaceX
|
||||
Gehe in ex Eingabe-Modus.\nX
|
||||
Kommando schief gelaufen, noch keine Datei eingelesenX
|
||||
weiter?X
|
||||
unerwartetes Zeichen - EreignisX
|
||||
unerwartetes Dateiende - EreignisX
|
||||
Keine Position zum Anspringen gefundenX
|
||||
unerwartetes Unterbrechungs - EreignisX
|
||||
unerwartetes Verlassen - EreignisX
|
||||
unerwartetes Wiederherstellungs - EreignisX
|
||||
Bereits am letzten 'tag' dieser GruppeX
|
||||
Das %s Kommando benoetigt das ex Terminal-InterfaceX
|
||||
Diese Form von %s wird nicht unterstuetzt wenn die 'secure edit' - Option gesetzt istX
|
||||
unerwartetes Zeichenketten - EreignisX
|
||||
unerwartetes timeout - EreignisX
|
||||
unerwartetes Schreibe - EreignisX
|
||||
|
||||
Shell Expandierungen nicht unterstuetzt wenn die 'secure edit' - Option gesetzt istX
|
||||
Das %s Kommando wird nicht unterstuetzt wenn die 'secure edit' - Option gesetzt istX
|
||||
set: %s kann nicht ausgeschaltet werdenX
|
||||
Anzeige zu klein.X
|
||||
angefuegtX
|
||||
geaendertX
|
||||
geloeschtX
|
||||
verbundenX
|
||||
verschobenX
|
||||
geschobenX
|
||||
in Puffer geschriebenX
|
||||
ZeileX
|
||||
ZeilenX
|
||||
Vi wurde nicht mit dem Tcl Interpreter gelinktX
|
||||
Datei wurde seit dem letzten Schreiben veraendert.X
|
||||
Shell Expansion nicht geklapptX
|
||||
Es ist keine %s Edieroption angegebenX
|
||||
Vi wurde nicht mit einem Perl Interpreter geladenX
|
||||
Kein ex Kommando auszufuehrenX
|
||||
Druecke <CR> um ein Kommando auszufuehren, :q zum verlassenX
|
||||
Verwende "cscope help" fuer HilestellungX
|
||||
Keine cscope Verbindung aktivX
|
||||
%s: unbekannter Suchtyp: verwende einen aus %sX
|
||||
%d: keine solche cscope VerbindungX
|
||||
set: die %s Option kann nicht eingeschaltet werdenX
|
||||
set: die %s Option kann nicht auf 0 gesetzt werdenX
|
||||
%s: angefuegt: %lu Zeilen, %lu ZeichenX
|
||||
unerwartetes Groessenveraenderungs - EreignisX
|
||||
%d Dateien zu edierenX
|
@ -1,67 +1,66 @@
|
||||
002 "Zeilenlaengen Ueberlauf"
|
||||
003 "kann Zeile %lu nicht loeschen"
|
||||
004 "kann an Zeile %lu nicht anfuegen"
|
||||
005 "kann in Zeile %lu nicht einfuegen"
|
||||
002 "Zeilenlängen-Überlauf"
|
||||
003 "kann Zeile %lu nicht löschen"
|
||||
004 "kann an Zeile %lu nicht anfügen"
|
||||
005 "kann in Zeile %lu nicht einfügen"
|
||||
006 "kann Zeile %lu nicht speichern"
|
||||
007 "kann letzte Zeile nicht lesen"
|
||||
008 "Fehler: kann Zeile %lu nicht wiederherstellen"
|
||||
009 "Protokolldatei"
|
||||
010 "Keine Protokollierung aktiv, rueckgaengig machen nicht moeglich"
|
||||
011 "Keine Aenderungen rueckgaengig zu machen"
|
||||
012 "Keine Protokollierung aktiv, rueckgaengig machen nicht moeglich"
|
||||
013 "Keine Protokollierung aktiv, Wiederholung von Aenderungen nicht moeglich"
|
||||
014 "Keine Aenderungen zu wiederholen"
|
||||
010 "Keine Protokollierung aktiv, Rückgängigmachen nicht möglich"
|
||||
011 "Keine Änderungen rückgängig zu machen"
|
||||
012 "Keine Protokollierung aktiv, Rückgängigmachen nicht möglich"
|
||||
013 "Keine Protokollierung aktiv, Wiederholung von Änderungen nicht möglich"
|
||||
014 "Keine Änderungen zu wiederholen"
|
||||
015 "%s/%d: Protokollschreibfehler"
|
||||
016 "Vi's Standardein- und ausgabe muss ein Terminal sein"
|
||||
016 "Vi's Standardein- und -ausgabe muß ein Terminal sein"
|
||||
017 "Marke %s: nicht gesetzt"
|
||||
018 "Marke %s: die Zeile wurde geloescht"
|
||||
018 "Marke %s: die Zeile wurde gelöscht"
|
||||
019 "Marke %s: Cursorposition existiert nicht mehr"
|
||||
020 "Fehler: "
|
||||
021 "neue Datei"
|
||||
022 "Name geaendert"
|
||||
023 "geaendert"
|
||||
024 "nicht geaendert"
|
||||
025 "NICHT GELOCKED"
|
||||
022 "Name geändert"
|
||||
023 "geändert"
|
||||
024 "nicht geändert"
|
||||
025 "NICHT GELOCKT"
|
||||
026 "nur zum Lesen"
|
||||
027 "Zeile %lu von %lu [%ld%%]"
|
||||
028 "leere Datei"
|
||||
029 "Zeile %lu"
|
||||
030 "Die Datei %s ist kein Meldungskatalog"
|
||||
031 "Setzen der Voreinstellung fuer %s Option nicht moeglich"
|
||||
031 "Setzen der Voreinstellung für %s Option nicht möglich"
|
||||
032 "Benutzung: %s"
|
||||
033 "set: keine %s Option: 'set all' zeigt alle Optionen mit Werten an"
|
||||
034 "set: der [no]%s Option kann kein Wert zugewiesen werden"
|
||||
035 "set: %s ist keine boolsche Option"
|
||||
035 "set: %s ist keine Boolsche Option"
|
||||
036 "set: %s Option: %s"
|
||||
037 "set: %s Option: %s: Wert Ueberlauf"
|
||||
038 "set: %s Option: %s ist eine ungueltige Zahl"
|
||||
039 "set: %s ist keine boolsche Option"
|
||||
040 "Anzeige hat zu wenig Spalten, weniger als %d"
|
||||
041 "Anzeige hat zu viele Spalten, mehr als %d"
|
||||
042 "Anzeige hat zu wenig Zeilen, weniger als %d"
|
||||
043 "Anzeige hat zu viele Zeilen, mehr als %d"
|
||||
044 "Die lisp Option ist nicht implementiert"
|
||||
045 "Messages nicht abgeschalten: %s"
|
||||
046 "Messages nicht eingeschalten: %s"
|
||||
048 "Die paragraph Option muss Gruppen zu zwei Zeichen enthalten"
|
||||
049 "Die section Option muss Gruppen zu zwei Zeichen enthalten"
|
||||
037 "set: %s Option: %s: Werte-Überlauf"
|
||||
038 "set: %s Option: %s ist eine ungültige Zahl"
|
||||
039 "set: %s ist keine Boolsche Option"
|
||||
040 "Bildschirm hat zu wenig Spalten, weniger als %d"
|
||||
041 "Bildschirm hat zu viele Spalten, mehr als %d"
|
||||
042 "Bildschirm hat zu wenig Zeilen, weniger als %d"
|
||||
043 "Bildschirm hat zu viele Zeilen, mehr als %d"
|
||||
044 "Die lisp-Option ist nicht implementiert"
|
||||
045 "Meldungen nicht abgeschaltet: %s"
|
||||
046 "Meldungen nicht eingeschaltet: %s"
|
||||
047 "Die %s-Option muß Gruppen zu zwei Zeichen enthalten"
|
||||
053 "Der Standardpuffer ist leer"
|
||||
054 "Puffer %s ist leer"
|
||||
055 "Dateien mit newlines im Namen sind nicht wiederherstellbar"
|
||||
056 "Aenderungen nicht wiederherstellbar falls die Editorsitzung schief geht"
|
||||
057 "kopiere Datei fuer Wiederherstellung ..."
|
||||
056 "Änderungen nicht wiederherstellbar, falls die Editorsitzung schiefgeht"
|
||||
057 "kopiere Datei für Wiederherstellung ..."
|
||||
058 "Rettungsmechanismus funktioniert nicht: %s"
|
||||
059 "Aenderungen nicht wiederherstellbar falls die Editorsitzung schief geht"
|
||||
059 "Änderungen nicht wiederherstellbar, falls die Editorsitzung schiefgeht"
|
||||
060 "Sicherung der Datei gescheitert: %s"
|
||||
061 "kopiere Datei fuer Wiederherstellung ..."
|
||||
062 "Informationen ueber den Benutzer mit id %u nicht gefunden"
|
||||
063 "Wiederherstellungsdatei kann nicht gesperrt werden"
|
||||
064 "Puffer der Wiederherstellungsdatei uebergelaufen"
|
||||
061 "kopiere Datei für Wiederherstellung ..."
|
||||
062 "Informationen über den Benutzer mit id %u nicht gefunden"
|
||||
063 "Wiederherstellungsdatei kann nicht gelockt werden"
|
||||
064 "Puffer der Wiederherstellungsdatei übergelaufen"
|
||||
065 "Wiederherstellungsdatei"
|
||||
066 "%s: Wiederherstellungsdatei hat falsches Format"
|
||||
067 "%s: Wiederherstellungsdatei hat falsches Format"
|
||||
068 "Keine von Ihnen lesbaren Dateien mit Namen %s zum Wiederherstellen"
|
||||
069 "Es gibt aeltere Versionen dieser Datei von Ihnen zum Wiederherstellen"
|
||||
069 "Es gibt ältere Versionen dieser Datei von Ihnen zum Wiederherstellen"
|
||||
070 "Sie haben noch andere Dateien zum Wiederherstellen"
|
||||
071 "schicke keine email: %s"
|
||||
072 "Datei leer; nichts zu suchen"
|
||||
@ -69,110 +68,110 @@
|
||||
074 "Kein altes Suchmuster"
|
||||
075 "Suchmuster nicht gefunden"
|
||||
076 "Dateianfang erreicht, ohne das Suchmuster zu finden"
|
||||
077 "Suche umgeschlagen"
|
||||
077 "Suche beginnt von vorn"
|
||||
078 "suche ..."
|
||||
079 "Keine nichtdruckbaren Zeichen gefunden"
|
||||
080 "Unbekannter Kommandoname"
|
||||
082 "%s: Kommando im ex Modus nicht verfuegbar"
|
||||
083 "Count darf nicht Null sein"
|
||||
082 "%s: Kommando im ex-Modus nicht verfügbar"
|
||||
083 "Anzahl darf nicht Null sein"
|
||||
084 "%s: falsche Zeilenangabe"
|
||||
085 "Interner Syntaxtabellenfehler (%s: %s)"
|
||||
086 "Benutzung: %s"
|
||||
087 "%s: temporaerer Puffer nicht freigegeben"
|
||||
087 "%s: temporärer Puffer nicht freigegeben"
|
||||
088 "Flagoffset vor Zeile 1"
|
||||
089 "Flagoffset hinter dem Dateiende"
|
||||
090 "@ mit Bereich lief als Datei/Anzeige geaendert wurde"
|
||||
091 "globales oder v-Kommando lief als Datei/Anzeige geaendert wurde"
|
||||
092 "Ex Kommando misslungen: restliche Kommandoeingabe ignoriert"
|
||||
093 "Ex Kommando misslungen: umdefinierte Tasten ungueltig"
|
||||
090 "@ mit Bereich lief, als Datei/Anzeige geändert wurde"
|
||||
091 "globales oder v-Kommando lief, als Datei/Anzeige geändert wurde"
|
||||
092 "Ex-Kommando mißlungen: restliche Kommandoeingabe ignoriert"
|
||||
093 "Ex-Kommando mißlungen: umdefinierte Tasten ungültig"
|
||||
094 "Die zweite Adresse ist kleiner als die erste"
|
||||
095 "Kein Markenname angegeben"
|
||||
096 "\\ ohne folgenden / oder ?"
|
||||
097 "Referenz auf eine negative Zeilennummer"
|
||||
098 "Das Kommando %s ist unbekannt"
|
||||
099 "Adresswert zu gross"
|
||||
100 "Adresswert zu klein"
|
||||
101 "Ungueltige Adresskombination"
|
||||
102 "Ungueltige Adresse: nur %lu Zeilen in der Datei"
|
||||
103 "Ungueltige Adresse: die Datei ist leer"
|
||||
099 "Adreßwert zu groß"
|
||||
100 "Adreßwert zu klein"
|
||||
101 "Ungültige Adreßkombination"
|
||||
102 "Ungültige Adresse: nur %lu Zeilen in der Datei"
|
||||
103 "Ungültige Adresse: die Datei ist leer"
|
||||
104 "Das Kommando %s erlaubt keine Adresse 0"
|
||||
105 "Keine Abkuerzungen zum Anzeigen"
|
||||
106 "Abkuerzungen muessen mit einem "Wort"-Zeichen enden"
|
||||
107 "Abkuerzungen duerfen keine Tabulator- oder Leerzeichen enthalten"
|
||||
108 "In Abkuerzungen duerfen ausser am Ende Wort- und Nicht-Wort-Zeichen nicht gemischt werden"
|
||||
109 ""%s" ist keine Abkuerzung"
|
||||
110 "Vi Kommando misslungen: umdefinierte Tasten ungueltig"
|
||||
111 "Keine weiteren Dateien zu edieren"
|
||||
112 "Keine vorhergehenden Dateien zu edieren"
|
||||
113 "Keine vorhergehenden Dateien fuer rewind"
|
||||
105 "Keine Abkürzungen zum Anzeigen"
|
||||
106 "Abkürzungen müssen mit einem \"Wort\"-Zeichen enden"
|
||||
107 "Abkürzungen dürfen keine Tabulator- oder Leerzeichen enthalten"
|
||||
108 "In Abkürzungen dürfen außer am Ende Wort- und Nicht-Wort-Zeichen nicht gemischt werden"
|
||||
109 "\"%s\" ist keine Abkürzung"
|
||||
110 "Vi Kommando mißlungen: umdefinierte Tasten ungültig"
|
||||
111 "Keine weiteren Dateien zu editieren"
|
||||
112 "Keine vorhergehenden Dateien zu editieren"
|
||||
113 "Keine vorhergehenden Dateien für rewind"
|
||||
114 "Keine Dateiliste zum Anzeigen"
|
||||
115 "Kein vorhergehendes Kommando um "!" zu ersetzen"
|
||||
116 "Kein Dateiname fuer %%"
|
||||
117 "Kein Dateiname fuer #"
|
||||
115 "Kein vorhergehendes Kommando, um \"!\" zu ersetzen"
|
||||
116 "Kein Dateiname für %%"
|
||||
117 "Kein Dateiname für #"
|
||||
118 "Fehler: execl: %s"
|
||||
119 "I/O Fehler: %s"
|
||||
120 "Datei wurde seit dem letzten vollstaendigen Schreiben geaendert; schreibe oder verwende ! zum ignorieren"
|
||||
119 "E/A-Fehler: %s"
|
||||
120 "Datei wurde seit dem letzten vollständigen Schreiben geändert; schreibe oder verwende ! zum ignorieren"
|
||||
121 "Kann Homedirectory nicht bestimmen"
|
||||
122 "Neues aktuelles Directory: %s"
|
||||
123 "Keine Puffer anzuzeigen"
|
||||
124 "Das Kommando %s kann nicht als Teil eines global oder v Kommandos verwendet werden"
|
||||
125 "%s/%s: nicht gelesen: gehoehrt weder Ihnen noch root"
|
||||
126 "%s/%s: nicht gelesen: gehoehrt nicht Ihnen"
|
||||
127 "%s/%s: nicht gelesen: anderer Benutzer als Eigentuemer hat Schreibrecht"
|
||||
128 "%s: nicht gelesen: gehoehrt weder Ihnen noch root"
|
||||
129 "%s: nicht gelesen: gehoehrt nicht Ihnen"
|
||||
130 "%s: nicht gelesen: anderer Benutzer als Eigentuemer hat Schreibrecht"
|
||||
125 "%s/%s: nicht gelesen: gehört weder Ihnen noch root"
|
||||
126 "%s/%s: nicht gelesen: gehört nicht Ihnen"
|
||||
127 "%s/%s: nicht gelesen: anderer Benutzer als Eigentümer hat Schreibrecht"
|
||||
128 "%s: nicht gelesen: gehört weder Ihnen noch root"
|
||||
129 "%s: nicht gelesen: gehört nicht Ihnen"
|
||||
130 "%s: nicht gelesen: anderer Benutzer als Eigentümer hat Schreibrecht"
|
||||
131 "Keine folgenden Zeilen zum Verbinden"
|
||||
132 "Kein Eingabe-Map Eintrag"
|
||||
133 "Kein Kommando-Map Eintrag"
|
||||
132 "Kein input-Map Eintrag"
|
||||
133 "Kein command-Map Eintrag"
|
||||
134 "Das %s Zeichen kann nicht umgemappt werden"
|
||||
135 ""%s" ist momentan nicht gemappt"
|
||||
136 "Markennamen muessen einzelne Buchstaben sein"
|
||||
137 "%s existiert, nicht geschrieben; verwende ! zum Ueberschreiben"
|
||||
135 "\"%s\" ist momentan nicht gemappt"
|
||||
136 "Markennamen müssen einzelne Buchstaben sein"
|
||||
137 "%s existiert, nicht geschrieben; verwende ! zum Überschreiben"
|
||||
138 "Neue .exrc Datei: %s. "
|
||||
139 "Zielzeile ist innerhalb des Verschiebebereichs"
|
||||
140 "Das open Kommando verlangt, dass die open Option gesetzt ist"
|
||||
140 "Das open Kommando verlangt, daß die open Option gesetzt ist"
|
||||
141 "Das open Kommando ist nocht nicht implementiert"
|
||||
142 "Rettung dieser Datei nicht moeglich"
|
||||
142 "Rettung dieser Datei nicht möglich"
|
||||
143 "Datei gerettet"
|
||||
144 "%s wurde in zu viele Dateinamen expandiert"
|
||||
145 "Nur regulaere Dateien und named pipes koennen gelesen werden"
|
||||
146 "%s: Lesesperrung war nicht moeglich"
|
||||
145 "Nur reguläre Dateien und named pipes können gelesen werden"
|
||||
146 "%s: Locken zum Lesen war nicht möglich"
|
||||
147 "lese ..."
|
||||
148 "%s: %lu Zeilen, %lu Zeichen"
|
||||
149 "Keine Hintegrundanzeigen vorhanden"
|
||||
150 "Das script Kommando ist nur im vi Modus verfuegbar"
|
||||
151 "Kein Kommando auszufuehren"
|
||||
149 "Keine Hintergrundanzeigen vorhanden"
|
||||
150 "Das script Kommando ist nur im vi Modus verfügbar"
|
||||
151 "Kein Kommando auszuführen"
|
||||
152 "shiftwidth Option auf 0 gesetzt"
|
||||
153 "Count ueberlauf"
|
||||
154 "Count unterlauf"
|
||||
155 "Regulaerer Ausdruck angegeben; r Flag bedeutungslos"
|
||||
156 "Die #, l und p Flags koennen im vi Modus nicht mit dem c Flag kombiniert werden"
|
||||
157 "Keine Uebereinstimmung gefunden"
|
||||
153 "Anzahl-Überlauf"
|
||||
154 "Anzahl-Unterlauf"
|
||||
155 "Regulärer Ausdruck angegeben; r Flag bedeutungslos"
|
||||
156 "Die #, l und p Flags können im vi Modus nicht mit dem c Flag kombiniert werden"
|
||||
157 "Keine Übereinstimmung gefunden"
|
||||
158 "Kein vorhergehender 'tag' angegeben"
|
||||
159 "Weniger als %s Eintraege auf dem 'tag'-Stack; verwende :display t[ags]"
|
||||
159 "Weniger als %s Einträge auf dem 'tag'-Stack; verwende :display t[ags]"
|
||||
160 "Keine Datei namens %s auf dem 'tag'-Stack; verwende :display t[ags]"
|
||||
161 "Druecke Enter um fortzufahren: "
|
||||
161 "Drücke Enter um fortzufahren: "
|
||||
162 "%s: 'tag' nicht gefunden"
|
||||
163 "%s: kaputter 'tag' in %s"
|
||||
164 "%s: die Zeilennummer des 'tag' ist hinter dem Dateiende"
|
||||
165 "Der 'tag' Stack ist leer"
|
||||
166 "%s: Suchmuster nicht gefunden"
|
||||
167 "%d weitere Dateien zu edieren"
|
||||
167 "%d weitere Dateien zu editieren"
|
||||
168 "Puffer %s ist leer"
|
||||
169 "Bestaetige Aenderung [n]"
|
||||
169 "Bestätige Änderung [n]"
|
||||
170 "Unterbrochen."
|
||||
171 "Kein vorhergehender Puffer zum Ausfuehren"
|
||||
172 "Kein vorhergehender regulaerer Ausdruck"
|
||||
173 "Das Kommando %s verlangt, dass bereits eine Datei eingelesen wurde"
|
||||
171 "Kein vorhergehender Puffer zum Ausführen"
|
||||
172 "Kein vorhergehender regulärer Ausdruck"
|
||||
173 "Das Kommando %s verlangt, daß bereits eine Datei eingelesen wurde"
|
||||
174 "Benutzung: %s"
|
||||
175 "Das visual Kommando verlangt dass die open Option gesetzt ist"
|
||||
175 "Das visual Kommando verlangt daß die open Option gesetzt ist"
|
||||
177 "Leere Datei"
|
||||
178 "Keine vorhergehende F, f, T oder t Suche"
|
||||
179 "%s nicht gefunden"
|
||||
180 "Keine vorhergehende Datei zu edieren"
|
||||
180 "Keine vorhergehende Datei zu editieren"
|
||||
181 "Cursor nicht auf einer Zahl"
|
||||
182 "Sich ergebende Zahl ist zu gross"
|
||||
182 "Sich ergebende Zahl ist zu groß"
|
||||
183 "Sich ergebende Zahl ist zu klein"
|
||||
184 "Kein korrespondierendes Zeichen in dieser Zeile"
|
||||
185 "Korrespondierendes Zeichen nicht gefunden"
|
||||
@ -180,11 +179,11 @@
|
||||
187 "Keine andere Anzeige zum Hinschalten"
|
||||
188 "Zeichen nach Suchmuster, Zeilenoffset und/oder z Kommando"
|
||||
189 "Kein altes Suchmuster"
|
||||
190 "Suche zur urspruenglichen Position umgeschlagen"
|
||||
191 "Abkuerzung ueberschreitet Expansionsgrenze: Zeichen weggelassen"
|
||||
190 "Suche zur ursprünglichen Position zurückgekehrt"
|
||||
191 "Abkürzung überschreitet Expansionsgrenze: Zeichen weggelassen"
|
||||
192 "Nicht erlaubtes Zeichen; maskiere zum Eingeben"
|
||||
193 "Bereits am Anfang der Eingabe"
|
||||
194 "Keine weiteren Zeichen zu loeschen"
|
||||
194 "Keine weiteren Zeichen zu löschen"
|
||||
195 "Bewegung hinter das Dateiende"
|
||||
196 "Bewegung hinter das Zeilenende"
|
||||
197 "Keine Cursorbewegung gemacht"
|
||||
@ -196,73 +195,73 @@
|
||||
203 "Bereits am Zeilenende"
|
||||
204 "%s ist kein vi Kommando"
|
||||
205 "Benutzung: %s"
|
||||
206 "Keine Zeichen zu loeschen"
|
||||
207 "Das Q Kommando benoetigt das ex Terminal Interface"
|
||||
206 "Keine Zeichen zu löschen"
|
||||
207 "Das Q Kommando benötigt das ex Terminal Interface"
|
||||
208 "Kein Kommando zu wiederholen"
|
||||
209 "Die Datei ist leer"
|
||||
210 "%s kann nicht als Bewegungskommando verwendet werden"
|
||||
211 "Bereits im Kommando-Modus"
|
||||
212 " Cursor nicht auf einem Wort"
|
||||
214 "Wert der Window Option ist zu gross, max ist %u"
|
||||
215 "Anfuegen"
|
||||
216 "Aendern"
|
||||
214 "Wert der Window Option ist zu groß, max ist %u"
|
||||
215 "Anhängen"
|
||||
216 "Ändern"
|
||||
217 "Kommando"
|
||||
218 "Einfuegen"
|
||||
218 "Einfügen"
|
||||
219 "Ersetzen"
|
||||
220 "Bewegung hinter das Anzeigenende"
|
||||
221 "Bewegung vor den Anzeigenanfang"
|
||||
222 "Anzeige muss zum Zerlegen groesser als %d sein"
|
||||
222 "Anzeige muß für Bildschirmteilung größer als %d sein"
|
||||
223 "Keine Hintergrundanzeigen vorhanden"
|
||||
224 "Es gibt keine Hintergrundanzeige die eine Datei namens %s ediert"
|
||||
224 "Es gibt keine Hintergrundanzeige, die eine Datei namens %s editiert"
|
||||
225 "Die einzige dargestellte Anzeige kann nicht in den Hintergrund gebracht werden"
|
||||
226 "Die Anzeige kann nur auf %d Zeilen verkleinert werden"
|
||||
227 "Die Anzeige kann nicht verkleinert werden"
|
||||
228 "Die Anzeige kann nicht vergroessert werden"
|
||||
230 "Diese Anzeige kann nicht gestopped werden"
|
||||
231 "Unterbrochen: umdefinierte Tasten ungueltig"
|
||||
232 "vi: temporaerer Puffer nicht freigegeben"
|
||||
228 "Die Anzeige kann nicht vergrößert werden"
|
||||
230 "Diese Anzeige kann nicht gestopt werden"
|
||||
231 "Unterbrochen: umdefinierte Tasten ungültig"
|
||||
232 "vi: temporärer Puffer nicht freigegeben"
|
||||
233 "Dieses Terminal hat keine %s Taste"
|
||||
234 "es kann nur ein Puffer angegeben werden"
|
||||
235 "Zahl groesser als %lu"
|
||||
235 "Zahl größer als %lu"
|
||||
236 "Unterbrochen"
|
||||
237 "Nicht moeglich temporaere Datei anzulegen"
|
||||
238 "Warnung: %s ist keine regulaere Datei"
|
||||
239 "%s ist bereits gesperrt, nur-lese Editorsitzung"
|
||||
240 "%s: loeschen"
|
||||
241 "%s: schliessen"
|
||||
242 "%s: loeschen"
|
||||
243 "%s: loeschen"
|
||||
244 "Nur-lese Datei, nicht geschrieben; verwende ! zum Ueberschreiben"
|
||||
245 "Nur-lese Datei, nicht geschrieben"
|
||||
246 "%s existiert, nicht geschrieben; verwende ! zum Ueberschreiben"
|
||||
237 "Nicht möglich, temporäre Datei anzulegen"
|
||||
238 "Warnung: %s ist keine reguläre Datei"
|
||||
239 "%s ist bereits gelockt, Editorsitzung schreibgeschützt"
|
||||
240 "%s: löschen"
|
||||
241 "%s: schließen"
|
||||
242 "%s: löschen"
|
||||
243 "%s: löschen"
|
||||
244 "Datei nicht schreibbar, nicht geschrieben; verwende ! zum Überschreiben"
|
||||
245 "Datei nicht schreibbar, nicht geschrieben"
|
||||
246 "%s existiert, nicht geschrieben; verwende ! zum Überschreiben"
|
||||
247 "%s existiert, nicht geschrieben"
|
||||
248 "Teil der Datei, nicht geschrieben; verwende ! zum Ueberschreiben"
|
||||
248 "Teil der Datei, nicht geschrieben; verwende ! zum Überschreiben"
|
||||
249 "Teil der Datei, nicht geschrieben"
|
||||
250 "%s: Datei wurde spaeter als diese Kopie veraendert; verwende ! zum Ueberschreiben"
|
||||
251 "%s: Datei wurde spaeter als diese Kopie veraendert"
|
||||
252 "%s: Schreibsperrung war nicht moeglich"
|
||||
250 "%s: Datei wurde später als diese Kopie verändert; verwende ! zum Überschreiben"
|
||||
251 "%s: Datei wurde später als diese Kopie verändert"
|
||||
252 "%s: Locken zum Schreiben war nicht möglich"
|
||||
253 "schreibe ..."
|
||||
254 "%s: WARNUNG: DATEI ABGESCHNITTEN"
|
||||
255 "Bereits am ersten 'tag' dieser Gruppe"
|
||||
256 "%s: neue Datei: %lu Zeilen, %lu Zeichen"
|
||||
257 "%s: %lu Zeilen, %lu Zeichen"
|
||||
258 "%s wurde in zu viele Dateinamen expandiert"
|
||||
259 "%s: keine regulaere Datei"
|
||||
260 "%s: gehoehrt nicht Ihnen"
|
||||
261 "%s: anderer Benutzer als Eigentuemer hat Zugriff"
|
||||
262 "Datei wurde seit dem letzten vollstaendigen Schreiben geaendert; schreibe oder verwende ! zum ignorieren"
|
||||
263 "Datei wurde seit dem letzten vollstaendigen Schreiben geaendert; schreibe oder verwende :edit! zum ignorieren"
|
||||
264 "Datei wurde seit dem letzten vollstaendigen Schreiben geaendert; schreibe oder verwende ! zum ignorieren"
|
||||
265 "Datei ist temporaer; beim Verlassen gehen die Aenderungen verloren"
|
||||
266 "Nur-lese Datei, Aenderungen werden nicht automatisch geschrieben"
|
||||
259 "%s: keine reguläre Datei"
|
||||
260 "%s: gehört nicht Ihnen"
|
||||
261 "%s: anderer Benutzer als Eigentümer hat Zugriff"
|
||||
262 "Datei wurde seit dem letzten vollständigen Schreiben geändert; schreibe oder verwende ! zum ignorieren"
|
||||
263 "Datei wurde seit dem letzten vollständigen Schreiben geändert; schreibe oder verwende :edit! zum ignorieren"
|
||||
264 "Datei wurde seit dem letzten vollständigen Schreiben geändert; schreibe oder verwende ! zum ignorieren"
|
||||
265 "Datei ist temporär; beim Verlassen gehen die Änderungen verloren"
|
||||
266 "Datei ist schreibgeschützt, Änderungen werden nicht automatisch geschrieben"
|
||||
267 "Portokollierung neu begonnen"
|
||||
268 "bestaetigen [ynq]"
|
||||
269 "Druecke beliebige Taste um fortzufahren"
|
||||
270 "Druecke beliebige Taste um fortzufahren [: um weitere Kommandos einzugeben]: "
|
||||
271 "Druecke beliebige Taste um fortzufahren [q zum Verlassen]: "
|
||||
272 "Diese Form von %s benoetigt das ex Terminal-Interface"
|
||||
268 "bestätigen [ynq]"
|
||||
269 "Drücke beliebige Taste um fortzufahren"
|
||||
270 "Drücke beliebige Taste um fortzufahren [: um weitere Kommandos einzugeben]: "
|
||||
271 "Drücke beliebige Taste um fortzufahren [q zum Verlassen]: "
|
||||
272 "Diese Form von %s benötigt das ex Terminal-Interface"
|
||||
273 "Gehe in ex Eingabe-Modus.\n"
|
||||
274 "Kommando schief gelaufen, noch keine Datei eingelesen"
|
||||
274 "Kommando schiefgelaufen, noch keine Datei eingelesen"
|
||||
275 " weiter?"
|
||||
276 "unerwartetes Zeichen - Ereignis"
|
||||
277 "unerwartetes Dateiende - Ereignis"
|
||||
@ -271,18 +270,18 @@
|
||||
280 "unerwartetes Verlassen - Ereignis"
|
||||
281 "unerwartetes Wiederherstellungs - Ereignis"
|
||||
282 "Bereits am letzten 'tag' dieser Gruppe"
|
||||
283 "Das %s Kommando benoetigt das ex Terminal-Interface"
|
||||
284 "Diese Form von %s wird nicht unterstuetzt wenn die 'secure edit' - Option gesetzt ist"
|
||||
283 "Das %s Kommando benötigt das ex Terminal-Interface"
|
||||
284 "Diese Form von %s wird nicht unterstützt wenn die 'secure edit' - Option gesetzt ist"
|
||||
285 "unerwartetes Zeichenketten - Ereignis"
|
||||
286 "unerwartetes timeout - Ereignis"
|
||||
287 "unerwartetes Schreibe - Ereignis"
|
||||
289 "Shell Expandierungen nicht unterstuetzt wenn die 'secure edit' - Option gesetzt ist"
|
||||
290 "Das %s Kommando wird nicht unterstuetzt wenn die 'secure edit' - Option gesetzt ist"
|
||||
289 "Shell Expandierungen nicht unterstützt wenn die 'secure edit' - Option gesetzt ist"
|
||||
290 "Das %s Kommando wird nicht unterstützt wenn die 'secure edit' - Option gesetzt ist"
|
||||
291 "set: %s kann nicht ausgeschaltet werden"
|
||||
292 "Anzeige zu klein."
|
||||
293 "angefuegt"
|
||||
294 "geaendert"
|
||||
295 "geloescht"
|
||||
293 "angefügt"
|
||||
294 "geändert"
|
||||
295 "gelöscht"
|
||||
296 "verbunden"
|
||||
297 "verschoben"
|
||||
298 "geschoben"
|
||||
@ -290,18 +289,18 @@
|
||||
300 "Zeile"
|
||||
301 "Zeilen"
|
||||
302 "Vi wurde nicht mit dem Tcl Interpreter gelinkt"
|
||||
303 "Datei wurde seit dem letzten Schreiben veraendert."
|
||||
304 "Shell Expansion nicht geklappt"
|
||||
305 "Es ist keine %s Edieroption angegeben"
|
||||
303 "Datei wurde seit dem letzten Schreiben verändert."
|
||||
304 "Shell Expansion hat nicht geklappt"
|
||||
305 "Es ist keine %s Editieroption angegeben"
|
||||
306 "Vi wurde nicht mit einem Perl Interpreter geladen"
|
||||
307 "Kein ex Kommando auszufuehren"
|
||||
308 "Druecke <CR> um ein Kommando auszufuehren, :q zum verlassen"
|
||||
309 "Verwende "cscope help" fuer Hilestellung"
|
||||
307 "Kein ex Kommando auszuführen"
|
||||
308 "Drücke <CR> um ein Kommando auszuführen, :q zum verlassen"
|
||||
309 "Verwende \"cscope help\" für Hilestellung"
|
||||
310 "Keine cscope Verbindung aktiv"
|
||||
311 "%s: unbekannter Suchtyp: verwende einen aus %s"
|
||||
312 "%d: keine solche cscope Verbindung"
|
||||
313 "set: die %s Option kann nicht eingeschaltet werden"
|
||||
314 "set: die %s Option kann nicht auf 0 gesetzt werden"
|
||||
315 "%s: angefuegt: %lu Zeilen, %lu Zeichen"
|
||||
316 "unerwartetes Groessenveraenderungs - Ereignis"
|
||||
315 "%s: angefügt: %lu Zeilen, %lu Zeichen"
|
||||
316 "unerwartetes Größenveränderungs - Ereignis"
|
||||
317 "%d Dateien zu edieren"
|
||||
|
@ -1,36 +0,0 @@
|
||||
Unused message id's (this is okay):
|
||||
001
|
||||
047
|
||||
050
|
||||
051
|
||||
052
|
||||
081
|
||||
176
|
||||
213
|
||||
229
|
||||
288
|
||||
=========================
|
||||
MISSING ERROR MESSAGES (Please add!):
|
||||
=========================
|
||||
Extra error messages (just delete them):
|
||||
=========================
|
||||
MESSAGES WITH THE SAME MESSAGE ID's (FIX!):
|
||||
=========================
|
||||
Duplicate messages, both id and message (this is okay):
|
||||
=========================
|
||||
Duplicate messages, just message (this is okay):
|
||||
2 %s existiert, nicht geschrieben; verwende ! zum UeberschreibenX
|
||||
2 %s wurde in zu viele Dateinamen expandiertX
|
||||
2 %s: %lu Zeilen, %lu ZeichenX
|
||||
2 %s: Wiederherstellungsdatei hat falsches FormatX
|
||||
2 Aenderungen nicht wiederherstellbar falls die Editorsitzung schief gehtX
|
||||
2 Kein altes SuchmusterX
|
||||
2 Keine Protokollierung aktiv, rueckgaengig machen nicht moeglichX
|
||||
2 Puffer %s ist leerX
|
||||
2 geaendertX
|
||||
2 kopiere Datei fuer Wiederherstellung ...X
|
||||
2 set: %s ist keine boolsche OptionX
|
||||
3 %s: loeschenX
|
||||
3 Datei wurde seit dem letzten vollstaendigen Schreiben geaendert; schreibe oder verwende ! zum ignorierenX
|
||||
4 Benutzung: %sX
|
||||
=========================
|
@ -1 +1,2 @@
|
||||
Bernhard Daeubler <daeb@physik.uni-ulm.de>
|
||||
Bernhard Daeubler <daeb@physik.uni-ulm.de>
|
||||
Joerg Wunsch <joerg_wunsch@uriah.heep.sax.de>
|
||||
|
@ -1,317 +0,0 @@
|
||||
VI_MESSAGE_CATALOG
|
||||
Zbyt długa liniaX
|
||||
nie można usunąć linii %luX
|
||||
nie można dodać do linii %luX
|
||||
nie można wstawić w linii %luX
|
||||
nie można zachować linii %luX
|
||||
nie można pobrać ostatniej liniiX
|
||||
Błąd: nie można pobrać linii %luX
|
||||
Plik loguX
|
||||
Brak logowania, anulowanie (undo) niemożliweX
|
||||
Brak zmian do anulowaniaX
|
||||
Brak logowania, anulowanie (undo) niemożliweX
|
||||
Brak logowania, nie można przeglądać do przoduX
|
||||
Brak zmian do powtórzeniaX
|
||||
%s/%d: błąd zapisu do loguX
|
||||
Standardowe wejście i wyjście vi musi być terminalemX
|
||||
Znacznik %s: nie ustawionyX
|
||||
Znacznik %s: linia została usuniętaX
|
||||
Znacznik %s: pozycja kursora już nie istniejeX
|
||||
Błąd: X
|
||||
nowy plikX
|
||||
nazwa została zmienionaX
|
||||
zmienionyX
|
||||
nie zmienionyX
|
||||
ODBLOKOWANYX
|
||||
tylko do odczytuX
|
||||
linia %lu z %lu [%ld%%]X
|
||||
pusty plikX
|
||||
linia %luX
|
||||
Plik %s nie jest katalogiem komunikatówX
|
||||
Nie można ustawić domyślnej opcji %sX
|
||||
Sposób użycia: %sX
|
||||
set: brak opcji %s: 'set all' wyświetla wartości opcjiX
|
||||
set: opcja no]%s nie pobiera wartościX
|
||||
set: opcja %s nie jest zmienną boolowskąX
|
||||
set: opcja %s: %sX
|
||||
set: opcja %s: %s: przepełnienieX
|
||||
set: opcja %s: %s nie jest poprawną liczbąX
|
||||
set: opcja %s nie jest zmienną boolowskąX
|
||||
Zbyt mała liczba kolumn ekranu, mniejsza niż %dX
|
||||
Zbyt duża liczba kolumn, większa niż %dX
|
||||
Zbyt mała liczba wierszy ekranu, mniejsza niż %dX
|
||||
Zbyt duża liczba wierszy ekranu, większa niż %dX
|
||||
Opcja lisp nie jest zaimplementowanaX
|
||||
komunikaty nie wyłączone: %sX
|
||||
komunikaty nie włączone: %sX
|
||||
|
||||
Opcja paragraph musi składać się z dwóch grup symboliX
|
||||
Opcja section musi składać się z dwóch grup symboliX
|
||||
|
||||
|
||||
|
||||
Domyślny bufor jest pustyX
|
||||
Bufor %s jest pustyX
|
||||
Pliki z symbolem nowego wiersza w nazwie nie mogą być odtworzoneX
|
||||
Zmiany nie do odtworzenia, jeśli sesja zostanie przerwanaX
|
||||
Tworzenie kopii zapasowej...X
|
||||
Błąd podczas zachowywania: %sX
|
||||
Zmiany nie do odtworzenia, jeśli sesja zostanie przerwanaX
|
||||
Błąd podczas tworzenia kopii zapasowej: %sX
|
||||
Tworzenie kopii zapasowej...X
|
||||
Nie znaleziono informacji o użytkowniku numer %uX
|
||||
Nie można zablokować kopii zapasowejX
|
||||
Przepełnienie bufora kopii zapasowejX
|
||||
Kopia zapasowaX
|
||||
%s: błędna kopia zapasowaX
|
||||
%s: błędna kopia zapasowaX
|
||||
Brak plików o nazwie %s, które mógłbyś odczytać, do odzyskaniaX
|
||||
Istnieją starsze wersje tego pliku, które można odzyskaćX
|
||||
Istnieją inne pliki, które można odzyskaćX
|
||||
nie wysyłam poczty: %sX
|
||||
Pusty plik; nie ma czego szukaćX
|
||||
Dotarto do końca pliku bez znalezienia szukanego wzorcaX
|
||||
Brak poprzedniego wzorca poszukiwańX
|
||||
Nie znaleziono wzorcaX
|
||||
Dotarto do początku pliku bez znalezienia szukanego wzorcaX
|
||||
Poszukiwanie od początkuX
|
||||
Szukam...X
|
||||
Nie znaleziono niedrukowalnych znakówX
|
||||
Nieznana nazwa poleceniaX
|
||||
|
||||
%s: polecenie niedostępne w trybie edytora exX
|
||||
Liczba nie może być zeremX
|
||||
%s: błędny numer liniiX
|
||||
Wewnętrzny błąd tablicy składni (%s: %s)X
|
||||
Sposób użycia: %sX
|
||||
%s: tymczasowy bufor nie został zwolnionyX
|
||||
Przesunięcie przed linię 1X
|
||||
Przesunięcie poza koniec plikuX
|
||||
@ with range running when the file/screen changedX
|
||||
Wykonywano polecenie globalne/wizualne podczas zmiany pliku/ekranuX
|
||||
Błąd polecenie ex: pozostałe polecenia anulowaneX
|
||||
Błąd polecenia ex: mapowanie klawiszy anulowaneX
|
||||
Drugi adres jest mniejszy od pierwszegoX
|
||||
Nie podano nazwy znacznikaX
|
||||
\\ bez / lub ?X
|
||||
Odniesienie do linii o numerze mniejszym od 0X
|
||||
Nieznane polecenie %sX
|
||||
Przepełnienie wartości adresuX
|
||||
Niedomiar wartości adresuX
|
||||
Niedozwolona kombinacja adresuX
|
||||
Niedozwolony adres: jest tylko %lu linii w plikuX
|
||||
Niedozwolony adres: plik jest pustyX
|
||||
Polecenie %s nie zezwala na użycie adresu 0X
|
||||
Brak skrótów do wyświetleniaX
|
||||
Skróty muszą się kończyć symbolem "słowo"X
|
||||
Skróty nie mogą zawierać spacji lub tabulacjiX
|
||||
Skróty nie mogą przeplatać symboli słowo/nie-słowo, z wyjątkiem na końcu liniiX
|
||||
"%s" nie jest skrótemX
|
||||
Błąd polecenia vi: mapowanie klawiszy odrzuconeX
|
||||
Nie ma więcej plików do edycjiX
|
||||
Nie ma poprzednich plików do edycjiX
|
||||
Nie ma poprzednich plików do przewinięcia wsteczX
|
||||
Nie ma listy plików do wyświetleniaX
|
||||
Nie ma poprzedniego polecenia do zastąpienia "!"X
|
||||
Nie ma nazwy pliku do zastąpienia %%X
|
||||
Nie ma nazwy pliku do zastąpienia #X
|
||||
Błąd: execl: %sX
|
||||
Błąd I/O: %sX
|
||||
Plik zmodyfikowany od ostatniego zapisu; zapisz lub użyj ! żeby wymusićX
|
||||
Nie mozna znaleźć katalogu domowego (home)X
|
||||
Nowy katalog bieżący: %sX
|
||||
Nie ma buforów edycji do wyświetleniaX
|
||||
Polecenie %s nie może być użyte jako część polecenia globalnego lub wizualnegoX
|
||||
%s/%s: nie wczytany: nie należy do ciebie ani do rootaX
|
||||
%s/%s: nie wczytany: nie należy do ciebieX
|
||||
%s/%s: nie wczytany: inny użytkownik niż właściciel ma prawo do zapisuX
|
||||
%s: nie wczytany: nie należy do ciebie ani do rootaX
|
||||
%s: nie wczytany: nie należy do ciebieX
|
||||
%s: nie wczytany: inny uzytkownik niż właściciel ma prawo do zapisuX
|
||||
Brak kolejnych linii do połączeniaX
|
||||
Brak pozycji map wejściowychX
|
||||
Brak pozycji map poleceńX
|
||||
Znak %s nie może być przemapowanyX
|
||||
"%s" obecnie nie jest mapowanyX
|
||||
Nazwa znacznika musi być pojedyńczą literąX
|
||||
%s istnieje, nie zapisany; użyj ! żeby wymusićX
|
||||
Nowy plik exrc: %sX
|
||||
Linia docelowa jest wewnątrz przenoszonego obszaruX
|
||||
Polecenie open wymaga ustawienia opcji openX
|
||||
Polecenie open jest niezaimplementowaneX
|
||||
Niemożliwe jest zachowanie tego plikuX
|
||||
Plik zachowanyX
|
||||
%s: rozwija się na zbyt wiele nazw plikówX
|
||||
Tylko zwykłe pliki i nazwane łącza (named pipes) można czytaćX
|
||||
%s: nie można założyć blokady do odczytuX
|
||||
Czytanie...X
|
||||
%s: %lu linii, %lu znakówX
|
||||
Brak ekranów w tle do wyświetleniaX
|
||||
Polecenie script dostępne jest tylko w trybie viX
|
||||
Brak polecenia do wykonaniaX
|
||||
Opcja shiftwidth ustawiona na 0X
|
||||
Przepełnienie licznikaX
|
||||
Niedomiar licznikaX
|
||||
Podano wyrażenie regularne; flaga r nie ma znaczeniaX
|
||||
Flagi #, l oraz p nie mogą być łączone z flagą c w trybie viX
|
||||
Nie znaleziono wzorcaX
|
||||
Brak poprzedniego znacznikaX
|
||||
Mniej niż %s na stosie znaczników; użyj :display t[ags]X
|
||||
Brak pliku %s na stosie znaczników do powrotu; użyj :display t[ags]X
|
||||
Naciśnij Enter: X
|
||||
%s: znacznik nie znalezionyX
|
||||
%s: błędny znacznik w %sX
|
||||
%s: numer linii znacznika wykracza poza koniec plikuX
|
||||
Stos znaczników jest pustyX
|
||||
%s: nie znaleziono szukanego wzorcaX
|
||||
%d plików jeszcze do edycjiX
|
||||
Bufor %s jest pustyX
|
||||
Potwierdzasz zmianę? [n]X
|
||||
PrzerwanyX
|
||||
Brak poprzedniego bufora do wykonaniaX
|
||||
Brak poprzedniego wyrażenia regularnegoX
|
||||
Polecenie %s wymaga uprzedniego wczytania plikuX
|
||||
Sposób użycia: %sX
|
||||
Polecenie wizualne wymaga ustawienia opcji openX
|
||||
|
||||
Pusty plikX
|
||||
Brak poprzedniego szukania F, f, T lub tX
|
||||
%s nie znalezionoX
|
||||
Brak poprzedniego pliku do edycjiX
|
||||
Kursor nie na liczbieX
|
||||
Liczba wynikowa zbyt dużaX
|
||||
Liczba wynikowa zbyt małaX
|
||||
Brak pasujących znaków w tej liniiX
|
||||
Nie znaleziono pasujących znakówX
|
||||
Brak znaków do zamianyX
|
||||
Brak innego ekranu do przełączeniaX
|
||||
Znaki poza napisem do szukania, przesunięciem linii i/lub poleceniem zX
|
||||
Brak poprzedniego wzorca szukaniaX
|
||||
Szukanie wróciło do pierwotnej pozycjiX
|
||||
Skrót przekroczył limit rozwinięcia: część znaków odrzuconoX
|
||||
Niedozwolony znak; zacytuj, żeby wprowadzićX
|
||||
Już na początku wstawianiaX
|
||||
Brak kolejnych znaków do usunięciaX
|
||||
Przesunięcie poza koniec plikuX
|
||||
Przesunięcie poza koniec liniiX
|
||||
Nie wykonano przesunięcia kursoraX
|
||||
Już na początku plikuX
|
||||
Przesunięcie przed początek plikuX
|
||||
Już w pierwszej kolumnieX
|
||||
Należy podać bufory przed poleceniemX
|
||||
Już na końcu plikuX
|
||||
Już na końcu liniiX
|
||||
%s nie jest poleceniem viX
|
||||
Sposób użycia: %sX
|
||||
Brak znaków do usunięciaX
|
||||
Polecenie Q wymaga interfejsu terminala exX
|
||||
Brak polecenia do powtórzeniaX
|
||||
Plik jest pustyX
|
||||
%s nie może być użyte jako polecenie przesunięciaX
|
||||
Już w trybie poleceńX
|
||||
Kursor nie na słowieX
|
||||
|
||||
Wartości opcji okna zbyt duże, max to %uX
|
||||
DołączX
|
||||
ZmieńX
|
||||
PolecenieX
|
||||
WstawX
|
||||
ZamieńX
|
||||
Przesunięcie poza koniec ekranuX
|
||||
Przesunięcie przed początek ekranuX
|
||||
Ekran musi mieć więcej niż %d linii, żeby go podzielićX
|
||||
Brak ekranów w tleX
|
||||
Nie ma ekranu w tle z edycją pliku o nazwie %sX
|
||||
Nie można schować w tle jedynego ekranu edycyjnegoX
|
||||
Można zmniejszyć ekran tylko do %d wierszyX
|
||||
Ekran nie może być zmniejszonyX
|
||||
Ekran nie może być zwiększonyX
|
||||
|
||||
Ekran nie może być zawieszonyX
|
||||
Przerwano: odrzucono mapowane klawiszeX
|
||||
vi: nie zwolniono bufora tymczasowegoX
|
||||
Ten terminal nie posiada klawisza %sX
|
||||
Można podać tylko jeden buforX
|
||||
Liczba większa niż %luX
|
||||
PrzerwanoX
|
||||
Nie można utworzyć pliku tymczasowegoX
|
||||
Uwaga: %s nie jest zwykłym plikiemX
|
||||
%s już zablokowany, sesja tylko do odczytuX
|
||||
%s: usuńX
|
||||
%s: zamknijX
|
||||
%s: usuńX
|
||||
%s: usuńX
|
||||
Plik tylko do odczytu, nie zapisany; użyj ! żeby wymusićX
|
||||
Plik tylko do odczytu, nie zapisanyX
|
||||
%s istnieje, nie zapisany; użyj ! żeby wymusićX
|
||||
%s istnieje, nie zapisanyX
|
||||
Plik częściowy, nie zapisany; użyj ! żeby wymusićX
|
||||
Plik częściowy, nie zapisanyX
|
||||
%s: plik zmodyfikowany później, niż ta kopia; użyj ! żeby wymusićX
|
||||
%s: plik zmodyfikowany później, niż ta kopiaX
|
||||
%s: nie można zablokować do pisaniaX
|
||||
Zapisywanie...X
|
||||
%s: OSTRZEŻENIE: PLIK ZOSTAŁ OBCIĘTYX
|
||||
Już przy pierwszym znaczniku z tej grupyX
|
||||
%s: nowy plik: %lu linii, %lu znakówX
|
||||
%s: %lu linii, %lu znakówX
|
||||
%s rozwija się na zbyt wiele nazw plikówX
|
||||
%s: nie jest zwykłym plikiemX
|
||||
%s: nie jesteś właścicielemX
|
||||
%s: dostępny dla użytkownika innego niż właścicielX
|
||||
Plik zmodyfikowany od ostatniego zapisu; zapisz lub użyj ! żeby wymusićX
|
||||
Plik zmodyfikowany od ostatniego zapisu; zapisz lub użyj :edit! żeby wymusićX
|
||||
Plik zmodyfikowany od ostatniego zapisu; zapisz lub użyj ! żeby wymusićX
|
||||
To jest plik tymczasowy; wyjście anuluje zmianyX
|
||||
Plik tylko do odczytu, nie ma autozapisu zmianX
|
||||
Ponownie rozpoczęto logowanieX
|
||||
potwierdzasz? [ynq]X
|
||||
Naciśnij dowolny klawisz: X
|
||||
Naciśnij dowolny klawisz [: żeby podać następne polecenia ex]: X
|
||||
Naciśnij dowolny klawisz [q żeby zakończyć]: X
|
||||
Ta forma %s wymaga interfejsu terminala exX
|
||||
Wchodzę w tryb wprowadzania ex.X
|
||||
Błąd polecenia, jeszcze nie wczytano pliku.X
|
||||
dalej?X
|
||||
Nieoczekiwany symbolX
|
||||
Nieoczekiwany koniec plikuX
|
||||
Brak wzorców pasujących do zapytaniaX
|
||||
Nieoczekiwane przerwanieX
|
||||
Nieoczekiwane polecenie koniecX
|
||||
Nieoczekiwane polecenie odświeżeniaX
|
||||
Już przy ostatnim znaczniku z tej grupyX
|
||||
Polecenie %s wymaga interfejsu terminala exX
|
||||
Ta forma %s jest niedostępna, kiedy ustawiona jest opcja bezpiecznej edycjiX
|
||||
Nieoczekiwany ciąg znakówX
|
||||
Nieoczekiwany timeoutX
|
||||
Nieoczekiwane polecenie zapisuX
|
||||
|
||||
Rozwinięcia shella niedostępne w trybie bezpiecznej edycjiX
|
||||
Polecenie %s jest niedostępne w trybie bezpiecznej edycjiX
|
||||
set: opcji %s nie można wyłączyćX
|
||||
Ekran zbyt mały.X
|
||||
dodanoX
|
||||
zmienionoX
|
||||
usuniętoX
|
||||
połączonoX
|
||||
przeniesionoX
|
||||
przesuniętoX
|
||||
wczytanoX
|
||||
liniaX
|
||||
liniiX
|
||||
Vi nie został uruchomiony z interpreterem TclX
|
||||
Plik zmodyfikowany od ostatniego zapisuX
|
||||
Błąd rozwinięcia shellaX
|
||||
Brak opcji %s edycjiX
|
||||
Vi nie został uruchomiony z interpreterem PerlX
|
||||
Brak polecenia ex do wykonaniaX
|
||||
Naciśnij <CR> żeby wykonac polecenie, :q żeby wyjśćX
|
||||
Użyj "cscope help" w celu uzyskania pomocyX
|
||||
Brak aktywnych połączeń cscopeX
|
||||
%s: nieznany typ poszukiwań: użyj jednego z %sX
|
||||
%d: brak takiej sesji cscopeX
|
||||
set: nie można nigdy włączyć opcji %sX
|
||||
set: opcja %s nie może nigdy mieć wartości 0X
|
||||
%s: dodano: %lu linii, %lu znakówX
|
||||
Nieoczekiwane polecenie zmiany rozmiaruX
|
||||
%d plików do edycjiX
|
@ -43,8 +43,7 @@
|
||||
044 "Opcja lisp nie jest zaimplementowana"
|
||||
045 "komunikaty nie wyłączone: %s"
|
||||
046 "komunikaty nie włączone: %s"
|
||||
048 "Opcja paragraph musi składać się z dwóch grup symboli"
|
||||
049 "Opcja section musi składać się z dwóch grup symboli"
|
||||
047 "Opcja %s musi składać się z dwóch grup symboli"
|
||||
053 "Domyślny bufor jest pusty"
|
||||
054 "Bufor %s jest pusty"
|
||||
055 "Pliki z symbolem nowego wiersza w nazwie nie mogą być odtworzone"
|
||||
@ -97,16 +96,16 @@
|
||||
103 "Niedozwolony adres: plik jest pusty"
|
||||
104 "Polecenie %s nie zezwala na użycie adresu 0"
|
||||
105 "Brak skrótów do wyświetlenia"
|
||||
106 "Skróty muszą się kończyć symbolem "słowo""
|
||||
106 "Skróty muszą się kończyć symbolem \"słowo\""
|
||||
107 "Skróty nie mogą zawierać spacji lub tabulacji"
|
||||
108 "Skróty nie mogą przeplatać symboli słowo/nie-słowo, z wyjątkiem na końcu linii"
|
||||
109 ""%s" nie jest skrótem"
|
||||
109 "\"%s\" nie jest skrótem"
|
||||
110 "Błąd polecenia vi: mapowanie klawiszy odrzucone"
|
||||
111 "Nie ma więcej plików do edycji"
|
||||
112 "Nie ma poprzednich plików do edycji"
|
||||
113 "Nie ma poprzednich plików do przewinięcia wstecz"
|
||||
114 "Nie ma listy plików do wyświetlenia"
|
||||
115 "Nie ma poprzedniego polecenia do zastąpienia "!""
|
||||
115 "Nie ma poprzedniego polecenia do zastąpienia \"!\""
|
||||
116 "Nie ma nazwy pliku do zastąpienia %%"
|
||||
117 "Nie ma nazwy pliku do zastąpienia #"
|
||||
118 "Błąd: execl: %s"
|
||||
@ -126,7 +125,7 @@
|
||||
132 "Brak pozycji map wejściowych"
|
||||
133 "Brak pozycji map poleceń"
|
||||
134 "Znak %s nie może być przemapowany"
|
||||
135 ""%s" obecnie nie jest mapowany"
|
||||
135 "\"%s\" obecnie nie jest mapowany"
|
||||
136 "Nazwa znacznika musi być pojedyńczą literą"
|
||||
137 "%s istnieje, nie zapisany; użyj ! żeby wymusić"
|
||||
138 "Nowy plik exrc: %s"
|
||||
@ -296,7 +295,7 @@
|
||||
306 "Vi nie został uruchomiony z interpreterem Perl"
|
||||
307 "Brak polecenia ex do wykonania"
|
||||
308 "Naciśnij <CR> żeby wykonac polecenie, :q żeby wyjść"
|
||||
309 "Użyj "cscope help" w celu uzyskania pomocy"
|
||||
309 "Użyj \"cscope help\" w celu uzyskania pomocy"
|
||||
310 "Brak aktywnych połączeń cscope"
|
||||
311 "%s: nieznany typ poszukiwań: użyj jednego z %s"
|
||||
312 "%d: brak takiej sesji cscope"
|
||||
|
@ -1,35 +0,0 @@
|
||||
Unused message id's (this is okay):
|
||||
001
|
||||
047
|
||||
050
|
||||
051
|
||||
052
|
||||
081
|
||||
176
|
||||
213
|
||||
229
|
||||
288
|
||||
=========================
|
||||
MISSING ERROR MESSAGES (Please add!):
|
||||
=========================
|
||||
Extra error messages (just delete them):
|
||||
=========================
|
||||
MESSAGES WITH THE SAME MESSAGE ID's (FIX!):
|
||||
=========================
|
||||
Duplicate messages, both id and message (this is okay):
|
||||
=========================
|
||||
Duplicate messages, just message (this is okay):
|
||||
2 %s istnieje, nie zapisany; użyj ! żeby wymusićX
|
||||
2 %s: %lu linii, %lu znakówX
|
||||
2 %s: błędna kopia zapasowaX
|
||||
2 Brak logowania, anulowanie (undo) niemożliweX
|
||||
2 Bufor %s jest pustyX
|
||||
2 Nie znaleziono wzorcaX
|
||||
2 Przesunięcie poza koniec plikuX
|
||||
2 Tworzenie kopii zapasowej...X
|
||||
2 Zmiany nie do odtworzenia, jeśli sesja zostanie przerwanaX
|
||||
2 set: opcja %s nie jest zmienną boolowskąX
|
||||
3 %s: usuńX
|
||||
3 Plik zmodyfikowany od ostatniego zapisu; zapisz lub użyj ! żeby wymusićX
|
||||
4 Sposób użycia: %sX
|
||||
=========================
|
@ -1,267 +0,0 @@
|
||||
VI_MESSAGE_CATALOG
|
||||
Переполнение значения длины строкиX
|
||||
невозможно удалить строку %luX
|
||||
невозможно добавить к строке %luX
|
||||
невозможно вставить в строку %luX
|
||||
невозможно сохранить строку %luX
|
||||
невозможно достать последнюю строкуX
|
||||
|
||||
Файл записейX
|
||||
Записи не велись, невозможно отменить последнюю командуX
|
||||
Нет изменений для отменыX
|
||||
Записи не велись, невозможно отменить последнюю командуX
|
||||
Записи не велись, невозможно просмотреть впередX
|
||||
Нет изменений для переделкиX
|
||||
%s/%d: ошибка при записи протоколаX
|
||||
Стандартный ввод/вывод для VI должен быть терминалX
|
||||
Отметка %s: не установленаX
|
||||
Отметка %s: строка была удаленаX
|
||||
Отметка %s: позиции курсора больше не существуетX
|
||||
Ошибка: X
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Файл %s не является каталогом сообщенийX
|
||||
Невозможно установить опцию %s по умолчаниюX
|
||||
Использование: %sX
|
||||
Опции %s нет: 'set all' показывает все возможные опцииX
|
||||
set: [no]%s не принимает такого значенияX
|
||||
set: %s опция не является логическойX
|
||||
|
||||
|
||||
set: неправильное значение %sX
|
||||
set: %s опция не является логическойX
|
||||
Количество колонок экрана слишком мало, меньше чем %dX
|
||||
Количество колонок экрана слишком велико, больше чем %dX
|
||||
Количество строк экрана слишком мало, меньше чем %dX
|
||||
Количество строк экрана слишком велико, больше чем %dX
|
||||
Опция lisp отсутствуетX
|
||||
Сообщения не выключены: %sX
|
||||
Сообщения не включены: %sX
|
||||
|
||||
Опция paragraph должна состоять из групп с двумя символамиX
|
||||
Опция section должна состоять из групп с двумя символамиX
|
||||
|
||||
|
||||
|
||||
Стартовый буфер пустX
|
||||
Буфер %s пустX
|
||||
Файлы с символами перевода строки в имени не могут быть восстановленыX
|
||||
Изменения не сохранены при крахе сессииX
|
||||
|
||||
Сохранение не удалось: %sX
|
||||
Изменения не сохраняются при обрыве сессииX
|
||||
Сохранение копии файла не удалось: %sX
|
||||
|
||||
Информации на пользователя %u не найденоX
|
||||
Невозможно защитить спасенный файлX
|
||||
Буфер восстановленного файла переполненX
|
||||
Восстановленный файлX
|
||||
%s: не до конца восстановленный файлX
|
||||
%s: не до конца восстановленный файлX
|
||||
Файлов с именем %s, которые Вы можете читать, не существуетX
|
||||
Есть старые версии файла, которые можно восстановитьX
|
||||
Существуют другие файлы, которые можно восстановитьX
|
||||
е-mail не послан: %sX
|
||||
Файл пуст - искать нечегоX
|
||||
Достигнут конец файла без нахождения образца поискаX
|
||||
Не задан образец поискаX
|
||||
Образец поиска не найденX
|
||||
Доступно начало файла без нахождения образца поискаX
|
||||
Поиск зацикленX
|
||||
|
||||
Непечатных символов не найденоX
|
||||
Неизвестная командаX
|
||||
|
||||
%s: команда не доступна в режиме exX
|
||||
Счетчик не может быть нулемX
|
||||
%s: неправильное указание строкиX
|
||||
Внутренняя ошибка в синтаксисе (%s: %s)X
|
||||
Использование: %sX
|
||||
%s: временный буфер не использованX
|
||||
Метка поставлена перед строкой 1X
|
||||
Метка поставлена после конца файлаX
|
||||
|
||||
|
||||
Команда ex не удалась: последующие команды забытыX
|
||||
|
||||
Второй адрес меньше чем первыйX
|
||||
Не указано название отметкиX
|
||||
\\ не завершается / или ?X
|
||||
Ссылка к строке с номером меньше 0X
|
||||
Команда %s неизвестнаX
|
||||
Переполнение значения адресаX
|
||||
Недобор значения адресаX
|
||||
Недопустимая комбинация в адресеX
|
||||
Неправильный адрес: всего %lu строк в файлеX
|
||||
Неправильный адрес: файл пустX
|
||||
Команда %s не может использовать адрес 0X
|
||||
Аббревиатуры отсутствуютX
|
||||
Аббревиатуры должны заканчиваться символом "word"X
|
||||
Аббревиатуры не могут содержать символы табуляции или пробелыX
|
||||
Аббревиатуры не могут сочетаться с символами слов/не-слов, за исключением конца строкиX
|
||||
"%s" не является аббревиатуройX
|
||||
|
||||
Файлов для редактирования больше нетX
|
||||
Отсутствие предыдущего файла для редактированияX
|
||||
Отсутствие предыдущего файла для просмотра назадX
|
||||
Нет файловX
|
||||
Отсутствие предыдущей команды для замены "!"X
|
||||
Отсутствие замены для %%X
|
||||
Отсутствие замены для #X
|
||||
Ошибка: execl: %sX
|
||||
Ошибка ввода/вывода: %sX
|
||||
Файл изменен с момента последней полной записи: используйте ! для обходаX
|
||||
Невозможно найти домашний каталогX
|
||||
Новый каталог: %sX
|
||||
Нет вырезанных буферовX
|
||||
Команда %s не может быть использована внутри глобальной или v командыX
|
||||
%s/%s: не открыт: не принадлежит Вам или root-уX
|
||||
%s/%s: не открыт: не принадлежит ВамX
|
||||
%s/%s: не открыт: возможность записи у пользователя, не являющегося владельцемX
|
||||
%s: не считан: не принадлежит Вам или root-уX
|
||||
%s: не считан: не принадлежит ВамX
|
||||
%s: не считан: возможность записи у пользователя, не являющегося владельцемX
|
||||
Последующие строки отсутствуютX
|
||||
Отсутствие параметров вводаX
|
||||
Отсутствие параметров командыX
|
||||
Символ %s не может быть переназначенX
|
||||
"%s" на данный момент не назначенX
|
||||
Имя метки должно быть одним символомX
|
||||
%s существует, не записан; используйте ! для обходаX
|
||||
Новый файл exrc: %sX
|
||||
Строка переноса находится внутри параметров переносаX
|
||||
Команда open подразумевает установку опции openX
|
||||
Команда open не реализованаX
|
||||
Защита файла невозможнаX
|
||||
Файл защищенX
|
||||
%s расширился в слишком большое количество имен файловX
|
||||
|
||||
%s: защита на чтение была недоступнаX
|
||||
|
||||
%s: %lu строк, %lu символовX
|
||||
Нет теневых оконX
|
||||
Команда script используется только в режиме viX
|
||||
Нет команды для исполненияX
|
||||
Опция shiftwidth установлена на 0X
|
||||
Переполнение счетчикаX
|
||||
Цикл выполнен не до концаX
|
||||
Указано регулярное выражение: флаг r не нуженX
|
||||
Флаги #, l и p не могут быть объединены с флагом c в режиме viX
|
||||
Совпадений нетX
|
||||
Метка отсутствуетX
|
||||
В стеке меток записей меньше, чем %s, используйте :display t[ags]X
|
||||
Файла с именем %s в стеке меток нет; используйте :display t[ags]X
|
||||
|
||||
%s: метка не найденаX
|
||||
%s: плохая метка в %sX
|
||||
|
||||
Стек меток пустX
|
||||
%s: образец поиска не найденX
|
||||
|
||||
Буфер %s пустX
|
||||
|
||||
ПрерваноX
|
||||
Отсутствие буфера для использованияX
|
||||
Нет предыдущего регулярного выраженияX
|
||||
Команда %s подразумевает наличие прочтенного файлаX
|
||||
Использование: %sX
|
||||
Команда visual подразумевает обязательную установку опции openX
|
||||
|
||||
Пустой файлX
|
||||
Нет предыдущего поиска F, f, T, или tX
|
||||
%s не найденоX
|
||||
Нет предыдущего файла для редактированияX
|
||||
Курсор стоит не на цифреX
|
||||
Полученное число слишком великоX
|
||||
Полученное число слишком малоX
|
||||
Подходящего символа нет на этой строкеX
|
||||
Подходящий символ не найденX
|
||||
Нет символов для удаленияX
|
||||
Другого экрана не существуетX
|
||||
Символы после строки для поиска, смещения строки и/или команды zX
|
||||
Прошлый образец поиска отсутствуетX
|
||||
Поиск завершился на начальной позицииX
|
||||
|
||||
Символ неправилен; квотируйте для вводаX
|
||||
Уже на начале вставкиX
|
||||
Нет символов для удаленияX
|
||||
Передвижение за конец файлаX
|
||||
Передвижение за конец строкиX
|
||||
Движение строки не сделаноX
|
||||
Уже на начале файлаX
|
||||
Движение курсора за начало файлаX
|
||||
Уже в первой колонкеX
|
||||
Буферы должны быть указаны до выполнения командыX
|
||||
Уже на конце файлаX
|
||||
Уже на конце строкиX
|
||||
%s не является командой VIX
|
||||
Использование: %sX
|
||||
Нет символов для удаленияX
|
||||
|
||||
Нет команды для повтораX
|
||||
|
||||
Команда %s не может быть использована как команда перемещенияX
|
||||
Уже в командном режимеX
|
||||
|
||||
|
||||
Значение опции windows слишком велико, максимальное значение = %uX
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Движение курсора за конец экранаX
|
||||
Движение курсора за начало экранаX
|
||||
|
||||
Теневых окон нетX
|
||||
Не существует теневого окна с редактированием файла %sX
|
||||
Вы не можете сделать единственное окно теневымX
|
||||
Экран может быть сжатX
|
||||
Экран не может быть сжат только до %d строкX
|
||||
Экран не может быть расширенX
|
||||
|
||||
|
||||
|
||||
|
||||
Данный тип терминала не имеет клавиши %sX
|
||||
|
||||
|
||||
|
||||
Невозможно создать временный файлX
|
||||
Внимание: %s специальный файлX
|
||||
%s уже заблокирован, доступен только на чтениеX
|
||||
%s: удаленX
|
||||
%s: закрытX
|
||||
%s: удаленX
|
||||
%s: удаленX
|
||||
Файл только для чтения, не записан: Используйте ! для обходаX
|
||||
Файл только для чтения, не записанX
|
||||
%s существует, не записан; используйте ! для обходаX
|
||||
%s существует, не записанX
|
||||
Используйте ! для частичной записи файлаX
|
||||
Часть файла, файл не записанX
|
||||
%s: Файл изменялся позднее, чем данная копия: используйте ! для обходаX
|
||||
%s: Файл изменялся позднее, чем данная копияX
|
||||
%s: защита на запись была недоступнаX
|
||||
|
||||
%s: ВНИМАНИЕ: ФАЙЛ УСЕЧЕНX
|
||||
|
||||
%s: новый файл: %lu строк, %lu символовX
|
||||
%s: %lu строк, %lu символовX
|
||||
%s расширился в слишком большое количество имен файловX
|
||||
%s: специальный файлX
|
||||
%s: не принадлежит ВамX
|
||||
%s: доступен не только ВамX
|
||||
Файл изменен со времени последней записи: сохраните или используйте ! для обходаX
|
||||
Файл изменен со времени последней записи: сохраните или используйте :edit для обходаX
|
||||
Файл изменен со времени последней записи: сохраните или используйте ! для обходаX
|
||||
Файл временный: выход сотрет любые измененияX
|
||||
|
||||
Записи начаты зановоX
|
@ -4,6 +4,7 @@
|
||||
005 "невозможно вставить в строку %lu"
|
||||
006 "невозможно сохранить строку %lu"
|
||||
007 "невозможно достать последнюю строку"
|
||||
008 "Ошибка: не удалось получить строку %lu"
|
||||
009 "Файл записей"
|
||||
010 "Записи не велись, невозможно отменить последнюю команду"
|
||||
011 "Нет изменений для отмены"
|
||||
@ -16,12 +17,23 @@
|
||||
018 "Отметка %s: строка была удалена"
|
||||
019 "Отметка %s: позиции курсора больше не существует"
|
||||
020 "Ошибка: "
|
||||
021 "новый файл"
|
||||
022 "имя изменено"
|
||||
023 "модифицировано"
|
||||
024 "не модифицировано"
|
||||
025 "РАЗБЛОКИРОВАНО"
|
||||
026 "только чтение"
|
||||
027 "строка %lu из %lu [%ld%%]"
|
||||
028 "пустой файл"
|
||||
029 "строка %lu"
|
||||
030 "Файл %s не является каталогом сообщений"
|
||||
031 "Невозможно установить опцию %s по умолчанию"
|
||||
032 "Использование: %s"
|
||||
033 "Опции %s нет: 'set all' показывает все возможные опции"
|
||||
034 "set: [no]%s не принимает такого значения"
|
||||
035 "set: %s опция не является логической"
|
||||
036 "set: %s опция: %s"
|
||||
037 "set: %s опция: %s: значение переполнения"
|
||||
038 "set: неправильное значение %s"
|
||||
039 "set: %s опция не является логической"
|
||||
040 "Количество колонок экрана слишком мало, меньше чем %d"
|
||||
@ -31,15 +43,16 @@
|
||||
044 "Опция lisp отсутствует"
|
||||
045 "Сообщения не выключены: %s"
|
||||
046 "Сообщения не включены: %s"
|
||||
048 "Опция paragraph должна состоять из групп с двумя символами"
|
||||
049 "Опция section должна состоять из групп с двумя символами"
|
||||
047 "Опция %s должна состоять из групп с двумя символами"
|
||||
053 "Стартовый буфер пуст"
|
||||
054 "Буфер %s пуст"
|
||||
055 "Файлы с символами перевода строки в имени не могут быть восстановлены"
|
||||
056 "Изменения не сохранены при крахе сессии"
|
||||
057 "Копирование файла для восстановления..."
|
||||
058 "Сохранение не удалось: %s"
|
||||
059 "Изменения не сохраняются при обрыве сессии"
|
||||
060 "Сохранение копии файла не удалось: %s"
|
||||
061 "Копирование файла для восстановления..."
|
||||
062 "Информации на пользователя %u не найдено"
|
||||
063 "Невозможно защитить спасенный файл"
|
||||
064 "Буфер восстановленного файла переполнен"
|
||||
@ -56,6 +69,7 @@
|
||||
075 "Образец поиска не найден"
|
||||
076 "Доступно начало файла без нахождения образца поиска"
|
||||
077 "Поиск зациклен"
|
||||
078 "Поиск..."
|
||||
079 "Непечатных символов не найдено"
|
||||
080 "Неизвестная команда"
|
||||
082 "%s: команда не доступна в режиме ex"
|
||||
@ -66,7 +80,10 @@
|
||||
087 "%s: временный буфер не использован"
|
||||
088 "Метка поставлена перед строкой 1"
|
||||
089 "Метка поставлена после конца файла"
|
||||
090 "@ с диапазоном выполняется когда файл/экран изменены"
|
||||
091 "Глобальная/v команда выполняется когда файл/экран изменены"
|
||||
092 "Команда ex не удалась: последующие команды забыты"
|
||||
093 "Команда ex не удалась: назначенные клавиши забыты"
|
||||
094 "Второй адрес меньше чем первый"
|
||||
095 "Не указано название отметки"
|
||||
096 "\\ не завершается / или ?"
|
||||
@ -79,15 +96,16 @@
|
||||
103 "Неправильный адрес: файл пуст"
|
||||
104 "Команда %s не может использовать адрес 0"
|
||||
105 "Аббревиатуры отсутствуют"
|
||||
106 "Аббревиатуры должны заканчиваться символом "word""
|
||||
106 "Аббревиатуры должны заканчиваться символом \"слов\""
|
||||
107 "Аббревиатуры не могут содержать символы табуляции или пробелы"
|
||||
108 "Аббревиатуры не могут сочетаться с символами слов/не-слов, за исключением конца строки"
|
||||
109 ""%s" не является аббревиатурой"
|
||||
109 "\"%s\" не является аббревиатурой"
|
||||
110 "Vi команда не удалась: назначенные клавиши забыты"
|
||||
111 "Файлов для редактирования больше нет"
|
||||
112 "Отсутствие предыдущего файла для редактирования"
|
||||
113 "Отсутствие предыдущего файла для просмотра назад"
|
||||
114 "Нет файлов"
|
||||
115 "Отсутствие предыдущей команды для замены "!""
|
||||
115 "Отсутствие предыдущей команды для замены \"!\""
|
||||
116 "Отсутствие замены для %%"
|
||||
117 "Отсутствие замены для #"
|
||||
118 "Ошибка: execl: %s"
|
||||
@ -107,7 +125,7 @@
|
||||
132 "Отсутствие параметров ввода"
|
||||
133 "Отсутствие параметров команды"
|
||||
134 "Символ %s не может быть переназначен"
|
||||
135 ""%s" на данный момент не назначен"
|
||||
135 "\"%s\" на данный момент не назначен"
|
||||
136 "Имя метки должно быть одним символом"
|
||||
137 "%s существует, не записан; используйте ! для обхода"
|
||||
138 "Новый файл exrc: %s"
|
||||
@ -117,7 +135,9 @@
|
||||
142 "Защита файла невозможна"
|
||||
143 "Файл защищен"
|
||||
144 "%s расширился в слишком большое количество имен файлов"
|
||||
145 "Только обычные файлы или именованные каналы могут быть прочитаны"
|
||||
146 "%s: защита на чтение была недоступна"
|
||||
147 "Чтение..."
|
||||
148 "%s: %lu строк, %lu символов"
|
||||
149 "Нет теневых окон"
|
||||
150 "Команда script используется только в режиме vi"
|
||||
@ -131,11 +151,15 @@
|
||||
158 "Метка отсутствует"
|
||||
159 "В стеке меток записей меньше, чем %s, используйте :display t[ags]"
|
||||
160 "Файла с именем %s в стеке меток нет; используйте :display t[ags]"
|
||||
161 "Нажмите Enter чтобы продолжить: "
|
||||
162 "%s: метка не найдена"
|
||||
163 "%s: плохая метка в %s"
|
||||
164 "%s: номер строки метки вышел за конец файла"
|
||||
165 "Стек меток пуст"
|
||||
166 "%s: образец поиска не найден"
|
||||
167 "еще %d файлов для редактирования"
|
||||
168 "Буфер %s пуст"
|
||||
169 "Подтвердить изменения? [n]"
|
||||
170 "Прервано"
|
||||
171 "Отсутствие буфера для использования"
|
||||
172 "Нет предыдущего регулярного выражения"
|
||||
@ -156,6 +180,7 @@
|
||||
188 "Символы после строки для поиска, смещения строки и/или команды z"
|
||||
189 "Прошлый образец поиска отсутствует"
|
||||
190 "Поиск завершился на начальной позиции"
|
||||
191 "Аббревиатура превысила лимит расширения: символы забыты"
|
||||
192 "Символ неправилен; квотируйте для ввода"
|
||||
193 "Уже на начале вставки"
|
||||
194 "Нет символов для удаления"
|
||||
@ -171,19 +196,34 @@
|
||||
204 "%s не является командой VI"
|
||||
205 "Использование: %s"
|
||||
206 "Нет символов для удаления"
|
||||
207 "Команда Q требует ex интерфейс терминала"
|
||||
208 "Нет команды для повтора"
|
||||
209 "Файл пуст"
|
||||
210 "Команда %s не может быть использована как команда перемещения"
|
||||
211 "Уже в командном режиме"
|
||||
212 "Курсор находится не на слове"
|
||||
214 "Значение опции windows слишком велико, максимальное значение = %u"
|
||||
215 "Добавить"
|
||||
216 "Изменить"
|
||||
217 "Команда"
|
||||
218 "Вставить"
|
||||
219 "Заменить"
|
||||
220 "Движение курсора за конец экрана"
|
||||
221 "Движение курсора за начало экрана"
|
||||
222 "Для разделения экран должен быть больше чем строки %d"
|
||||
223 "Теневых окон нет"
|
||||
224 "Не существует теневого окна с редактированием файла %s"
|
||||
225 "Вы не можете сделать единственное окно теневым"
|
||||
226 "Экран может быть сжат"
|
||||
227 "Экран не может быть сжат только до %d строк"
|
||||
228 "Экран не может быть расширен"
|
||||
230 "Этот экран не может быть приостановлен"
|
||||
231 "Прервано: назначенные клавиши забыты"
|
||||
232 "vi: временный буфер не освобожден"
|
||||
233 "Данный тип терминала не имеет клавиши %s"
|
||||
234 "Может быть указан только один буфер"
|
||||
235 "Число больше чем %lu"
|
||||
236 "Прервано"
|
||||
237 "Невозможно создать временный файл"
|
||||
238 "Внимание: %s специальный файл"
|
||||
239 "%s уже заблокирован, доступен только на чтение"
|
||||
@ -200,7 +240,9 @@
|
||||
250 "%s: Файл изменялся позднее, чем данная копия: используйте ! для обхода"
|
||||
251 "%s: Файл изменялся позднее, чем данная копия"
|
||||
252 "%s: защита на запись была недоступна"
|
||||
253 "Запись..."
|
||||
254 "%s: ВНИМАНИЕ: ФАЙЛ УСЕЧЕН"
|
||||
255 "Уже присутствует в первой метке данной группы"
|
||||
256 "%s: новый файл: %lu строк, %lu символов"
|
||||
257 "%s: %lu строк, %lu символов"
|
||||
258 "%s расширился в слишком большое количество имен файлов"
|
||||
@ -211,4 +253,59 @@
|
||||
263 "Файл изменен со времени последней записи: сохраните или используйте :edit для обхода"
|
||||
264 "Файл изменен со времени последней записи: сохраните или используйте ! для обхода"
|
||||
265 "Файл временный: выход сотрет любые изменения"
|
||||
266 "Файл только для чтения, автозапись не сработала"
|
||||
267 "Записи начаты заново"
|
||||
268 "подтвердить? [ynq]"
|
||||
269 "Нажмите любую клавишу чтобы продолжить: "
|
||||
270 "Нажмите любую клавишу чтобы продолжить [: чтобы ввести еще ex команды]: "
|
||||
271 "Нажмите любую клавишу чтобы продолжить [q чтобы выйти]: "
|
||||
272 "Эта форма %s требует ex интерфейс терминала"
|
||||
273 "Вход в режим ввода ex."
|
||||
274 "Команда не удалась, файл еще не прочтен."
|
||||
275 " прод?"
|
||||
276 "Неожиданное символьное событие"
|
||||
277 "Неожиданное событие 'конец файла'"
|
||||
278 "По запросу совпадений нет"
|
||||
279 "Неожиданное событие прерывания"
|
||||
280 "Неожиданное событие выхода"
|
||||
281 "Неожиданное событие перерисовки"
|
||||
282 "Уже присутствует в последней метке данной группы"
|
||||
283 "Команда %s требует ex интерфейс терминала"
|
||||
284 "Эта форма %s не поддерживается пока установлена опция безопасного редактирования"
|
||||
285 "Неожиданное строковое событие"
|
||||
286 "Неожиданное событие таймаута"
|
||||
287 "Неожиданное событие записи"
|
||||
288 "Для разделения экран должен быть больше чем столбцы %d"
|
||||
289 "Shell расширения не поддерживаются пока установлена опция безопасного редактирования"
|
||||
290 "Команда %s не поддерживается пока установлена опция безопасного редактирования"
|
||||
291 "set: опция %s не может быть выключена"
|
||||
292 "Экран слишком мал"
|
||||
293 "добавлено"
|
||||
294 "изменено"
|
||||
295 "удалено"
|
||||
296 "присоединено"
|
||||
297 "перемещено"
|
||||
298 "смещено"
|
||||
299 "скопировано"
|
||||
300 "строка"
|
||||
301 "строки"
|
||||
303 "Файл изменен с момента последней записи."
|
||||
304 "Shell расширение не удалось"
|
||||
305 "Нет указанной %s опции редактирования"
|
||||
307 "Нет ex команды для выполнения"
|
||||
308 "Введите <CR> для выполнения команды, :q чтобы выйти"
|
||||
309 "Используйте \"cscope help\" для помощи"
|
||||
310 "Нет запущенного cscope соединения"
|
||||
311 "%s: неизвестный тип поиска: используйте один из %s"
|
||||
312 "%d: нет такого cscope сеанса"
|
||||
313 "set: %s опция никогда не может быть включена"
|
||||
314 "set: %s опция никогда не может быть установлена в 0"
|
||||
315 "%s: добавлено: %lu строк, %lu символов"
|
||||
316 "Неожиданное событие изменения размера"
|
||||
317 "%d файлов для редактирования"
|
||||
319 "%d экранов в фоновом режиме; используйте :display чтобы перечислить их"
|
||||
320 "Неизвестная позиция курсора"
|
||||
321 "Преобразование кодировки файлов не поддерживается"
|
||||
322 "Преобразование кодировки ввода не поддерживается"
|
||||
323 "Неверный ввод. Усечено."
|
||||
324 "Ошибка преобразования в строке %d"
|
||||
|
@ -1,169 +0,0 @@
|
||||
Unused message id's (this is okay):
|
||||
001
|
||||
008
|
||||
021
|
||||
022
|
||||
023
|
||||
024
|
||||
025
|
||||
026
|
||||
027
|
||||
028
|
||||
029
|
||||
036
|
||||
037
|
||||
047
|
||||
050
|
||||
051
|
||||
052
|
||||
057
|
||||
061
|
||||
078
|
||||
081
|
||||
090
|
||||
091
|
||||
093
|
||||
110
|
||||
145
|
||||
147
|
||||
161
|
||||
164
|
||||
167
|
||||
169
|
||||
176
|
||||
191
|
||||
207
|
||||
209
|
||||
212
|
||||
213
|
||||
215
|
||||
216
|
||||
217
|
||||
218
|
||||
219
|
||||
222
|
||||
229
|
||||
230
|
||||
231
|
||||
232
|
||||
234
|
||||
235
|
||||
236
|
||||
253
|
||||
255
|
||||
266
|
||||
=========================
|
||||
MISSING ERROR MESSAGES (Please add!):
|
||||
008
|
||||
021
|
||||
022
|
||||
023
|
||||
024
|
||||
025
|
||||
026
|
||||
027
|
||||
028
|
||||
029
|
||||
036
|
||||
037
|
||||
057
|
||||
061
|
||||
078
|
||||
090
|
||||
091
|
||||
093
|
||||
110
|
||||
145
|
||||
147
|
||||
161
|
||||
164
|
||||
167
|
||||
169
|
||||
191
|
||||
207
|
||||
209
|
||||
212
|
||||
215
|
||||
216
|
||||
217
|
||||
218
|
||||
219
|
||||
222
|
||||
230
|
||||
231
|
||||
232
|
||||
234
|
||||
235
|
||||
236
|
||||
253
|
||||
255
|
||||
266
|
||||
268
|
||||
269
|
||||
270
|
||||
271
|
||||
272
|
||||
273
|
||||
274
|
||||
275
|
||||
276
|
||||
277
|
||||
278
|
||||
279
|
||||
280
|
||||
281
|
||||
282
|
||||
283
|
||||
284
|
||||
285
|
||||
286
|
||||
287
|
||||
289
|
||||
290
|
||||
291
|
||||
292
|
||||
293
|
||||
294
|
||||
295
|
||||
296
|
||||
297
|
||||
298
|
||||
299
|
||||
300
|
||||
301
|
||||
302
|
||||
303
|
||||
304
|
||||
305
|
||||
306
|
||||
307
|
||||
308
|
||||
309
|
||||
310
|
||||
311
|
||||
312
|
||||
313
|
||||
314
|
||||
315
|
||||
316
|
||||
317
|
||||
=========================
|
||||
Extra error messages (just delete them):
|
||||
=========================
|
||||
MESSAGES WITH THE SAME MESSAGE ID's (FIX!):
|
||||
=========================
|
||||
Duplicate messages, both id and message (this is okay):
|
||||
=========================
|
||||
Duplicate messages, just message (this is okay):
|
||||
2 %s расширился в слишком большое количество имен файловX
|
||||
2 %s существует, не записан; используйте ! для обходаX
|
||||
2 %s: %lu строк, %lu символовX
|
||||
2 %s: не до конца восстановленный файлX
|
||||
2 Буфер %s пустX
|
||||
2 Записи не велись, невозможно отменить последнюю командуX
|
||||
2 Файл изменен со времени последней записи: сохраните или используйте ! для обходаX
|
||||
2 set: %s опция не является логическойX
|
||||
3 %s: удаленX
|
||||
3 Нет символов для удаленияX
|
||||
4 Использование: %sX
|
||||
=========================
|
@ -1 +1,3 @@
|
||||
Dima Ruban <dima@rdy.com>, "Andrey A. Chernov" <ache@nagual.pp.ru>
|
||||
Andrey A. Chernov <ache@nagual.ru>
|
||||
Dima Ruban <dima@rdy.com>
|
||||
Pavel Timofeev <timp87@gmail.com>
|
||||
|
@ -1,317 +0,0 @@
|
||||
VI_MESSAGE_CATALOG
|
||||
Desbordamiento de longitud de líneaX
|
||||
no se puede borrar la línea %luX
|
||||
no se puede añadir la línea %luX
|
||||
no se puede insertar en la línea %luX
|
||||
no se puede guardar la línea %luX
|
||||
no se puede obtener la última líneaX
|
||||
Error: no se puede recuperar la línea %luX
|
||||
Archivo de logX
|
||||
No se realiza log, no se puede deshacerX
|
||||
No hay cambios para deshacerX
|
||||
No se realiza log, no se puede deshacerX
|
||||
No se realiza log, no se puede remontar hacia adelanteX
|
||||
No hay cambios para rehacerX
|
||||
%s/%d: error de logX
|
||||
La entrada y salida estándar de Vi debe ser una terminalX
|
||||
Marcar %s: no determinadoX
|
||||
Marcar %s: se borró la líneaX
|
||||
Marcar %s: la posición del cursor ya no existeX
|
||||
Error: X
|
||||
nuevo archivoX
|
||||
nombre cambiadoX
|
||||
modificadoX
|
||||
no modificadoX
|
||||
DESTRABADOX
|
||||
lectura solamenteX
|
||||
línea %lu de %lu [%ld%%]X
|
||||
archivo vacíoX
|
||||
línea %luX
|
||||
El archivo %s no es un catálogo de mensajesX
|
||||
No se puede determinar la opción por omisión %sX
|
||||
Uso: %sX
|
||||
determinar: no hay opción %s: 'determinar todo' establece todos los valores de opciónX
|
||||
determinar: [no] hay opción %s no tiene valorX
|
||||
determinar: opción %s no es booleanoX
|
||||
determinar: opción %s: %sX
|
||||
determinar: opción %s: %s: desbordamiento de valoresX
|
||||
determinar: opción %s: %s es un número ilegalX
|
||||
determinar: opción %s no es booleanoX
|
||||
Las columnas en pantalla son demasiado pequeñas, menos de %dX
|
||||
Las columnas en pantalla son demasiado grandes, más de %dX
|
||||
Las líneas en pantalla son demasiado pequeñas, menos de %dX
|
||||
Las líneas en pantalla son demasiado grandes, más de %dX
|
||||
La opción lisp no está implementadaX
|
||||
mensajes no desconectados: %sX
|
||||
mensajes no conectados: %sX
|
||||
|
||||
La opción de párrafo debe estar en dos grupos de caracteresX
|
||||
La opción de sección debe estar en dos grupos de caracteresX
|
||||
|
||||
|
||||
|
||||
El buffer por omisión está vacíoX
|
||||
El buffer %s está vacíoX
|
||||
Los archivos con nuevas líneas en el nombre son irrecuperablesX
|
||||
Las modificaciones no pueden recuperarse si la sesión fallaX
|
||||
Copiando archivo para recuperación...X
|
||||
Preservación fracasada: %sX
|
||||
Las modificaciones no pueden recuperarse si la sesión fallaX
|
||||
Archivo de respaldo fracasado: %sX
|
||||
Copiando archivo para recuperación...X
|
||||
Información sobre identificación del usuario %u no encontradaX
|
||||
No se puede trabar archivo de recuperaciónX
|
||||
Desbordamiento de buffer de archivo de recuperaciónX
|
||||
Archivo de recuperaciónX
|
||||
%s: archivo de recuperación defectuosoX
|
||||
%s: archivo de recuperación defectuosoX
|
||||
No hay archivos denominados %s, que usted pueda leer, para recuperarX
|
||||
Existen versiones más antiguas de este archivo que usted puede recuperarX
|
||||
Existen otros archivos que usted puede recuperarX
|
||||
no envía email: %sX
|
||||
Archivo vacío; no hay nada para buscarX
|
||||
Se alcanzó el final del archivo sin encontrar el patrónX
|
||||
No hay patrón anterior de búsquedaX
|
||||
No se encontró el patrónX
|
||||
Se alcanzó el principio del archivo sin encontrar el patrónX
|
||||
Búsqueda reiniciadaX
|
||||
Buscando...X
|
||||
No se encontró ningún carácter no imprimibleX
|
||||
Nombre de comando desconocidoX
|
||||
|
||||
%s: comando no disponible en modalidad exX
|
||||
La cuenta no puede ser ceroX
|
||||
%s: mala especificación de líneaX
|
||||
Error interno de tabla de sintaxis (%s: %s)X
|
||||
Uso: %sX
|
||||
%s: buffer temporario no liberadoX
|
||||
Desplazamiento de marcador a antes de la línea 1X
|
||||
Desplazamiento de marcador más allá del final del archivoX
|
||||
@ con rango que corre cuando se cambia el archivo/la pantallaX
|
||||
Comando global/v que corre cuando se cambia el archivo/la pantallaX
|
||||
Comando Ex fracasado: comandos pendientes descartadosX
|
||||
Comando Ex fracasado: teclas mapeadas descartadasX
|
||||
La segunda dirección es más pequeña que la primeraX
|
||||
No se suministra nombre de marcaX
|
||||
\\ no es seguido por / o ?X
|
||||
Referencia a un número de línea menor que 0X
|
||||
El comando %s es desconocidoX
|
||||
Desbordamiento de valor de direcciónX
|
||||
Subdesbordamiento de valor de direcciónX
|
||||
Combinación de dirección ilegalX
|
||||
Dirección ilegal: sólo %lu líneas en el archivoX
|
||||
Dirección ilegal: el archivo está vacíoX
|
||||
El comando %s no permite una dirección de 0X
|
||||
No hay abreviaturas para visualizarX
|
||||
Las abreviaturas deben terminar con un carácter de \"palabra\" X
|
||||
Las abreviaturas no pueden contener tabs o espaciosX
|
||||
Las abreviaturas no pueden mezclar caracteres palabra/no-palabra, salvo al finalX
|
||||
\"%s\" no es una abreviaturaX
|
||||
Comando Vi fracasado: teclas mapeadas descartadasX
|
||||
No hay más archivos para editarX
|
||||
No hay archivos anteriores para editarX
|
||||
No hay archivos anteriores para rebobinarX
|
||||
No hay lista de archivos para visualizarX
|
||||
No hay un comando anterior para reemplazar a \"!\"X
|
||||
No hay nombre de archivo para sustituir por %%X
|
||||
No hay nombre de archivo para sustituir por #X
|
||||
Error: execl: %sX
|
||||
Error de E/S: %sX
|
||||
Archivo modificado desde la última escritura completa; escribir o usar ! para alterarX
|
||||
No se puede encontrar la ubicación del directorio inicialX
|
||||
Nuevo directorio actual: %sX
|
||||
No hay buffers sueltos para visualizarX
|
||||
El comando %s no puede usarse como parte de un comando global o vX
|
||||
%s/%s: sin fuente: no le pertenece a usted o a raízX
|
||||
%s/%s: sin fuente: no le pertenece a ustedX
|
||||
%s/%s: sin fuente: puede ser escrito por un usuario que no sea el propietarioX
|
||||
%s: sin fuente: no le pertenece a usted o a raízX
|
||||
%s: sin fuente: no le pertenece a ustedX
|
||||
%s: sin fuente: puede ser escrito por un usuario que no sea el propietarioX
|
||||
No hay líneas siguientes para unirX
|
||||
No hay anotaciones de mapa de entradaX
|
||||
No hay anotaciones de mapa de comandoX
|
||||
El carácter %s no puede remapearseX
|
||||
\"%s\" no está mapeado actualmenteX
|
||||
Marca de nombres debe ser un sólo carácterX
|
||||
%s existe, no está escrito; usar ! para alterarX
|
||||
Nuevo archivo exrc: %sX
|
||||
La línea de destino se encuentra dentro del rango de movimientoX
|
||||
El comando abierto requiere que se determine la opción abiertaX
|
||||
El comando abierto no se ha implementado aúnX
|
||||
No es posible preservar este archivoX
|
||||
Archivo preservadoX
|
||||
%s: expandido a demasiados nombres de archivoX
|
||||
Sólo pueden leerse los archivos regulares y los conductos nombradosX
|
||||
%s: traba de lectura no disponibleX
|
||||
Leyendo...X
|
||||
%s: %lu líneas, %lu caracteresX
|
||||
No hay pantallas de fondo para mostrarX
|
||||
El comando de script sólo está disponible en modalidad viX
|
||||
No hay comando para ejecutarX
|
||||
opción de ancho de desplazamiento en 0X
|
||||
Desbordamiento de cuentaX
|
||||
Subdesbordamiento de cuentaX
|
||||
Expresión regular especificada; marcador r no tiene significadoX
|
||||
Los marcadores #, l y p no pueden combinarse con el marcador c en la modalidad viX
|
||||
No se encontró coincidenciaX
|
||||
No se ingresó un identificador anteriorX
|
||||
Se encontraron menos de %s anotaciones en la pila de identificadores; usar :visualizar i[dentificadores]X
|
||||
No hay archivo %s en la pila de identificadores al que se pueda volver; usar :visualizar i[dentificadores]"
|
||||
Presionar Intro para continuar: X
|
||||
%s: no se encontró el identificadorX
|
||||
%s: identificador corrompido en %sX
|
||||
%s: el número de línea del identificador es posterior al final del archivoX
|
||||
La pila de identificadores está vacíaX
|
||||
%s: patrón de búsqueda no encontradoX
|
||||
%d archivos más para editarX
|
||||
El buffer %s está vacíoX
|
||||
¿Confirmar cambio? [n]X
|
||||
InterrumpidoX
|
||||
No hay buffer anterior para ejecutarX
|
||||
No hay expresión regular anteriorX
|
||||
El comando %s requiere que se haya leído un archivoX
|
||||
Uso: %sX
|
||||
El comando visual requiere que se determine la opción abiertaX
|
||||
|
||||
Archivo vacíoX
|
||||
No hay búsqueda F, f, T o t anteriorX
|
||||
%s no se encontróX
|
||||
No hay archivo anterior para editarX
|
||||
El cursor no está en un númeroX
|
||||
El número resultante es demasiado grandeX
|
||||
El número resultante es demasiado pequeñoX
|
||||
No hay carácter coincidente en esta líneaX
|
||||
No se encontró un carácter coincidenteX
|
||||
No hay caracteres para reemplazarX
|
||||
No hay otra pantalla a la que se pueda pasarX
|
||||
Caracteres tras de cadena de búsqueda, desplazamiento de línea y/o comando zX
|
||||
No hay patrón anterior de búsquedaX
|
||||
Búsqueda vuelve a la posición inicialX
|
||||
Se superó el límite de expansión de abreviatura: se descartaron caracteresX
|
||||
Carácter ilegal; mencionar para entrarX
|
||||
Ya se encuentra al principio de la inserciónX
|
||||
No hay más caracteres para borrarX
|
||||
Movimiento más allá del final del archivoX
|
||||
Movimiento más allá del final de la líneaX
|
||||
No hay movimiento del cursorX
|
||||
Ya se encuentra al principio del archivoX
|
||||
Movimiento más allá del principio del archivoX
|
||||
Ya se encuentra en la primera columnaX
|
||||
Los buffers deben especificarse antes del comandoX
|
||||
Ya se encuentra al final del archivoX
|
||||
Ya se encuentra al final de la líneaX
|
||||
%s no es un comando viX
|
||||
Uso: %sX
|
||||
No hay caracteres para borrarX
|
||||
El comando Q requiere la interfase de terminal exX
|
||||
No hay comando para repetirX
|
||||
El archivo está vacíoX
|
||||
%s no puede usarse como comando de movimientoX
|
||||
Ya se encuentra en modalidad de comandoX
|
||||
El cursor no se encuentra en una palabraX
|
||||
|
||||
El valor de opción de Windows es demasiado grande, el máx. es %uX
|
||||
AñadirX
|
||||
CambiarX
|
||||
ComandoX
|
||||
InsertarX
|
||||
ReemplazarX
|
||||
El movimiento va más allá del final de la pantallaX
|
||||
El movimiento va más allá del principio de la pantallaX
|
||||
La pantalla debe tener más de %d líneas para dividirseX
|
||||
No hay pantallas de fondoX
|
||||
No hay pantalla de fondo editando un archivo denominado %sX
|
||||
No se puede poner fondo a la única pantalla que se visualizaX
|
||||
La pantalla sólo puede reducirse a %d hilerasX
|
||||
La pantalla no puede reducirseX
|
||||
La pantalla no puede aumentarseX
|
||||
|
||||
Esta pantalla no puede suspenderseX
|
||||
Interrumpido: teclas mapeadas descartadasX
|
||||
vi: buffer temporario no liberadoX
|
||||
Esta terminal no tiene tecla %sX
|
||||
Sólo un buffer puede especificarseX
|
||||
Número mayor que %luX
|
||||
InterrumpidoX
|
||||
No se puede crear archivo temporarioX
|
||||
Advertencia: %s no es un archivo regularX
|
||||
%s ya se encuentra trabado, la sesión es de lectura solamenteX
|
||||
%s: eliminarX
|
||||
%s: cerrarX
|
||||
%s: eliminarX
|
||||
%s: eliminarX
|
||||
Archivo de lectura solamente, no escrito; usar ! para alterarX
|
||||
Archivo de lectura solamente, no escritoX
|
||||
%s existe, no escrito; usar ! para alterarX
|
||||
%s existe, no escritoX
|
||||
Archivo parcial, no escrito; usar ! para alterarX
|
||||
Archivo parcial, no escritoX
|
||||
%s: archivo modificado más recientemente que esta copia; usar ! para alterarX
|
||||
%s: archivo modificado más recientemente que esta copiaX
|
||||
%s: la traba de escritura no estaba disponibleX
|
||||
Escribiendo...X
|
||||
%s: ADVERTENCIA: ARCHIVO TRUNCADOX
|
||||
Ya se encuentra en el primer identificador de este grupoX
|
||||
%s: nuevo archivo: %lu líneas, %lu caracteresX
|
||||
%s: %lu líneas, %lu caracteresX
|
||||
%s expandido a demasiados nombres de archivosX
|
||||
%s: no es un archivo regularX
|
||||
%s: no le perteneceX
|
||||
%s: accesible por un usuario que no sea el propietarioX
|
||||
Archivo modificado desde la última escritura completa; escribir o usar ! para alterarX
|
||||
Archivo modificado desde la última escritura completa; escribir o usar :editar! para alterarX
|
||||
Archivo modificado desde la última escritura completa; escribir o usar ! para alterarX
|
||||
El archivo es temporario; al salir se descartarán las modificacionesX
|
||||
Archivo de lectura solamente, las modificaciones no se autoescribenX
|
||||
Se reinició el logX
|
||||
confirmar? [snq]X
|
||||
Presionar cualquier tecla para continuar: X
|
||||
Presionar cualquier tecla para continuar [: para ingresar más comandos ex]: X
|
||||
Presionar cualquier tecla para continuar [q para salir]: X
|
||||
Esta forma de %s requiere la interfase terminal exX
|
||||
Ingresando en la modalidad de entrada ex.X
|
||||
Comando fracasado, no hay archivo leído aun.X
|
||||
cont?X
|
||||
Evento inesperado de carácterX
|
||||
Evento inesperado de final de archivoX
|
||||
No hay coincidencias para consultaX
|
||||
Evento inesperado de interrupciónX
|
||||
Evento inesperado de salidaX
|
||||
Evento inesperado de repinturaX
|
||||
Ya se encuentra en el último identificador de este grupoX
|
||||
El comando %s requiere la interfase terminal exX
|
||||
Esta forma de %s no se encuentra soportada cuando se determina la opción de edición seguraX
|
||||
Evento inesperado de cadenaX
|
||||
Evento inesperado de tiempo excedidoX
|
||||
Evento inesperado de escrituraX
|
||||
|
||||
Las expansiones de shell no se encuentran soportadas cuando se determina la opción de edición seguraX
|
||||
El comando %s no se encuentra soportado cuando se determina la opción de edición seguraX
|
||||
determinar: la opción %s puede no estar desconectadaX
|
||||
El monitor es demasiado pequeño.X
|
||||
agregadoX
|
||||
cambiadoX
|
||||
borradoX
|
||||
unidoX
|
||||
movidoX
|
||||
desplazadoX
|
||||
arrancadoX
|
||||
líneaX
|
||||
líneasX
|
||||
Vi no se cargó con un intérprete TclX
|
||||
Archivo modificado desde la última escritura.X
|
||||
Expansión de shell fracasadaX
|
||||
No hay opción de edición %s especificadaX
|
||||
Vi no se cargó con un intérprete PerlX
|
||||
No hay comando ex para ejecutarX
|
||||
Ingresar <CR> para ejecutar un comando, :q para salirX
|
||||
Usar \"cscope ayuda\" para obtener ayudaX
|
||||
No hay conexiones cscope corriendoX
|
||||
%s: tipo de búsqueda desconocido: usar uno de %sX
|
||||
%d: no existe esta sesión cscopeX
|
||||
determinar: la opción %s no puede conectarse nuncaX
|
||||
determinar: la opción %s no puede determinarse nunca en 0X
|
||||
%s: añadido: %lu líneas, %lu caracteresX
|
||||
Evento inesperado de modificación de tamañoX
|
||||
%d archivos para editarX
|
@ -43,8 +43,7 @@
|
||||
044 "La opción lisp no está implementada"
|
||||
045 "mensajes no desconectados: %s"
|
||||
046 "mensajes no conectados: %s"
|
||||
048 "La opción de párrafo debe estar en dos grupos de caracteres"
|
||||
049 "La opción de sección debe estar en dos grupos de caracteres"
|
||||
047 "La opción de %s debe estar en dos grupos de caracteres"
|
||||
053 "El buffer por omisión está vacío"
|
||||
054 "El buffer %s está vacío"
|
||||
055 "Los archivos con nuevas líneas en el nombre son irrecuperables"
|
||||
@ -200,7 +199,6 @@
|
||||
207 "El comando Q requiere la interfase de terminal ex"
|
||||
208 "No hay comando para repetir"
|
||||
209 "El archivo está vacío"
|
||||
209 "El archivo está vacío"
|
||||
210 "%s no puede usarse como comando de movimiento"
|
||||
211 "Ya se encuentra en modalidad de comando"
|
||||
212 "El cursor no se encuentra en una palabra"
|
||||
@ -293,7 +291,6 @@
|
||||
302 "Vi no se cargó con un intérprete Tcl"
|
||||
303 "Archivo modificado desde la última escritura."
|
||||
304 "Expansión de shell fracasada"
|
||||
304 "Expansión de shell fracasada"
|
||||
305 "No hay opción de edición %s especificada"
|
||||
306 "Vi no se cargó con un intérprete Perl"
|
||||
307 "No hay comando ex para ejecutar"
|
||||
|
@ -1,35 +0,0 @@
|
||||
Unused message id's (this is okay):
|
||||
001
|
||||
047
|
||||
050
|
||||
051
|
||||
052
|
||||
081
|
||||
176
|
||||
229
|
||||
288
|
||||
=========================
|
||||
MISSING ERROR MESSAGES (Please add!):
|
||||
=========================
|
||||
Extra error messages (just delete them):
|
||||
=========================
|
||||
MESSAGES WITH THE SAME MESSAGE ID's (FIX!):
|
||||
=========================
|
||||
Duplicate messages, both id and message (this is okay):
|
||||
2 209 "El archivo está vacío"
|
||||
2 304 "Expansión de shell fracasada"
|
||||
=========================
|
||||
Duplicate messages, just message (this is okay):
|
||||
2 %s: %lu líneas, %lu caracteresX
|
||||
2 %s: archivo de recuperación defectuosoX
|
||||
2 Copiando archivo para recuperación...X
|
||||
2 El buffer %s está vacíoX
|
||||
2 InterrumpidoX
|
||||
2 Las modificaciones no pueden recuperarse si la sesión fallaX
|
||||
2 No hay patrón anterior de búsquedaX
|
||||
2 No se realiza log, no se puede deshacerX
|
||||
2 determinar: opción %s no es booleanoX
|
||||
3 %s: eliminarX
|
||||
3 Archivo modificado desde la última escritura completa; escribir o usar ! para alterarX
|
||||
4 Uso: %sX
|
||||
=========================
|
@ -1,317 +0,0 @@
|
||||
VI_MESSAGE_CATALOG
|
||||
För långa raderX
|
||||
kan inte ta bort rad %luX
|
||||
kan inte lägga till på rad %luX
|
||||
kan inte sätta in på rad %luX
|
||||
kan inte lagra rad %luX
|
||||
kan inte hämta sista radenX
|
||||
Fel: kan inte hämta rad %luX
|
||||
LoggningsfilX
|
||||
Loggning utförs inte, ångra är inte möjligtX
|
||||
Inga ändringar att ångraX
|
||||
Loggning utförs inte, ångra är inte möjligtX
|
||||
Loggning utförs inte, ångra ångra är inte möjligtX
|
||||
Inga ändringar att återgöraX
|
||||
%s/%d: fel vid loggningX
|
||||
Vi:s standard in och ut måste gå till en terminalX
|
||||
Markering %s: inte sattX
|
||||
Markering %s: raden har tagits bortX
|
||||
Markering %s: markörpositionen finns inte längreX
|
||||
Fel: X
|
||||
ny filX
|
||||
namnet ändradesX
|
||||
ändradX
|
||||
oförändradX
|
||||
OLÅSTX
|
||||
inte skrivbarX
|
||||
rad %lu av %lu [%ld%%]X
|
||||
tom filX
|
||||
rad %luX
|
||||
Filen %s är ingen meddelandekatalogX
|
||||
Kan inte sätta standardvärde för %s flagganX
|
||||
Användning: %sX
|
||||
set: %s är en okänd flagga: "set all" visar alla flaggorX
|
||||
set: [no]%s flaggan kan inte ges ett värdeX
|
||||
set: %s flaggan är inte boleanskX
|
||||
set: %s flaggan: %sX
|
||||
set: %s flaggan: %s: för stort värdeX
|
||||
set: %s flaggan: %s är ett otillåtet talX
|
||||
set: %s flaggan är inte boleanskX
|
||||
Fönsterkolumnerna är för få, mindre än %dX
|
||||
Fönsterkolumnerna är för många, fler än %dX
|
||||
Fönsterraderna är för få, mindre än %dX
|
||||
Fönsterraderna är för många, fler än %dX
|
||||
Lisp flaggan är inte implementeradX
|
||||
meddelanden är inte avslagna: %sX
|
||||
meddelanden är inte påslagna: %sX
|
||||
|
||||
Paragraph flaggan måste ges i teckengrupper om tvåX
|
||||
Section flaggan måste ges i teckengrupper om tvåX
|
||||
|
||||
|
||||
|
||||
Standardbufferten är tomX
|
||||
Buffer %s är tomX
|
||||
Filer med radmatning i namnet kan inte återskapasX
|
||||
Ändringar kan inte återskapas om programmet krascharX
|
||||
Kopierar filen för återskapning...X
|
||||
Säkerhetskopiering misslyckades: %sX
|
||||
Ändringar kan inte återskapas om programmet krascharX
|
||||
Misslyckades att säkerhetskopiera filen: %sX
|
||||
Kopierar filen för återskapning...X
|
||||
Kan inte hitta information om användaridentitet %uX
|
||||
Kan inte låsa återskapningsfilenX
|
||||
Återskapningsfilens buffer överskrivenX
|
||||
ÅterskapningsfilX
|
||||
%s: Återskapningsfilen är korruptX
|
||||
%s: Återskapningsfilen är korruptX
|
||||
Det finns ingen fil %s, läsbar av dig, att återskapaX
|
||||
Det finns äldre versioner av denna fil som du kan återskapaX
|
||||
Det finns andra filer du kan återskapaX
|
||||
skickar inte email: %sX
|
||||
Filen är tom; inget att söka iX
|
||||
Kom till slutet på filen utan att hitta söksträngenX
|
||||
Ingen tidigare söksträngX
|
||||
Hittar inte söksträngenX
|
||||
Kom till början av filen utan att hitta söksträngenX
|
||||
Sökningen slog runtX
|
||||
Söker...X
|
||||
Inga icke skrivbara tecken funnaX
|
||||
Okänt kommandonamnX
|
||||
|
||||
%s: kommandot är inte tillgängligt i "ex" lägeX
|
||||
Talet får inte vara nollX
|
||||
%s: Ogiltig radspecifikationX
|
||||
Fel i intern syntaxtabell (%s: %s)X
|
||||
Användning: %sX
|
||||
%s: temporärbuffert inte frisläpptX
|
||||
Offset är före rad 1X
|
||||
Offset är efter slutet på filenX
|
||||
@ med intervall exekverades när filen/fönstret ändradesX
|
||||
Global/v kommando exekverades när filen/fönstret ändradesX
|
||||
Ex kommando misslyckades: efterföljande kommandon ignoreradeX
|
||||
Ex kommando misslyckades: omdefinierade tangenter ignoreradeX
|
||||
Den andra adressen är mindre än den förstaX
|
||||
Inget namn på markering givetX
|
||||
\\ följs inte av / eller ?X
|
||||
Referens till ett radnummer mindre än 0X
|
||||
%s kommandot är inte käntX
|
||||
Värdet på adressen är för stortX
|
||||
Värdet på adressen är för litetX
|
||||
Otillåten adresskombinationX
|
||||
Otillåten adress: bara %lu rader finns i filenX
|
||||
Otillåten adress: filen är tomX
|
||||
%s kommandot tillåter inte en adress som är 0X
|
||||
Inga förkortningar att visaX
|
||||
Förkortningar måste sluta med ett "ord" teckenX
|
||||
Förkortningar kan inte innehålla mellanslag eller tabX
|
||||
Förkortningar kan inte blanda "ord"/"icke ord" tecken, utom i slutetX
|
||||
"%s" är ingen förkortningX
|
||||
Vi kommando misslyckades: omdefinierade tangenter ignoreradeX
|
||||
Inga fler filer att editeraX
|
||||
Inga tidigare filer att editeraX
|
||||
Inga tidigare filer att spela tillbakaX
|
||||
Ingen fillista att visaX
|
||||
Inget tidigare kommando att ersätta "!" medX
|
||||
Inget filnamn att ersätta %% medX
|
||||
Inget filnamn att ersätta # medX
|
||||
Fel: execl: %sX
|
||||
I/O fel: %sX
|
||||
Filen ändrad efter sista skrivning; spara eller använd !X
|
||||
Kan inte hitta hemkatalogX
|
||||
Ny nuvarande katalog: %sX
|
||||
Inga "cut buffers" att visaX
|
||||
%s kommandot kan inte används som del i ett "global" eller v kommandoX
|
||||
%s/%s: inte läst: varken du eller root är ägareX
|
||||
%s/%s: inte läst: du är inte ägareX
|
||||
%s/%s: inte läst: skrivbar av annan än ägarenX
|
||||
%s: inte läst: varken du eller root är ägareX
|
||||
%s: inte läst: du är inte ägareX
|
||||
%s: inte läst: skrivbar av annan än ägarenX
|
||||
Ingen nästa rad att sätta ihop medX
|
||||
Det finns inget i inmatningsmappningenX
|
||||
Det finns inget i kommandomappningenX
|
||||
%s tecknet kan inte mappas omX
|
||||
"%s" är inte ommappat just nuX
|
||||
Namn på markeringar måste vara ett tecken långaX
|
||||
%s finns, inget sparat; använd ! för att sparaX
|
||||
Ny exrc fil: %sX
|
||||
Målraden ligger inne i området som ska flyttasX
|
||||
Open kommandot kräver att open flaggan är sattX
|
||||
Open kommandot är inte implementerat ännuX
|
||||
Säkerhetskopiering av filen är inte möjligtX
|
||||
Filen säkerhetskopieradX
|
||||
%s expanderade till för många filnamnX
|
||||
Endast vanliga filer och namngivna rör kan läsasX
|
||||
%s: läslåset är otillgängligtX
|
||||
Läser...X
|
||||
%s: %lu rader, %lu teckenX
|
||||
Inga bakgrundsfönster att visaX
|
||||
Script kommandot finns bara i "vi" lägeX
|
||||
Inget kommando att exekveraX
|
||||
shiftwidth flaggan satt till 0X
|
||||
Talet har för stort värdeX
|
||||
Talet har för litet värdeX
|
||||
Reguljärt uttryck är givet; r flaggan är meningslösX
|
||||
#, l och p flaggorna kan inte kombineras med c flaggan i "vi" lägeX
|
||||
Ingen matchande text funnenX
|
||||
Inget tidigare märke har givitsX
|
||||
Det är färre än %s märken i stacken; använd :display t[ags]X
|
||||
Det finns ingen fil %s i märkesstacken; använd :display t[ags]X
|
||||
Tryck Enter för att fortsätta: X
|
||||
%s: märke inte funnetX
|
||||
%s: korrupt märke i %sX
|
||||
%s: märkets radnummer är bortom filslutetX
|
||||
Märkesstacken är tomX
|
||||
%s: söksträngen inte funnenX
|
||||
%d filer till att editeraX
|
||||
Buffert %s är tomX
|
||||
Bekräfta ändring? [n]X
|
||||
AvbrutenX
|
||||
Ingen tidigare buffert att exekveraX
|
||||
Inget tidigare reguljärt uttryckX
|
||||
%s kommandot kräver att en fil redan lästs inX
|
||||
Användning: %sX
|
||||
Visual kommandot kräver att open flaggan är sattX
|
||||
|
||||
Tom filX
|
||||
Ingen tidigare F, f, T eller t sökningX
|
||||
%s inte funnenX
|
||||
Ingen tidigare fil att editeraX
|
||||
Markören är inte i ett talX
|
||||
Det resulterande talet är för stortX
|
||||
Det resulterande talet är för litetX
|
||||
Inget matchande tecken på denna radX
|
||||
Matchande tecken inte funnetX
|
||||
Det finns inga tecken att ersättaX
|
||||
Det finns inget fönster att byta tillX
|
||||
Tecken efter söksträng, radoffset och/eller z kommandotX
|
||||
Ingen tidigare söksträngX
|
||||
Sökningen slog runt till ursprungliga positionenX
|
||||
Förkortning överskred expanderingsgränsen: tecken har tagits bortX
|
||||
Ogiltigt tecken; använd "quote" för att sätta inX
|
||||
Redan i början på insättningenX
|
||||
Inga fler tecken att ta bortX
|
||||
Försök att gå bortom slutet på filenX
|
||||
Försök att gå bortom slutet på radenX
|
||||
Ingen förflyttning gjordX
|
||||
Redan i början på filenX
|
||||
Försök att gå före början på filenX
|
||||
Redan i första kolumnenX
|
||||
Buffertar måste anges före kommandotX
|
||||
Redan i slutet av filenX
|
||||
Redan på slutet av radenX
|
||||
%s är inte ett "vi" kommandoX
|
||||
Användning: %sX
|
||||
Inga tecken att ta bortX
|
||||
Q kommandot kräver "ex" i terminallägeX
|
||||
Inget kommando att repeteraX
|
||||
Filen är tomX
|
||||
%s kan inte användas som ett förflyttningskommandoX
|
||||
Redan i kommando lägeX
|
||||
Markören är inte i ett ordX
|
||||
|
||||
Windows flaggans värde är för stor, största värde är %uX
|
||||
Lägg tillX
|
||||
ÄndraX
|
||||
KommandoX
|
||||
Sätt inX
|
||||
ErsättX
|
||||
Förflyttning bortom fönsterslutX
|
||||
Förflyttning till före fönstrets börjanX
|
||||
Fönstret måste vara större än %d rader för delningX
|
||||
Det finns inga fönster i bakgrundenX
|
||||
Det finns inget fönster i bakgrunden som editerar filen %sX
|
||||
Du får inte sätta ditt enda synliga fönster i bakgrundenX
|
||||
Fönstret kan bara krympa till %d raderX
|
||||
Fönstret kan inte krympaX
|
||||
Fönstret kan inte växaX
|
||||
|
||||
Detta fönster kan inte pausasX
|
||||
Avbrutet: omdefinierade tangenter ignoreradeX
|
||||
vi: temporärbuffertar inte frisläpptaX
|
||||
Denna terminal har ingen %s tangentX
|
||||
Endast en buffert kan angesX
|
||||
Talet är större än %luX
|
||||
AvbrutetX
|
||||
Kan inte skapa temporär filX
|
||||
Warning: %s är inte en normal filX
|
||||
%s är redan låst, detta blir en icke skrivbar sessionX
|
||||
%s: ta bortX
|
||||
%s: stängX
|
||||
%s: ta bortX
|
||||
%s: ta bortX
|
||||
Ej skrivbar fil, filen inte sparad; använd ! för att skriva överX
|
||||
Ej skrivbar fil, filen inte sparadX
|
||||
%s finns, ej sparad; använd ! för att utföra operationenX
|
||||
%s finns, filen inte sparadX
|
||||
Ofullständig fil, filen inte sparad, använd ! för att skriva överX
|
||||
Ofullständig fil, filen inte sparadX
|
||||
%s: filen ändrad efter denna kopia togs; använd ! för att utföra operationenX
|
||||
%s: filen ändrad efter denna kopia togsX
|
||||
%s: skrivlåset är otillgängligtX
|
||||
Skriver...X
|
||||
%s: VARNING: FILEN TRUNKERADX
|
||||
Redan vid första märket i denna gruppX
|
||||
%s: ny fil: %lu rader, %lu teckenX
|
||||
%s: %lu rader, %lu teckenX
|
||||
%s expanderade till för många filnamnX
|
||||
%s är inte en normal filX
|
||||
%s ägs inte av digX
|
||||
%s är åtkomstbar av andra än ägarenX
|
||||
Filen har ändrats efter den sparats; spara eller använd !X
|
||||
Filen har ändrats efter den sparats; spara eller använd :edit!X
|
||||
Filen har ändrats efter den sparats; spara eller använd !X
|
||||
Filen är temporär; exit kastar bort ändringarnaX
|
||||
Ej skrivbar fil, ändringar har inte automatsparatsX
|
||||
Loggningen startar omX
|
||||
bekräfta? [ynq]X
|
||||
Tryck på en tangent för att fortsätta: X
|
||||
Tryck på en tangent för att fortsätta [: för att ge fler kommandon]: X
|
||||
Tryck på en tangent för att fortsätta [q för att avsluta]: X
|
||||
Den formen av %s kräver "ex" i terminallägeX
|
||||
Går till "ex" inmatningsläge.X
|
||||
Kommandot misslyckades, ingen fil inläst ännu.X
|
||||
forts?X
|
||||
Oväntad teckenhändelseX
|
||||
Oväntad filslutshändelseX
|
||||
Sökningen hittade ingentingX
|
||||
Oväntad avbrottshändelseX
|
||||
Oväntad avslutningshändelseX
|
||||
Oväntad omritningshändelseX
|
||||
Redan vid sista märket i denna gruppX
|
||||
%s kommandot kräver "ex" i terminallägeX
|
||||
Den formen av %s är inte tillgänglig när secure edit flaggan är sattX
|
||||
Oväntad stränghändelseX
|
||||
Oväntad tidshändelseX
|
||||
Oväntad skrivhändelseX
|
||||
|
||||
Skalexpansion är inte tillgänglig när secure edit flaggan är sattX
|
||||
%s kommandot är inte tillgänglig när secure edit flaggan är sattX
|
||||
set: %s kan inte slås avX
|
||||
Fönstret för litet.X
|
||||
tillagdaX
|
||||
ändradeX
|
||||
borttagnaX
|
||||
ihopsattaX
|
||||
flyttadeX
|
||||
flyttadeX
|
||||
inklistradeX
|
||||
radX
|
||||
raderX
|
||||
Vi har inte länkats med en Tcl tolkX
|
||||
Filen har ändrats efter den sparats.X
|
||||
Skalexpansion misslyckadesX
|
||||
Ingen %s edit flagga givenX
|
||||
Vi har inte länkats med en Perl tolkX
|
||||
Inga "ex" kommandon att exekveraX
|
||||
Tryck <CR> för att exekvera kommando, :q för att avslutaX
|
||||
Gör "cscope help" för hjälpX
|
||||
Inga cscope kopplingar körsX
|
||||
%s: okänd söktyp: använd en av %sX
|
||||
%d: ingen sådan cscope sessionX
|
||||
set: %s flaggan får aldrig slås påX
|
||||
set: %s flaggan får aldrig sättas till 0X
|
||||
%s: tillagt: %lu rader, %lu teckenX
|
||||
Oväntad storleksändringX
|
||||
%d filer att editeraX
|
@ -29,7 +29,7 @@
|
||||
030 "Filen %s är ingen meddelandekatalog"
|
||||
031 "Kan inte sätta standardvärde för %s flaggan"
|
||||
032 "Användning: %s"
|
||||
033 "set: %s är en okänd flagga: "set all" visar alla flaggor"
|
||||
033 "set: %s är en okänd flagga: \"set all\" visar alla flaggor"
|
||||
034 "set: [no]%s flaggan kan inte ges ett värde"
|
||||
035 "set: %s flaggan är inte boleansk"
|
||||
036 "set: %s flaggan: %s"
|
||||
@ -43,8 +43,7 @@
|
||||
044 "Lisp flaggan är inte implementerad"
|
||||
045 "meddelanden är inte avslagna: %s"
|
||||
046 "meddelanden är inte påslagna: %s"
|
||||
048 "Paragraph flaggan måste ges i teckengrupper om två"
|
||||
049 "Section flaggan måste ges i teckengrupper om två"
|
||||
047 "%s flaggan måste ges i teckengrupper om två"
|
||||
053 "Standardbufferten är tom"
|
||||
054 "Buffer %s är tom"
|
||||
055 "Filer med radmatning i namnet kan inte återskapas"
|
||||
@ -73,7 +72,7 @@
|
||||
078 "Söker..."
|
||||
079 "Inga icke skrivbara tecken funna"
|
||||
080 "Okänt kommandonamn"
|
||||
082 "%s: kommandot är inte tillgängligt i "ex" läge"
|
||||
082 "%s: kommandot är inte tillgängligt i \"ex\" läge"
|
||||
083 "Talet får inte vara noll"
|
||||
084 "%s: Ogiltig radspecifikation"
|
||||
085 "Fel i intern syntaxtabell (%s: %s)"
|
||||
@ -97,16 +96,16 @@
|
||||
103 "Otillåten adress: filen är tom"
|
||||
104 "%s kommandot tillåter inte en adress som är 0"
|
||||
105 "Inga förkortningar att visa"
|
||||
106 "Förkortningar måste sluta med ett "ord" tecken"
|
||||
106 "Förkortningar måste sluta med ett \"ord\" tecken"
|
||||
107 "Förkortningar kan inte innehålla mellanslag eller tab"
|
||||
108 "Förkortningar kan inte blanda "ord"/"icke ord" tecken, utom i slutet"
|
||||
109 ""%s" är ingen förkortning"
|
||||
108 "Förkortningar kan inte blanda \"ord\"/\"icke ord\" tecken, utom i slutet"
|
||||
109 "\"%s\" är ingen förkortning"
|
||||
110 "Vi kommando misslyckades: omdefinierade tangenter ignorerade"
|
||||
111 "Inga fler filer att editera"
|
||||
112 "Inga tidigare filer att editera"
|
||||
113 "Inga tidigare filer att spela tillbaka"
|
||||
114 "Ingen fillista att visa"
|
||||
115 "Inget tidigare kommando att ersätta "!" med"
|
||||
115 "Inget tidigare kommando att ersätta \"!\" med"
|
||||
116 "Inget filnamn att ersätta %% med"
|
||||
117 "Inget filnamn att ersätta # med"
|
||||
118 "Fel: execl: %s"
|
||||
@ -114,8 +113,8 @@
|
||||
120 "Filen ändrad efter sista skrivning; spara eller använd !"
|
||||
121 "Kan inte hitta hemkatalog"
|
||||
122 "Ny nuvarande katalog: %s"
|
||||
123 "Inga "cut buffers" att visa"
|
||||
124 "%s kommandot kan inte används som del i ett "global" eller v kommando"
|
||||
123 "Inga \"cut buffers\" att visa"
|
||||
124 "%s kommandot kan inte används som del i ett \"global\" eller v kommando"
|
||||
125 "%s/%s: inte läst: varken du eller root är ägare"
|
||||
126 "%s/%s: inte läst: du är inte ägare"
|
||||
127 "%s/%s: inte läst: skrivbar av annan än ägaren"
|
||||
@ -126,7 +125,7 @@
|
||||
132 "Det finns inget i inmatningsmappningen"
|
||||
133 "Det finns inget i kommandomappningen"
|
||||
134 "%s tecknet kan inte mappas om"
|
||||
135 ""%s" är inte ommappat just nu"
|
||||
135 "\"%s\" är inte ommappat just nu"
|
||||
136 "Namn på markeringar måste vara ett tecken långa"
|
||||
137 "%s finns, inget sparat; använd ! för att spara"
|
||||
138 "Ny exrc fil: %s"
|
||||
@ -141,13 +140,13 @@
|
||||
147 "Läser..."
|
||||
148 "%s: %lu rader, %lu tecken"
|
||||
149 "Inga bakgrundsfönster att visa"
|
||||
150 "Script kommandot finns bara i "vi" läge"
|
||||
150 "Script kommandot finns bara i \"vi\" läge"
|
||||
151 "Inget kommando att exekvera"
|
||||
152 "shiftwidth flaggan satt till 0"
|
||||
153 "Talet har för stort värde"
|
||||
154 "Talet har för litet värde"
|
||||
155 "Reguljärt uttryck är givet; r flaggan är meningslös"
|
||||
156 "#, l och p flaggorna kan inte kombineras med c flaggan i "vi" läge"
|
||||
156 "#, l och p flaggorna kan inte kombineras med c flaggan i \"vi\" läge"
|
||||
157 "Ingen matchande text funnen"
|
||||
158 "Inget tidigare märke har givits"
|
||||
159 "Det är färre än %s märken i stacken; använd :display t[ags]"
|
||||
@ -182,7 +181,7 @@
|
||||
189 "Ingen tidigare söksträng"
|
||||
190 "Sökningen slog runt till ursprungliga positionen"
|
||||
191 "Förkortning överskred expanderingsgränsen: tecken har tagits bort"
|
||||
192 "Ogiltigt tecken; använd "quote" för att sätta in"
|
||||
192 "Ogiltigt tecken; använd \"quote\" för att sätta in"
|
||||
193 "Redan i början på insättningen"
|
||||
194 "Inga fler tecken att ta bort"
|
||||
195 "Försök att gå bortom slutet på filen"
|
||||
@ -194,10 +193,10 @@
|
||||
201 "Buffertar måste anges före kommandot"
|
||||
202 "Redan i slutet av filen"
|
||||
203 "Redan på slutet av raden"
|
||||
204 "%s är inte ett "vi" kommando"
|
||||
204 "%s är inte ett \"vi\" kommando"
|
||||
205 "Användning: %s"
|
||||
206 "Inga tecken att ta bort"
|
||||
207 "Q kommandot kräver "ex" i terminalläge"
|
||||
207 "Q kommandot kräver \"ex\" i terminalläge"
|
||||
208 "Inget kommando att repetera"
|
||||
209 "Filen är tom"
|
||||
210 "%s kan inte användas som ett förflyttningskommando"
|
||||
@ -260,8 +259,8 @@
|
||||
269 "Tryck på en tangent för att fortsätta: "
|
||||
270 "Tryck på en tangent för att fortsätta [: för att ge fler kommandon]: "
|
||||
271 "Tryck på en tangent för att fortsätta [q för att avsluta]: "
|
||||
272 "Den formen av %s kräver "ex" i terminalläge"
|
||||
273 "Går till "ex" inmatningsläge."
|
||||
272 "Den formen av %s kräver \"ex\" i terminalläge"
|
||||
273 "Går till \"ex\" inmatningsläge."
|
||||
274 "Kommandot misslyckades, ingen fil inläst ännu."
|
||||
275 " forts?"
|
||||
276 "Oväntad teckenhändelse"
|
||||
@ -271,7 +270,7 @@
|
||||
280 "Oväntad avslutningshändelse"
|
||||
281 "Oväntad omritningshändelse"
|
||||
282 "Redan vid sista märket i denna grupp"
|
||||
283 "%s kommandot kräver "ex" i terminalläge"
|
||||
283 "%s kommandot kräver \"ex\" i terminalläge"
|
||||
284 "Den formen av %s är inte tillgänglig när secure edit flaggan är satt"
|
||||
285 "Oväntad stränghändelse"
|
||||
286 "Oväntad tidshändelse"
|
||||
@ -294,9 +293,9 @@
|
||||
304 "Skalexpansion misslyckades"
|
||||
305 "Ingen %s edit flagga given"
|
||||
306 "Vi har inte länkats med en Perl tolk"
|
||||
307 "Inga "ex" kommandon att exekvera"
|
||||
307 "Inga \"ex\" kommandon att exekvera"
|
||||
308 "Tryck <CR> för att exekvera kommando, :q för att avsluta"
|
||||
309 "Gör "cscope help" för hjälp"
|
||||
309 "Gör \"cscope help\" för hjälp"
|
||||
310 "Inga cscope kopplingar körs"
|
||||
311 "%s: okänd söktyp: använd en av %s"
|
||||
312 "%d: ingen sådan cscope session"
|
||||
|
@ -1,34 +0,0 @@
|
||||
Unused message id's (this is okay):
|
||||
001
|
||||
047
|
||||
050
|
||||
051
|
||||
052
|
||||
081
|
||||
176
|
||||
213
|
||||
229
|
||||
288
|
||||
=========================
|
||||
MISSING ERROR MESSAGES (Please add!):
|
||||
=========================
|
||||
Extra error messages (just delete them):
|
||||
=========================
|
||||
MESSAGES WITH THE SAME MESSAGE ID's (FIX!):
|
||||
=========================
|
||||
Duplicate messages, both id and message (this is okay):
|
||||
=========================
|
||||
Duplicate messages, just message (this is okay):
|
||||
2 %s expanderade till för många filnamnX
|
||||
2 %s: %lu rader, %lu teckenX
|
||||
2 %s: Återskapningsfilen är korruptX
|
||||
2 Filen har ändrats efter den sparats; spara eller använd !X
|
||||
2 Ingen tidigare söksträngX
|
||||
2 Kopierar filen för återskapning...X
|
||||
2 Loggning utförs inte, ångra är inte möjligtX
|
||||
2 flyttadeX
|
||||
2 set: %s flaggan är inte boleanskX
|
||||
2 Ändringar kan inte återskapas om programmet krascharX
|
||||
3 %s: ta bortX
|
||||
4 Användning: %sX
|
||||
=========================
|
@ -1,317 +0,0 @@
|
||||
VI_MESSAGE_CATALOG
|
||||
Переповнення значення довжини рядкуX
|
||||
неможливо стерти рядок %luX
|
||||
неможливо додати до рядку %luX
|
||||
неможливо вставити в рядок %luX
|
||||
неможливо розм╕стити рядок %luX
|
||||
неможливо д╕стати останн╕й рядокX
|
||||
Помилка: неможливо отримати рядок %luX
|
||||
Файл запис╕вX
|
||||
Записи не велися, неможливо в╕дм╕нити останню командуX
|
||||
Нема чого в╕дм╕нятиX
|
||||
Записи не велися, неможливо в╕дм╕нити останню командуX
|
||||
Записи не велися, неможливо продивитися впередX
|
||||
Нема чого повторюватиX
|
||||
%s/%d: помилка запису протоколуX
|
||||
Стандартним введенням/виведенням для vi ма╓ бути терм╕налX
|
||||
М╕тка %s: не встановленоX
|
||||
М╕тка %s: рядок стертоX
|
||||
М╕тка %s: позиц╕╖ курсору б╕льше не ╕сну╓X
|
||||
Помилка: X
|
||||
Новий файлX
|
||||
Iм'я зм╕нилосьX
|
||||
зм╕ненийX
|
||||
не зм╕ненийX
|
||||
РO3БЛOКOВАНOX
|
||||
т╕льки для читанняX
|
||||
рядок %lu з %lu [%ld%%]X
|
||||
пустий файлX
|
||||
рядок %luX
|
||||
Файл %s не ╓ файлом пов╕домленньX
|
||||
Неможливо встановити опц╕ю %s за змовчаннямX
|
||||
Використання: %sX
|
||||
Опц╕╖ %s нема╓: 'set all' показу╓ вс╕ можлив╕ опц╕╖X
|
||||
set: [no]%s не набува╓ такого значенняX
|
||||
set: %s опц╕я не ╓ лог╕чноюX
|
||||
set: опц╕я %s: %sX
|
||||
set: опц╕я %s: %s: переповненняX
|
||||
set: неправильне значення %sX
|
||||
set: %s опц╕я не ╓ лог╕чноюX
|
||||
К╕льк╕сть колонок на экран╕ надто мала, менше н╕ж %dX
|
||||
К╕льк╕сть колонок на экран╕ надто велика, б╕льше н╕ж %dX
|
||||
К╕льк╕сть рядк╕в на экран╕ надто мала, менше н╕ж %dX
|
||||
К╕льк╕сть рядк╕в на экран╕ надто велика, б╕льше н╕ж %dX
|
||||
Опц╕я lisp в╕дсутняX
|
||||
Пов╕домлення не вимкнен╕: %sX
|
||||
Пов╕домлення не вв╕мкнен╕: %sX
|
||||
|
||||
Опц╕я paragraph повинна м╕стити групи з двох символ╕вX
|
||||
Опц╕я section повинна м╕стити групи з двох символ╕вX
|
||||
|
||||
|
||||
|
||||
Стартовий буфер порожн╕йX
|
||||
Буфер %s порожн╕йX
|
||||
Неможливо в╕дновити файл, що м╕стить в ╕мен╕ символи переведення кареткиX
|
||||
Зм╕ни не можна буде в╕дновити п╕сля краху сес╕╖X
|
||||
Коп╕ювання файлу для в╕дновлення...X
|
||||
Збереження не вдалось: %sX
|
||||
Зм╕ни не можна буде в╕дновити п╕сля краху сес╕╖X
|
||||
Збереження коп╕╖ файлу не вдалось: %sX
|
||||
Коп╕ювання файлу для в╕дновлення...X
|
||||
Iнформац╕ю про користувача %u не знайденоX
|
||||
Заблокувати в╕дновленний файл неможливоX
|
||||
Буфер в╕дновленого файлу переповненоX
|
||||
В╕дновленний файлX
|
||||
%s: файл в╕дновленний не до к╕нцяX
|
||||
%s: файл в╕дновленний не до к╕нцяX
|
||||
Не ╕сную╓ файл╕в з ╕менем %s, як╕ Ви можете прочитатиX
|
||||
Iснують стар╕ верс╕╖ файлу, як╕ можна в╕дновитиX
|
||||
Iснують ╕нш╕ файли, як╕ можна в╕дновитиX
|
||||
e-mail не в╕д╕слано: %sX
|
||||
Файл пустий - нема чого шукатиX
|
||||
Досянуто к╕нця файлу без знахождення зразку пошукуX
|
||||
Не задано зразок пошукуX
|
||||
Зразок пошуку не знайденоX
|
||||
Досянуто початку файлу без знахождення зразку пошукуX
|
||||
Пошук зацикленоX
|
||||
Пошук...X
|
||||
Непечатних символ╕в не знайденоX
|
||||
Нев╕дома командаX
|
||||
|
||||
%s: команда не доступна в режим╕ exX
|
||||
Л╕чильник не може бути нулемX
|
||||
%s: неправильне визначення рядкуX
|
||||
Внутр╕шня помилка в синтаксис╕ (%s: %s)X
|
||||
Використання: %sX
|
||||
%s: тимчасовий буфер не використаноX
|
||||
М╕тку поставлено перед першим рядкомX
|
||||
М╕тку поставлено п╕сля к╕нця файлуX
|
||||
@ з д╕апазоном працю╓ коли зм╕нено файл/в╕кноX
|
||||
Команда Global/v працю╓ коли зм╕нено файл/в╕кноX
|
||||
Команда ex не вдалась: наступн╕ команди з'╕гнорованоX
|
||||
Команда ex не вдалась: в╕дображен╕ клав╕ш╕ з'╕гнорованоX
|
||||
Друга адреса менше н╕ж першаX
|
||||
Не вказано ╕м'я м╕ткиX
|
||||
\\ не зак╕нчу╓ться / чи ?X
|
||||
Посилання на рядок з номером, меншим н╕ж 0X
|
||||
Команда %s нев╕домаX
|
||||
Переповнення л╕чильника адресX
|
||||
Недоб╕р л╕чильника адресX
|
||||
Недопустима комб╕нац╕я в адрес╕X
|
||||
Неправильна адреса: всього %lu рядк╕в у файл╕X
|
||||
Неправильна адреса: файл пустийX
|
||||
Команда %s не може використовувати адресу 0X
|
||||
Нема╓ абрев╕атурX
|
||||
Абрев╕атури повинн╕ зак╕нчуватися символом "word"X
|
||||
В абрев╕атур╕ не можна використовувати символи табуляц╕╖ та проб╕лиX
|
||||
Абрев╕атури не можуть зм╕шувати символи сл╕в/не-сл╕в, х╕ба що в к╕нц╕ рядкуX
|
||||
"%s" не абрев╕атураX
|
||||
Команда Vi не вдалась: в╕дображен╕ клав╕ш╕ з'╕гнорованоX
|
||||
Файл╕в для редагування б╕льше нема╓X
|
||||
Попереднього файлу для редагування нема╓X
|
||||
Попереднього файлу для перегляду нема╓X
|
||||
Нема╓ файл╕вX
|
||||
Нема╓ попередньо╖ команди для зам╕ни "!"X
|
||||
В╕дсутн╓ ╕м'я файлу для п╕дм╕ни %%X
|
||||
В╕дсутн╓ ╕м'я файлу для п╕дм╕ни #X
|
||||
Помилка: execl: %sX
|
||||
Помилка введення/виведення: %sX
|
||||
Файл модиф╕ковано п╕сля останньо╖ команди повного запису: збереж╕ть чи використайте ! для обходуX
|
||||
Неможливо знайти домашн╕й каталогX
|
||||
Новий каталог: %sX
|
||||
Нема╓ наповнених буфер╕вX
|
||||
Команда %s не використову╓ться як частина команди global чи vX
|
||||
%s/%s: не в╕дкрито: не належить Вам чи адм╕н╕страторуX
|
||||
%s/%s: не в╕дкрито: не належить ВамX
|
||||
%s/%s: не в╕дкрито: можлив╕сть запису користувачем, який не ╓ власникомX
|
||||
%s: не в╕дкрито: не належить Вам чи адм╕н╕страторуX
|
||||
%s: не в╕дкрито: не належить ВамX
|
||||
%s: не в╕дкрито: можлив╕сть запису користувачем, який не ╓ власникомX
|
||||
Нема╓ б╕льше рядк╕в для об'╓днанняX
|
||||
Нема╓ параметр╕в введенняX
|
||||
Нема╓ параметр╕в командиX
|
||||
Символ %s не можна переназначитиX
|
||||
"%s" зараз не переназначеноX
|
||||
Iм'я м╕тки -- один символX
|
||||
%s ╕сну╓, не записано; використайте ! для обходуX
|
||||
Новий файл exrс: %sX
|
||||
Рядок призначення зазначено всередин╕ д╕апазону перем╕щенняX
|
||||
Команда open вимага╓ встановлення опц╕╖ openX
|
||||
Команду open ще не реал╕зованоX
|
||||
Захист файлу неможливийX
|
||||
Файл захищеноX
|
||||
%s розширився в надто велику к╕льк╕сть ╕мен файл╕вX
|
||||
Прочитати можна т╕льки простий файл чи ╕менований канал(pipe)X
|
||||
%s: блокування в╕д читання неможливеX
|
||||
Зчитую...X
|
||||
%s: %lu рядк╕в, %lu символ╕вX
|
||||
Нема╓ т╕ньових в╕конX
|
||||
Команда script доступна лише в режим╕ viX
|
||||
Нема команди для виконанняX
|
||||
Опц╕ю shiftwidth встановлено в 0X
|
||||
Переповнення л╕чильникаX
|
||||
Цикл виконано не до к╕нцяX
|
||||
Вказано регулярний вираз; параметр 'r' не ма╓ сенсуX
|
||||
Параметри #, l та p не можна комб╕нувати з параметром 'c' в режим╕ viX
|
||||
Сп╕впадань нема╓X
|
||||
Tег в╕дсутн╕йX
|
||||
Менше н╕ж %s запис╕в у стеку тег╕в; використайте :display t[ags]X
|
||||
Нема╓ файлу %s в стеку тег╕в для повернення; використайте :display t[ags]X
|
||||
Натисн╕ть ENTER для продовження: X
|
||||
%s: тег не знайденоX
|
||||
%s: з╕псований тег в %sX
|
||||
%s: номер рядку тега знаходиться за к╕нцем файлуX
|
||||
Стек тег╕в порожн╕йX
|
||||
%s: зразок пошуку не знайденоX
|
||||
Залишилось %d файл╕в для редагуванняX
|
||||
Буфер %s порожн╕йX
|
||||
Зм╕нити? [n]X
|
||||
ПерерваноX
|
||||
Нема╓ буферу для використанняX
|
||||
Нема╓ попереднього регулярного виразуX
|
||||
Команда %s вимага╓ вже прочитаний файлX
|
||||
Використання: %sX
|
||||
Команда visual вимага╓ встановлення опц╕╖ openX
|
||||
|
||||
Пустий файлX
|
||||
Нема╓ попереднього пошуку F, f, T, чи tX
|
||||
%s не знайденоX
|
||||
Нема╓ попереднього файлу для редагуванняX
|
||||
Курсор сто╖ть не на цифр╕X
|
||||
Oтримане число надто великеX
|
||||
Oтримане число надто малеX
|
||||
Нема╓ в╕дпов╕дного символу в цьому рядкуX
|
||||
В╕дпов╕дний символ не знайденоX
|
||||
Нема╓ символ╕в для зам╕ниX
|
||||
Нема╓ ╕ншого в╕кнаX
|
||||
Символи п╕сля рядку для пошуку, зм╕щення рядку та/чи команди zX
|
||||
Нема╓ попереднього зразку пошукуX
|
||||
Пошук зак╕нчився на початков╕й позиц╕╖X
|
||||
Абрев╕атура перевищила л╕м╕т розширення: символи з'╕гнорованоX
|
||||
Недозволений символ: задайте в дужкахX
|
||||
Вже на початку вставкиX
|
||||
Нема╓ символ╕в для видаленняX
|
||||
Рух за к╕нець файлуX
|
||||
Рух за к╕нець рядкуX
|
||||
Курсор не перем╕щувавсяX
|
||||
Вже на початку файлуX
|
||||
Рух курсору за початок файлуX
|
||||
Вже в перш╕й колонц╕X
|
||||
Буфер треба вказувати перед командоюX
|
||||
Вже на к╕нц╕ файлуX
|
||||
Вже на к╕нц╕ рядкуX
|
||||
%s не команда ViX
|
||||
Використання: %sX
|
||||
Нема╓ символ╕в для видаленняX
|
||||
Команда Q вимага╓ ╕нтерфейсу exX
|
||||
Нема╓ команди для повторенняX
|
||||
Файл пустийX
|
||||
Команду %s не можна використати для перем╕щенняX
|
||||
Вже в командному режим╕X
|
||||
Курсор сто╖ть не на слов╕X
|
||||
|
||||
Значнення опц╕╖ Windows надто велике, максимум = %uX
|
||||
ДописатиX
|
||||
Зм╕нитиX
|
||||
КомандаX
|
||||
ВставитиX
|
||||
Зам╕нитиX
|
||||
Рух курсору за к╕нець экрануX
|
||||
Рух курсору за початок экрануX
|
||||
Для розбиття в╕кно ма╓ м╕стити б╕льше н╕ж %d рядк╕вX
|
||||
Т╕ньових в╕кон нема╓X
|
||||
Нема╓ т╕ньового в╕кна з редагуванням файлу %sX
|
||||
Не можна зробити т╕ньовим ╓дине в╕кноX
|
||||
В╕кно можна стиснути лише до %d рядк╕вX
|
||||
В╕кно не можна стиснутиX
|
||||
В╕кно не можна розширитиX
|
||||
|
||||
Це в╕кно не можна призупинитиX
|
||||
Перервано: в╕дображен╕ клав╕ш╕ з'╕гнорованоX
|
||||
vi: тимчасовий буфур не вив╕льненоX
|
||||
Цей тип терм╕налу нема╓ клав╕ш╕ %sX
|
||||
Можна вказати лише один буферX
|
||||
Число б╕льше, н╕ж %luX
|
||||
ПерерваноX
|
||||
Неможлу створити тимчасовий файлX
|
||||
УВАГА: %s спец╕альний файлX
|
||||
%s вже заблоковано, доступний т╕льки для читанняX
|
||||
%s: стертоX
|
||||
%s: закритоX
|
||||
%s: стертоX
|
||||
%s: стертоX
|
||||
Файл т╕льки для читання, не записано: Використайте ! для обходуX
|
||||
Файл т╕льки для читання, не записаноX
|
||||
%s ╕сну╓, не записано; використайте ! для обходуX
|
||||
%s ╕сну╓, не записаноX
|
||||
Використайте ! для часткового запису файлуX
|
||||
Частина файлу, файл не записаноX
|
||||
%s: Файл зм╕нювався п╕зн╕ше, н╕ж ця коп╕я: використайте ! для обходуX
|
||||
%s: Файл зм╕нювався п╕зн╕ше, н╕ж ця коп╕яX
|
||||
%s: захист в╕д запису недоступнийX
|
||||
Запис...X
|
||||
%s: УВАГА: файл обр╕заноX
|
||||
Вже на першому тегу в ц╕й груп╕X
|
||||
%s: новий файл: %lu рядк╕в, %lu символ╕вX
|
||||
%s: %lu рядк╕в, %lu символ╕вX
|
||||
%s розширився в надто велику к╕льк╕сть ╕мен файл╕вX
|
||||
%s: спец╕альний файлX
|
||||
%s: не належить ВамX
|
||||
%s: доступний не лише Вам
|
||||
Файл модиф╕ковано п╕сля останньо╖ команди запису: збереж╕ть чи використайте ! для обходуX
|
||||
Файл модиф╕ковано п╕сля останньо╖ команди запису: збереж╕ть чи використайте :edit для обходуX
|
||||
Файл модиф╕ковано п╕сля останньо╖ команди запису: збереж╕ть чи використайте ! для обходуX
|
||||
Тимчасовий файл: вих╕д з╕тре зм╕ниX
|
||||
Файл т╕льки для читання, зм╕ни не запишуться автоматичноX
|
||||
Записи почат╕ зановоX
|
||||
П╕дтверджу╓те? [ynq]X
|
||||
Натисн╕ть ENTER для продовження: X
|
||||
Натисн╕ть ENTER для продовження [: для ╕нших команд] X
|
||||
Натисн╕ть ENTER для продовження [q для виходу]: X
|
||||
Tака форма %s вимага╓ ╕нтерфейсу exX
|
||||
Входим в режим введення exX
|
||||
Зб╕й команди, файл не прочитаноX
|
||||
Продовжити?X
|
||||
Неоч╕кувана символьна под╕яX
|
||||
Неоч╕кувана под╕я к╕нця файлуX
|
||||
Нема╓ сп╕впадань за запитомX
|
||||
Неоч╕кувана под╕я перериванняX
|
||||
Неоч╕кувана под╕я виходуX
|
||||
Неоч╕кувана под╕я перерисовкиX
|
||||
Вже на останньму Тегу в ц╕й груп╕X
|
||||
Команда %s вимага╓ ╕нтерфейсу exX
|
||||
Tака форма %s не дозволя╓ться при встановлен╕й опц╕╖ secure editX
|
||||
Неоч╕кувана под╕я рядкуX
|
||||
Неоч╕кувана под╕я тайм-аутуX
|
||||
Неоч╕кувана под╕я записуX
|
||||
|
||||
Shell'╕вске доповнення не дозволя╓ться при встановлен╕й опц╕╖ secure editX
|
||||
Команда %s не дозволя╓ться при встановлен╕й опц╕╖ secure editX
|
||||
set: опц╕ю %s неможна виставити вимкненоюX
|
||||
Екран надто малий.X
|
||||
доданоX
|
||||
зм╕неноX
|
||||
стертоX
|
||||
об'╓днаноX
|
||||
перем╕щеноX
|
||||
здвинутоX
|
||||
вставленоX
|
||||
рядокX
|
||||
рядк╕вX
|
||||
Vi завантажено без ╕нтерпретатора TclX
|
||||
Файл модиф╕ковано п╕сля останньо╖ команди запису.X
|
||||
Невдача shell'╕вського доповненняX
|
||||
Oпц╕╖ редагування %s не вказаноX
|
||||
Vi завантажено без ╕нтерпретатора PerlX
|
||||
Нема╓ команди ex для виконанняX
|
||||
Натисн╕ть ENTER щоб виконати команду, q щоб вийтиX
|
||||
Введ╕ть 'cscope help' для ╕нформац╕╖X
|
||||
Нема╓ cscope з'╓днанньX
|
||||
%s: нев╕домий тип пошуку: використовуйте один з %sX
|
||||
%d: нема╓ тако╖ сес╕╖ cscopeX
|
||||
set: опц╕ю %s неможна виставити ув╕мкненоюX
|
||||
set: опц╕ю %s неможна виставити в 0X
|
||||
%s: додано: %lu рядк╕в, %lu символ╕вX
|
||||
Неоч╕кувана под╕я зм╕ни розм╕руX
|
||||
%d файл╕в для редагуванняX
|
@ -43,8 +43,7 @@
|
||||
044 "Опц╕я lisp в╕дсутня"
|
||||
045 "Пов╕домлення не вимкнен╕: %s"
|
||||
046 "Пов╕домлення не вв╕мкнен╕: %s"
|
||||
048 "Опц╕я paragraph повинна м╕стити групи з двох символ╕в"
|
||||
049 "Опц╕я section повинна м╕стити групи з двох символ╕в"
|
||||
047 "Опц╕я %s повинна м╕стити групи з двох символ╕в"
|
||||
053 "Стартовий буфер порожн╕й"
|
||||
054 "Буфер %s порожн╕й"
|
||||
055 "Неможливо в╕дновити файл, що м╕стить в ╕мен╕ символи переведення каретки"
|
||||
@ -97,16 +96,16 @@
|
||||
103 "Неправильна адреса: файл пустий"
|
||||
104 "Команда %s не може використовувати адресу 0"
|
||||
105 "Нема╓ абрев╕атур"
|
||||
106 "Абрев╕атури повинн╕ зак╕нчуватися символом "word""
|
||||
106 "Абрев╕атури повинн╕ зак╕нчуватися символом \"сл╕в\""
|
||||
107 "В абрев╕атур╕ не можна використовувати символи табуляц╕╖ та проб╕ли"
|
||||
108 "Абрев╕атури не можуть зм╕шувати символи сл╕в/не-сл╕в, х╕ба що в к╕нц╕ рядку"
|
||||
109 ""%s" не абрев╕атура"
|
||||
109 "\"%s\" не абрев╕атура"
|
||||
110 "Команда Vi не вдалась: в╕дображен╕ клав╕ш╕ з'╕гноровано"
|
||||
111 "Файл╕в для редагування б╕льше нема╓"
|
||||
112 "Попереднього файлу для редагування нема╓"
|
||||
113 "Попереднього файлу для перегляду нема╓"
|
||||
114 "Нема╓ файл╕в"
|
||||
115 "Нема╓ попередньо╖ команди для зам╕ни "!""
|
||||
115 "Нема╓ попередньо╖ команди для зам╕ни \"!\""
|
||||
116 "В╕дсутн╓ ╕м'я файлу для п╕дм╕ни %%"
|
||||
117 "В╕дсутн╓ ╕м'я файлу для п╕дм╕ни #"
|
||||
118 "Помилка: execl: %s"
|
||||
@ -126,7 +125,7 @@
|
||||
132 "Нема╓ параметр╕в введення"
|
||||
133 "Нема╓ параметр╕в команди"
|
||||
134 "Символ %s не можна переназначити"
|
||||
135 ""%s" зараз не переназначено"
|
||||
135 "\"%s\" зараз не переназначено"
|
||||
136 "Iм'я м╕тки -- один символ"
|
||||
137 "%s ╕сну╓, не записано; використайте ! для обходу"
|
||||
138 "Новий файл exrс: %s"
|
||||
|
311
contrib/nvi/catalog/zh_CN.GB2312.base
Normal file
311
contrib/nvi/catalog/zh_CN.GB2312.base
Normal file
@ -0,0 +1,311 @@
|
||||
002 "行长度溢出"
|
||||
003 "无法删除第 %lu 行"
|
||||
004 "无法向第 %lu 行追加"
|
||||
005 "无法向第 %lu 行插入"
|
||||
006 "无法存储第 %lu 行"
|
||||
007 "无法获得最后一行"
|
||||
008 "错误:无法获取第 %lu 行"
|
||||
009 "日志文件"
|
||||
010 "日志未记录,无法撤销"
|
||||
011 "未做修改,无法撤销"
|
||||
012 "日志未记录,无法撤销"
|
||||
013 "日志未记录,无法回滚"
|
||||
014 "未做修改,无法重做"
|
||||
015 "%s/%d: 日志错误"
|
||||
016 "Vi 的标准输入和输出必须是终端"
|
||||
017 "标记 %s: 未设置"
|
||||
018 "标记 %s: 该行被删除"
|
||||
019 "标记 %s: 光标位置不存在"
|
||||
020 "错误:"
|
||||
021 "新文件"
|
||||
022 "文件名变更"
|
||||
023 "已修改"
|
||||
024 "未修改"
|
||||
025 "已解锁"
|
||||
026 "只读"
|
||||
027 "第 %lu 行/共 %lu 行 [%ld%%]"
|
||||
028 "空文件"
|
||||
029 "第 %lu 行"
|
||||
030 "文件 %s 不是消息目录"
|
||||
031 "无法设置选项 %s 的默认值"
|
||||
032 "用法 %s"
|
||||
033 "set: 不存在选项 %s;用 'set all' 查看所有选项的值"
|
||||
034 "set: 选项 [no]%s 不接受赋值"
|
||||
035 "set: 选项 %s 不是开关"
|
||||
036 "set: 选项 %s: %s"
|
||||
037 "set: 选项 %s: %s: 值溢出"
|
||||
038 "set: 选项 %s: %s 是一个非法数字"
|
||||
039 "set: 选项 %s 不是开关"
|
||||
040 "屏幕太窄,列宽小于 %d"
|
||||
041 "屏幕太宽,列宽大于 %d"
|
||||
042 "屏幕太矮,行高小于 %d"
|
||||
043 "屏幕太高,行高大于 %d"
|
||||
044 "lisp 选项未实现"
|
||||
045 "消息未关闭:%s"
|
||||
046 "消息未打开:%s"
|
||||
047 "%s 选项必须每两个字符一组"
|
||||
053 "默认缓冲区为空"
|
||||
054 "缓冲区 %s 为空"
|
||||
055 "文件名中有换行的文件是无法恢复的"
|
||||
056 "一旦会话失败,修改无法恢复"
|
||||
057 "正在备份文件……"
|
||||
058 "保存失败:%s"
|
||||
059 "一旦会话失败,修改无法恢复"
|
||||
060 "文件备份失败:%s"
|
||||
061 "正在备份文件……"
|
||||
062 "ID 为 %u 的用户未找到"
|
||||
063 "无法给恢复文件加锁"
|
||||
064 "恢复文件缓冲区溢出"
|
||||
065 "恢复文件"
|
||||
066 "%s: 恢复文件格式异常"
|
||||
067 "%s: 恢复文件格式异常"
|
||||
068 "不存在名为 %s 的,可读并需要恢复的文件"
|
||||
069 "存在此文件的旧版本需要您恢复"
|
||||
070 "存在其它需要您恢复的文件"
|
||||
071 "邮件未发出:%s"
|
||||
072 "文件为空,无法搜索"
|
||||
073 "到达文件尾,未找到模式"
|
||||
074 "没有上一个搜索模式"
|
||||
075 "模式未找到"
|
||||
076 "到达文件头,未找到模式"
|
||||
077 "搜索回转"
|
||||
078 "正在搜索……"
|
||||
079 "未找到不可打印字符"
|
||||
080 "命令名不明"
|
||||
082 "%s: 命令在 ex 模式下不可用"
|
||||
083 "命令计数不可为 0"
|
||||
084 "%s: 错误的行描述"
|
||||
085 "内部语法表错误 (%s: %s)"
|
||||
086 "用法:%s"
|
||||
087 "%s: 临时缓冲区未释放"
|
||||
088 "修饰符偏移量在第一行之前"
|
||||
089 "修饰符偏移量超过最后一行"
|
||||
090 "文件/屏幕改变时有带范围的 @ 命令正在运行"
|
||||
091 "文件/屏幕改变时有全局命令/v 命令正在运行"
|
||||
092 "Ex 命令失败:等待中的命令已丢弃"
|
||||
093 "Ex 命令失败:键映射已丢弃"
|
||||
094 "第二地址小于第一地址"
|
||||
095 "未提供标记名"
|
||||
096 "\\ 没有跟在 / 或 ? 后面"
|
||||
097 "引用了小于 0 的行号"
|
||||
098 "%s 命令不明"
|
||||
099 "地址值溢出"
|
||||
100 "地址值下溢"
|
||||
101 "非法的地址组合"
|
||||
102 "非法地址:文件只有 %lu 行"
|
||||
103 "非法地址:文件为空"
|
||||
104 "命令 %s 不允许地址为 0"
|
||||
105 "没有可显示的缩写"
|
||||
106 "缩写必须以「单词」字符结束"
|
||||
107 "缩写不能包含制表符或空格"
|
||||
108 "缩写不能在结尾之外的地方混用单词/非单词字符"
|
||||
109 "\"%s\" 不是缩写"
|
||||
110 "Vi 命令失败:键映射已丢弃"
|
||||
111 "没有剩余的待编辑文件"
|
||||
112 "没有上一个待编辑文件"
|
||||
113 "没有上一个需重新编辑的文件"
|
||||
114 "没有可显示的文件列表"
|
||||
115 "缺少用于替换 \"!\" 的上一条命令"
|
||||
116 "缺少用于替换 %% 的文件名"
|
||||
117 "缺少用于替换 # 的文件名"
|
||||
118 "错误:execl: %s"
|
||||
119 "输入/输出错误:%s"
|
||||
120 "文件在上一次完整写入后被修改;写入文件,或使用 ! 强制切换目录"
|
||||
121 "无法找到用户起始目录"
|
||||
122 "新的当前目录:%s"
|
||||
123 "没有可显示的剪切缓冲区"
|
||||
124 "%s 命令不能被用作全局命令或 v 命令的一部分"
|
||||
125 "%s/%s: 未引入:不属于您或根用户"
|
||||
126 "%s/%s: 未引入:不属于您"
|
||||
127 "%s/%s: 未引入:可以被文件属主以外的用户写入"
|
||||
128 "%s: 未引入:不属于您或根用户"
|
||||
129 "%s: 未引入:不属于您"
|
||||
130 "%s: 未引入:可以被文件属主以外的用户写入"
|
||||
131 "缺少可以合并的行"
|
||||
132 "缺少输入映射"
|
||||
133 "缺少命令映射"
|
||||
134 "%s 字符不能被重新映射"
|
||||
135 "\"%s\" 目前未被映射"
|
||||
136 "标记名必须是单个字符"
|
||||
137 "%s 已存在,未写入;用 ! 覆盖文件"
|
||||
138 "新建 exrc 文件:%s"
|
||||
139 "目标行在移动范围之内"
|
||||
140 "open 要求开启 open 选项"
|
||||
141 "open 命令未实现"
|
||||
142 "无法保持此文件"
|
||||
143 "文件已保持"
|
||||
144 "%s: 展开的文件名过多"
|
||||
145 "只能读取常规文件和具名管道"
|
||||
146 "%s: 读锁不可用"
|
||||
147 "正在读取……"
|
||||
148 "%s: %lu 行,%lu 个字符"
|
||||
149 "没有可显示的后台屏幕"
|
||||
150 "script 命令仅在 vi 模式下可用"
|
||||
151 "没有要执行的命令"
|
||||
152 "shiftwidth 选项被设为 0"
|
||||
153 "命令计数溢出"
|
||||
154 "命令计数下溢"
|
||||
155 "正则表达式已指定;r 修饰符无效"
|
||||
156 "#, l 和 p 修饰符在 vi 模式下不能与 c 修饰符组合"
|
||||
157 "未找到匹配"
|
||||
158 "没有上一次进入的 tag"
|
||||
159 "tags 栈上的记录少于 %s 条;用 :display t[ags] 显示它们"
|
||||
160 "tags 栈上不存在文件 %s,无法返回;用 :display t[ags] 查看"
|
||||
161 "按回车键继续:"
|
||||
162 "%s: tag 未找到"
|
||||
163 "%s: 损坏的 tag 在 %s 中"
|
||||
164 "%s: tag 的行号超过了文件尾"
|
||||
165 "tags 栈为空"
|
||||
166 "%s: 搜索模式未找到"
|
||||
167 "还有 %d 个待编辑文件"
|
||||
168 "缓冲区 %s 为空"
|
||||
169 "确认修改?[n]"
|
||||
170 "已中断"
|
||||
171 "没有上一个可供执行的缓冲区"
|
||||
172 "没有上一条正则表达式"
|
||||
173 "%s 要求存在一个已读入的文件"
|
||||
174 "用法:%s"
|
||||
175 "visual 命令要求开启 open 选项"
|
||||
177 "空文件"
|
||||
178 "没有上一次 F, f, T 或 t 搜索"
|
||||
179 "%s 未找到"
|
||||
180 "没有上一个待编辑文件"
|
||||
181 "光标不在数字上"
|
||||
182 "结果数字过大"
|
||||
183 "结果数字过小"
|
||||
184 "这一行上没有匹配的字符"
|
||||
185 "匹配字符未找到"
|
||||
186 "没有可替换的字符"
|
||||
187 "没有其它屏幕可以切换"
|
||||
188 "在搜索字符串、行偏移量或 z 命令之后有多余字符"
|
||||
189 "没有上一个搜索模式"
|
||||
190 "搜索回转到了初始位置"
|
||||
191 "缩写展开超过限制:字符已丢弃"
|
||||
192 "非法字符;用引号括起来再输入"
|
||||
193 "已到插入点的开始"
|
||||
194 "没有可擦除的剩余字符"
|
||||
195 "移动超过文件尾"
|
||||
196 "移动超过行末"
|
||||
197 "光标未移动"
|
||||
198 "已到文件头"
|
||||
199 "移动超过文件头"
|
||||
200 "已位于第一列"
|
||||
201 "缓冲区应在命令前指定"
|
||||
202 "已到文件尾"
|
||||
203 "已到行末"
|
||||
204 "%s 不是 vi 命令"
|
||||
205 "用法 %s"
|
||||
206 "没有可删除的字符"
|
||||
207 "Q 命令需要 ex 终端界面"
|
||||
208 "没有可重复的命令"
|
||||
209 "文件为空"
|
||||
210 "%s 不能被用作移动命令"
|
||||
211 "已处于命令模式"
|
||||
212 "光标不在单词上"
|
||||
214 "窗口选项的值过大,最大值 %u"
|
||||
215 "追加"
|
||||
216 "修改"
|
||||
217 "命令"
|
||||
218 "插入"
|
||||
219 "替换"
|
||||
220 "移动超过屏幕终点"
|
||||
221 "移动超过屏幕起点"
|
||||
222 "分屏需要多于 %d 行"
|
||||
223 "没有后台屏幕"
|
||||
224 "不存在正在编辑文件 %s 的后台屏幕"
|
||||
225 "不能把您唯一的屏幕置于后台"
|
||||
226 "屏幕只能收缩到 %d 行"
|
||||
227 "屏幕不能收缩"
|
||||
228 "屏幕不能增高"
|
||||
230 "不能挂起此屏幕"
|
||||
231 "已中断:键映射已丢弃"
|
||||
232 "vi: 临时缓冲区未释放"
|
||||
233 "此终端没有 %s 键"
|
||||
234 "只能指定一个缓冲区"
|
||||
235 "数字大于 %lu"
|
||||
236 "已中断"
|
||||
237 "无法创建临时文件"
|
||||
238 "警告:%s 不是常规文件"
|
||||
239 "%s 已加锁,会话为只读"
|
||||
240 "%s: 移除"
|
||||
241 "%s: 关闭"
|
||||
242 "%s: 移除"
|
||||
243 "%s: 移除"
|
||||
244 "只读文件,未写入;用 ! 强制写入"
|
||||
245 "只读文件,未写入"
|
||||
246 "%s 已存在,未写入;用 ! 覆盖文件"
|
||||
247 "%s 已存在,未写入"
|
||||
248 "是已存在文件的一部分,未写入;用 ! 强制写入"
|
||||
249 "是已存在文件的一部分,未写入"
|
||||
250 "%s: 文件被修改,新于当前拷贝;用 ! 强制写入"
|
||||
251 "%s: 文件被修改,新于当前拷贝"
|
||||
252 "%s: 写锁不可用"
|
||||
253 "正在写入……"
|
||||
254 "%s: 警告:文件被截断"
|
||||
255 "已位于这组 tags 中的第一个"
|
||||
256 "%s: 新文件:%lu 行,%lu 个字符"
|
||||
257 "%s: %lu 行,%lu 个字符"
|
||||
258 "%s: 展开的文件名过多"
|
||||
259 "%s: 不是常规文件"
|
||||
260 "%s: 不属于您"
|
||||
261 "%s: 可被文件属主以外的用户访问"
|
||||
262 "文件在上一次完整写入后被修改;写入文件,或使用 ! 强制载入"
|
||||
263 "文件在上一次完整写入后被修改;写入文件,或使用 :edit! 强制编辑"
|
||||
264 "文件在上一次完整写入后被修改;写入文件,或使用 ! 强制执行"
|
||||
265 "临时文件,退出将丢弃全部修改"
|
||||
266 "文件只读,修改未被自动写入"
|
||||
267 "日志重启"
|
||||
268 "确认?[ynq]"
|
||||
269 "按任意键继续:"
|
||||
270 "按任意键继续[按 : 键输入 ex 命令]:"
|
||||
271 "按任意键继续[按 q 键推出]:"
|
||||
272 "该形式的 %s 命令需要 ex 终端界面"
|
||||
273 "进入 ex 输入模式"
|
||||
274 "命令失败,尚未读入文件"
|
||||
275 " 继续?"
|
||||
276 "意外的字符事件"
|
||||
277 "以外的文件尾事件"
|
||||
278 "查询未找到匹配"
|
||||
279 "意外的中断事件"
|
||||
280 "意外的退出事件"
|
||||
281 "意外的重绘事件"
|
||||
282 "已位于这组 tags 中的最后一个"
|
||||
283 "%s 命令需要 ex 终端界面"
|
||||
284 "secure 编辑选项开启时不支持该形式的 %s 命令"
|
||||
285 "意外的字符串事件"
|
||||
286 "意外的超时事件"
|
||||
287 "意外的写入事件"
|
||||
288 "分屏需要多于 %d 列"
|
||||
289 "secure 编辑选项开启时不支持 shell 展开"
|
||||
290 "secure 编辑选项开启时不支持 %s 命令"
|
||||
291 "set: 选项 %s 不能关闭"
|
||||
292 "显示空间太小"
|
||||
293 "已添加"
|
||||
294 "已修改"
|
||||
295 "已删除"
|
||||
296 "已合并"
|
||||
297 "已移动"
|
||||
298 "已偏移"
|
||||
299 "已复制"
|
||||
300 "行"
|
||||
301 "行"
|
||||
303 "文件在上一次写入后被修改"
|
||||
304 "Shell 展开失败"
|
||||
305 "未指定 %s 编辑选项"
|
||||
307 "没有要执行的 ex 命令"
|
||||
308 "键入回车执行一条命令,:q 退出"
|
||||
309 "使用 \"cscope help\" 查看帮助"
|
||||
310 "没有正在运行的 cscope 连接"
|
||||
311 "%s: 搜索类型不明:使用 %s 中的一个"
|
||||
312 "%d: 无此 cscope 会话"
|
||||
313 "set: 选项 %s 绝对不能开启"
|
||||
314 "set: 选项 %s 绝对不能被设为 0"
|
||||
315 "%s: 已追加:%lu 行,%lu 个字符"
|
||||
316 "意外的大小调整事件"
|
||||
317 "%d 个待编辑的文件"
|
||||
319 "%d 个后台屏幕;用 :display 列出它们"
|
||||
320 "光标位置不明"
|
||||
321 "不支持文件编码转换"
|
||||
322 "不支持输入编码转换"
|
||||
323 "无效输入,已截断"
|
||||
324 "第 %d 行上有转换错误"
|
1
contrib/nvi/catalog/zh_CN.GB2312.owner
Normal file
1
contrib/nvi/catalog/zh_CN.GB2312.owner
Normal file
@ -0,0 +1 @@
|
||||
Zhihao Yuan <lichray@gmail.com>
|
@ -1,4 +1,4 @@
|
||||
# @(#)README.signal 10.1 (Berkeley) 6/23/95
|
||||
# $Id: README.signal,v 10.1 1995/06/23 10:28:17 bostic Exp $
|
||||
|
||||
There are six (normally) asynchronous actions about which vi cares:
|
||||
SIGHUP, SIGINT, SIGQUIT, SIGTERM, SIGTSTP and SIGWINCH.
|
||||
|
@ -6,11 +6,24 @@
|
||||
*
|
||||
* See the LICENSE file for redistribution information.
|
||||
*
|
||||
* @(#)cl.h 10.19 (Berkeley) 9/24/96
|
||||
* $Id: cl.h,v 10.34 2011/08/15 20:07:32 zy Exp $
|
||||
*/
|
||||
|
||||
#ifdef USE_WIDECHAR
|
||||
#define _XOPEN_SOURCE_EXTENDED
|
||||
#endif
|
||||
#ifdef HAVE_NCURSES_H
|
||||
#include <ncurses.h>
|
||||
#else
|
||||
#include <curses.h>
|
||||
#endif
|
||||
|
||||
typedef struct _cl_private {
|
||||
CHAR_T ibuf[256]; /* Input keys. */
|
||||
char ibuf[256]; /* Input keys. */
|
||||
|
||||
size_t skip; /* Remaining keys. */
|
||||
|
||||
CONVWIN cw; /* Conversion buffer. */
|
||||
|
||||
int eof_count; /* EOF count. */
|
||||
|
||||
@ -24,6 +37,10 @@ typedef struct _cl_private {
|
||||
char *rmso, *smso; /* Inverse video terminal strings. */
|
||||
char *smcup, *rmcup; /* Terminal start/stop strings. */
|
||||
|
||||
char *oname; /* Original screen window name. */
|
||||
|
||||
SCR *focus; /* Screen that has the "focus". */
|
||||
|
||||
int killersig; /* Killer signal. */
|
||||
#define INDX_HUP 0
|
||||
#define INDX_INT 1
|
||||
@ -39,29 +56,29 @@ typedef struct _cl_private {
|
||||
TE_SENT=0, TI_SENT } ti_te;
|
||||
|
||||
#define CL_IN_EX 0x0001 /* Currently running ex. */
|
||||
#define CL_RENAME 0x0002 /* X11 xterm icon/window renamed. */
|
||||
#define CL_RENAME_OK 0x0004 /* User wants the windows renamed. */
|
||||
#define CL_SCR_EX_INIT 0x0008 /* Ex screen initialized. */
|
||||
#define CL_SCR_VI_INIT 0x0010 /* Vi screen initialized. */
|
||||
#define CL_SIGHUP 0x0020 /* SIGHUP arrived. */
|
||||
#define CL_SIGINT 0x0040 /* SIGINT arrived. */
|
||||
#define CL_SIGTERM 0x0080 /* SIGTERM arrived. */
|
||||
#define CL_SIGWINCH 0x0100 /* SIGWINCH arrived. */
|
||||
#define CL_STDIN_TTY 0x0200 /* Talking to a terminal. */
|
||||
#define CL_LAYOUT 0x0002 /* Screen layout changed. */
|
||||
#define CL_RENAME 0x0004 /* X11 xterm icon/window renamed. */
|
||||
#define CL_RENAME_OK 0x0008 /* User wants the windows renamed. */
|
||||
#define CL_SCR_EX_INIT 0x0010 /* Ex screen initialized. */
|
||||
#define CL_SCR_VI_INIT 0x0020 /* Vi screen initialized. */
|
||||
#define CL_SIGHUP 0x0040 /* SIGHUP arrived. */
|
||||
#define CL_SIGINT 0x0080 /* SIGINT arrived. */
|
||||
#define CL_SIGTERM 0x0100 /* SIGTERM arrived. */
|
||||
#define CL_SIGWINCH 0x0200 /* SIGWINCH arrived. */
|
||||
#define CL_STDIN_TTY 0x0400 /* Talking to a terminal. */
|
||||
u_int32_t flags;
|
||||
} CL_PRIVATE;
|
||||
|
||||
#define CLP(sp) ((CL_PRIVATE *)((sp)->gp->cl_private))
|
||||
#define GCLP(gp) ((CL_PRIVATE *)gp->cl_private)
|
||||
#define CLSP(sp) ((WINDOW *)((sp)->cl_private))
|
||||
|
||||
/* Return possibilities from the keyboard read routine. */
|
||||
typedef enum { INP_OK=0, INP_EOF, INP_ERR, INP_INTR, INP_TIMEOUT } input_t;
|
||||
|
||||
/* The screen line relative to a specific window. */
|
||||
#define RLNO(sp, lno) (sp)->woff + (lno)
|
||||
|
||||
/* X11 xterm escape sequence to rename the icon/window. */
|
||||
#define XTERM_RENAME "\033]0;%s\007"
|
||||
/* The screen position relative to a specific window. */
|
||||
#define RCNO(sp, cno) (cno)
|
||||
#define RLNO(sp, lno) (lno)
|
||||
|
||||
/*
|
||||
* XXX
|
||||
@ -75,4 +92,4 @@ typedef enum { INP_OK=0, INP_EOF, INP_ERR, INP_INTR, INP_TIMEOUT } input_t;
|
||||
#define FALSE 0
|
||||
#endif
|
||||
|
||||
#include "cl_extern.h"
|
||||
#include "extern.h"
|
||||
|
@ -1,346 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 1995, 1996
|
||||
* Keith Bostic. All rights reserved.
|
||||
*
|
||||
* See the LICENSE file for redistribution information.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#ifndef lint
|
||||
static const char sccsid[] = "@(#)cl_bsd.c 8.29 (Berkeley) 7/1/96";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/queue.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#include <bitstring.h>
|
||||
#include <ctype.h>
|
||||
#include <curses.h>
|
||||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <termios.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "../common/common.h"
|
||||
#include "../vi/vi.h"
|
||||
#include "cl.h"
|
||||
|
||||
static char *ke; /* Keypad on. */
|
||||
static char *ks; /* Keypad off. */
|
||||
static char *vb; /* Visible bell string. */
|
||||
|
||||
/*
|
||||
* HP's support the entire System V curses package except for the tigetstr
|
||||
* and tigetnum functions. Ultrix supports the BSD curses package except
|
||||
* for the idlok function. Cthulu only knows why. Break things up into a
|
||||
* minimal set of functions.
|
||||
*/
|
||||
|
||||
#ifndef HAVE_CURSES_ADDNSTR
|
||||
/*
|
||||
* addnstr --
|
||||
*
|
||||
* PUBLIC: #ifndef HAVE_CURSES_ADDNSTR
|
||||
* PUBLIC: int addnstr __P((char *, int));
|
||||
* PUBLIC: #endif
|
||||
*/
|
||||
int
|
||||
addnstr(s, n)
|
||||
char *s;
|
||||
int n;
|
||||
{
|
||||
int ch;
|
||||
|
||||
while (n-- && (ch = *s++))
|
||||
addch(ch);
|
||||
return (OK);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_CURSES_BEEP
|
||||
/*
|
||||
* beep --
|
||||
*
|
||||
* PUBLIC: #ifndef HAVE_CURSES_BEEP
|
||||
* PUBLIC: void beep __P((void));
|
||||
* PUBLIC: #endif
|
||||
*/
|
||||
void
|
||||
beep()
|
||||
{
|
||||
(void)write(1, "\007", 1); /* '\a' */
|
||||
}
|
||||
#endif /* !HAVE_CURSES_BEEP */
|
||||
|
||||
#ifndef HAVE_CURSES_FLASH
|
||||
/*
|
||||
* flash --
|
||||
* Flash the screen.
|
||||
*
|
||||
* PUBLIC: #ifndef HAVE_CURSES_FLASH
|
||||
* PUBLIC: void flash __P((void));
|
||||
* PUBLIC: #endif
|
||||
*/
|
||||
void
|
||||
flash()
|
||||
{
|
||||
if (vb != NULL) {
|
||||
(void)tputs(vb, 1, cl_putchar);
|
||||
(void)fflush(stdout);
|
||||
} else
|
||||
beep();
|
||||
}
|
||||
#endif /* !HAVE_CURSES_FLASH */
|
||||
|
||||
#ifndef HAVE_CURSES_IDLOK
|
||||
/*
|
||||
* idlok --
|
||||
* Turn on/off hardware line insert/delete.
|
||||
*
|
||||
* PUBLIC: #ifndef HAVE_CURSES_IDLOK
|
||||
* PUBLIC: void idlok __P((WINDOW *, int));
|
||||
* PUBLIC: #endif
|
||||
*/
|
||||
void
|
||||
idlok(win, bf)
|
||||
WINDOW *win;
|
||||
int bf;
|
||||
{
|
||||
return;
|
||||
}
|
||||
#endif /* !HAVE_CURSES_IDLOK */
|
||||
|
||||
#ifndef HAVE_CURSES_KEYPAD
|
||||
/*
|
||||
* keypad --
|
||||
* Put the keypad/cursor arrows into or out of application mode.
|
||||
*
|
||||
* PUBLIC: #ifndef HAVE_CURSES_KEYPAD
|
||||
* PUBLIC: int keypad __P((void *, int));
|
||||
* PUBLIC: #endif
|
||||
*/
|
||||
int
|
||||
keypad(a, on)
|
||||
void *a;
|
||||
int on;
|
||||
{
|
||||
char *p;
|
||||
|
||||
if ((p = tigetstr(on ? "smkx" : "rmkx")) != (char *)-1) {
|
||||
(void)tputs(p, 0, cl_putchar);
|
||||
(void)fflush(stdout);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
#endif /* !HAVE_CURSES_KEYPAD */
|
||||
|
||||
#ifndef HAVE_CURSES_NEWTERM
|
||||
/*
|
||||
* newterm --
|
||||
* Create a new curses screen.
|
||||
*
|
||||
* PUBLIC: #ifndef HAVE_CURSES_NEWTERM
|
||||
* PUBLIC: void *newterm __P((const char *, FILE *, FILE *));
|
||||
* PUBLIC: #endif
|
||||
*/
|
||||
void *
|
||||
newterm(a, b, c)
|
||||
const char *a;
|
||||
FILE *b, *c;
|
||||
{
|
||||
return (initscr());
|
||||
}
|
||||
#endif /* !HAVE_CURSES_NEWTERM */
|
||||
|
||||
#ifndef HAVE_CURSES_SETUPTERM
|
||||
/*
|
||||
* setupterm --
|
||||
* Set up terminal.
|
||||
*
|
||||
* PUBLIC: #ifndef HAVE_CURSES_SETUPTERM
|
||||
* PUBLIC: void setupterm __P((char *, int, int *));
|
||||
* PUBLIC: #endif
|
||||
*/
|
||||
void
|
||||
setupterm(ttype, fno, errp)
|
||||
char *ttype;
|
||||
int fno, *errp;
|
||||
{
|
||||
static char buf[2048];
|
||||
char *p;
|
||||
|
||||
if ((*errp = tgetent(buf, ttype)) > 0) {
|
||||
if (ke != NULL)
|
||||
free(ke);
|
||||
ke = ((p = tigetstr("rmkx")) == (char *)-1) ?
|
||||
NULL : strdup(p);
|
||||
if (ks != NULL)
|
||||
free(ks);
|
||||
ks = ((p = tigetstr("smkx")) == (char *)-1) ?
|
||||
NULL : strdup(p);
|
||||
if (vb != NULL)
|
||||
free(vb);
|
||||
vb = ((p = tigetstr("flash")) == (char *)-1) ?
|
||||
NULL : strdup(p);
|
||||
}
|
||||
}
|
||||
#endif /* !HAVE_CURSES_SETUPTERM */
|
||||
|
||||
#ifndef HAVE_CURSES_TIGETSTR
|
||||
/* Terminfo-to-termcap translation table. */
|
||||
typedef struct _tl {
|
||||
char *terminfo; /* Terminfo name. */
|
||||
char *termcap; /* Termcap name. */
|
||||
} TL;
|
||||
static const TL list[] = {
|
||||
"cols", "co", /* Terminal columns. */
|
||||
"cup", "cm", /* Cursor up. */
|
||||
"cuu1", "up", /* Cursor up. */
|
||||
"el", "ce", /* Clear to end-of-line. */
|
||||
"flash", "vb", /* Visible bell. */
|
||||
"kcub1", "kl", /* Cursor left. */
|
||||
"kcud1", "kd", /* Cursor down. */
|
||||
"kcuf1", "kr", /* Cursor right. */
|
||||
"kcuu1", "ku", /* Cursor up. */
|
||||
"kdch1", "kD", /* Delete character. */
|
||||
"kdl1", "kL", /* Delete line. */
|
||||
"ked", "kS", /* Delete to end of screen. */
|
||||
"kel", "kE", /* Delete to eol. */
|
||||
"kend", "@7", /* Go to eol. */
|
||||
"khome", "kh", /* Go to sol. */
|
||||
"kich1", "kI", /* Insert at cursor. */
|
||||
"kil1", "kA", /* Insert line. */
|
||||
"kind", "kF", /* Scroll down. */
|
||||
"kll", "kH", /* Go to eol. */
|
||||
"knp", "kN", /* Page down. */
|
||||
"kpp", "kP", /* Page up. */
|
||||
"kri", "kR", /* Scroll up. */
|
||||
"lines", "li", /* Terminal lines. */
|
||||
"rmcup", "te", /* Terminal end string. */
|
||||
"rmkx", "ke", /* Exit "keypad-transmit" mode. */
|
||||
"rmso", "se", /* Standout end. */
|
||||
"smcup", "ti", /* Terminal initialization string. */
|
||||
"smkx", "ks", /* Enter "keypad-transmit" mode. */
|
||||
"smso", "so", /* Standout begin. */
|
||||
};
|
||||
|
||||
#ifdef _AIX
|
||||
/*
|
||||
* AIX's implementation for function keys greater than 10 is different and
|
||||
* only goes as far as 36.
|
||||
*/
|
||||
static const char codes[] = {
|
||||
/* 0-10 */ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ';',
|
||||
/* 11-20 */ '<', '>', '!', '@', '#', '$', '%', '^', '&', '*',
|
||||
/* 21-30 */ '(', ')', '-', '_', '+', ',', ':', '?', '[', ']',
|
||||
/* 31-36 */ '{', '}', '|', '~', '/', '='
|
||||
};
|
||||
|
||||
#else
|
||||
|
||||
/*
|
||||
* !!!
|
||||
* Historically, the 4BSD termcap code didn't support functions keys greater
|
||||
* than 9. This was silently enforced -- asking for key k12 would return the
|
||||
* value for k1. We try and get around this by using the tables specified in
|
||||
* the terminfo(TI_ENV) man page from the 3rd Edition SVID. This assumes the
|
||||
* implementors of any System V compatibility code or an extended termcap used
|
||||
* those codes.
|
||||
*/
|
||||
static const char codes[] = {
|
||||
/* 0-10 */ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ';',
|
||||
/* 11-19 */ '1', '2', '3', '4', '5', '6', '7', '8', '9',
|
||||
/* 20-63 */ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
|
||||
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
|
||||
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
|
||||
'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
|
||||
};
|
||||
#endif /* _AIX */
|
||||
|
||||
/*
|
||||
* lcmp --
|
||||
* list comparison routine for bsearch.
|
||||
*/
|
||||
static int
|
||||
lcmp(a, b)
|
||||
const void *a, *b;
|
||||
{
|
||||
return (strcmp(a, ((TL *)b)->terminfo));
|
||||
}
|
||||
|
||||
/*
|
||||
* tigetstr --
|
||||
*
|
||||
* Vendors put the prototype for tigetstr into random include files, including
|
||||
* <term.h>, which we can't include because it makes other systems unhappy.
|
||||
* Try and work around the problem, since we only care about the return value.
|
||||
*
|
||||
* PUBLIC: #ifdef HAVE_CURSES_TIGETSTR
|
||||
* PUBLIC: char *tigetstr();
|
||||
* PUBLIC: #else
|
||||
* PUBLIC: char *tigetstr __P((char *));
|
||||
* PUBLIC: #endif
|
||||
*/
|
||||
char *
|
||||
tigetstr(name)
|
||||
char *name;
|
||||
{
|
||||
static char sbuf[256];
|
||||
TL *tlp;
|
||||
int n;
|
||||
char *p, keyname[3];
|
||||
|
||||
if ((tlp = bsearch(name,
|
||||
list, sizeof(list) / sizeof(TL), sizeof(TL), lcmp)) == NULL) {
|
||||
#ifdef _AIX
|
||||
if (name[0] == 'k' &&
|
||||
name[1] == 'f' && (n = atoi(name + 2)) <= 36) {
|
||||
keyname[0] = 'k';
|
||||
keyname[1] = codes[n];
|
||||
keyname[2] = '\0';
|
||||
#else
|
||||
if (name[0] == 'k' &&
|
||||
name[1] == 'f' && (n = atoi(name + 2)) <= 63) {
|
||||
keyname[0] = n <= 10 ? 'k' : 'F';
|
||||
keyname[1] = codes[n];
|
||||
keyname[2] = '\0';
|
||||
#endif
|
||||
name = keyname;
|
||||
}
|
||||
} else
|
||||
name = tlp->termcap;
|
||||
|
||||
p = sbuf;
|
||||
#ifdef _AIX
|
||||
return ((p = tgetstr(name, &p)) == NULL ? (char *)-1 : strcpy(sbuf, p));
|
||||
#else
|
||||
return (tgetstr(name, &p) == NULL ? (char *)-1 : sbuf);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* tigetnum --
|
||||
*
|
||||
* PUBLIC: #ifndef HAVE_CURSES_TIGETSTR
|
||||
* PUBLIC: int tigetnum __P((char *));
|
||||
* PUBLIC: #endif
|
||||
*/
|
||||
int
|
||||
tigetnum(name)
|
||||
char *name;
|
||||
{
|
||||
TL *tlp;
|
||||
int val;
|
||||
|
||||
if ((tlp = bsearch(name,
|
||||
list, sizeof(list) / sizeof(TL), sizeof(TL), lcmp)) != NULL) {
|
||||
name = tlp->termcap;
|
||||
}
|
||||
|
||||
return ((val = tgetnum(name)) == -1 ? -2 : val);
|
||||
}
|
||||
#endif /* !HAVE_CURSES_TIGETSTR */
|
@ -10,7 +10,7 @@
|
||||
#include "config.h"
|
||||
|
||||
#ifndef lint
|
||||
static const char sccsid[] = "@(#)cl_funcs.c 10.50 (Berkeley) 9/24/96";
|
||||
static const char sccsid[] = "$Id: cl_funcs.c,v 10.74 2012/10/11 10:30:16 zy Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
@ -19,11 +19,13 @@ static const char sccsid[] = "@(#)cl_funcs.c 10.50 (Berkeley) 9/24/96";
|
||||
|
||||
#include <bitstring.h>
|
||||
#include <ctype.h>
|
||||
#include <curses.h>
|
||||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#ifdef HAVE_TERM_H
|
||||
#include <term.h>
|
||||
#endif
|
||||
#include <termios.h>
|
||||
#include <unistd.h>
|
||||
|
||||
@ -31,6 +33,57 @@ static const char sccsid[] = "@(#)cl_funcs.c 10.50 (Berkeley) 9/24/96";
|
||||
#include "../vi/vi.h"
|
||||
#include "cl.h"
|
||||
|
||||
static void cl_rdiv __P((SCR *));
|
||||
|
||||
static int
|
||||
addstr4(SCR *sp, void *str, size_t len, int wide)
|
||||
{
|
||||
CL_PRIVATE *clp;
|
||||
WINDOW *win;
|
||||
size_t y, x;
|
||||
int iv;
|
||||
|
||||
clp = CLP(sp);
|
||||
win = CLSP(sp) ? CLSP(sp) : stdscr;
|
||||
|
||||
/*
|
||||
* If ex isn't in control, it's the last line of the screen and
|
||||
* it's a split screen, use inverse video.
|
||||
*/
|
||||
iv = 0;
|
||||
getyx(win, y, x);
|
||||
if (!F_ISSET(sp, SC_SCR_EXWROTE) &&
|
||||
y == RLNO(sp, LASTLINE(sp)) && IS_SPLIT(sp)) {
|
||||
iv = 1;
|
||||
(void)wstandout(win);
|
||||
}
|
||||
|
||||
#ifdef USE_WIDECHAR
|
||||
if (wide) {
|
||||
if (waddnwstr(win, str, len) == ERR)
|
||||
return (1);
|
||||
} else
|
||||
#endif
|
||||
if (waddnstr(win, str, len) == ERR)
|
||||
return (1);
|
||||
|
||||
if (iv)
|
||||
(void)wstandend(win);
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* cl_waddstr --
|
||||
* Add len bytes from the string at the cursor, advancing the cursor.
|
||||
*
|
||||
* PUBLIC: int cl_waddstr __P((SCR *, const CHAR_T *, size_t));
|
||||
*/
|
||||
int
|
||||
cl_waddstr(SCR *sp, const CHAR_T *str, size_t len)
|
||||
{
|
||||
return addstr4(sp, (void *)str, len, 1);
|
||||
}
|
||||
|
||||
/*
|
||||
* cl_addstr --
|
||||
* Add len bytes from the string at the cursor, advancing the cursor.
|
||||
@ -38,35 +91,9 @@ static const char sccsid[] = "@(#)cl_funcs.c 10.50 (Berkeley) 9/24/96";
|
||||
* PUBLIC: int cl_addstr __P((SCR *, const char *, size_t));
|
||||
*/
|
||||
int
|
||||
cl_addstr(sp, str, len)
|
||||
SCR *sp;
|
||||
const char *str;
|
||||
size_t len;
|
||||
cl_addstr(SCR *sp, const char *str, size_t len)
|
||||
{
|
||||
CL_PRIVATE *clp;
|
||||
size_t oldy, oldx;
|
||||
int iv;
|
||||
|
||||
clp = CLP(sp);
|
||||
|
||||
/*
|
||||
* If ex isn't in control, it's the last line of the screen and
|
||||
* it's a split screen, use inverse video.
|
||||
*/
|
||||
iv = 0;
|
||||
getyx(stdscr, oldy, oldx);
|
||||
if (!F_ISSET(sp, SC_SCR_EXWROTE) &&
|
||||
oldy == RLNO(sp, LASTLINE(sp)) && IS_SPLIT(sp)) {
|
||||
iv = 1;
|
||||
(void)standout();
|
||||
}
|
||||
|
||||
if (addnstr(str, len) == ERR)
|
||||
return (1);
|
||||
|
||||
if (iv)
|
||||
(void)standend();
|
||||
return (0);
|
||||
return addstr4(sp, (void *)str, len, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -76,14 +103,13 @@ cl_addstr(sp, str, len)
|
||||
* PUBLIC: int cl_attr __P((SCR *, scr_attr_t, int));
|
||||
*/
|
||||
int
|
||||
cl_attr(sp, attribute, on)
|
||||
SCR *sp;
|
||||
scr_attr_t attribute;
|
||||
int on;
|
||||
cl_attr(SCR *sp, scr_attr_t attribute, int on)
|
||||
{
|
||||
CL_PRIVATE *clp;
|
||||
WINDOW *win;
|
||||
|
||||
clp = CLP(sp);
|
||||
win = CLSP(sp) ? CLSP(sp) : stdscr;
|
||||
|
||||
switch (attribute) {
|
||||
case SA_ALTERNATE:
|
||||
@ -146,9 +172,9 @@ cl_attr(sp, attribute, on)
|
||||
(void)fflush(stdout);
|
||||
} else {
|
||||
if (on)
|
||||
(void)standout();
|
||||
(void)wstandout(win);
|
||||
else
|
||||
(void)standend();
|
||||
(void)wstandend(win);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@ -164,9 +190,7 @@ cl_attr(sp, attribute, on)
|
||||
* PUBLIC: int cl_baud __P((SCR *, u_long *));
|
||||
*/
|
||||
int
|
||||
cl_baud(sp, ratep)
|
||||
SCR *sp;
|
||||
u_long *ratep;
|
||||
cl_baud(SCR *sp, u_long *ratep)
|
||||
{
|
||||
CL_PRIVATE *clp;
|
||||
|
||||
@ -207,10 +231,9 @@ cl_baud(sp, ratep)
|
||||
* PUBLIC: int cl_bell __P((SCR *));
|
||||
*/
|
||||
int
|
||||
cl_bell(sp)
|
||||
SCR *sp;
|
||||
cl_bell(SCR *sp)
|
||||
{
|
||||
if (F_ISSET(sp, SC_EX | SC_SCR_EXWROTE))
|
||||
if (F_ISSET(sp, SC_EX | SC_SCR_EXWROTE | SC_SCR_EX))
|
||||
(void)write(STDOUT_FILENO, "\07", 1); /* \a */
|
||||
else {
|
||||
/*
|
||||
@ -232,10 +255,26 @@ cl_bell(sp)
|
||||
* PUBLIC: int cl_clrtoeol __P((SCR *));
|
||||
*/
|
||||
int
|
||||
cl_clrtoeol(sp)
|
||||
SCR *sp;
|
||||
cl_clrtoeol(SCR *sp)
|
||||
{
|
||||
return (clrtoeol() == ERR);
|
||||
WINDOW *win;
|
||||
#if 0
|
||||
size_t spcnt, y, x;
|
||||
#endif
|
||||
|
||||
win = CLSP(sp) ? CLSP(sp) : stdscr;
|
||||
|
||||
#if 0
|
||||
if (IS_VSPLIT(sp)) {
|
||||
/* The cursor must be returned to its original position. */
|
||||
getyx(win, y, x);
|
||||
for (spcnt = (sp->coff + sp->cols) - x; spcnt > 0; --spcnt)
|
||||
(void)waddch(win, ' ');
|
||||
(void)wmove(win, y, x);
|
||||
return (0);
|
||||
} else
|
||||
#endif
|
||||
return (wclrtoeol(win) == ERR);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -245,10 +284,10 @@ cl_clrtoeol(sp)
|
||||
* PUBLIC: int cl_cursor __P((SCR *, size_t *, size_t *));
|
||||
*/
|
||||
int
|
||||
cl_cursor(sp, yp, xp)
|
||||
SCR *sp;
|
||||
size_t *yp, *xp;
|
||||
cl_cursor(SCR *sp, size_t *yp, size_t *xp)
|
||||
{
|
||||
WINDOW *win;
|
||||
win = CLSP(sp) ? CLSP(sp) : stdscr;
|
||||
/*
|
||||
* The curses screen support splits a single underlying curses screen
|
||||
* into multiple screens to support split screen semantics. For this
|
||||
@ -256,8 +295,11 @@ cl_cursor(sp, yp, xp)
|
||||
* current screen, and not absolute. Screens that implement the split
|
||||
* using physically distinct screens won't need this hack.
|
||||
*/
|
||||
getyx(stdscr, *yp, *xp);
|
||||
*yp -= sp->woff;
|
||||
getyx(win, *yp, *xp);
|
||||
/*
|
||||
*yp -= sp->roff;
|
||||
*xp -= sp->coff;
|
||||
*/
|
||||
return (0);
|
||||
}
|
||||
|
||||
@ -268,14 +310,14 @@ cl_cursor(sp, yp, xp)
|
||||
* PUBLIC: int cl_deleteln __P((SCR *));
|
||||
*/
|
||||
int
|
||||
cl_deleteln(sp)
|
||||
SCR *sp;
|
||||
cl_deleteln(SCR *sp)
|
||||
{
|
||||
CHAR_T ch;
|
||||
CL_PRIVATE *clp;
|
||||
size_t col, lno, spcnt, oldy, oldx;
|
||||
WINDOW *win;
|
||||
size_t y, x;
|
||||
|
||||
clp = CLP(sp);
|
||||
win = CLSP(sp) ? CLSP(sp) : stdscr;
|
||||
|
||||
/*
|
||||
* This clause is required because the curses screen uses reverse
|
||||
@ -284,45 +326,58 @@ cl_deleteln(sp)
|
||||
*
|
||||
* If the bottom line was in reverse video, rewrite it in normal
|
||||
* video before it's scrolled.
|
||||
*
|
||||
* Check for the existence of a chgat function; XSI requires it, but
|
||||
* historic implementations of System V curses don't. If it's not
|
||||
* a #define, we'll fall back to doing it by hand, which is slow but
|
||||
* acceptable.
|
||||
*
|
||||
* By hand means walking through the line, retrieving and rewriting
|
||||
* each character. Curses has no EOL marker, so track strings of
|
||||
* spaces, and copy the trailing spaces only if there's a non-space
|
||||
* character following.
|
||||
*/
|
||||
if (!F_ISSET(sp, SC_SCR_EXWROTE) && IS_SPLIT(sp)) {
|
||||
getyx(stdscr, oldy, oldx);
|
||||
#ifdef mvchgat
|
||||
mvchgat(RLNO(sp, LASTLINE(sp)), 0, -1, A_NORMAL, 0, NULL);
|
||||
#else
|
||||
for (lno = RLNO(sp, LASTLINE(sp)), col = spcnt = 0;;) {
|
||||
(void)move(lno, col);
|
||||
ch = winch(stdscr);
|
||||
if (isblank(ch))
|
||||
++spcnt;
|
||||
else {
|
||||
(void)move(lno, col - spcnt);
|
||||
for (; spcnt > 0; --spcnt)
|
||||
(void)addch(' ');
|
||||
(void)addch(ch);
|
||||
}
|
||||
if (++col >= sp->cols)
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
(void)move(oldy, oldx);
|
||||
getyx(win, y, x);
|
||||
mvwchgat(win, RLNO(sp, LASTLINE(sp)), 0, -1, A_NORMAL, 0, NULL);
|
||||
(void)wmove(win, y, x);
|
||||
}
|
||||
|
||||
/*
|
||||
* The bottom line is expected to be blank after this operation,
|
||||
* and other screens must support that semantic.
|
||||
*/
|
||||
return (deleteln() == ERR);
|
||||
return (wdeleteln(win) == ERR);
|
||||
}
|
||||
|
||||
/*
|
||||
* cl_discard --
|
||||
* Discard a screen.
|
||||
*
|
||||
* PUBLIC: int cl_discard __P((SCR *, SCR **));
|
||||
*/
|
||||
int
|
||||
cl_discard(SCR *discardp, SCR **acquirep)
|
||||
{
|
||||
CL_PRIVATE *clp;
|
||||
SCR* tsp;
|
||||
|
||||
if (discardp) {
|
||||
clp = CLP(discardp);
|
||||
F_SET(clp, CL_LAYOUT);
|
||||
|
||||
if (CLSP(discardp)) {
|
||||
delwin(CLSP(discardp));
|
||||
discardp->cl_private = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/* no screens got a piece; we're done */
|
||||
if (!acquirep)
|
||||
return 0;
|
||||
|
||||
for (; (tsp = *acquirep) != NULL; ++acquirep) {
|
||||
clp = CLP(tsp);
|
||||
F_SET(clp, CL_LAYOUT);
|
||||
|
||||
if (CLSP(tsp))
|
||||
delwin(CLSP(tsp));
|
||||
tsp->cl_private = subwin(stdscr, tsp->rows, tsp->cols,
|
||||
tsp->roff, tsp->coff);
|
||||
}
|
||||
|
||||
/* discardp is going away, acquirep is taking up its space. */
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -333,9 +388,7 @@ cl_deleteln(sp)
|
||||
* PUBLIC: int cl_ex_adjust __P((SCR *, exadj_t));
|
||||
*/
|
||||
int
|
||||
cl_ex_adjust(sp, action)
|
||||
SCR *sp;
|
||||
exadj_t action;
|
||||
cl_ex_adjust(SCR *sp, exadj_t action)
|
||||
{
|
||||
CL_PRIVATE *clp;
|
||||
int cnt;
|
||||
@ -390,14 +443,15 @@ cl_ex_adjust(sp, action)
|
||||
* PUBLIC: int cl_insertln __P((SCR *));
|
||||
*/
|
||||
int
|
||||
cl_insertln(sp)
|
||||
SCR *sp;
|
||||
cl_insertln(SCR *sp)
|
||||
{
|
||||
WINDOW *win;
|
||||
win = CLSP(sp) ? CLSP(sp) : stdscr;
|
||||
/*
|
||||
* The current line is expected to be blank after this operation,
|
||||
* and the screen must support that semantic.
|
||||
*/
|
||||
return (insertln() == ERR);
|
||||
return (winsertln(win) == ERR);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -407,11 +461,7 @@ cl_insertln(sp)
|
||||
* PUBLIC: int cl_keyval __P((SCR *, scr_keyval_t, CHAR_T *, int *));
|
||||
*/
|
||||
int
|
||||
cl_keyval(sp, val, chp, dnep)
|
||||
SCR *sp;
|
||||
scr_keyval_t val;
|
||||
CHAR_T *chp;
|
||||
int *dnep;
|
||||
cl_keyval(SCR *sp, scr_keyval_t val, CHAR_T *chp, int *dnep)
|
||||
{
|
||||
CL_PRIVATE *clp;
|
||||
|
||||
@ -449,14 +499,14 @@ cl_keyval(sp, val, chp, dnep)
|
||||
* PUBLIC: int cl_move __P((SCR *, size_t, size_t));
|
||||
*/
|
||||
int
|
||||
cl_move(sp, lno, cno)
|
||||
SCR *sp;
|
||||
size_t lno, cno;
|
||||
cl_move(SCR *sp, size_t lno, size_t cno)
|
||||
{
|
||||
WINDOW *win;
|
||||
win = CLSP(sp) ? CLSP(sp) : stdscr;
|
||||
/* See the comment in cl_cursor. */
|
||||
if (move(RLNO(sp, lno), cno) == ERR) {
|
||||
msgq(sp, M_ERR,
|
||||
"Error: move: l(%u) c(%u) o(%u)", lno, cno, sp->woff);
|
||||
if (wmove(win, RLNO(sp, lno), RCNO(sp, cno)) == ERR) {
|
||||
msgq(sp, M_ERR, "Error: move: l(%zu + %zu) c(%zu + %zu)",
|
||||
lno, sp->roff, cno, sp->coff);
|
||||
return (1);
|
||||
}
|
||||
return (0);
|
||||
@ -469,13 +519,17 @@ cl_move(sp, lno, cno)
|
||||
* PUBLIC: int cl_refresh __P((SCR *, int));
|
||||
*/
|
||||
int
|
||||
cl_refresh(sp, repaint)
|
||||
SCR *sp;
|
||||
int repaint;
|
||||
cl_refresh(SCR *sp, int repaint)
|
||||
{
|
||||
GS *gp;
|
||||
CL_PRIVATE *clp;
|
||||
WINDOW *win;
|
||||
SCR *psp, *tsp;
|
||||
size_t y, x;
|
||||
|
||||
gp = sp->gp;
|
||||
clp = CLP(sp);
|
||||
win = CLSP(sp) ? CLSP(sp) : stdscr;
|
||||
|
||||
/*
|
||||
* If we received a killer signal, we're done, there's no point
|
||||
@ -488,13 +542,57 @@ cl_refresh(sp, repaint)
|
||||
* If repaint is set, the editor is telling us that we don't know
|
||||
* what's on the screen, so we have to repaint from scratch.
|
||||
*
|
||||
* If repaint set or the screen layout changed, we need to redraw
|
||||
* any lines separating vertically split screens. If the horizontal
|
||||
* offsets are the same, then the split was vertical, and need to
|
||||
* draw a dividing line.
|
||||
*/
|
||||
if (repaint || F_ISSET(clp, CL_LAYOUT)) {
|
||||
getyx(stdscr, y, x);
|
||||
for (psp = sp; psp != NULL; psp = TAILQ_NEXT(psp, q))
|
||||
for (tsp = TAILQ_NEXT(psp, q); tsp != NULL;
|
||||
tsp = TAILQ_NEXT(tsp, q))
|
||||
if (psp->roff == tsp->roff) {
|
||||
if (psp->coff + psp->cols + 1 == tsp->coff)
|
||||
cl_rdiv(psp);
|
||||
else
|
||||
if (tsp->coff + tsp->cols + 1 == psp->coff)
|
||||
cl_rdiv(tsp);
|
||||
}
|
||||
(void)wmove(stdscr, y, x);
|
||||
F_CLR(clp, CL_LAYOUT);
|
||||
}
|
||||
|
||||
/*
|
||||
* In the curses library, doing wrefresh(curscr) is okay, but the
|
||||
* screen flashes when we then apply the refresh() to bring it up
|
||||
* to date. So, use clearok().
|
||||
*/
|
||||
if (repaint)
|
||||
clearok(curscr, 1);
|
||||
return (refresh() == ERR);
|
||||
/*
|
||||
* Only do an actual refresh, when this is the focus window,
|
||||
* i.e. the one holding the cursor. This assumes that refresh
|
||||
* is called for that window after refreshing the others.
|
||||
* This prevents the cursor being drawn in the other windows.
|
||||
*/
|
||||
return (wnoutrefresh(stdscr) == ERR ||
|
||||
wnoutrefresh(win) == ERR ||
|
||||
(sp == clp->focus && doupdate() == ERR));
|
||||
}
|
||||
|
||||
/*
|
||||
* cl_rdiv --
|
||||
* Draw a dividing line between two vertically split screens.
|
||||
*/
|
||||
static void
|
||||
cl_rdiv(SCR *sp)
|
||||
{
|
||||
#ifdef __NetBSD__
|
||||
mvvline(sp->roff, sp->cols + sp->coff, '|', sp->rows);
|
||||
#else
|
||||
mvvline(sp->roff, sp->cols + sp->coff, ACS_VLINE, sp->rows);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
@ -504,40 +602,97 @@ cl_refresh(sp, repaint)
|
||||
* PUBLIC: int cl_rename __P((SCR *, char *, int));
|
||||
*/
|
||||
int
|
||||
cl_rename(sp, name, on)
|
||||
SCR *sp;
|
||||
char *name;
|
||||
int on;
|
||||
cl_rename(SCR *sp, char *name, int on)
|
||||
{
|
||||
GS *gp;
|
||||
CL_PRIVATE *clp;
|
||||
char *ttype;
|
||||
FILE *pfp;
|
||||
char buf[256], *s, *e;
|
||||
char * wid;
|
||||
char cmd[64];
|
||||
|
||||
gp = sp->gp;
|
||||
clp = CLP(sp);
|
||||
|
||||
ttype = OG_STR(gp, GO_TERM);
|
||||
|
||||
/*
|
||||
* XXX
|
||||
* We can only rename windows for xterm.
|
||||
*/
|
||||
if (on) {
|
||||
if (F_ISSET(clp, CL_RENAME_OK) &&
|
||||
!strncmp(ttype, "xterm", sizeof("xterm") - 1)) {
|
||||
F_SET(clp, CL_RENAME);
|
||||
(void)printf(XTERM_RENAME, name);
|
||||
(void)fflush(stdout);
|
||||
clp->focus = sp;
|
||||
if (!F_ISSET(clp, CL_RENAME_OK) ||
|
||||
strncmp(OG_STR(gp, GO_TERM), "xterm", 5))
|
||||
return (0);
|
||||
|
||||
if (clp->oname == NULL && (wid = getenv("WINDOWID"))) {
|
||||
snprintf(cmd, sizeof(cmd), "xprop -id %s WM_NAME", wid);
|
||||
if ((pfp = popen(cmd, "r")) == NULL)
|
||||
goto rename;
|
||||
if (fgets(buf, sizeof(buf), pfp) == NULL) {
|
||||
pclose(pfp);
|
||||
goto rename;
|
||||
}
|
||||
pclose(pfp);
|
||||
if ((s = strchr(buf, '"')) != NULL &&
|
||||
(e = strrchr(buf, '"')) != NULL)
|
||||
clp->oname = strndup(s + 1, e - s - 1);
|
||||
}
|
||||
|
||||
rename: cl_setname(gp, name);
|
||||
|
||||
F_SET(clp, CL_RENAME);
|
||||
} else
|
||||
if (F_ISSET(clp, CL_RENAME)) {
|
||||
cl_setname(gp, clp->oname);
|
||||
|
||||
F_CLR(clp, CL_RENAME);
|
||||
(void)printf(XTERM_RENAME, ttype);
|
||||
(void)fflush(stdout);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* cl_setname --
|
||||
* Set a X11 icon/window name.
|
||||
*
|
||||
* PUBLIC: void cl_setname __P((GS *, char *));
|
||||
*/
|
||||
void
|
||||
cl_setname(GS *gp, char *name)
|
||||
{
|
||||
/* X11 xterm escape sequence to rename the icon/window. */
|
||||
#define XTERM_RENAME "\033]0;%s\007"
|
||||
|
||||
(void)printf(XTERM_RENAME, name == NULL ? OG_STR(gp, GO_TERM) : name);
|
||||
(void)fflush(stdout);
|
||||
#undef XTERM_RENAME
|
||||
}
|
||||
|
||||
/*
|
||||
* cl_split --
|
||||
* Split a screen.
|
||||
*
|
||||
* PUBLIC: int cl_split __P((SCR *, SCR *));
|
||||
*/
|
||||
int
|
||||
cl_split(SCR *origp, SCR *newp)
|
||||
{
|
||||
CL_PRIVATE *clp;
|
||||
|
||||
clp = CLP(origp);
|
||||
F_SET(clp, CL_LAYOUT);
|
||||
|
||||
if (CLSP(origp))
|
||||
delwin(CLSP(origp));
|
||||
|
||||
origp->cl_private = subwin(stdscr, origp->rows, origp->cols,
|
||||
origp->roff, origp->coff);
|
||||
newp->cl_private = subwin(stdscr, newp->rows, newp->cols,
|
||||
newp->roff, newp->coff);
|
||||
|
||||
/* origp is the original screen, giving up space to newp. */
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* cl_suspend --
|
||||
* Suspend a screen.
|
||||
@ -545,18 +700,18 @@ cl_rename(sp, name, on)
|
||||
* PUBLIC: int cl_suspend __P((SCR *, int *));
|
||||
*/
|
||||
int
|
||||
cl_suspend(sp, allowedp)
|
||||
SCR *sp;
|
||||
int *allowedp;
|
||||
cl_suspend(SCR *sp, int *allowedp)
|
||||
{
|
||||
struct termios t;
|
||||
CL_PRIVATE *clp;
|
||||
WINDOW *win;
|
||||
GS *gp;
|
||||
size_t oldy, oldx;
|
||||
size_t y, x;
|
||||
int changed;
|
||||
|
||||
gp = sp->gp;
|
||||
clp = CLP(sp);
|
||||
win = CLSP(sp) ? CLSP(sp) : stdscr;
|
||||
*allowedp = 1;
|
||||
|
||||
/*
|
||||
@ -596,9 +751,9 @@ cl_suspend(sp, allowedp)
|
||||
* Not sure this is necessary in System V implementations, but it
|
||||
* shouldn't hurt.
|
||||
*/
|
||||
getyx(stdscr, oldy, oldx);
|
||||
(void)move(LINES - 1, 0);
|
||||
(void)refresh();
|
||||
getyx(win, y, x);
|
||||
(void)wmove(win, LINES - 1, 0);
|
||||
(void)wrefresh(win);
|
||||
|
||||
/*
|
||||
* Temporarily end the screen. System V introduced a semantic where
|
||||
@ -607,10 +762,8 @@ cl_suspend(sp, allowedp)
|
||||
* restarting after endwin(), so we have to do what clean up we can
|
||||
* without calling it.
|
||||
*/
|
||||
#ifdef HAVE_BSD_CURSES
|
||||
/* Save the terminal settings. */
|
||||
(void)tcgetattr(STDIN_FILENO, &t);
|
||||
#endif
|
||||
|
||||
/* Restore the cursor keys to normal mode. */
|
||||
(void)keypad(stdscr, FALSE);
|
||||
@ -618,11 +771,8 @@ cl_suspend(sp, allowedp)
|
||||
/* Restore the window name. */
|
||||
(void)cl_rename(sp, NULL, 0);
|
||||
|
||||
#ifdef HAVE_BSD_CURSES
|
||||
(void)cl_attr(sp, SA_ALTERNATE, 0);
|
||||
#else
|
||||
(void)endwin();
|
||||
#endif
|
||||
|
||||
/*
|
||||
* XXX
|
||||
* Restore the original terminal settings. This is bad -- the
|
||||
@ -647,14 +797,11 @@ cl_suspend(sp, allowedp)
|
||||
return (0);
|
||||
}
|
||||
|
||||
#ifdef HAVE_BSD_CURSES
|
||||
/* Restore terminal settings. */
|
||||
wrefresh(win); /* Needed on SunOs/Solaris ? */
|
||||
if (F_ISSET(clp, CL_STDIN_TTY))
|
||||
(void)tcsetattr(STDIN_FILENO, TCSASOFT | TCSADRAIN, &t);
|
||||
|
||||
(void)cl_attr(sp, SA_ALTERNATE, 1);
|
||||
#endif
|
||||
|
||||
/* Set the window name. */
|
||||
(void)cl_rename(sp, sp->frp->name, 1);
|
||||
|
||||
@ -662,7 +809,7 @@ cl_suspend(sp, allowedp)
|
||||
(void)keypad(stdscr, TRUE);
|
||||
|
||||
/* Refresh and repaint the screen. */
|
||||
(void)move(oldy, oldx);
|
||||
(void)wmove(win, y, x);
|
||||
(void)cl_refresh(sp, 1);
|
||||
|
||||
/* If the screen changed size, set the SIGWINCH bit. */
|
||||
@ -681,7 +828,7 @@ cl_suspend(sp, allowedp)
|
||||
* PUBLIC: void cl_usage __P((void));
|
||||
*/
|
||||
void
|
||||
cl_usage()
|
||||
cl_usage(void)
|
||||
{
|
||||
#define USAGE "\
|
||||
usage: ex [-eFRrSsv] [-c command] [-t tag] [-w size] [file ...]\n\
|
||||
@ -695,8 +842,9 @@ usage: vi [-eFlRrSv] [-c command] [-t tag] [-w size] [file ...]\n"
|
||||
* gdbrefresh --
|
||||
* Stub routine so can flush out curses screen changes using gdb.
|
||||
*/
|
||||
int
|
||||
gdbrefresh()
|
||||
static int
|
||||
__attribute__((unused))
|
||||
gdbrefresh(void)
|
||||
{
|
||||
refresh();
|
||||
return (0); /* XXX Convince gdb to run it. */
|
||||
|
@ -10,27 +10,26 @@
|
||||
#include "config.h"
|
||||
|
||||
#ifndef lint
|
||||
static const char sccsid[] = "@(#)cl_main.c 10.36 (Berkeley) 10/14/96";
|
||||
static const char sccsid[] = "$Id: cl_main.c,v 10.55 2011/08/15 19:52:28 zy Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/queue.h>
|
||||
|
||||
#include <bitstring.h>
|
||||
#include <curses.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#ifdef HAVE_TERM_H
|
||||
#include <term.h>
|
||||
#endif
|
||||
#include <termios.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "../common/common.h"
|
||||
#ifdef RUNNING_IP
|
||||
#include "../ip/ip.h"
|
||||
#endif
|
||||
#include "cl.h"
|
||||
#include "pathnames.h"
|
||||
|
||||
@ -50,16 +49,14 @@ static void term_init __P((char *, char *));
|
||||
* This is the main loop for the standalone curses editor.
|
||||
*/
|
||||
int
|
||||
main(argc, argv)
|
||||
int argc;
|
||||
char *argv[];
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
static int reenter;
|
||||
CL_PRIVATE *clp;
|
||||
GS *gp;
|
||||
size_t rows, cols;
|
||||
int rval;
|
||||
char *ip_arg, **p_av, **t_av, *ttype;
|
||||
char **p_av, **t_av, *ttype;
|
||||
|
||||
/* If loaded at 0 and jumping through a NULL pointer, stop. */
|
||||
if (reenter++)
|
||||
@ -73,8 +70,6 @@ main(argc, argv)
|
||||
* no way to portably call getopt twice, so arguments parsed here must
|
||||
* be removed from the argument list.
|
||||
*/
|
||||
#ifdef RUNNING_IP
|
||||
ip_arg = NULL;
|
||||
for (p_av = t_av = argv;;) {
|
||||
if (*t_av == NULL) {
|
||||
*p_av = NULL;
|
||||
@ -84,33 +79,9 @@ main(argc, argv)
|
||||
while ((*p_av++ = *t_av++) != NULL);
|
||||
break;
|
||||
}
|
||||
if (!memcmp(*t_av, "-I", sizeof("-I") - 1)) {
|
||||
if (t_av[0][2] != '\0') {
|
||||
ip_arg = t_av[0] + 2;
|
||||
++t_av;
|
||||
--argc;
|
||||
continue;
|
||||
}
|
||||
if (t_av[1] != NULL) {
|
||||
ip_arg = t_av[1];
|
||||
t_av += 2;
|
||||
argc -= 2;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
*p_av++ = *t_av++;
|
||||
}
|
||||
|
||||
/*
|
||||
* If we're being called as an editor library, we're done here, we
|
||||
* get loaded with the curses screen, we don't share much code.
|
||||
*/
|
||||
if (ip_arg != NULL)
|
||||
exit (ip_main(argc, argv, gp, ip_arg));
|
||||
#else
|
||||
ip_arg = argv[0];
|
||||
#endif
|
||||
|
||||
/* Create and initialize the CL_PRIVATE structure. */
|
||||
clp = cl_init(gp);
|
||||
|
||||
@ -164,10 +135,8 @@ main(argc, argv)
|
||||
* XXX
|
||||
* Reset the X11 xterm icon/window name.
|
||||
*/
|
||||
if (F_ISSET(clp, CL_RENAME)) {
|
||||
(void)printf(XTERM_RENAME, ttype);
|
||||
(void)fflush(stdout);
|
||||
}
|
||||
if (F_ISSET(clp, CL_RENAME))
|
||||
cl_setname(gp, clp->oname);
|
||||
|
||||
/* If a killer signal arrived, pretend we just got it. */
|
||||
if (clp->killersig) {
|
||||
@ -178,7 +147,10 @@ main(argc, argv)
|
||||
|
||||
/* Free the global and CL private areas. */
|
||||
#if defined(DEBUG) || defined(PURIFY) || defined(LIBRARY)
|
||||
if (clp->oname != NULL)
|
||||
free(clp->oname);
|
||||
free(clp);
|
||||
free(OG_STR(gp, GO_TERM));
|
||||
free(gp);
|
||||
#endif
|
||||
|
||||
@ -190,10 +162,8 @@ main(argc, argv)
|
||||
* Create and partially initialize the GS structure.
|
||||
*/
|
||||
static GS *
|
||||
gs_init(name)
|
||||
char *name;
|
||||
gs_init(char *name)
|
||||
{
|
||||
CL_PRIVATE *clp;
|
||||
GS *gp;
|
||||
char *p;
|
||||
|
||||
@ -206,7 +176,6 @@ gs_init(name)
|
||||
if (gp == NULL)
|
||||
perr(name, NULL);
|
||||
|
||||
|
||||
gp->progname = name;
|
||||
return (gp);
|
||||
}
|
||||
@ -216,8 +185,7 @@ gs_init(name)
|
||||
* Create and partially initialize the CL structure.
|
||||
*/
|
||||
static CL_PRIVATE *
|
||||
cl_init(gp)
|
||||
GS *gp;
|
||||
cl_init(GS *gp)
|
||||
{
|
||||
CL_PRIVATE *clp;
|
||||
int fd;
|
||||
@ -265,8 +233,7 @@ tcfail: perr(gp->progname, "tcgetattr");
|
||||
* Initialize terminal information.
|
||||
*/
|
||||
static void
|
||||
term_init(name, ttype)
|
||||
char *name, *ttype;
|
||||
term_init(char *name, char *ttype)
|
||||
{
|
||||
int err;
|
||||
|
||||
@ -287,8 +254,7 @@ term_init(name, ttype)
|
||||
#define GLOBAL_CLP \
|
||||
CL_PRIVATE *clp = GCLP(__global_list);
|
||||
static void
|
||||
h_hup(signo)
|
||||
int signo;
|
||||
h_hup(int signo)
|
||||
{
|
||||
GLOBAL_CLP;
|
||||
|
||||
@ -297,8 +263,7 @@ h_hup(signo)
|
||||
}
|
||||
|
||||
static void
|
||||
h_int(signo)
|
||||
int signo;
|
||||
h_int(int signo)
|
||||
{
|
||||
GLOBAL_CLP;
|
||||
|
||||
@ -306,8 +271,7 @@ h_int(signo)
|
||||
}
|
||||
|
||||
static void
|
||||
h_term(signo)
|
||||
int signo;
|
||||
h_term(int signo)
|
||||
{
|
||||
GLOBAL_CLP;
|
||||
|
||||
@ -316,8 +280,7 @@ h_term(signo)
|
||||
}
|
||||
|
||||
static void
|
||||
h_winch(signo)
|
||||
int signo;
|
||||
h_winch(int signo)
|
||||
{
|
||||
GLOBAL_CLP;
|
||||
|
||||
@ -332,9 +295,7 @@ h_winch(signo)
|
||||
* PUBLIC: int sig_init __P((GS *, SCR *));
|
||||
*/
|
||||
int
|
||||
sig_init(gp, sp)
|
||||
GS *gp;
|
||||
SCR *sp;
|
||||
sig_init(GS *gp, SCR *sp)
|
||||
{
|
||||
CL_PRIVATE *clp;
|
||||
|
||||
@ -376,10 +337,7 @@ sig_init(gp, sp)
|
||||
* Set a signal handler.
|
||||
*/
|
||||
static int
|
||||
setsig(signo, oactp, handler)
|
||||
int signo;
|
||||
struct sigaction *oactp;
|
||||
void (*handler) __P((int));
|
||||
setsig(int signo, struct sigaction *oactp, void (*handler) (int))
|
||||
{
|
||||
struct sigaction act;
|
||||
|
||||
@ -410,8 +368,7 @@ setsig(signo, oactp, handler)
|
||||
* End signal setup.
|
||||
*/
|
||||
static void
|
||||
sig_end(gp)
|
||||
GS *gp;
|
||||
sig_end(GS *gp)
|
||||
{
|
||||
CL_PRIVATE *clp;
|
||||
|
||||
@ -429,17 +386,20 @@ sig_end(gp)
|
||||
* Initialize the standard curses functions.
|
||||
*/
|
||||
static void
|
||||
cl_func_std(gp)
|
||||
GS *gp;
|
||||
cl_func_std(GS *gp)
|
||||
{
|
||||
gp->scr_addstr = cl_addstr;
|
||||
gp->scr_waddstr = cl_waddstr;
|
||||
gp->scr_attr = cl_attr;
|
||||
gp->scr_baud = cl_baud;
|
||||
gp->scr_bell = cl_bell;
|
||||
gp->scr_busy = NULL;
|
||||
gp->scr_child = NULL;
|
||||
gp->scr_clrtoeol = cl_clrtoeol;
|
||||
gp->scr_cursor = cl_cursor;
|
||||
gp->scr_deleteln = cl_deleteln;
|
||||
gp->scr_reply = NULL;
|
||||
gp->scr_discard = cl_discard;
|
||||
gp->scr_event = cl_event;
|
||||
gp->scr_ex_adjust = cl_ex_adjust;
|
||||
gp->scr_fmap = cl_fmap;
|
||||
@ -451,6 +411,7 @@ cl_func_std(gp)
|
||||
gp->scr_refresh = cl_refresh;
|
||||
gp->scr_rename = cl_rename;
|
||||
gp->scr_screen = cl_screen;
|
||||
gp->scr_split = cl_split;
|
||||
gp->scr_suspend = cl_suspend;
|
||||
gp->scr_usage = cl_usage;
|
||||
}
|
||||
@ -460,8 +421,7 @@ cl_func_std(gp)
|
||||
* Print system error.
|
||||
*/
|
||||
static void
|
||||
perr(name, msg)
|
||||
char *name, *msg;
|
||||
perr(char *name, char *msg)
|
||||
{
|
||||
(void)fprintf(stderr, "%s:", name);
|
||||
if (msg != NULL)
|
||||
|
@ -10,18 +10,14 @@
|
||||
#include "config.h"
|
||||
|
||||
#ifndef lint
|
||||
static const char sccsid[] = "@(#)cl_read.c 10.15 (Berkeley) 9/24/96";
|
||||
static const char sccsid[] = "$Id: cl_read.c,v 10.30 2012/07/12 18:28:58 zy Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/queue.h>
|
||||
#ifdef HAVE_SYS_SELECT_H
|
||||
#include <sys/select.h>
|
||||
#endif
|
||||
#include <sys/time.h>
|
||||
|
||||
#include <bitstring.h>
|
||||
#include <curses.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <signal.h>
|
||||
@ -35,8 +31,12 @@ static const char sccsid[] = "@(#)cl_read.c 10.15 (Berkeley) 9/24/96";
|
||||
#include "../ex/script.h"
|
||||
#include "cl.h"
|
||||
|
||||
/* Pollution by Solaris curses. */
|
||||
#undef columns
|
||||
#undef lines
|
||||
|
||||
static input_t cl_read __P((SCR *,
|
||||
u_int32_t, CHAR_T *, size_t, int *, struct timeval *));
|
||||
u_int32_t, char *, size_t, int *, struct timeval *));
|
||||
static int cl_resize __P((SCR *, size_t, size_t));
|
||||
|
||||
/*
|
||||
@ -46,16 +46,15 @@ static int cl_resize __P((SCR *, size_t, size_t));
|
||||
* PUBLIC: int cl_event __P((SCR *, EVENT *, u_int32_t, int));
|
||||
*/
|
||||
int
|
||||
cl_event(sp, evp, flags, ms)
|
||||
SCR *sp;
|
||||
EVENT *evp;
|
||||
u_int32_t flags;
|
||||
int ms;
|
||||
cl_event(SCR *sp, EVENT *evp, u_int32_t flags, int ms)
|
||||
{
|
||||
struct timeval t, *tp;
|
||||
CL_PRIVATE *clp;
|
||||
size_t lines, columns;
|
||||
int changed, nr;
|
||||
int changed, nr = 0;
|
||||
CHAR_T *wp;
|
||||
size_t wlen;
|
||||
int rc;
|
||||
|
||||
/*
|
||||
* Queue signal based events. We never clear SIGHUP or SIGTERM events,
|
||||
@ -102,12 +101,25 @@ retest: if (LF_ISSET(EC_INTERRUPT) || F_ISSET(clp, CL_SIGINT)) {
|
||||
}
|
||||
|
||||
/* Read input characters. */
|
||||
read:
|
||||
switch (cl_read(sp, LF_ISSET(EC_QUOTED | EC_RAW),
|
||||
clp->ibuf, sizeof(clp->ibuf), &nr, tp)) {
|
||||
clp->ibuf + clp->skip, SIZE(clp->ibuf) - clp->skip, &nr, tp)) {
|
||||
case INP_OK:
|
||||
evp->e_csp = clp->ibuf;
|
||||
evp->e_len = nr;
|
||||
rc = INPUT2INT5(sp, clp->cw, clp->ibuf, nr + clp->skip,
|
||||
wp, wlen);
|
||||
evp->e_csp = wp;
|
||||
evp->e_len = wlen;
|
||||
evp->e_event = E_STRING;
|
||||
if (rc < 0) {
|
||||
int n = -rc;
|
||||
memmove(clp->ibuf, clp->ibuf + nr + clp->skip - n, n);
|
||||
clp->skip = n;
|
||||
if (wlen == 0)
|
||||
goto read;
|
||||
} else if (rc == 0)
|
||||
clp->skip = 0;
|
||||
else
|
||||
msgq(sp, M_ERR, "323|Invalid input. Truncated.");
|
||||
break;
|
||||
case INP_EOF:
|
||||
evp->e_event = E_EOF;
|
||||
@ -131,19 +143,11 @@ retest: if (LF_ISSET(EC_INTERRUPT) || F_ISSET(clp, CL_SIGINT)) {
|
||||
* Read characters from the input.
|
||||
*/
|
||||
static input_t
|
||||
cl_read(sp, flags, bp, blen, nrp, tp)
|
||||
SCR *sp;
|
||||
u_int32_t flags;
|
||||
CHAR_T *bp;
|
||||
size_t blen;
|
||||
int *nrp;
|
||||
struct timeval *tp;
|
||||
cl_read(SCR *sp, u_int32_t flags, char *bp, size_t blen, int *nrp, struct timeval *tp)
|
||||
{
|
||||
struct termios term1, term2;
|
||||
struct timeval poll;
|
||||
CL_PRIVATE *clp;
|
||||
GS *gp;
|
||||
SCR *tsp;
|
||||
fd_set rdfd;
|
||||
input_t rval;
|
||||
int maxfd, nr, term_reset;
|
||||
@ -175,13 +179,10 @@ cl_read(sp, flags, bp, blen, nrp, tp)
|
||||
* 2: A read with an associated timeout, e.g., trying to complete
|
||||
* a map sequence. If input exists, we fall into #3.
|
||||
*/
|
||||
FD_ZERO(&rdfd);
|
||||
poll.tv_sec = 0;
|
||||
poll.tv_usec = 0;
|
||||
if (tp != NULL) {
|
||||
FD_ZERO(&rdfd);
|
||||
FD_SET(STDIN_FILENO, &rdfd);
|
||||
switch (select(STDIN_FILENO + 1,
|
||||
&rdfd, NULL, NULL, tp == NULL ? &poll : tp)) {
|
||||
switch (select(STDIN_FILENO + 1, &rdfd, NULL, NULL, tp)) {
|
||||
case 0:
|
||||
return (INP_TIMEOUT);
|
||||
case -1:
|
||||
@ -225,13 +226,11 @@ cl_read(sp, flags, bp, blen, nrp, tp)
|
||||
loop: FD_ZERO(&rdfd);
|
||||
FD_SET(STDIN_FILENO, &rdfd);
|
||||
maxfd = STDIN_FILENO;
|
||||
for (tsp = gp->dq.cqh_first;
|
||||
tsp != (void *)&gp->dq; tsp = tsp->q.cqe_next)
|
||||
if (F_ISSET(sp, SC_SCRIPT)) {
|
||||
FD_SET(sp->script->sh_master, &rdfd);
|
||||
if (sp->script->sh_master > maxfd)
|
||||
maxfd = sp->script->sh_master;
|
||||
}
|
||||
if (F_ISSET(sp, SC_SCRIPT)) {
|
||||
FD_SET(sp->script->sh_master, &rdfd);
|
||||
if (sp->script->sh_master > maxfd)
|
||||
maxfd = sp->script->sh_master;
|
||||
}
|
||||
switch (select(maxfd + 1, &rdfd, NULL, NULL, NULL)) {
|
||||
case 0:
|
||||
abort();
|
||||
@ -309,12 +308,10 @@ err: if (errno == EINTR)
|
||||
* Reset the options for a resize event.
|
||||
*/
|
||||
static int
|
||||
cl_resize(sp, lines, columns)
|
||||
SCR *sp;
|
||||
size_t lines, columns;
|
||||
cl_resize(SCR *sp, size_t lines, size_t columns)
|
||||
{
|
||||
ARGS *argv[2], a, b;
|
||||
char b1[1024];
|
||||
CHAR_T b1[1024];
|
||||
|
||||
a.bp = b1;
|
||||
b.bp = NULL;
|
||||
@ -322,12 +319,10 @@ cl_resize(sp, lines, columns)
|
||||
argv[0] = &a;
|
||||
argv[1] = &b;
|
||||
|
||||
(void)snprintf(b1, sizeof(b1), "lines=%lu", (u_long)lines);
|
||||
a.len = strlen(b1);
|
||||
a.len = SPRINTF(b1, sizeof(b1), L("lines=%lu"), (u_long)lines);
|
||||
if (opts_set(sp, argv, NULL))
|
||||
return (1);
|
||||
(void)snprintf(b1, sizeof(b1), "columns=%lu", (u_long)columns);
|
||||
a.len = strlen(b1);
|
||||
a.len = SPRINTF(b1, sizeof(b1), L("columns=%lu"), (u_long)columns);
|
||||
if (opts_set(sp, argv, NULL))
|
||||
return (1);
|
||||
return (0);
|
||||
|
@ -5,27 +5,27 @@
|
||||
* Keith Bostic. All rights reserved.
|
||||
*
|
||||
* See the LICENSE file for redistribution information.
|
||||
*
|
||||
* $FreeBSD$
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#ifndef lint
|
||||
static const char sccsid[] = "@(#)cl_screen.c 10.49 (Berkeley) 9/24/96";
|
||||
static const char sccsid[] = "$Id: cl_screen.c,v 10.56 2002/05/03 19:59:44 skimo Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/queue.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#include <bitstring.h>
|
||||
#include <curses.h>
|
||||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#ifdef HAVE_TERM_H
|
||||
#include <term.h>
|
||||
#endif
|
||||
#include <termios.h>
|
||||
#include <unistd.h>
|
||||
|
||||
@ -46,26 +46,30 @@ static int cl_putenv __P((char *, char *, u_long));
|
||||
* PUBLIC: int cl_screen __P((SCR *, u_int32_t));
|
||||
*/
|
||||
int
|
||||
cl_screen(sp, flags)
|
||||
SCR *sp;
|
||||
u_int32_t flags;
|
||||
cl_screen(SCR *sp, u_int32_t flags)
|
||||
{
|
||||
CL_PRIVATE *clp;
|
||||
WINDOW *win;
|
||||
GS *gp;
|
||||
|
||||
gp = sp->gp;
|
||||
clp = CLP(sp);
|
||||
win = CLSP(sp) ? CLSP(sp) : stdscr;
|
||||
|
||||
/* See if the current information is incorrect. */
|
||||
if (F_ISSET(gp, G_SRESTART)) {
|
||||
if (CLSP(sp)) {
|
||||
delwin(CLSP(sp));
|
||||
sp->cl_private = NULL;
|
||||
}
|
||||
if (cl_quit(gp))
|
||||
return (1);
|
||||
F_CLR(gp, G_SRESTART);
|
||||
}
|
||||
|
||||
/* See if we're already in the right mode. */
|
||||
if (LF_ISSET(SC_EX) && F_ISSET(sp, SC_SCR_EX) ||
|
||||
LF_ISSET(SC_VI) && F_ISSET(sp, SC_SCR_VI))
|
||||
if ((LF_ISSET(SC_EX) && F_ISSET(sp, SC_SCR_EX)) ||
|
||||
(LF_ISSET(SC_VI) && F_ISSET(sp, SC_SCR_VI)))
|
||||
return (0);
|
||||
|
||||
/*
|
||||
@ -93,12 +97,12 @@ cl_screen(sp, flags)
|
||||
if (F_ISSET(sp, SC_SCR_VI)) {
|
||||
F_CLR(sp, SC_SCR_VI);
|
||||
|
||||
if (sp->q.cqe_next != (void *)&gp->dq) {
|
||||
(void)move(RLNO(sp, sp->rows), 0);
|
||||
clrtobot();
|
||||
if (TAILQ_NEXT(sp, q) != NULL) {
|
||||
(void)wmove(win, RLNO(sp, sp->rows), 0);
|
||||
wclrtobot(win);
|
||||
}
|
||||
(void)move(RLNO(sp, sp->rows) - 1, 0);
|
||||
refresh();
|
||||
(void)wmove(win, RLNO(sp, sp->rows) - 1, 0);
|
||||
wrefresh(win);
|
||||
}
|
||||
|
||||
/* Enter the requested mode. */
|
||||
@ -130,8 +134,7 @@ cl_screen(sp, flags)
|
||||
* PUBLIC: int cl_quit __P((GS *));
|
||||
*/
|
||||
int
|
||||
cl_quit(gp)
|
||||
GS *gp;
|
||||
cl_quit(GS *gp)
|
||||
{
|
||||
CL_PRIVATE *clp;
|
||||
int rval;
|
||||
@ -181,8 +184,7 @@ cl_quit(gp)
|
||||
* Initialize the curses vi screen.
|
||||
*/
|
||||
static int
|
||||
cl_vi_init(sp)
|
||||
SCR *sp;
|
||||
cl_vi_init(SCR *sp)
|
||||
{
|
||||
CL_PRIVATE *clp;
|
||||
GS *gp;
|
||||
@ -245,6 +247,7 @@ cl_vi_init(sp)
|
||||
* The HP/UX newterm doesn't support the NULL first argument, so we
|
||||
* have to specify the terminal type.
|
||||
*/
|
||||
(void)del_curterm(cur_term);
|
||||
errno = 0;
|
||||
if (newterm(ttype, stdout, stdin) == NULL) {
|
||||
if (errno)
|
||||
@ -385,8 +388,7 @@ err: (void)cl_vi_end(sp->gp);
|
||||
* Shutdown the vi screen.
|
||||
*/
|
||||
static int
|
||||
cl_vi_end(gp)
|
||||
GS *gp;
|
||||
cl_vi_end(GS *gp)
|
||||
{
|
||||
CL_PRIVATE *clp;
|
||||
|
||||
@ -429,8 +431,7 @@ cl_vi_end(gp)
|
||||
* Initialize the ex screen.
|
||||
*/
|
||||
static int
|
||||
cl_ex_init(sp)
|
||||
SCR *sp;
|
||||
cl_ex_init(SCR *sp)
|
||||
{
|
||||
CL_PRIVATE *clp;
|
||||
|
||||
@ -504,8 +505,7 @@ fast: if (tcsetattr(STDIN_FILENO, TCSADRAIN | TCSASOFT, &clp->ex_enter)) {
|
||||
* Shutdown the ex screen.
|
||||
*/
|
||||
static int
|
||||
cl_ex_end(gp)
|
||||
GS *gp;
|
||||
cl_ex_end(GS *gp)
|
||||
{
|
||||
CL_PRIVATE *clp;
|
||||
|
||||
@ -523,9 +523,7 @@ cl_ex_end(gp)
|
||||
* PUBLIC: int cl_getcap __P((SCR *, char *, char **));
|
||||
*/
|
||||
int
|
||||
cl_getcap(sp, name, elementp)
|
||||
SCR *sp;
|
||||
char *name, **elementp;
|
||||
cl_getcap(SCR *sp, char *name, char **elementp)
|
||||
{
|
||||
size_t len;
|
||||
char *t;
|
||||
@ -543,8 +541,7 @@ cl_getcap(sp, name, elementp)
|
||||
* Free any allocated termcap/terminfo strings.
|
||||
*/
|
||||
static void
|
||||
cl_freecap(clp)
|
||||
CL_PRIVATE *clp;
|
||||
cl_freecap(CL_PRIVATE *clp)
|
||||
{
|
||||
if (clp->el != NULL) {
|
||||
free(clp->el);
|
||||
@ -566,6 +563,12 @@ cl_freecap(clp)
|
||||
free(clp->smso);
|
||||
clp->smso = NULL;
|
||||
}
|
||||
/* Required by libcursesw :) */
|
||||
if (clp->cw.bp1.c != NULL) {
|
||||
free(clp->cw.bp1.c);
|
||||
clp->cw.bp1.c = NULL;
|
||||
clp->cw.blen1 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@ -573,10 +576,7 @@ cl_freecap(clp)
|
||||
* Put a value into the environment.
|
||||
*/
|
||||
static int
|
||||
cl_putenv(name, str, value)
|
||||
char *name, *str;
|
||||
u_long value;
|
||||
|
||||
cl_putenv(char *name, char *str, u_long value)
|
||||
{
|
||||
char buf[40];
|
||||
|
||||
|
@ -10,7 +10,7 @@
|
||||
#include "config.h"
|
||||
|
||||
#ifndef lint
|
||||
static const char sccsid[] = "@(#)cl_term.c 10.22 (Berkeley) 9/15/96";
|
||||
static const char sccsid[] = "$Id: cl_term.c,v 10.33 2012/04/21 23:51:46 zy Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
@ -19,13 +19,15 @@ static const char sccsid[] = "@(#)cl_term.c 10.22 (Berkeley) 9/15/96";
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include <bitstring.h>
|
||||
#include <curses.h>
|
||||
#include <errno.h>
|
||||
#include <limits.h>
|
||||
#include <signal.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#ifdef HAVE_TERM_H
|
||||
#include <term.h>
|
||||
#endif
|
||||
#include <termios.h>
|
||||
#include <unistd.h>
|
||||
|
||||
@ -82,20 +84,30 @@ static TKLIST const m2_tklist[] = { /* Input mappings (set or delete). */
|
||||
* PUBLIC: int cl_term_init __P((SCR *));
|
||||
*/
|
||||
int
|
||||
cl_term_init(sp)
|
||||
SCR *sp;
|
||||
cl_term_init(SCR *sp)
|
||||
{
|
||||
KEYLIST *kp;
|
||||
SEQ *qp;
|
||||
TKLIST const *tkp;
|
||||
char *t;
|
||||
CHAR_T name[60];
|
||||
CHAR_T output[5];
|
||||
CHAR_T ts[20];
|
||||
CHAR_T *wp;
|
||||
size_t wlen;
|
||||
|
||||
/* Command mappings. */
|
||||
for (tkp = c_tklist; tkp->name != NULL; ++tkp) {
|
||||
if ((t = tigetstr(tkp->ts)) == NULL || t == (char *)-1)
|
||||
continue;
|
||||
if (seq_set(sp, tkp->name, strlen(tkp->name), t, strlen(t),
|
||||
tkp->output, strlen(tkp->output), SEQ_COMMAND,
|
||||
CHAR2INT(sp, tkp->name, strlen(tkp->name), wp, wlen);
|
||||
MEMCPY(name, wp, wlen);
|
||||
CHAR2INT(sp, t, strlen(t), wp, wlen);
|
||||
MEMCPY(ts, wp, wlen);
|
||||
CHAR2INT(sp, tkp->output, strlen(tkp->output), wp, wlen);
|
||||
MEMCPY(output, wp, wlen);
|
||||
if (seq_set(sp, name, strlen(tkp->name), ts, strlen(t),
|
||||
output, strlen(tkp->output), SEQ_COMMAND,
|
||||
SEQ_NOOVERWRITE | SEQ_SCREEN))
|
||||
return (1);
|
||||
}
|
||||
@ -109,8 +121,13 @@ cl_term_init(sp)
|
||||
break;
|
||||
if (kp == NULL)
|
||||
continue;
|
||||
if (seq_set(sp, tkp->name, strlen(tkp->name), t, strlen(t),
|
||||
&kp->ch, 1, SEQ_INPUT, SEQ_NOOVERWRITE | SEQ_SCREEN))
|
||||
CHAR2INT(sp, tkp->name, strlen(tkp->name), wp, wlen);
|
||||
MEMCPY(name, wp, wlen);
|
||||
CHAR2INT(sp, t, strlen(t), wp, wlen);
|
||||
MEMCPY(ts, wp, wlen);
|
||||
output[0] = (UCHAR_T)kp->ch;
|
||||
if (seq_set(sp, name, strlen(tkp->name), ts, strlen(t),
|
||||
output, 1, SEQ_INPUT, SEQ_NOOVERWRITE | SEQ_SCREEN))
|
||||
return (1);
|
||||
}
|
||||
|
||||
@ -128,22 +145,33 @@ cl_term_init(sp)
|
||||
if (!strcmp(t, "\b"))
|
||||
continue;
|
||||
if (tkp->output == NULL) {
|
||||
if (seq_set(sp, tkp->name, strlen(tkp->name),
|
||||
t, strlen(t), NULL, 0,
|
||||
CHAR2INT(sp, tkp->name, strlen(tkp->name), wp, wlen);
|
||||
MEMCPY(name, wp, wlen);
|
||||
CHAR2INT(sp, t, strlen(t), wp, wlen);
|
||||
MEMCPY(ts, wp, wlen);
|
||||
if (seq_set(sp, name, strlen(tkp->name),
|
||||
ts, strlen(t), NULL, 0,
|
||||
SEQ_INPUT, SEQ_NOOVERWRITE | SEQ_SCREEN))
|
||||
return (1);
|
||||
} else
|
||||
if (seq_set(sp, tkp->name, strlen(tkp->name),
|
||||
t, strlen(t), tkp->output, strlen(tkp->output),
|
||||
} else {
|
||||
CHAR2INT(sp, tkp->name, strlen(tkp->name), wp, wlen);
|
||||
MEMCPY(name, wp, wlen);
|
||||
CHAR2INT(sp, t, strlen(t), wp, wlen);
|
||||
MEMCPY(ts, wp, wlen);
|
||||
CHAR2INT(sp, tkp->output, strlen(tkp->output), wp, wlen);
|
||||
MEMCPY(output, wp, wlen);
|
||||
if (seq_set(sp, name, strlen(tkp->name),
|
||||
ts, strlen(t), output, strlen(tkp->output),
|
||||
SEQ_INPUT, SEQ_NOOVERWRITE | SEQ_SCREEN))
|
||||
return (1);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Rework any function key mappings that were set before the
|
||||
* screen was initialized.
|
||||
*/
|
||||
for (qp = sp->gp->seqq.lh_first; qp != NULL; qp = qp->q.le_next)
|
||||
SLIST_FOREACH(qp, sp->gp->seqq, q)
|
||||
if (F_ISSET(qp, SEQ_FUNCMAP))
|
||||
(void)cl_pfmap(sp, qp->stype,
|
||||
qp->input, qp->ilen, qp->output, qp->olen);
|
||||
@ -157,17 +185,16 @@ cl_term_init(sp)
|
||||
* PUBLIC: int cl_term_end __P((GS *));
|
||||
*/
|
||||
int
|
||||
cl_term_end(gp)
|
||||
GS *gp;
|
||||
cl_term_end(GS *gp)
|
||||
{
|
||||
SEQ *qp, *nqp;
|
||||
|
||||
/* Delete screen specific mappings. */
|
||||
for (qp = gp->seqq.lh_first; qp != NULL; qp = nqp) {
|
||||
nqp = qp->q.le_next;
|
||||
if (F_ISSET(qp, SEQ_SCREEN))
|
||||
(void)seq_mdel(qp);
|
||||
}
|
||||
SLIST_FOREACH_SAFE(qp, gp->seqq, q, nqp)
|
||||
if (F_ISSET(qp, SEQ_SCREEN)) {
|
||||
SLIST_REMOVE_HEAD(gp->seqq, q);
|
||||
(void)seq_free(qp);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
@ -178,11 +205,7 @@ cl_term_end(gp)
|
||||
* PUBLIC: int cl_fmap __P((SCR *, seq_t, CHAR_T *, size_t, CHAR_T *, size_t));
|
||||
*/
|
||||
int
|
||||
cl_fmap(sp, stype, from, flen, to, tlen)
|
||||
SCR *sp;
|
||||
seq_t stype;
|
||||
CHAR_T *from, *to;
|
||||
size_t flen, tlen;
|
||||
cl_fmap(SCR *sp, seq_t stype, CHAR_T *from, size_t flen, CHAR_T *to, size_t tlen)
|
||||
{
|
||||
/* Ignore until the screen is running, do the real work then. */
|
||||
if (F_ISSET(sp, SC_VI) && !F_ISSET(sp, SC_SCR_VI))
|
||||
@ -198,28 +221,33 @@ cl_fmap(sp, stype, from, flen, to, tlen)
|
||||
* Map a function key (private version).
|
||||
*/
|
||||
static int
|
||||
cl_pfmap(sp, stype, from, flen, to, tlen)
|
||||
SCR *sp;
|
||||
seq_t stype;
|
||||
CHAR_T *from, *to;
|
||||
size_t flen, tlen;
|
||||
cl_pfmap(SCR *sp, seq_t stype, CHAR_T *from, size_t flen, CHAR_T *to, size_t tlen)
|
||||
{
|
||||
size_t nlen;
|
||||
char *p, keyname[64];
|
||||
char *p;
|
||||
char name[64];
|
||||
CHAR_T keyname[64];
|
||||
CHAR_T ts[20];
|
||||
CHAR_T *wp;
|
||||
size_t wlen;
|
||||
|
||||
(void)snprintf(keyname, sizeof(keyname), "kf%d", atoi(from + 1));
|
||||
if ((p = tigetstr(keyname)) == NULL ||
|
||||
(void)snprintf(name, sizeof(name), "kf%d",
|
||||
(int)STRTOL(from+1,NULL,10));
|
||||
if ((p = tigetstr(name)) == NULL ||
|
||||
p == (char *)-1 || strlen(p) == 0)
|
||||
p = NULL;
|
||||
if (p == NULL) {
|
||||
msgq_str(sp, M_ERR, from, "233|This terminal has no %s key");
|
||||
msgq_wstr(sp, M_ERR, from, "233|This terminal has no %s key");
|
||||
return (1);
|
||||
}
|
||||
|
||||
nlen = snprintf(keyname,
|
||||
sizeof(keyname), "function key %d", atoi(from + 1));
|
||||
nlen = SPRINTF(keyname,
|
||||
SIZE(keyname), L("function key %d"),
|
||||
(int)STRTOL(from+1,NULL,10));
|
||||
CHAR2INT(sp, p, strlen(p), wp, wlen);
|
||||
MEMCPY(ts, wp, wlen);
|
||||
return (seq_set(sp, keyname, nlen,
|
||||
p, strlen(p), to, tlen, stype, SEQ_NOOVERWRITE | SEQ_SCREEN));
|
||||
ts, strlen(p), to, tlen, stype, SEQ_NOOVERWRITE | SEQ_SCREEN));
|
||||
}
|
||||
|
||||
/*
|
||||
@ -229,11 +257,7 @@ cl_pfmap(sp, stype, from, flen, to, tlen)
|
||||
* PUBLIC: int cl_optchange __P((SCR *, int, char *, u_long *));
|
||||
*/
|
||||
int
|
||||
cl_optchange(sp, opt, str, valp)
|
||||
SCR *sp;
|
||||
int opt;
|
||||
char *str;
|
||||
u_long *valp;
|
||||
cl_optchange(SCR *sp, int opt, char *str, u_long *valp)
|
||||
{
|
||||
CL_PRIVATE *clp;
|
||||
|
||||
@ -251,14 +275,10 @@ cl_optchange(sp, opt, str, valp)
|
||||
F_CLR(sp, SC_SCR_EX | SC_SCR_VI);
|
||||
break;
|
||||
case O_MESG:
|
||||
(void)cl_omesg(sp, clp, !*valp);
|
||||
(void)cl_omesg(sp, clp, *valp);
|
||||
break;
|
||||
case O_WINDOWNAME:
|
||||
if (*valp) {
|
||||
F_CLR(clp, CL_RENAME_OK);
|
||||
|
||||
(void)cl_rename(sp, NULL, 0);
|
||||
} else {
|
||||
F_SET(clp, CL_RENAME_OK);
|
||||
|
||||
/*
|
||||
@ -267,6 +287,10 @@ cl_optchange(sp, opt, str, valp)
|
||||
*/
|
||||
if (sp->frp != NULL && sp->frp->name != NULL)
|
||||
(void)cl_rename(sp, sp->frp->name, 1);
|
||||
} else {
|
||||
F_CLR(clp, CL_RENAME_OK);
|
||||
|
||||
(void)cl_rename(sp, NULL, 0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -280,10 +304,7 @@ cl_optchange(sp, opt, str, valp)
|
||||
* PUBLIC: int cl_omesg __P((SCR *, CL_PRIVATE *, int));
|
||||
*/
|
||||
int
|
||||
cl_omesg(sp, clp, on)
|
||||
SCR *sp;
|
||||
CL_PRIVATE *clp;
|
||||
int on;
|
||||
cl_omesg(SCR *sp, CL_PRIVATE *clp, int on)
|
||||
{
|
||||
struct stat sb;
|
||||
char *tty;
|
||||
@ -329,15 +350,9 @@ cl_omesg(sp, clp, on)
|
||||
* PUBLIC: int cl_ssize __P((SCR *, int, size_t *, size_t *, int *));
|
||||
*/
|
||||
int
|
||||
cl_ssize(sp, sigwinch, rowp, colp, changedp)
|
||||
SCR *sp;
|
||||
int sigwinch;
|
||||
size_t *rowp, *colp;
|
||||
int *changedp;
|
||||
cl_ssize(SCR *sp, int sigwinch, size_t *rowp, size_t *colp, int *changedp)
|
||||
{
|
||||
#ifdef TIOCGWINSZ
|
||||
struct winsize win;
|
||||
#endif
|
||||
size_t col, row;
|
||||
int rval;
|
||||
char *p;
|
||||
@ -358,12 +373,10 @@ cl_ssize(sp, sigwinch, rowp, colp, changedp)
|
||||
* Try TIOCGWINSZ.
|
||||
*/
|
||||
row = col = 0;
|
||||
#ifdef TIOCGWINSZ
|
||||
if (ioctl(STDERR_FILENO, TIOCGWINSZ, &win) != -1) {
|
||||
row = win.ws_row;
|
||||
col = win.ws_col;
|
||||
}
|
||||
#endif
|
||||
/* If here because of suspend or a signal, only trust TIOCGWINSZ. */
|
||||
if (sigwinch) {
|
||||
/*
|
||||
@ -453,8 +466,7 @@ noterm: if (row == 0)
|
||||
* PUBLIC: int cl_putchar __P((int));
|
||||
*/
|
||||
int
|
||||
cl_putchar(ch)
|
||||
int ch;
|
||||
cl_putchar(int ch)
|
||||
{
|
||||
return (putchar(ch));
|
||||
}
|
||||
|
@ -1,32 +1,4 @@
|
||||
#ifndef HAVE_CURSES_ADDNSTR
|
||||
int addnstr __P((char *, int));
|
||||
#endif
|
||||
#ifndef HAVE_CURSES_BEEP
|
||||
void beep __P((void));
|
||||
#endif
|
||||
#ifndef HAVE_CURSES_FLASH
|
||||
void flash __P((void));
|
||||
#endif
|
||||
#ifndef HAVE_CURSES_IDLOK
|
||||
void idlok __P((WINDOW *, int));
|
||||
#endif
|
||||
#ifndef HAVE_CURSES_KEYPAD
|
||||
int keypad __P((void *, int));
|
||||
#endif
|
||||
#ifndef HAVE_CURSES_NEWTERM
|
||||
void *newterm __P((const char *, FILE *, FILE *));
|
||||
#endif
|
||||
#ifndef HAVE_CURSES_SETUPTERM
|
||||
void setupterm __P((char *, int, int *));
|
||||
#endif
|
||||
#ifdef HAVE_CURSES_TIGETSTR
|
||||
char *tigetstr();
|
||||
#else
|
||||
char *tigetstr __P((char *));
|
||||
#endif
|
||||
#ifndef HAVE_CURSES_TIGETSTR
|
||||
int tigetnum __P((char *));
|
||||
#endif
|
||||
int cl_waddstr __P((SCR *, const CHAR_T *, size_t));
|
||||
int cl_addstr __P((SCR *, const char *, size_t));
|
||||
int cl_attr __P((SCR *, scr_attr_t, int));
|
||||
int cl_baud __P((SCR *, u_long *));
|
||||
@ -34,12 +6,15 @@ int cl_bell __P((SCR *));
|
||||
int cl_clrtoeol __P((SCR *));
|
||||
int cl_cursor __P((SCR *, size_t *, size_t *));
|
||||
int cl_deleteln __P((SCR *));
|
||||
int cl_discard __P((SCR *, SCR **));
|
||||
int cl_ex_adjust __P((SCR *, exadj_t));
|
||||
int cl_insertln __P((SCR *));
|
||||
int cl_keyval __P((SCR *, scr_keyval_t, CHAR_T *, int *));
|
||||
int cl_move __P((SCR *, size_t, size_t));
|
||||
int cl_refresh __P((SCR *, int));
|
||||
int cl_rename __P((SCR *, char *, int));
|
||||
void cl_setname __P((GS *, char *));
|
||||
int cl_split __P((SCR *, SCR *));
|
||||
int cl_suspend __P((SCR *, int *));
|
||||
void cl_usage __P((void));
|
||||
int sig_init __P((GS *, SCR *));
|
@ -1,160 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1987, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static const char sccsid[] = "@(#)getenv.c 8.1 (Berkeley) 6/4/93";
|
||||
static const char sccsid[] = "@(#)setenv.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
/*
|
||||
* __findenv --
|
||||
* Returns pointer to value associated with name, if any, else NULL.
|
||||
* Sets offset to be the offset of the name/value combination in the
|
||||
* environmental array, for use by setenv(3) and unsetenv(3).
|
||||
* Explicitly removes '=' in argument name.
|
||||
*
|
||||
* This routine *should* be a static; don't use it.
|
||||
*/
|
||||
static char *
|
||||
__findenv(name, offset)
|
||||
register char *name;
|
||||
int *offset;
|
||||
{
|
||||
extern char **environ;
|
||||
register int len;
|
||||
register char *np;
|
||||
register char **p, *c;
|
||||
|
||||
if (name == NULL || environ == NULL)
|
||||
return (NULL);
|
||||
for (np = name; *np && *np != '='; ++np)
|
||||
continue;
|
||||
len = np - name;
|
||||
for (p = environ; (c = *p) != NULL; ++p)
|
||||
if (strncmp(c, name, len) == 0 && c[len] == '=') {
|
||||
*offset = p - environ;
|
||||
return (c + len + 1);
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
#ifndef HAVE_SETENV
|
||||
/*
|
||||
* setenv --
|
||||
* Set the value of the environmental variable "name" to be
|
||||
* "value". If rewrite is set, replace any current value.
|
||||
*
|
||||
* PUBLIC: #ifndef HAVE_SETENV
|
||||
* PUBLIC: int setenv __P((const char *, const char *, int));
|
||||
* PUBLIC: #endif
|
||||
*/
|
||||
setenv(name, value, rewrite)
|
||||
register char *name;
|
||||
register char *value;
|
||||
int rewrite;
|
||||
{
|
||||
extern char **environ;
|
||||
static int alloced; /* if allocated space before */
|
||||
register char *c;
|
||||
int l_value, offset;
|
||||
|
||||
if (*value == '=') /* no `=' in value */
|
||||
++value;
|
||||
l_value = strlen(value);
|
||||
if ((c = __findenv(name, &offset))) { /* find if already exists */
|
||||
if (!rewrite)
|
||||
return (0);
|
||||
if (strlen(c) >= l_value) { /* old larger; copy over */
|
||||
while (*c++ = *value++);
|
||||
return (0);
|
||||
}
|
||||
} else { /* create new slot */
|
||||
register int cnt;
|
||||
register char **p;
|
||||
|
||||
for (p = environ, cnt = 0; *p; ++p, ++cnt);
|
||||
if (alloced) { /* just increase size */
|
||||
environ = (char **)realloc((char *)environ,
|
||||
(size_t)(sizeof(char *) * (cnt + 2)));
|
||||
if (!environ)
|
||||
return (-1);
|
||||
}
|
||||
else { /* get new space */
|
||||
alloced = 1; /* copy old entries into it */
|
||||
p = malloc((size_t)(sizeof(char *) * (cnt + 2)));
|
||||
if (!p)
|
||||
return (-1);
|
||||
memmove(p, environ, cnt * sizeof(char *));
|
||||
environ = p;
|
||||
}
|
||||
environ[cnt + 1] = NULL;
|
||||
offset = cnt;
|
||||
}
|
||||
for (c = (char *)name; *c && *c != '='; ++c); /* no `=' in name */
|
||||
if (!(environ[offset] = /* name + `=' + value */
|
||||
malloc((size_t)((int)(c - name) + l_value + 2))))
|
||||
return (-1);
|
||||
for (c = environ[offset]; (*c = *name++) && *c != '='; ++c);
|
||||
for (*c++ = '='; *c++ = *value++;);
|
||||
return (0);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_UNSETENV
|
||||
/*
|
||||
* unsetenv(name) --
|
||||
* Delete environmental variable "name".
|
||||
*
|
||||
* PUBLIC: #ifndef HAVE_UNSETENV
|
||||
* PUBLIC: void unsetenv __P((const char *));
|
||||
* PUBLIC: #endif
|
||||
*/
|
||||
void
|
||||
unsetenv(name)
|
||||
char *name;
|
||||
{
|
||||
extern char **environ;
|
||||
register char **p;
|
||||
int offset;
|
||||
|
||||
while (__findenv(name, &offset)) /* if set multiple times */
|
||||
for (p = &environ[offset];; ++p)
|
||||
if (!(*p = *(p + 1)))
|
||||
break;
|
||||
}
|
||||
#endif
|
@ -1,22 +0,0 @@
|
||||
#include "config.h"
|
||||
|
||||
/*
|
||||
* Solaris doesn't include the gethostname call by default.
|
||||
*/
|
||||
#include <sys/utsname.h>
|
||||
#include <sys/systeminfo.h>
|
||||
|
||||
#include <netdb.h>
|
||||
|
||||
/*
|
||||
* PUBLIC: #ifndef HAVE_GETHOSTNAME
|
||||
* PUBLIC: int gethostname __P((char *, int));
|
||||
* PUBLIC: #endif
|
||||
*/
|
||||
int
|
||||
gethostname(host, len)
|
||||
char *host;
|
||||
int len;
|
||||
{
|
||||
return (sysinfo(SI_HOSTNAME, host, len) == -1 ? -1 : 0);
|
||||
}
|
@ -1,130 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1987, 1993, 1994
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static const char sccsid[] = "@(#)getopt.c 8.2 (Berkeley) 4/2/94";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
int opterr = 1, /* if error message should be printed */
|
||||
optind = 1, /* index into parent argv vector */
|
||||
optopt, /* character checked for validity */
|
||||
optreset; /* reset getopt */
|
||||
char *optarg; /* argument associated with option */
|
||||
|
||||
#define BADCH (int)'?'
|
||||
#define BADARG (int)':'
|
||||
#define EMSG ""
|
||||
|
||||
/*
|
||||
* getopt --
|
||||
* Parse argc/argv argument vector.
|
||||
*
|
||||
* PUBLIC: #ifndef HAVE_GETOPT
|
||||
* PUBLIC: int getopt __P((int, char * const *, const char *));
|
||||
* PUBLIC: #endif
|
||||
*/
|
||||
int
|
||||
getopt(nargc, nargv, ostr)
|
||||
int nargc;
|
||||
char * const *nargv;
|
||||
const char *ostr;
|
||||
{
|
||||
static char *progname;
|
||||
static char *place = EMSG; /* option letter processing */
|
||||
char *oli; /* option letter list index */
|
||||
|
||||
if (!progname) {
|
||||
if ((progname = strrchr(*nargv, '/')) == NULL)
|
||||
progname = *nargv;
|
||||
else
|
||||
++progname;
|
||||
}
|
||||
|
||||
if (optreset || !*place) { /* update scanning pointer */
|
||||
optreset = 0;
|
||||
if (optind >= nargc || *(place = nargv[optind]) != '-') {
|
||||
place = EMSG;
|
||||
return (EOF);
|
||||
}
|
||||
if (place[1] && *++place == '-') { /* found "--" */
|
||||
++optind;
|
||||
place = EMSG;
|
||||
return (EOF);
|
||||
}
|
||||
} /* option letter okay? */
|
||||
if ((optopt = (int)*place++) == (int)':' ||
|
||||
!(oli = strchr(ostr, optopt))) {
|
||||
/*
|
||||
* if the user didn't specify '-' as an option,
|
||||
* assume it means EOF.
|
||||
*/
|
||||
if (optopt == (int)'-')
|
||||
return (EOF);
|
||||
if (!*place)
|
||||
++optind;
|
||||
if (opterr && *ostr != ':')
|
||||
(void)fprintf(stderr,
|
||||
"%s: illegal option -- %c\n", progname, optopt);
|
||||
return (BADCH);
|
||||
}
|
||||
if (*++oli != ':') { /* don't need argument */
|
||||
optarg = NULL;
|
||||
if (!*place)
|
||||
++optind;
|
||||
}
|
||||
else { /* need an argument */
|
||||
if (*place) /* no white space */
|
||||
optarg = place;
|
||||
else if (nargc <= ++optind) { /* no arg */
|
||||
place = EMSG;
|
||||
if (*ostr == ':')
|
||||
return (BADARG);
|
||||
if (opterr)
|
||||
(void)fprintf(stderr,
|
||||
"%s: option requires an argument -- %c\n",
|
||||
progname, optopt);
|
||||
return (BADCH);
|
||||
}
|
||||
else /* white space */
|
||||
optarg = nargv[optind];
|
||||
place = EMSG;
|
||||
++optind;
|
||||
}
|
||||
return (optopt); /* dump back option letter */
|
||||
}
|
@ -1,147 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* Chris Torek.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static const char sccsid[] = "@(#)bcopy.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <string.h>
|
||||
|
||||
/*
|
||||
* sizeof(word) MUST BE A POWER OF TWO
|
||||
* SO THAT wmask BELOW IS ALL ONES
|
||||
*/
|
||||
typedef int word; /* "word" used for optimal copy speed */
|
||||
|
||||
#define wsize sizeof(word)
|
||||
#define wmask (wsize - 1)
|
||||
|
||||
/*
|
||||
* Copy a block of memory, handling overlap.
|
||||
* This is the routine that actually implements
|
||||
* (the portable versions of) bcopy, memcpy, and memmove.
|
||||
*
|
||||
* PUBLIC: #ifndef HAVE_MEMCPY
|
||||
* PUBLIC: void *memcpy __P((void *, const void *, size_t));
|
||||
* PUBLIC: #endif
|
||||
* PUBLIC: #ifndef HAVE_MEMMOVE
|
||||
* PUBLIC: void *memmove __P((void *, const void *, size_t));
|
||||
* PUBLIC: #endif
|
||||
*/
|
||||
#ifdef MEMCOPY
|
||||
void *
|
||||
memcpy(dst0, src0, length)
|
||||
#else
|
||||
#ifdef MEMMOVE
|
||||
void *
|
||||
memmove(dst0, src0, length)
|
||||
#else
|
||||
void
|
||||
bcopy(src0, dst0, length)
|
||||
#endif
|
||||
#endif
|
||||
void *dst0;
|
||||
const void *src0;
|
||||
register size_t length;
|
||||
{
|
||||
register char *dst = dst0;
|
||||
register const char *src = src0;
|
||||
register size_t t;
|
||||
|
||||
if (length == 0 || dst == src) /* nothing to do */
|
||||
goto done;
|
||||
|
||||
/*
|
||||
* Macros: loop-t-times; and loop-t-times, t>0
|
||||
*/
|
||||
#define TLOOP(s) if (t) TLOOP1(s)
|
||||
#define TLOOP1(s) do { s; } while (--t)
|
||||
|
||||
if ((unsigned long)dst < (unsigned long)src) {
|
||||
/*
|
||||
* Copy forward.
|
||||
*/
|
||||
t = (int)src; /* only need low bits */
|
||||
if ((t | (int)dst) & wmask) {
|
||||
/*
|
||||
* Try to align operands. This cannot be done
|
||||
* unless the low bits match.
|
||||
*/
|
||||
if ((t ^ (int)dst) & wmask || length < wsize)
|
||||
t = length;
|
||||
else
|
||||
t = wsize - (t & wmask);
|
||||
length -= t;
|
||||
TLOOP1(*dst++ = *src++);
|
||||
}
|
||||
/*
|
||||
* Copy whole words, then mop up any trailing bytes.
|
||||
*/
|
||||
t = length / wsize;
|
||||
TLOOP(*(word *)dst = *(word *)src; src += wsize; dst += wsize);
|
||||
t = length & wmask;
|
||||
TLOOP(*dst++ = *src++);
|
||||
} else {
|
||||
/*
|
||||
* Copy backwards. Otherwise essentially the same.
|
||||
* Alignment works as before, except that it takes
|
||||
* (t&wmask) bytes to align, not wsize-(t&wmask).
|
||||
*/
|
||||
src += length;
|
||||
dst += length;
|
||||
t = (int)src;
|
||||
if ((t | (int)dst) & wmask) {
|
||||
if ((t ^ (int)dst) & wmask || length <= wsize)
|
||||
t = length;
|
||||
else
|
||||
t &= wmask;
|
||||
length -= t;
|
||||
TLOOP1(*--dst = *--src);
|
||||
}
|
||||
t = length / wsize;
|
||||
TLOOP(src -= wsize; dst -= wsize; *(word *)dst = *(word *)src);
|
||||
t = length & wmask;
|
||||
TLOOP(*--dst = *--src);
|
||||
}
|
||||
done:
|
||||
#if defined(MEMCOPY) || defined(MEMMOVE)
|
||||
return (dst0);
|
||||
#else
|
||||
return;
|
||||
#endif
|
||||
}
|
@ -1,137 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* This code is derived from software contributed to Berkeley by
|
||||
* Mike Hibler and Chris Torek.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static const char sccsid[] = "@(#)memset.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <limits.h>
|
||||
#include <string.h>
|
||||
|
||||
/*
|
||||
* PUBLIC: #ifndef HAVE_MEMSET
|
||||
* PUBLIC: void *memset __P((void *, int, size_t));
|
||||
* PUBLIC: #endif
|
||||
*/
|
||||
#define wsize sizeof(u_int)
|
||||
#define wmask (wsize - 1)
|
||||
|
||||
#ifdef BZERO
|
||||
#define RETURN return
|
||||
#define VAL 0
|
||||
#define WIDEVAL 0
|
||||
|
||||
void
|
||||
bzero(dst0, length)
|
||||
void *dst0;
|
||||
register size_t length;
|
||||
#else
|
||||
#define RETURN return (dst0)
|
||||
#define VAL c0
|
||||
#define WIDEVAL c
|
||||
|
||||
void *
|
||||
memset(dst0, c0, length)
|
||||
void *dst0;
|
||||
register int c0;
|
||||
register size_t length;
|
||||
#endif
|
||||
{
|
||||
register size_t t;
|
||||
register u_int c;
|
||||
register u_char *dst;
|
||||
|
||||
dst = dst0;
|
||||
/*
|
||||
* If not enough words, just fill bytes. A length >= 2 words
|
||||
* guarantees that at least one of them is `complete' after
|
||||
* any necessary alignment. For instance:
|
||||
*
|
||||
* |-----------|-----------|-----------|
|
||||
* |00|01|02|03|04|05|06|07|08|09|0A|00|
|
||||
* ^---------------------^
|
||||
* dst dst+length-1
|
||||
*
|
||||
* but we use a minimum of 3 here since the overhead of the code
|
||||
* to do word writes is substantial.
|
||||
*/
|
||||
if (length < 3 * wsize) {
|
||||
while (length != 0) {
|
||||
*dst++ = VAL;
|
||||
--length;
|
||||
}
|
||||
RETURN;
|
||||
}
|
||||
|
||||
#ifndef BZERO
|
||||
if ((c = (u_char)c0) != 0) { /* Fill the word. */
|
||||
c = (c << 8) | c; /* u_int is 16 bits. */
|
||||
#if UINT_MAX > 0xffff
|
||||
c = (c << 16) | c; /* u_int is 32 bits. */
|
||||
#endif
|
||||
#if UINT_MAX > 0xffffffff
|
||||
c = (c << 32) | c; /* u_int is 64 bits. */
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
/* Align destination by filling in bytes. */
|
||||
if ((t = (int)dst & wmask) != 0) {
|
||||
t = wsize - t;
|
||||
length -= t;
|
||||
do {
|
||||
*dst++ = VAL;
|
||||
} while (--t != 0);
|
||||
}
|
||||
|
||||
/* Fill words. Length was >= 2*words so we know t >= 1 here. */
|
||||
t = length / wsize;
|
||||
do {
|
||||
*(u_int *)dst = WIDEVAL;
|
||||
dst += wsize;
|
||||
} while (--t != 0);
|
||||
|
||||
/* Mop up trailing bytes, if any. */
|
||||
t = length & wmask;
|
||||
if (t != 0)
|
||||
do {
|
||||
*dst++ = VAL;
|
||||
} while (--t != 0);
|
||||
RETURN;
|
||||
}
|
@ -1,133 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1987, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static const char sccsid[] = "@(#)mktemp.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
|
||||
static int _gettemp();
|
||||
|
||||
/*
|
||||
* PUBLIC: #ifndef HAVE_MKSTEMP
|
||||
* PUBLIC: int mkstemp __P((char *));
|
||||
* PUBLIC: #endif
|
||||
*/
|
||||
mkstemp(path)
|
||||
char *path;
|
||||
{
|
||||
int fd;
|
||||
|
||||
return (_gettemp(path, &fd) ? fd : -1);
|
||||
}
|
||||
|
||||
char *
|
||||
mktemp(path)
|
||||
char *path;
|
||||
{
|
||||
return(_gettemp(path, (int *)NULL) ? path : (char *)NULL);
|
||||
}
|
||||
|
||||
static
|
||||
_gettemp(path, doopen)
|
||||
char *path;
|
||||
register int *doopen;
|
||||
{
|
||||
extern int errno;
|
||||
register char *start, *trv;
|
||||
struct stat sbuf;
|
||||
u_int pid;
|
||||
|
||||
pid = getpid();
|
||||
for (trv = path; *trv; ++trv); /* extra X's get set to 0's */
|
||||
while (*--trv == 'X') {
|
||||
*trv = (pid % 10) + '0';
|
||||
pid /= 10;
|
||||
}
|
||||
|
||||
/*
|
||||
* check the target directory; if you have six X's and it
|
||||
* doesn't exist this runs for a *very* long time.
|
||||
*/
|
||||
for (start = trv + 1;; --trv) {
|
||||
if (trv <= path)
|
||||
break;
|
||||
if (*trv == '/') {
|
||||
*trv = '\0';
|
||||
if (stat(path, &sbuf))
|
||||
return(0);
|
||||
if (!S_ISDIR(sbuf.st_mode)) {
|
||||
errno = ENOTDIR;
|
||||
return(0);
|
||||
}
|
||||
*trv = '/';
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (;;) {
|
||||
if (doopen) {
|
||||
if ((*doopen =
|
||||
open(path, O_CREAT|O_EXCL|O_RDWR, 0600)) >= 0)
|
||||
return(1);
|
||||
if (errno != EEXIST)
|
||||
return(0);
|
||||
}
|
||||
else if (stat(path, &sbuf))
|
||||
return(errno == ENOENT ? 1 : 0);
|
||||
|
||||
/* tricky little algorithm for backward compatibility */
|
||||
for (trv = start;;) {
|
||||
if (!*trv)
|
||||
return(0);
|
||||
if (*trv == 'z')
|
||||
*trv++ = 'a';
|
||||
else {
|
||||
if (isdigit(*trv))
|
||||
*trv = 'a';
|
||||
else
|
||||
++*trv;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
/*NOTREACHED*/
|
||||
}
|
@ -1,50 +0,0 @@
|
||||
#include "config.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
||||
/*
|
||||
* This function fakes mmap() by reading `len' bytes from the file descriptor
|
||||
* `fd' and returning a pointer to that memory. The "mapped" region can later
|
||||
* be deallocated with munmap().
|
||||
*
|
||||
* Note: ONLY reading is supported and only reading of the exact size of the
|
||||
* file will work.
|
||||
*
|
||||
* PUBLIC: #ifndef HAVE_MMAP
|
||||
* PUBLIC: char *mmap __P((char *, size_t, int, int, int, off_t));
|
||||
* PUBLIC: #endif
|
||||
*/
|
||||
char *
|
||||
mmap(addr, len, prot, flags, fd, off)
|
||||
char *addr;
|
||||
size_t len;
|
||||
int prot, flags, fd;
|
||||
off_t off;
|
||||
{
|
||||
char *ptr;
|
||||
|
||||
if ((ptr = (char *)malloc(len)) == 0)
|
||||
return ((char *)-1);
|
||||
if (read(fd, ptr, len) < 0) {
|
||||
free(ptr);
|
||||
return ((char *)-1);
|
||||
}
|
||||
return (ptr);
|
||||
}
|
||||
|
||||
/*
|
||||
* PUBLIC: #ifndef HAVE_MMAP
|
||||
* PUBLIC: int munmap __P((char *, size_t));
|
||||
* PUBLIC: #endif
|
||||
*/
|
||||
int
|
||||
munmap(addr, len)
|
||||
char *addr;
|
||||
size_t len;
|
||||
{
|
||||
free(addr);
|
||||
return (0);
|
||||
}
|
@ -1,45 +0,0 @@
|
||||
#include "config.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#ifdef __STDC__
|
||||
#include <stdarg.h>
|
||||
#else
|
||||
#include <varargs.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* PUBLIC: #ifndef HAVE_SNPRINTF
|
||||
* PUBLIC: int snprintf __P((char *, size_t, const char *, ...));
|
||||
* PUBLIC: #endif
|
||||
*/
|
||||
int
|
||||
#ifdef __STDC__
|
||||
snprintf(char *str, size_t n, const char *fmt, ...)
|
||||
#else
|
||||
snprintf(str, n, fmt, va_alist)
|
||||
char *str;
|
||||
size_t n;
|
||||
const char *fmt;
|
||||
va_dcl
|
||||
#endif
|
||||
{
|
||||
va_list ap;
|
||||
int rval;
|
||||
#ifdef __STDC__
|
||||
va_start(ap, fmt);
|
||||
#else
|
||||
va_start(ap);
|
||||
#endif
|
||||
#ifdef SPRINTF_RET_CHARPNT
|
||||
(void)vsprintf(str, fmt, ap);
|
||||
va_end(ap);
|
||||
return (strlen(str));
|
||||
#else
|
||||
rval = vsprintf(str, fmt, ap);
|
||||
va_end(ap);
|
||||
return (rval);
|
||||
#endif
|
||||
}
|
@ -1,74 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1988, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static const char sccsid[] = "@(#)strerror.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <string.h>
|
||||
|
||||
/*
|
||||
* PUBLIC: #ifndef HAVE_STRERROR
|
||||
* PUBLIC: char *strerror __P((int));
|
||||
* PUBLIC: #endif
|
||||
*/
|
||||
char *
|
||||
strerror(num)
|
||||
int num;
|
||||
{
|
||||
extern int sys_nerr;
|
||||
extern char *sys_errlist[];
|
||||
#define UPREFIX "Unknown error: "
|
||||
static char ebuf[40] = UPREFIX; /* 64-bit number + slop */
|
||||
register unsigned int errnum;
|
||||
register char *p, *t;
|
||||
char tmp[40];
|
||||
|
||||
errnum = num; /* convert to unsigned */
|
||||
if (errnum < sys_nerr)
|
||||
return(sys_errlist[errnum]);
|
||||
|
||||
/* Do this by hand, so we don't include stdio(3). */
|
||||
t = tmp;
|
||||
do {
|
||||
*t++ = "0123456789"[errnum % 10];
|
||||
} while (errnum /= 10);
|
||||
for (p = ebuf + sizeof(UPREFIX) - 1;;) {
|
||||
*p++ = *--t;
|
||||
if (t <= tmp)
|
||||
break;
|
||||
}
|
||||
return(ebuf);
|
||||
}
|
@ -1,85 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static const char sccsid[] = "@(#)strsep.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
/*
|
||||
* Get next token from string *stringp, where tokens are possibly-empty
|
||||
* strings separated by characters from delim.
|
||||
*
|
||||
* Writes NULs into the string at *stringp to end tokens.
|
||||
* delim need not remain constant from call to call.
|
||||
* On return, *stringp points past the last NUL written (if there might
|
||||
* be further tokens), or is NULL (if there are definitely no more tokens).
|
||||
*
|
||||
* If *stringp is NULL, strsep returns NULL.
|
||||
*
|
||||
* PUBLIC: #ifndef HAVE_STRSEP
|
||||
* PUBLIC: char *strsep __P((char **, const char *));
|
||||
* PUBLIC: #endif
|
||||
*/
|
||||
char *
|
||||
strsep(stringp, delim)
|
||||
register char **stringp;
|
||||
register const char *delim;
|
||||
{
|
||||
register char *s;
|
||||
register const char *spanp;
|
||||
register int c, sc;
|
||||
char *tok;
|
||||
|
||||
if ((s = *stringp) == NULL)
|
||||
return (NULL);
|
||||
for (tok = s;;) {
|
||||
c = *s++;
|
||||
spanp = delim;
|
||||
do {
|
||||
if ((sc = *spanp++) == c) {
|
||||
if (c == 0)
|
||||
s = NULL;
|
||||
else
|
||||
s[-1] = 0;
|
||||
*stringp = s;
|
||||
return (tok);
|
||||
}
|
||||
} while (sc != 0);
|
||||
}
|
||||
/* NOTREACHED */
|
||||
}
|
@ -1,134 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static const char sccsid[] = "@(#)strtol.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <limits.h>
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
/*
|
||||
* Convert a string to a long integer.
|
||||
*
|
||||
* Ignores `locale' stuff. Assumes that the upper and lower case
|
||||
* alphabets and digits are each contiguous.
|
||||
*
|
||||
* PUBLIC: #ifndef HAVE_STRTOL
|
||||
* PUBLIC: long strtol __P((const char *, char **, int));
|
||||
* PUBLIC: #endif
|
||||
*/
|
||||
long
|
||||
strtol(nptr, endptr, base)
|
||||
const char *nptr;
|
||||
char **endptr;
|
||||
register int base;
|
||||
{
|
||||
register const char *s = nptr;
|
||||
register unsigned long acc;
|
||||
register int c;
|
||||
register unsigned long cutoff;
|
||||
register int neg = 0, any, cutlim;
|
||||
|
||||
/*
|
||||
* Skip white space and pick up leading +/- sign if any.
|
||||
* If base is 0, allow 0x for hex and 0 for octal, else
|
||||
* assume decimal; if base is already 16, allow 0x.
|
||||
*/
|
||||
do {
|
||||
c = *s++;
|
||||
} while (isspace(c));
|
||||
if (c == '-') {
|
||||
neg = 1;
|
||||
c = *s++;
|
||||
} else if (c == '+')
|
||||
c = *s++;
|
||||
if ((base == 0 || base == 16) &&
|
||||
c == '0' && (*s == 'x' || *s == 'X')) {
|
||||
c = s[1];
|
||||
s += 2;
|
||||
base = 16;
|
||||
}
|
||||
if (base == 0)
|
||||
base = c == '0' ? 8 : 10;
|
||||
|
||||
/*
|
||||
* Compute the cutoff value between legal numbers and illegal
|
||||
* numbers. That is the largest legal value, divided by the
|
||||
* base. An input number that is greater than this value, if
|
||||
* followed by a legal input character, is too big. One that
|
||||
* is equal to this value may be valid or not; the limit
|
||||
* between valid and invalid numbers is then based on the last
|
||||
* digit. For instance, if the range for longs is
|
||||
* [-2147483648..2147483647] and the input base is 10,
|
||||
* cutoff will be set to 214748364 and cutlim to either
|
||||
* 7 (neg==0) or 8 (neg==1), meaning that if we have accumulated
|
||||
* a value > 214748364, or equal but the next digit is > 7 (or 8),
|
||||
* the number is too big, and we will return a range error.
|
||||
*
|
||||
* Set any if any `digits' consumed; make it negative to indicate
|
||||
* overflow.
|
||||
*/
|
||||
cutoff = neg ? -(unsigned long)LONG_MIN : LONG_MAX;
|
||||
cutlim = cutoff % (unsigned long)base;
|
||||
cutoff /= (unsigned long)base;
|
||||
for (acc = 0, any = 0;; c = *s++) {
|
||||
if (isdigit(c))
|
||||
c -= '0';
|
||||
else if (isalpha(c))
|
||||
c -= isupper(c) ? 'A' - 10 : 'a' - 10;
|
||||
else
|
||||
break;
|
||||
if (c >= base)
|
||||
break;
|
||||
if (any < 0 || acc > cutoff || acc == cutoff && c > cutlim)
|
||||
any = -1;
|
||||
else {
|
||||
any = 1;
|
||||
acc *= base;
|
||||
acc += c;
|
||||
}
|
||||
}
|
||||
if (any < 0) {
|
||||
acc = neg ? LONG_MIN : LONG_MAX;
|
||||
errno = ERANGE;
|
||||
} else if (neg)
|
||||
acc = -acc;
|
||||
if (endptr != 0)
|
||||
*endptr = (char *)(any ? s - 1 : nptr);
|
||||
return (acc);
|
||||
}
|
@ -1,113 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 1990, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#if defined(LIBC_SCCS) && !defined(lint)
|
||||
static const char sccsid[] = "@(#)strtoul.c 8.1 (Berkeley) 6/4/93";
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
#include <limits.h>
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
/*
|
||||
* Convert a string to an unsigned long integer.
|
||||
*
|
||||
* Ignores `locale' stuff. Assumes that the upper and lower case
|
||||
* alphabets and digits are each contiguous.
|
||||
*
|
||||
* PUBLIC: #ifndef HAVE_STRTOUL
|
||||
* PUBLIC: unsigned long strtoul __P((const char *, char **, int));
|
||||
* PUBLIC: #endif
|
||||
*/
|
||||
unsigned long
|
||||
strtoul(nptr, endptr, base)
|
||||
const char *nptr;
|
||||
char **endptr;
|
||||
register int base;
|
||||
{
|
||||
register const char *s = nptr;
|
||||
register unsigned long acc;
|
||||
register int c;
|
||||
register unsigned long cutoff;
|
||||
register int neg = 0, any, cutlim;
|
||||
|
||||
/*
|
||||
* See strtol for comments as to the logic used.
|
||||
*/
|
||||
do {
|
||||
c = *s++;
|
||||
} while (isspace(c));
|
||||
if (c == '-') {
|
||||
neg = 1;
|
||||
c = *s++;
|
||||
} else if (c == '+')
|
||||
c = *s++;
|
||||
if ((base == 0 || base == 16) &&
|
||||
c == '0' && (*s == 'x' || *s == 'X')) {
|
||||
c = s[1];
|
||||
s += 2;
|
||||
base = 16;
|
||||
}
|
||||
if (base == 0)
|
||||
base = c == '0' ? 8 : 10;
|
||||
cutoff = (unsigned long)ULONG_MAX / (unsigned long)base;
|
||||
cutlim = (unsigned long)ULONG_MAX % (unsigned long)base;
|
||||
for (acc = 0, any = 0;; c = *s++) {
|
||||
if (isdigit(c))
|
||||
c -= '0';
|
||||
else if (isalpha(c))
|
||||
c -= isupper(c) ? 'A' - 10 : 'a' - 10;
|
||||
else
|
||||
break;
|
||||
if (c >= base)
|
||||
break;
|
||||
if (any < 0 || acc > cutoff || acc == cutoff && c > cutlim)
|
||||
any = -1;
|
||||
else {
|
||||
any = 1;
|
||||
acc *= base;
|
||||
acc += c;
|
||||
}
|
||||
}
|
||||
if (any < 0) {
|
||||
acc = ULONG_MAX;
|
||||
errno = ERANGE;
|
||||
} else if (neg)
|
||||
acc = -acc;
|
||||
if (endptr != 0)
|
||||
*endptr = (char *)(any ? s - 1 : nptr);
|
||||
return (acc);
|
||||
}
|
@ -1,31 +0,0 @@
|
||||
#include "config.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#ifdef __STDC__
|
||||
#include <stdarg.h>
|
||||
#else
|
||||
#include <varargs.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* PUBLIC: #ifndef HAVE_VSNPRINTF
|
||||
* PUBLIC: int vsnprintf __P((char *, size_t, const char *, ...));
|
||||
* PUBLIC: #endif
|
||||
*/
|
||||
int
|
||||
vsnprintf(str, n, fmt, ap)
|
||||
char *str;
|
||||
size_t n;
|
||||
const char *fmt;
|
||||
va_list ap;
|
||||
{
|
||||
#ifdef SPRINTF_RET_CHARPNT
|
||||
(void)vsprintf(str, fmt, ap);
|
||||
return (strlen(str));
|
||||
#else
|
||||
return (vsprintf(str, fmt, ap));
|
||||
#endif
|
||||
}
|
@ -1,525 +0,0 @@
|
||||
/*-
|
||||
* Copyright (c) 1992, 1993, 1994
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
* Copyright (c) 1992, 1993, 1994, 1995, 1996
|
||||
* Keith Bostic. All rights reserved.
|
||||
* Copyright (c) 1995
|
||||
* George V. Neville-Neil. All rights reserved.
|
||||
*
|
||||
* See the LICENSE file for redistribution information.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#ifndef lint
|
||||
static const char sccsid[] = "@(#)api.c 8.26 (Berkeley) 10/14/96";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/queue.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#include <bitstring.h>
|
||||
#include <limits.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <termios.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "../common/common.h"
|
||||
|
||||
extern GS *__global_list; /* XXX */
|
||||
|
||||
/*
|
||||
* api_fscreen --
|
||||
* Return a pointer to the screen specified by the screen id
|
||||
* or a file name.
|
||||
*
|
||||
* PUBLIC: SCR *api_fscreen __P((int, char *));
|
||||
*/
|
||||
SCR *
|
||||
api_fscreen(id, name)
|
||||
int id;
|
||||
char *name;
|
||||
{
|
||||
GS *gp;
|
||||
SCR *tsp;
|
||||
|
||||
gp = __global_list;
|
||||
|
||||
/* Search the displayed list. */
|
||||
for (tsp = gp->dq.cqh_first;
|
||||
tsp != (void *)&gp->dq; tsp = tsp->q.cqe_next)
|
||||
if (name == NULL) {
|
||||
if (id == tsp->id)
|
||||
return (tsp);
|
||||
} else if (!strcmp(name, tsp->frp->name))
|
||||
return (tsp);
|
||||
|
||||
/* Search the hidden list. */
|
||||
for (tsp = gp->hq.cqh_first;
|
||||
tsp != (void *)&gp->hq; tsp = tsp->q.cqe_next)
|
||||
if (name == NULL) {
|
||||
if (id == tsp->id)
|
||||
return (tsp);
|
||||
} else if (!strcmp(name, tsp->frp->name))
|
||||
return (tsp);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* api_aline --
|
||||
* Append a line.
|
||||
*
|
||||
* PUBLIC: int api_aline __P((SCR *, recno_t, char *, size_t));
|
||||
*/
|
||||
int
|
||||
api_aline(sp, lno, line, len)
|
||||
SCR *sp;
|
||||
recno_t lno;
|
||||
char *line;
|
||||
size_t len;
|
||||
{
|
||||
return (db_append(sp, 1, lno, line, len));
|
||||
}
|
||||
|
||||
/*
|
||||
* api_dline --
|
||||
* Delete a line.
|
||||
*
|
||||
* PUBLIC: int api_dline __P((SCR *, recno_t));
|
||||
*/
|
||||
int
|
||||
api_dline(sp, lno)
|
||||
SCR *sp;
|
||||
recno_t lno;
|
||||
{
|
||||
return (db_delete(sp, lno));
|
||||
}
|
||||
|
||||
/*
|
||||
* api_gline --
|
||||
* Get a line.
|
||||
*
|
||||
* PUBLIC: int api_gline __P((SCR *, recno_t, char **, size_t *));
|
||||
*/
|
||||
int
|
||||
api_gline(sp, lno, linepp, lenp)
|
||||
SCR *sp;
|
||||
recno_t lno;
|
||||
char **linepp;
|
||||
size_t *lenp;
|
||||
{
|
||||
int isempty;
|
||||
|
||||
if (db_eget(sp, lno, linepp, lenp, &isempty)) {
|
||||
if (isempty)
|
||||
msgq(sp, M_ERR, "209|The file is empty");
|
||||
return (1);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* api_iline --
|
||||
* Insert a line.
|
||||
*
|
||||
* PUBLIC: int api_iline __P((SCR *, recno_t, char *, size_t));
|
||||
*/
|
||||
int
|
||||
api_iline(sp, lno, line, len)
|
||||
SCR *sp;
|
||||
recno_t lno;
|
||||
char *line;
|
||||
size_t len;
|
||||
{
|
||||
return (db_insert(sp, lno, line, len));
|
||||
}
|
||||
|
||||
/*
|
||||
* api_lline --
|
||||
* Return the line number of the last line in the file.
|
||||
*
|
||||
* PUBLIC: int api_lline __P((SCR *, recno_t *));
|
||||
*/
|
||||
int
|
||||
api_lline(sp, lnop)
|
||||
SCR *sp;
|
||||
recno_t *lnop;
|
||||
{
|
||||
return (db_last(sp, lnop));
|
||||
}
|
||||
|
||||
/*
|
||||
* api_sline --
|
||||
* Set a line.
|
||||
*
|
||||
* PUBLIC: int api_sline __P((SCR *, recno_t, char *, size_t));
|
||||
*/
|
||||
int
|
||||
api_sline(sp, lno, line, len)
|
||||
SCR *sp;
|
||||
recno_t lno;
|
||||
char *line;
|
||||
size_t len;
|
||||
{
|
||||
return (db_set(sp, lno, line, len));
|
||||
}
|
||||
|
||||
/*
|
||||
* api_getmark --
|
||||
* Get the mark.
|
||||
*
|
||||
* PUBLIC: int api_getmark __P((SCR *, int, MARK *));
|
||||
*/
|
||||
int
|
||||
api_getmark(sp, markname, mp)
|
||||
SCR *sp;
|
||||
int markname;
|
||||
MARK *mp;
|
||||
{
|
||||
return (mark_get(sp, (ARG_CHAR_T)markname, mp, M_ERR));
|
||||
}
|
||||
|
||||
/*
|
||||
* api_setmark --
|
||||
* Set the mark.
|
||||
*
|
||||
* PUBLIC: int api_setmark __P((SCR *, int, MARK *));
|
||||
*/
|
||||
int
|
||||
api_setmark(sp, markname, mp)
|
||||
SCR *sp;
|
||||
int markname;
|
||||
MARK *mp;
|
||||
{
|
||||
return (mark_set(sp, (ARG_CHAR_T)markname, mp, 1));
|
||||
}
|
||||
|
||||
/*
|
||||
* api_nextmark --
|
||||
* Return the first mark if next not set, otherwise return the
|
||||
* subsequent mark.
|
||||
*
|
||||
* PUBLIC: int api_nextmark __P((SCR *, int, char *));
|
||||
*/
|
||||
int
|
||||
api_nextmark(sp, next, namep)
|
||||
SCR *sp;
|
||||
int next;
|
||||
char *namep;
|
||||
{
|
||||
LMARK *mp;
|
||||
|
||||
mp = sp->ep->marks.lh_first;
|
||||
if (next)
|
||||
for (; mp != NULL; mp = mp->q.le_next)
|
||||
if (mp->name == *namep) {
|
||||
mp = mp->q.le_next;
|
||||
break;
|
||||
}
|
||||
if (mp == NULL)
|
||||
return (1);
|
||||
*namep = mp->name;
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* api_getcursor --
|
||||
* Get the cursor.
|
||||
*
|
||||
* PUBLIC: int api_getcursor __P((SCR *, MARK *));
|
||||
*/
|
||||
int
|
||||
api_getcursor(sp, mp)
|
||||
SCR *sp;
|
||||
MARK *mp;
|
||||
{
|
||||
mp->lno = sp->lno;
|
||||
mp->cno = sp->cno;
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* api_setcursor --
|
||||
* Set the cursor.
|
||||
*
|
||||
* PUBLIC: int api_setcursor __P((SCR *, MARK *));
|
||||
*/
|
||||
int
|
||||
api_setcursor(sp, mp)
|
||||
SCR *sp;
|
||||
MARK *mp;
|
||||
{
|
||||
size_t len;
|
||||
|
||||
if (db_get(sp, mp->lno, DBG_FATAL, NULL, &len))
|
||||
return (1);
|
||||
if (mp->cno < 0 || mp->cno > len) {
|
||||
msgq(sp, M_ERR, "Cursor set to nonexistent column");
|
||||
return (1);
|
||||
}
|
||||
|
||||
/* Set the cursor. */
|
||||
sp->lno = mp->lno;
|
||||
sp->cno = mp->cno;
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* api_emessage --
|
||||
* Print an error message.
|
||||
*
|
||||
* PUBLIC: void api_emessage __P((SCR *, char *));
|
||||
*/
|
||||
void
|
||||
api_emessage(sp, text)
|
||||
SCR *sp;
|
||||
char *text;
|
||||
{
|
||||
msgq(sp, M_ERR, "%s", text);
|
||||
}
|
||||
|
||||
/*
|
||||
* api_imessage --
|
||||
* Print an informational message.
|
||||
*
|
||||
* PUBLIC: void api_imessage __P((SCR *, char *));
|
||||
*/
|
||||
void
|
||||
api_imessage(sp, text)
|
||||
SCR *sp;
|
||||
char *text;
|
||||
{
|
||||
msgq(sp, M_INFO, "%s", text);
|
||||
}
|
||||
|
||||
/*
|
||||
* api_edit
|
||||
* Create a new screen and return its id
|
||||
* or edit a new file in the current screen.
|
||||
*
|
||||
* PUBLIC: int api_edit __P((SCR *, char *, SCR **, int));
|
||||
*/
|
||||
int
|
||||
api_edit(sp, file, spp, newscreen)
|
||||
SCR *sp;
|
||||
char *file;
|
||||
SCR **spp;
|
||||
int newscreen;
|
||||
{
|
||||
ARGS *ap[2], a;
|
||||
EXCMD cmd;
|
||||
|
||||
if (file) {
|
||||
ex_cinit(&cmd, C_EDIT, 0, OOBLNO, OOBLNO, 0, ap);
|
||||
ex_cadd(&cmd, &a, file, strlen(file));
|
||||
} else
|
||||
ex_cinit(&cmd, C_EDIT, 0, OOBLNO, OOBLNO, 0, NULL);
|
||||
if (newscreen)
|
||||
cmd.flags |= E_NEWSCREEN; /* XXX */
|
||||
if (cmd.cmd->fn(sp, &cmd))
|
||||
return (1);
|
||||
*spp = sp->nextdisp;
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* api_escreen
|
||||
* End a screen.
|
||||
*
|
||||
* PUBLIC: int api_escreen __P((SCR *));
|
||||
*/
|
||||
int
|
||||
api_escreen(sp)
|
||||
SCR *sp;
|
||||
{
|
||||
EXCMD cmd;
|
||||
|
||||
/*
|
||||
* XXX
|
||||
* If the interpreter exits anything other than the current
|
||||
* screen, vi isn't going to update everything correctly.
|
||||
*/
|
||||
ex_cinit(&cmd, C_QUIT, 0, OOBLNO, OOBLNO, 0, NULL);
|
||||
return (cmd.cmd->fn(sp, &cmd));
|
||||
}
|
||||
|
||||
/*
|
||||
* api_swscreen --
|
||||
* Switch to a new screen.
|
||||
*
|
||||
* PUBLIC: int api_swscreen __P((SCR *, SCR *));
|
||||
*/
|
||||
int
|
||||
api_swscreen(sp, new)
|
||||
SCR *sp, *new;
|
||||
{
|
||||
/*
|
||||
* XXX
|
||||
* If the interpreter switches from anything other than the
|
||||
* current screen, vi isn't going to update everything correctly.
|
||||
*/
|
||||
sp->nextdisp = new;
|
||||
F_SET(sp, SC_SSWITCH);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* api_map --
|
||||
* Map a key.
|
||||
*
|
||||
* PUBLIC: int api_map __P((SCR *, char *, char *, size_t));
|
||||
*/
|
||||
int
|
||||
api_map(sp, name, map, len)
|
||||
SCR *sp;
|
||||
char *name, *map;
|
||||
size_t len;
|
||||
{
|
||||
ARGS *ap[3], a, b;
|
||||
EXCMD cmd;
|
||||
|
||||
ex_cinit(&cmd, C_MAP, 0, OOBLNO, OOBLNO, 0, ap);
|
||||
ex_cadd(&cmd, &a, name, strlen(name));
|
||||
ex_cadd(&cmd, &b, map, len);
|
||||
return (cmd.cmd->fn(sp, &cmd));
|
||||
}
|
||||
|
||||
/*
|
||||
* api_unmap --
|
||||
* Unmap a key.
|
||||
*
|
||||
* PUBLIC: int api_unmap __P((SCR *, char *));
|
||||
*/
|
||||
int
|
||||
api_unmap(sp, name)
|
||||
SCR *sp;
|
||||
char *name;
|
||||
{
|
||||
ARGS *ap[2], a;
|
||||
EXCMD cmd;
|
||||
|
||||
ex_cinit(&cmd, C_UNMAP, 0, OOBLNO, OOBLNO, 0, ap);
|
||||
ex_cadd(&cmd, &a, name, strlen(name));
|
||||
return (cmd.cmd->fn(sp, &cmd));
|
||||
}
|
||||
|
||||
/*
|
||||
* api_opts_get --
|
||||
* Return a option value as a string, in allocated memory.
|
||||
* If the option is of type boolean, boolvalue is (un)set
|
||||
* according to the value; otherwise boolvalue is -1.
|
||||
*
|
||||
* PUBLIC: int api_opts_get __P((SCR *, char *, char **, int *));
|
||||
*/
|
||||
int
|
||||
api_opts_get(sp, name, value, boolvalue)
|
||||
SCR *sp;
|
||||
char *name, **value;
|
||||
int *boolvalue;
|
||||
{
|
||||
OPTLIST const *op;
|
||||
int offset;
|
||||
|
||||
if ((op = opts_search(name)) == NULL) {
|
||||
opts_nomatch(sp, name);
|
||||
return (1);
|
||||
}
|
||||
|
||||
offset = op - optlist;
|
||||
if (boolvalue != NULL)
|
||||
*boolvalue = -1;
|
||||
switch (op->type) {
|
||||
case OPT_0BOOL:
|
||||
case OPT_1BOOL:
|
||||
MALLOC_RET(sp, *value, char *, strlen(op->name) + 2 + 1);
|
||||
(void)sprintf(*value,
|
||||
"%s%s", O_ISSET(sp, offset) ? "" : "no", op->name);
|
||||
if (boolvalue != NULL)
|
||||
*boolvalue = O_ISSET(sp, offset);
|
||||
break;
|
||||
case OPT_NUM:
|
||||
MALLOC_RET(sp, *value, char *, 20);
|
||||
(void)sprintf(*value, "%lu", (u_long)O_VAL(sp, offset));
|
||||
break;
|
||||
case OPT_STR:
|
||||
if (O_STR(sp, offset) == NULL) {
|
||||
MALLOC_RET(sp, *value, char *, 2);
|
||||
value[0] = '\0';
|
||||
} else {
|
||||
MALLOC_RET(sp,
|
||||
*value, char *, strlen(O_STR(sp, offset)) + 1);
|
||||
(void)sprintf(*value, "%s", O_STR(sp, offset));
|
||||
}
|
||||
break;
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* api_opts_set --
|
||||
* Set options.
|
||||
*
|
||||
* PUBLIC: int api_opts_set __P((SCR *, char *, char *, u_long, int));
|
||||
*/
|
||||
int
|
||||
api_opts_set(sp, name, str_value, num_value, bool_value)
|
||||
SCR *sp;
|
||||
char *name, *str_value;
|
||||
u_long num_value;
|
||||
int bool_value;
|
||||
{
|
||||
ARGS *ap[2], a, b;
|
||||
OPTLIST const *op;
|
||||
int rval;
|
||||
size_t blen;
|
||||
char *bp;
|
||||
|
||||
if ((op = opts_search(name)) == NULL) {
|
||||
opts_nomatch(sp, name);
|
||||
return (1);
|
||||
}
|
||||
|
||||
switch (op->type) {
|
||||
case OPT_0BOOL:
|
||||
case OPT_1BOOL:
|
||||
GET_SPACE_RET(sp, bp, blen, 64);
|
||||
a.len = snprintf(bp, 64, "%s%s", bool_value ? "" : "no", name);
|
||||
break;
|
||||
case OPT_NUM:
|
||||
GET_SPACE_RET(sp, bp, blen, 64);
|
||||
a.len = snprintf(bp, 64, "%s=%lu", name, num_value);
|
||||
break;
|
||||
case OPT_STR:
|
||||
GET_SPACE_RET(sp, bp, blen, 1024);
|
||||
a.len = snprintf(bp, 1024, "%s=%s", name, str_value);
|
||||
break;
|
||||
}
|
||||
a.bp = bp;
|
||||
b.len = 0;
|
||||
b.bp = NULL;
|
||||
ap[0] = &a;
|
||||
ap[1] = &b;
|
||||
rval = opts_set(sp, ap, NULL);
|
||||
|
||||
FREE_SPACE(sp, bp, blen);
|
||||
|
||||
return (rval);
|
||||
}
|
||||
|
||||
/*
|
||||
* api_run_str --
|
||||
* Execute a string as an ex command.
|
||||
*
|
||||
* PUBLIC: int api_run_str __P((SCR *, char *));
|
||||
*/
|
||||
int
|
||||
api_run_str(sp, cmd)
|
||||
SCR *sp;
|
||||
char *cmd;
|
||||
{
|
||||
return (ex_run_str(sp, NULL, cmd, strlen(cmd), 0, 0));
|
||||
}
|
@ -6,7 +6,7 @@
|
||||
*
|
||||
* See the LICENSE file for redistribution information.
|
||||
*
|
||||
* @(#)args.h 10.2 (Berkeley) 3/6/96
|
||||
* $Id: args.h,v 10.2 1996/03/06 19:50:07 bostic Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
|
@ -6,15 +6,9 @@
|
||||
*
|
||||
* See the LICENSE file for redistribution information.
|
||||
*
|
||||
* @(#)common.h 10.13 (Berkeley) 9/25/96
|
||||
* $Id: common.h,v 10.22 2012/04/13 05:21:50 zy Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
* Porting information built at configuration time. Included before
|
||||
* any of nvi's include files.
|
||||
*/
|
||||
#include "port.h"
|
||||
|
||||
/*
|
||||
* Pseudo-local includes. These are files that are unlikely to exist
|
||||
* on most machines to which we're porting vi, and we want to include
|
||||
@ -29,6 +23,8 @@
|
||||
*/
|
||||
typedef struct _cb CB;
|
||||
typedef struct _csc CSC;
|
||||
typedef struct _conv CONV;
|
||||
typedef struct _conv_win CONVWIN;
|
||||
typedef struct _event EVENT;
|
||||
typedef struct _excmd EXCMD;
|
||||
typedef struct _exf EXF;
|
||||
@ -48,7 +44,7 @@ typedef struct _tagq TAGQ;
|
||||
typedef struct _text TEXT;
|
||||
|
||||
/* Autoindent state. */
|
||||
typedef enum { C_NOTSET, C_CARATSET, C_NOCHANGE, C_ZEROSET } carat_t;
|
||||
typedef enum { C_NOTSET, C_CARATSET, C_ZEROSET } carat_t;
|
||||
|
||||
/* Busy message types. */
|
||||
typedef enum { BUSY_ON = 1, BUSY_OFF, BUSY_UPDATE } busy_t;
|
||||
@ -86,6 +82,7 @@ typedef enum { SEQ_ABBREV, SEQ_COMMAND, SEQ_INPUT } seq_t;
|
||||
#include "seq.h" /* Required by screen.h. */
|
||||
#include "util.h" /* Required by ex.h. */
|
||||
#include "mark.h" /* Required by gs.h. */
|
||||
#include "conv.h" /* Required by ex.h and screen.h */
|
||||
#include "../ex/ex.h" /* Required by gs.h. */
|
||||
#include "gs.h" /* Required by screen.h. */
|
||||
#include "screen.h" /* Required by exf.h. */
|
||||
@ -93,4 +90,4 @@ typedef enum { SEQ_ABBREV, SEQ_COMMAND, SEQ_INPUT } seq_t;
|
||||
#include "log.h"
|
||||
#include "mem.h"
|
||||
|
||||
#include "com_extern.h"
|
||||
#include "extern.h"
|
||||
|
446
contrib/nvi/common/conv.c
Normal file
446
contrib/nvi/common/conv.c
Normal file
@ -0,0 +1,446 @@
|
||||
/*-
|
||||
* Copyright (c) 1993, 1994
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
* Copyright (c) 1993, 1994, 1995, 1996
|
||||
* Keith Bostic. All rights reserved.
|
||||
* Copyright (c) 2011, 2012
|
||||
* Zhihao Yuan. All rights reserved.
|
||||
*
|
||||
* See the LICENSE file for redistribution information.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#ifndef lint
|
||||
static const char sccsid[] = "$Id: conv.c,v 2.39 2013/07/01 23:28:13 zy Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/queue.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#include <bitstring.h>
|
||||
#include <errno.h>
|
||||
#include <limits.h>
|
||||
#include <langinfo.h>
|
||||
#include <locale.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <strings.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "common.h"
|
||||
|
||||
/*
|
||||
* codeset --
|
||||
* Get the locale encoding.
|
||||
*
|
||||
* PUBLIC: char * codeset __P((void));
|
||||
*/
|
||||
char *
|
||||
codeset(void) {
|
||||
static char *cs;
|
||||
|
||||
if (cs == NULL)
|
||||
cs = nl_langinfo(CODESET);
|
||||
return cs;
|
||||
}
|
||||
|
||||
#ifdef USE_WIDECHAR
|
||||
static int
|
||||
raw2int(SCR *sp, const char * str, ssize_t len, CONVWIN *cw,
|
||||
size_t *tolen, CHAR_T **dst)
|
||||
{
|
||||
int i;
|
||||
CHAR_T **tostr = &cw->bp1.wc;
|
||||
size_t *blen = &cw->blen1;
|
||||
|
||||
BINC_RETW(NULL, *tostr, *blen, len);
|
||||
|
||||
*tolen = len;
|
||||
for (i = 0; i < len; ++i)
|
||||
(*tostr)[i] = (u_char) str[i];
|
||||
|
||||
*dst = cw->bp1.wc;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define CONV_BUFFER_SIZE 512
|
||||
/* fill the buffer with codeset encoding of string pointed to by str
|
||||
* left has the number of bytes left in str and is adjusted
|
||||
* len contains the number of bytes put in the buffer
|
||||
*/
|
||||
#ifdef USE_ICONV
|
||||
#define CONVERT(str, left, src, len) \
|
||||
do { \
|
||||
size_t outleft; \
|
||||
char *bp = buffer; \
|
||||
outleft = CONV_BUFFER_SIZE; \
|
||||
errno = 0; \
|
||||
if (iconv(id, (iconv_src_t)&str, &left, &bp, &outleft) == -1 && \
|
||||
errno != E2BIG) \
|
||||
goto err; \
|
||||
if ((len = CONV_BUFFER_SIZE - outleft) == 0) { \
|
||||
error = -left; \
|
||||
goto err; \
|
||||
} \
|
||||
src = buffer; \
|
||||
} while (0)
|
||||
|
||||
#define IC_RESET() \
|
||||
do { \
|
||||
if (id != (iconv_t)-1) \
|
||||
iconv(id, NULL, NULL, NULL, NULL); \
|
||||
} while(0)
|
||||
#else
|
||||
#define CONVERT(str, left, src, len)
|
||||
#define IC_RESET()
|
||||
#endif
|
||||
|
||||
static int
|
||||
default_char2int(SCR *sp, const char * str, ssize_t len, CONVWIN *cw,
|
||||
size_t *tolen, CHAR_T **dst, iconv_t id)
|
||||
{
|
||||
size_t i = 0, j;
|
||||
CHAR_T **tostr = &cw->bp1.wc;
|
||||
size_t *blen = &cw->blen1;
|
||||
mbstate_t mbs;
|
||||
size_t n;
|
||||
ssize_t nlen = len;
|
||||
char *src = (char *)str;
|
||||
#ifdef USE_ICONV
|
||||
char buffer[CONV_BUFFER_SIZE];
|
||||
#endif
|
||||
size_t left = len;
|
||||
int error = 1;
|
||||
|
||||
BZERO(&mbs, 1);
|
||||
BINC_RETW(NULL, *tostr, *blen, nlen);
|
||||
|
||||
#ifdef USE_ICONV
|
||||
if (id != (iconv_t)-1)
|
||||
CONVERT(str, left, src, len);
|
||||
#endif
|
||||
|
||||
for (i = 0, j = 0; j < len; ) {
|
||||
n = mbrtowc((*tostr)+i, src+j, len-j, &mbs);
|
||||
/* NULL character converted */
|
||||
if (n == -2) error = -(len-j);
|
||||
if (n == -1 || n == -2) goto err;
|
||||
if (n == 0) n = 1;
|
||||
j += n;
|
||||
if (++i >= *blen) {
|
||||
nlen += 256;
|
||||
BINC_RETW(NULL, *tostr, *blen, nlen);
|
||||
}
|
||||
if (id != (iconv_t)-1 && j == len && left) {
|
||||
CONVERT(str, left, src, len);
|
||||
j = 0;
|
||||
}
|
||||
}
|
||||
|
||||
error = 0;
|
||||
err:
|
||||
*tolen = i;
|
||||
*dst = cw->bp1.wc;
|
||||
IC_RESET();
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
static int
|
||||
fe_char2int(SCR *sp, const char * str, ssize_t len, CONVWIN *cw,
|
||||
size_t *tolen, CHAR_T **dst)
|
||||
{
|
||||
return default_char2int(sp, str, len, cw, tolen, dst,
|
||||
sp->conv.id[IC_FE_CHAR2INT]);
|
||||
}
|
||||
|
||||
static int
|
||||
ie_char2int(SCR *sp, const char * str, ssize_t len, CONVWIN *cw,
|
||||
size_t *tolen, CHAR_T **dst)
|
||||
{
|
||||
return default_char2int(sp, str, len, cw, tolen, dst,
|
||||
sp->conv.id[IC_IE_CHAR2INT]);
|
||||
}
|
||||
|
||||
static int
|
||||
cs_char2int(SCR *sp, const char * str, ssize_t len, CONVWIN *cw,
|
||||
size_t *tolen, CHAR_T **dst)
|
||||
{
|
||||
return default_char2int(sp, str, len, cw, tolen, dst,
|
||||
(iconv_t)-1);
|
||||
}
|
||||
|
||||
static int
|
||||
int2raw(SCR *sp, const CHAR_T * str, ssize_t len, CONVWIN *cw,
|
||||
size_t *tolen, char **dst)
|
||||
{
|
||||
int i;
|
||||
char **tostr = &cw->bp1.c;
|
||||
size_t *blen = &cw->blen1;
|
||||
|
||||
BINC_RETC(NULL, *tostr, *blen, len);
|
||||
|
||||
*tolen = len;
|
||||
for (i = 0; i < len; ++i)
|
||||
(*tostr)[i] = str[i];
|
||||
|
||||
*dst = cw->bp1.c;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
default_int2char(SCR *sp, const CHAR_T * str, ssize_t len, CONVWIN *cw,
|
||||
size_t *tolen, char **pdst, iconv_t id)
|
||||
{
|
||||
size_t i, j, offset = 0;
|
||||
char **tostr = &cw->bp1.c;
|
||||
size_t *blen = &cw->blen1;
|
||||
mbstate_t mbs;
|
||||
size_t n;
|
||||
ssize_t nlen = len + MB_CUR_MAX;
|
||||
char *dst;
|
||||
size_t buflen;
|
||||
#ifdef USE_ICONV
|
||||
char buffer[CONV_BUFFER_SIZE];
|
||||
#endif
|
||||
int error = 1;
|
||||
|
||||
/* convert first len bytes of buffer and append it to cw->bp
|
||||
* len is adjusted => 0
|
||||
* offset contains the offset in cw->bp and is adjusted
|
||||
* cw->bp is grown as required
|
||||
*/
|
||||
#ifdef USE_ICONV
|
||||
#define CONVERT2(_buffer, lenp, cw, offset) \
|
||||
do { \
|
||||
char *bp = _buffer; \
|
||||
int ret; \
|
||||
do { \
|
||||
size_t outleft = cw->blen1 - offset; \
|
||||
char *obp = cw->bp1.c + offset; \
|
||||
if (cw->blen1 < offset + MB_CUR_MAX) { \
|
||||
nlen += 256; \
|
||||
BINC_RETC(NULL, cw->bp1.c, cw->blen1, nlen); \
|
||||
} \
|
||||
errno = 0; \
|
||||
ret = iconv(id, (iconv_src_t)&bp, lenp, &obp, &outleft); \
|
||||
if (ret == -1 && errno != E2BIG) \
|
||||
goto err; \
|
||||
offset = cw->blen1 - outleft; \
|
||||
} while (ret != 0); \
|
||||
} while (0)
|
||||
#else
|
||||
#define CONVERT2(_buffer, lenp, cw, offset)
|
||||
#endif
|
||||
|
||||
|
||||
BZERO(&mbs, 1);
|
||||
BINC_RETC(NULL, *tostr, *blen, nlen);
|
||||
dst = *tostr; buflen = *blen;
|
||||
|
||||
#ifdef USE_ICONV
|
||||
if (id != (iconv_t)-1) {
|
||||
dst = buffer; buflen = CONV_BUFFER_SIZE;
|
||||
}
|
||||
#endif
|
||||
|
||||
for (i = 0, j = 0; i < len; ++i) {
|
||||
n = wcrtomb(dst+j, str[i], &mbs);
|
||||
if (n == -1) goto err;
|
||||
j += n;
|
||||
if (buflen < j + MB_CUR_MAX) {
|
||||
if (id != (iconv_t)-1) {
|
||||
CONVERT2(buffer, &j, cw, offset);
|
||||
} else {
|
||||
nlen += 256;
|
||||
BINC_RETC(NULL, *tostr, *blen, nlen);
|
||||
dst = *tostr; buflen = *blen;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
n = wcrtomb(dst+j, L'\0', &mbs);
|
||||
j += n - 1; /* don't count NUL at the end */
|
||||
*tolen = j;
|
||||
|
||||
if (id != (iconv_t)-1) {
|
||||
CONVERT2(buffer, &j, cw, offset);
|
||||
CONVERT2(NULL, NULL, cw, offset); /* back to the initial state */
|
||||
*tolen = offset;
|
||||
}
|
||||
|
||||
error = 0;
|
||||
err:
|
||||
if (error)
|
||||
*tolen = j;
|
||||
*pdst = cw->bp1.c;
|
||||
IC_RESET();
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
static int
|
||||
fe_int2char(SCR *sp, const CHAR_T * str, ssize_t len, CONVWIN *cw,
|
||||
size_t *tolen, char **dst)
|
||||
{
|
||||
return default_int2char(sp, str, len, cw, tolen, dst,
|
||||
sp->conv.id[IC_FE_INT2CHAR]);
|
||||
}
|
||||
|
||||
static int
|
||||
cs_int2char(SCR *sp, const CHAR_T * str, ssize_t len, CONVWIN *cw,
|
||||
size_t *tolen, char **dst)
|
||||
{
|
||||
return default_int2char(sp, str, len, cw, tolen, dst,
|
||||
(iconv_t)-1);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* conv_init --
|
||||
* Initialize the iconv environment.
|
||||
*
|
||||
* PUBLIC: void conv_init __P((SCR *, SCR *));
|
||||
*/
|
||||
void
|
||||
conv_init(SCR *orig, SCR *sp)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (orig == NULL)
|
||||
setlocale(LC_ALL, "");
|
||||
if (orig != NULL)
|
||||
BCOPY(&orig->conv, &sp->conv, 1);
|
||||
#ifdef USE_WIDECHAR
|
||||
else {
|
||||
char *ctype = setlocale(LC_CTYPE, NULL);
|
||||
|
||||
/*
|
||||
* XXX
|
||||
* This hack fixes the libncursesw issue on FreeBSD.
|
||||
*/
|
||||
if (!strcmp(ctype, "ko_KR.CP949"))
|
||||
setlocale(LC_CTYPE, "ko_KR.eucKR");
|
||||
else if (!strcmp(ctype, "zh_CN.GB2312"))
|
||||
setlocale(LC_CTYPE, "zh_CN.eucCN");
|
||||
else if (!strcmp(ctype, "zh_CN.GBK"))
|
||||
setlocale(LC_CTYPE, "zh_CN.GB18030");
|
||||
|
||||
/*
|
||||
* Switch to 8bit mode if locale is C;
|
||||
* LC_CTYPE should be reseted to C if unmatched.
|
||||
*/
|
||||
if (!strcmp(ctype, "C") || !strcmp(ctype, "POSIX")) {
|
||||
sp->conv.sys2int = sp->conv.file2int = raw2int;
|
||||
sp->conv.int2sys = sp->conv.int2file = int2raw;
|
||||
sp->conv.input2int = raw2int;
|
||||
} else {
|
||||
sp->conv.sys2int = cs_char2int;
|
||||
sp->conv.int2sys = cs_int2char;
|
||||
sp->conv.file2int = fe_char2int;
|
||||
sp->conv.int2file = fe_int2char;
|
||||
sp->conv.input2int = ie_char2int;
|
||||
}
|
||||
#ifdef USE_ICONV
|
||||
o_set(sp, O_INPUTENCODING, OS_STRDUP, codeset(), 0);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
/* iconv descriptors must be distinct to screens. */
|
||||
for (i = 0; i <= IC_IE_TO_UTF16; ++i)
|
||||
sp->conv.id[i] = (iconv_t)-1;
|
||||
#ifdef USE_ICONV
|
||||
conv_enc(sp, O_INPUTENCODING, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* conv_enc --
|
||||
* Convert file/input encoding.
|
||||
*
|
||||
* PUBLIC: int conv_enc __P((SCR *, int, char *));
|
||||
*/
|
||||
int
|
||||
conv_enc(SCR *sp, int option, char *enc)
|
||||
{
|
||||
#if defined(USE_WIDECHAR) && defined(USE_ICONV)
|
||||
iconv_t *c2w, *w2c;
|
||||
|
||||
switch (option) {
|
||||
case O_FILEENCODING:
|
||||
c2w = sp->conv.id + IC_FE_CHAR2INT;
|
||||
w2c = sp->conv.id + IC_FE_INT2CHAR;
|
||||
if (!enc) enc = O_STR(sp, O_FILEENCODING);
|
||||
if (*c2w != (iconv_t)-1)
|
||||
iconv_close(*c2w);
|
||||
if (*w2c != (iconv_t)-1)
|
||||
iconv_close(*w2c);
|
||||
if (strcasecmp(codeset(), enc)) {
|
||||
if ((*c2w = iconv_open(codeset(), enc)) == (iconv_t)-1)
|
||||
goto err;
|
||||
if ((*w2c = iconv_open(enc, codeset())) == (iconv_t)-1)
|
||||
goto err;
|
||||
} else *c2w = *w2c = (iconv_t)-1;
|
||||
break;
|
||||
case O_INPUTENCODING:
|
||||
c2w = sp->conv.id + IC_IE_CHAR2INT;
|
||||
w2c = sp->conv.id + IC_IE_TO_UTF16;
|
||||
if (!enc) enc = O_STR(sp, O_INPUTENCODING);
|
||||
if (*c2w != (iconv_t)-1)
|
||||
iconv_close(*c2w);
|
||||
if (*w2c != (iconv_t)-1)
|
||||
iconv_close(*w2c);
|
||||
if (strcasecmp(codeset(), enc)) {
|
||||
if ((*c2w = iconv_open(codeset(), enc)) == (iconv_t)-1)
|
||||
goto err;
|
||||
} else *c2w = (iconv_t)-1;
|
||||
/* UTF-16 can not be locale and can not be inputed. */
|
||||
if ((*w2c = iconv_open("utf-16be", enc)) == (iconv_t)-1)
|
||||
goto err;
|
||||
break;
|
||||
}
|
||||
|
||||
F_CLR(sp, SC_CONV_ERROR);
|
||||
F_SET(sp, SC_SCR_REFORMAT);
|
||||
|
||||
return 0;
|
||||
err:
|
||||
#endif
|
||||
switch (option) {
|
||||
case O_FILEENCODING:
|
||||
msgq(sp, M_ERR,
|
||||
"321|File encoding conversion not supported");
|
||||
break;
|
||||
case O_INPUTENCODING:
|
||||
msgq(sp, M_ERR,
|
||||
"322|Input encoding conversion not supported");
|
||||
break;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* conv_end --
|
||||
* Close the iconv descriptors, release the buffer.
|
||||
*
|
||||
* PUBLIC: void conv_end __P((SCR *));
|
||||
*/
|
||||
void
|
||||
conv_end(SCR *sp)
|
||||
{
|
||||
#if defined(USE_WIDECHAR) && defined(USE_ICONV)
|
||||
int i;
|
||||
for (i = 0; i <= IC_IE_TO_UTF16; ++i)
|
||||
if (sp->conv.id[i] != (iconv_t)-1)
|
||||
iconv_close(sp->conv.id[i]);
|
||||
if (sp->cw.bp1.c != NULL)
|
||||
free(sp->cw.bp1.c);
|
||||
#endif
|
||||
}
|
57
contrib/nvi/common/conv.h
Normal file
57
contrib/nvi/common/conv.h
Normal file
@ -0,0 +1,57 @@
|
||||
/*-
|
||||
* Copyright (c) 1992, 1993, 1994
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
* Copyright (c) 1992, 1993, 1994, 1995, 1996
|
||||
* Keith Bostic. All rights reserved.
|
||||
* Copyright (c) 2011, 2012
|
||||
* Zhihao Yuan. All rights reserved.
|
||||
*
|
||||
* See the LICENSE file for redistribution information.
|
||||
*
|
||||
* $Id: conv.h,v 2.32 2013/03/11 01:20:53 zy Exp $
|
||||
*/
|
||||
|
||||
#ifdef USE_ICONV
|
||||
#include <iconv.h>
|
||||
#ifdef ICONV_TRADITIONAL
|
||||
typedef char ** iconv_src_t;
|
||||
#else
|
||||
typedef char const ** iconv_src_t;
|
||||
#endif
|
||||
#else
|
||||
typedef int iconv_t;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* XXX
|
||||
* We can not use MB_CUR_MAX here, since UTF-8 may report it as 6, but
|
||||
* a sequence longer than 4 is deprecated by RFC 3629.
|
||||
*/
|
||||
#define KEY_NEEDSWIDE(sp, ch) \
|
||||
(INTISWIDE(ch) && KEY_LEN(sp, ch) <= 4)
|
||||
#define KEY_COL(sp, ch) \
|
||||
(KEY_NEEDSWIDE(sp, ch) ? CHAR_WIDTH(sp, ch) : KEY_LEN(sp, ch))
|
||||
|
||||
enum { IC_FE_CHAR2INT, IC_FE_INT2CHAR, IC_IE_CHAR2INT, IC_IE_TO_UTF16 };
|
||||
|
||||
struct _conv_win {
|
||||
union {
|
||||
char *c;
|
||||
CHAR_T *wc;
|
||||
} bp1;
|
||||
size_t blen1;
|
||||
};
|
||||
|
||||
typedef int (*char2wchar_t)
|
||||
(SCR *, const char *, ssize_t, struct _conv_win *, size_t *, CHAR_T **);
|
||||
typedef int (*wchar2char_t)
|
||||
(SCR *, const CHAR_T *, ssize_t, struct _conv_win *, size_t *, char **);
|
||||
|
||||
struct _conv {
|
||||
char2wchar_t sys2int;
|
||||
wchar2char_t int2sys;
|
||||
char2wchar_t file2int;
|
||||
wchar2char_t int2file;
|
||||
char2wchar_t input2int;
|
||||
iconv_t id[IC_IE_TO_UTF16 + 1];
|
||||
};
|
@ -10,7 +10,7 @@
|
||||
#include "config.h"
|
||||
|
||||
#ifndef lint
|
||||
static const char sccsid[] = "@(#)cut.c 10.10 (Berkeley) 9/15/96";
|
||||
static const char sccsid[] = "$Id: cut.c,v 10.12 2012/02/11 15:52:33 zy Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
@ -64,14 +64,15 @@ static void cb_rotate __P((SCR *));
|
||||
* PUBLIC: int cut __P((SCR *, CHAR_T *, MARK *, MARK *, int));
|
||||
*/
|
||||
int
|
||||
cut(sp, namep, fm, tm, flags)
|
||||
SCR *sp;
|
||||
CHAR_T *namep;
|
||||
MARK *fm, *tm;
|
||||
int flags;
|
||||
cut(
|
||||
SCR *sp,
|
||||
CHAR_T *namep,
|
||||
MARK *fm,
|
||||
MARK *tm,
|
||||
int flags)
|
||||
{
|
||||
CB *cbp;
|
||||
CHAR_T name;
|
||||
CHAR_T name = '\0';
|
||||
recno_t lno;
|
||||
int append, copy_one, copy_def;
|
||||
|
||||
@ -100,19 +101,19 @@ cut(sp, namep, fm, tm, flags)
|
||||
append = copy_one = copy_def = 0;
|
||||
if (namep != NULL) {
|
||||
name = *namep;
|
||||
if (LF_ISSET(CUT_NUMREQ) || LF_ISSET(CUT_NUMOPT) &&
|
||||
(LF_ISSET(CUT_LINEMODE) || fm->lno != tm->lno)) {
|
||||
if (LF_ISSET(CUT_NUMREQ) || (LF_ISSET(CUT_NUMOPT) &&
|
||||
(LF_ISSET(CUT_LINEMODE) || fm->lno != tm->lno))) {
|
||||
copy_one = 1;
|
||||
cb_rotate(sp);
|
||||
}
|
||||
if ((append = isupper(name)) == 1) {
|
||||
if ((append = isupper(name))) {
|
||||
if (!copy_one)
|
||||
copy_def = 1;
|
||||
name = tolower(name);
|
||||
}
|
||||
namecb: CBNAME(sp, cbp, name);
|
||||
} else if (LF_ISSET(CUT_NUMREQ) || LF_ISSET(CUT_NUMOPT) &&
|
||||
(LF_ISSET(CUT_LINEMODE) || fm->lno != tm->lno)) {
|
||||
} else if (LF_ISSET(CUT_NUMREQ) || (LF_ISSET(CUT_NUMOPT) &&
|
||||
(LF_ISSET(CUT_LINEMODE) || fm->lno != tm->lno))) {
|
||||
name = '1';
|
||||
cb_rotate(sp);
|
||||
goto namecb;
|
||||
@ -127,26 +128,25 @@ namecb: CBNAME(sp, cbp, name);
|
||||
if (cbp == NULL) {
|
||||
CALLOC_RET(sp, cbp, CB *, 1, sizeof(CB));
|
||||
cbp->name = name;
|
||||
CIRCLEQ_INIT(&cbp->textq);
|
||||
LIST_INSERT_HEAD(&sp->gp->cutq, cbp, q);
|
||||
TAILQ_INIT(cbp->textq);
|
||||
SLIST_INSERT_HEAD(sp->gp->cutq, cbp, q);
|
||||
} else if (!append) {
|
||||
text_lfree(&cbp->textq);
|
||||
text_lfree(cbp->textq);
|
||||
cbp->len = 0;
|
||||
cbp->flags = 0;
|
||||
}
|
||||
|
||||
|
||||
#define ENTIRE_LINE 0
|
||||
/* In line mode, it's pretty easy, just cut the lines. */
|
||||
if (LF_ISSET(CUT_LINEMODE)) {
|
||||
cbp->flags |= CB_LMODE;
|
||||
for (lno = fm->lno; lno <= tm->lno; ++lno)
|
||||
if (cut_line(sp, lno, 0, 0, cbp))
|
||||
if (cut_line(sp, lno, 0, ENTIRE_LINE, cbp))
|
||||
goto cut_line_err;
|
||||
} else {
|
||||
/*
|
||||
* Get the first line. A length of 0 causes cut_line
|
||||
* to cut from the MARK to the end of the line.
|
||||
* Get the first line. A length of ENTIRE_LINE causes
|
||||
* cut_line to cut from the MARK to the end of the line.
|
||||
*/
|
||||
if (cut_line(sp, fm->lno, fm->cno, fm->lno != tm->lno ?
|
||||
ENTIRE_LINE : (tm->cno - fm->cno) + 1, cbp))
|
||||
@ -180,7 +180,7 @@ namecb: CBNAME(sp, cbp, name);
|
||||
return (0);
|
||||
|
||||
cut_line_err:
|
||||
text_lfree(&cbp->textq);
|
||||
text_lfree(cbp->textq);
|
||||
cbp->len = 0;
|
||||
cbp->flags = 0;
|
||||
return (1);
|
||||
@ -191,45 +191,29 @@ namecb: CBNAME(sp, cbp, name);
|
||||
* Rotate the numbered buffers up one.
|
||||
*/
|
||||
static void
|
||||
cb_rotate(sp)
|
||||
SCR *sp;
|
||||
cb_rotate(SCR *sp)
|
||||
{
|
||||
CB *cbp, *del_cbp;
|
||||
CB *cbp, *del_cbp = NULL, *pre_cbp = NULL;
|
||||
|
||||
del_cbp = NULL;
|
||||
for (cbp = sp->gp->cutq.lh_first; cbp != NULL; cbp = cbp->q.le_next)
|
||||
SLIST_FOREACH(cbp, sp->gp->cutq, q) {
|
||||
switch(cbp->name) {
|
||||
case '1':
|
||||
cbp->name = '2';
|
||||
break;
|
||||
case '2':
|
||||
cbp->name = '3';
|
||||
break;
|
||||
case '3':
|
||||
cbp->name = '4';
|
||||
break;
|
||||
case '4':
|
||||
cbp->name = '5';
|
||||
break;
|
||||
case '5':
|
||||
cbp->name = '6';
|
||||
break;
|
||||
case '6':
|
||||
cbp->name = '7';
|
||||
break;
|
||||
case '7':
|
||||
cbp->name = '8';
|
||||
break;
|
||||
case '8':
|
||||
cbp->name = '9';
|
||||
case '1': case '2': case '3':
|
||||
case '4': case '5': case '6':
|
||||
case '7': case '8':
|
||||
cbp->name += 1;
|
||||
break;
|
||||
case '9':
|
||||
if (cbp == SLIST_FIRST(sp->gp->cutq))
|
||||
SLIST_REMOVE_HEAD(sp->gp->cutq, q);
|
||||
else
|
||||
SLIST_REMOVE_AFTER(pre_cbp, q);
|
||||
del_cbp = cbp;
|
||||
break;
|
||||
}
|
||||
pre_cbp = cbp;
|
||||
}
|
||||
if (del_cbp != NULL) {
|
||||
LIST_REMOVE(del_cbp, q);
|
||||
text_lfree(&del_cbp->textq);
|
||||
text_lfree(del_cbp->textq);
|
||||
free(del_cbp);
|
||||
}
|
||||
}
|
||||
@ -241,15 +225,16 @@ cb_rotate(sp)
|
||||
* PUBLIC: int cut_line __P((SCR *, recno_t, size_t, size_t, CB *));
|
||||
*/
|
||||
int
|
||||
cut_line(sp, lno, fcno, clen, cbp)
|
||||
SCR *sp;
|
||||
recno_t lno;
|
||||
size_t fcno, clen;
|
||||
CB *cbp;
|
||||
cut_line(
|
||||
SCR *sp,
|
||||
recno_t lno,
|
||||
size_t fcno,
|
||||
size_t clen,
|
||||
CB *cbp)
|
||||
{
|
||||
TEXT *tp;
|
||||
size_t len;
|
||||
char *p;
|
||||
CHAR_T *p;
|
||||
|
||||
/* Get the line. */
|
||||
if (db_get(sp, lno, DBG_FATAL, &p, &len))
|
||||
@ -264,14 +249,14 @@ cut_line(sp, lno, fcno, clen, cbp)
|
||||
* copy the portion we want, and reset the TEXT length.
|
||||
*/
|
||||
if (len != 0) {
|
||||
if (clen == 0)
|
||||
if (clen == ENTIRE_LINE)
|
||||
clen = len - fcno;
|
||||
memcpy(tp->lb, p + fcno, clen);
|
||||
MEMCPY(tp->lb, p + fcno, clen);
|
||||
tp->len = clen;
|
||||
}
|
||||
|
||||
/* Append to the end of the cut buffer. */
|
||||
CIRCLEQ_INSERT_TAIL(&cbp->textq, tp, q);
|
||||
TAILQ_INSERT_TAIL(cbp->textq, tp, q);
|
||||
cbp->len += tp->len;
|
||||
|
||||
return (0);
|
||||
@ -284,36 +269,36 @@ cut_line(sp, lno, fcno, clen, cbp)
|
||||
* PUBLIC: void cut_close __P((GS *));
|
||||
*/
|
||||
void
|
||||
cut_close(gp)
|
||||
GS *gp;
|
||||
cut_close(GS *gp)
|
||||
{
|
||||
CB *cbp;
|
||||
|
||||
/* Free cut buffer list. */
|
||||
while ((cbp = gp->cutq.lh_first) != NULL) {
|
||||
if (cbp->textq.cqh_first != (void *)&cbp->textq)
|
||||
text_lfree(&cbp->textq);
|
||||
LIST_REMOVE(cbp, q);
|
||||
while ((cbp = SLIST_FIRST(gp->cutq)) != NULL) {
|
||||
if (!TAILQ_EMPTY(cbp->textq))
|
||||
text_lfree(cbp->textq);
|
||||
SLIST_REMOVE_HEAD(gp->cutq, q);
|
||||
free(cbp);
|
||||
}
|
||||
|
||||
/* Free default cut storage. */
|
||||
cbp = &gp->dcb_store;
|
||||
if (cbp->textq.cqh_first != (void *)&cbp->textq)
|
||||
text_lfree(&cbp->textq);
|
||||
if (!TAILQ_EMPTY(cbp->textq))
|
||||
text_lfree(cbp->textq);
|
||||
}
|
||||
|
||||
/*
|
||||
* text_init --
|
||||
* Allocate a new TEXT structure.
|
||||
*
|
||||
* PUBLIC: TEXT *text_init __P((SCR *, const char *, size_t, size_t));
|
||||
* PUBLIC: TEXT *text_init __P((SCR *, const CHAR_T *, size_t, size_t));
|
||||
*/
|
||||
TEXT *
|
||||
text_init(sp, p, len, total_len)
|
||||
SCR *sp;
|
||||
const char *p;
|
||||
size_t len, total_len;
|
||||
text_init(
|
||||
SCR *sp,
|
||||
const CHAR_T *p,
|
||||
size_t len,
|
||||
size_t total_len)
|
||||
{
|
||||
TEXT *tp;
|
||||
|
||||
@ -321,14 +306,14 @@ text_init(sp, p, len, total_len)
|
||||
if (tp == NULL)
|
||||
return (NULL);
|
||||
/* ANSI C doesn't define a call to malloc(3) for 0 bytes. */
|
||||
if ((tp->lb_len = total_len) != 0) {
|
||||
if ((tp->lb_len = total_len * sizeof(CHAR_T)) != 0) {
|
||||
MALLOC(sp, tp->lb, CHAR_T *, tp->lb_len);
|
||||
if (tp->lb == NULL) {
|
||||
free(tp);
|
||||
return (NULL);
|
||||
}
|
||||
if (p != NULL && len != 0)
|
||||
memcpy(tp->lb, p, len);
|
||||
MEMCPY(tp->lb, p, len);
|
||||
}
|
||||
tp->len = len;
|
||||
return (tp);
|
||||
@ -341,13 +326,12 @@ text_init(sp, p, len, total_len)
|
||||
* PUBLIC: void text_lfree __P((TEXTH *));
|
||||
*/
|
||||
void
|
||||
text_lfree(headp)
|
||||
TEXTH *headp;
|
||||
text_lfree(TEXTH *headp)
|
||||
{
|
||||
TEXT *tp;
|
||||
|
||||
while ((tp = headp->cqh_first) != (void *)headp) {
|
||||
CIRCLEQ_REMOVE(headp, tp, q);
|
||||
while ((tp = TAILQ_FIRST(headp)) != NULL) {
|
||||
TAILQ_REMOVE(headp, tp, q);
|
||||
text_free(tp);
|
||||
}
|
||||
}
|
||||
@ -359,8 +343,7 @@ text_lfree(headp)
|
||||
* PUBLIC: void text_free __P((TEXT *));
|
||||
*/
|
||||
void
|
||||
text_free(tp)
|
||||
TEXT *tp;
|
||||
text_free(TEXT *tp)
|
||||
{
|
||||
if (tp->lb != NULL)
|
||||
free(tp->lb);
|
||||
|
@ -6,16 +6,17 @@
|
||||
*
|
||||
* See the LICENSE file for redistribution information.
|
||||
*
|
||||
* @(#)cut.h 10.5 (Berkeley) 4/3/96
|
||||
* $Id: cut.h,v 10.10 2012/02/11 15:52:33 zy Exp $
|
||||
*/
|
||||
|
||||
typedef struct _texth TEXTH; /* TEXT list head structure. */
|
||||
CIRCLEQ_HEAD(_texth, _text);
|
||||
TAILQ_HEAD(_texth, _text);
|
||||
|
||||
/* Cut buffers. */
|
||||
struct _cb {
|
||||
LIST_ENTRY(_cb) q; /* Linked list of cut buffers. */
|
||||
TEXTH textq; /* Linked list of TEXT structures. */
|
||||
SLIST_ENTRY(_cb) q; /* Linked list of cut buffers. */
|
||||
TEXTH textq[1]; /* Linked list of TEXT structures. */
|
||||
/* XXXX Needed ? Can non ascii-chars be cut buffer names ? */
|
||||
CHAR_T name; /* Cut buffer name. */
|
||||
size_t len; /* Total length of cut text. */
|
||||
|
||||
@ -25,13 +26,15 @@ struct _cb {
|
||||
|
||||
/* Lines/blocks of text. */
|
||||
struct _text { /* Text: a linked list of lines. */
|
||||
CIRCLEQ_ENTRY(_text) q; /* Linked list of text structures. */
|
||||
char *lb; /* Line buffer. */
|
||||
TAILQ_ENTRY(_text) q; /* Linked list of text structures. */
|
||||
CHAR_T *lb; /* Line buffer. */
|
||||
size_t lb_len; /* Line buffer length. */
|
||||
size_t len; /* Line length. */
|
||||
|
||||
/* These fields are used by the vi text input routine. */
|
||||
recno_t lno; /* 1-N: file line. */
|
||||
|
||||
#define ENTIRE_LINE ((size_t)-1) /* cno: end of the line. */
|
||||
size_t cno; /* 0-N: file character in line. */
|
||||
size_t ai; /* 0-N: autoindent bytes. */
|
||||
size_t insert; /* 0-N: bytes to insert (push). */
|
||||
@ -65,8 +68,7 @@ struct _text { /* Text: a linked list of lines. */
|
||||
#define CBNAME(sp, cbp, nch) { \
|
||||
CHAR_T L__name; \
|
||||
L__name = isupper(nch) ? tolower(nch) : (nch); \
|
||||
for (cbp = sp->gp->cutq.lh_first; \
|
||||
cbp != NULL; cbp = cbp->q.le_next) \
|
||||
SLIST_FOREACH(cbp, sp->gp->cutq, q) \
|
||||
if (cbp->name == L__name) \
|
||||
break; \
|
||||
}
|
||||
|
@ -10,11 +10,12 @@
|
||||
#include "config.h"
|
||||
|
||||
#ifndef lint
|
||||
static const char sccsid[] = "@(#)delete.c 10.12 (Berkeley) 10/23/96";
|
||||
static const char sccsid[] = "$Id: delete.c,v 10.18 2012/02/11 15:52:33 zy Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/queue.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#include <bitstring.h>
|
||||
#include <errno.h>
|
||||
@ -32,14 +33,15 @@ static const char sccsid[] = "@(#)delete.c 10.12 (Berkeley) 10/23/96";
|
||||
* PUBLIC: int del __P((SCR *, MARK *, MARK *, int));
|
||||
*/
|
||||
int
|
||||
del(sp, fm, tm, lmode)
|
||||
SCR *sp;
|
||||
MARK *fm, *tm;
|
||||
int lmode;
|
||||
del(
|
||||
SCR *sp,
|
||||
MARK *fm,
|
||||
MARK *tm,
|
||||
int lmode)
|
||||
{
|
||||
recno_t lno;
|
||||
size_t blen, len, nlen, tlen;
|
||||
char *bp, *p;
|
||||
CHAR_T *bp, *p;
|
||||
int eof, rval;
|
||||
|
||||
bp = NULL;
|
||||
@ -66,7 +68,7 @@ del(sp, fm, tm, lmode)
|
||||
if (tm->lno == lno) {
|
||||
if (db_get(sp, lno, DBG_FATAL, &p, &len))
|
||||
return (1);
|
||||
eof = tm->cno >= len ? 1 : 0;
|
||||
eof = tm->cno != ENTIRE_LINE && tm->cno >= len ? 1 : 0;
|
||||
} else
|
||||
eof = 1;
|
||||
if (eof) {
|
||||
@ -80,8 +82,8 @@ del(sp, fm, tm, lmode)
|
||||
}
|
||||
if (db_get(sp, fm->lno, DBG_FATAL, &p, &len))
|
||||
return (1);
|
||||
GET_SPACE_RET(sp, bp, blen, fm->cno);
|
||||
memcpy(bp, p, fm->cno);
|
||||
GET_SPACE_RETW(sp, bp, blen, fm->cno);
|
||||
MEMCPY(bp, p, fm->cno);
|
||||
if (db_set(sp, fm->lno, bp, fm->cno))
|
||||
return (1);
|
||||
goto done;
|
||||
@ -92,10 +94,11 @@ del(sp, fm, tm, lmode)
|
||||
if (tm->lno == fm->lno) {
|
||||
if (db_get(sp, fm->lno, DBG_FATAL, &p, &len))
|
||||
return (1);
|
||||
GET_SPACE_RET(sp, bp, blen, len);
|
||||
GET_SPACE_RETW(sp, bp, blen, len);
|
||||
if (fm->cno != 0)
|
||||
memcpy(bp, p, fm->cno);
|
||||
memcpy(bp + fm->cno, p + (tm->cno + 1), len - (tm->cno + 1));
|
||||
MEMCPY(bp, p, fm->cno);
|
||||
MEMCPY(bp + fm->cno, p + (tm->cno + 1),
|
||||
len - (tm->cno + 1));
|
||||
if (db_set(sp, fm->lno,
|
||||
bp, len - ((tm->cno - fm->cno) + 1)))
|
||||
goto err;
|
||||
@ -110,8 +113,8 @@ del(sp, fm, tm, lmode)
|
||||
if ((tlen = fm->cno) != 0) {
|
||||
if (db_get(sp, fm->lno, DBG_FATAL, &p, NULL))
|
||||
return (1);
|
||||
GET_SPACE_RET(sp, bp, blen, tlen + 256);
|
||||
memcpy(bp, p, tlen);
|
||||
GET_SPACE_RETW(sp, bp, blen, tlen + 256);
|
||||
MEMCPY(bp, p, tlen);
|
||||
}
|
||||
|
||||
/* Copy the end partial line into place. */
|
||||
@ -130,11 +133,11 @@ del(sp, fm, tm, lmode)
|
||||
goto err;
|
||||
}
|
||||
if (tlen == 0) {
|
||||
GET_SPACE_RET(sp, bp, blen, nlen);
|
||||
GET_SPACE_RETW(sp, bp, blen, nlen);
|
||||
} else
|
||||
ADD_SPACE_RET(sp, bp, blen, nlen);
|
||||
ADD_SPACE_RETW(sp, bp, blen, nlen);
|
||||
|
||||
memcpy(bp + tlen, p + (tm->cno + 1), len - (tm->cno + 1));
|
||||
MEMCPY(bp + tlen, p + (tm->cno + 1), len - (tm->cno + 1));
|
||||
tlen += len - (tm->cno + 1);
|
||||
}
|
||||
|
||||
@ -155,6 +158,6 @@ done: rval = 0;
|
||||
if (0)
|
||||
err: rval = 1;
|
||||
if (bp != NULL)
|
||||
FREE_SPACE(sp, bp, blen);
|
||||
FREE_SPACEW(sp, bp, blen);
|
||||
return (rval);
|
||||
}
|
||||
|
230
contrib/nvi/common/encoding.c
Normal file
230
contrib/nvi/common/encoding.c
Normal file
@ -0,0 +1,230 @@
|
||||
/*-
|
||||
* Copyright (c) 2011, 2012
|
||||
* Zhihao Yuan. All rights reserved.
|
||||
*
|
||||
* See the LICENSE file for redistribution information.
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static const char sccsid[] = "$Id: encoding.c,v 1.4 2011/12/13 19:40:52 zy Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
int looks_utf8 __P((const char *, size_t));
|
||||
int looks_utf16 __P((const char *, size_t));
|
||||
int decode_utf8 __P((const char *));
|
||||
int decode_utf16 __P((const char *, int));
|
||||
|
||||
#define F 0 /* character never appears in text */
|
||||
#define T 1 /* character appears in plain ASCII text */
|
||||
#define I 2 /* character appears in ISO-8859 text */
|
||||
#define X 3 /* character appears in non-ISO extended ASCII (Mac, IBM PC) */
|
||||
|
||||
static char text_chars[256] = {
|
||||
/* BEL BS HT LF FF CR */
|
||||
F, F, F, F, F, F, F, T, T, T, T, F, T, T, F, F, /* 0x0X */
|
||||
/* ESC */
|
||||
F, F, F, F, F, F, F, F, F, F, F, T, F, F, F, F, /* 0x1X */
|
||||
T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x2X */
|
||||
T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x3X */
|
||||
T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x4X */
|
||||
T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x5X */
|
||||
T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, /* 0x6X */
|
||||
T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, F, /* 0x7X */
|
||||
/* NEL */
|
||||
X, X, X, X, X, T, X, X, X, X, X, X, X, X, X, X, /* 0x8X */
|
||||
X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, /* 0x9X */
|
||||
I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xaX */
|
||||
I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xbX */
|
||||
I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xcX */
|
||||
I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xdX */
|
||||
I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, /* 0xeX */
|
||||
I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I /* 0xfX */
|
||||
};
|
||||
|
||||
/*
|
||||
* looks_utf8 --
|
||||
* Decide whether some text looks like UTF-8. Returns:
|
||||
*
|
||||
* -1: invalid UTF-8
|
||||
* 0: uses odd control characters, so doesn't look like text
|
||||
* 1: 7-bit text
|
||||
* 2: definitely UTF-8 text (valid high-bit set bytes)
|
||||
*
|
||||
* Based on RFC 3629. UTF-8 with BOM is not accepted.
|
||||
*
|
||||
* PUBLIC: int looks_utf8 __P((const char *, size_t));
|
||||
*/
|
||||
int
|
||||
looks_utf8(const char *ibuf, size_t nbytes)
|
||||
{
|
||||
const u_char *buf = (u_char *)ibuf;
|
||||
size_t i;
|
||||
int n;
|
||||
int gotone = 0, ctrl = 0;
|
||||
|
||||
for (i = 0; i < nbytes; i++) {
|
||||
if ((buf[i] & 0x80) == 0) { /* 0xxxxxxx is plain ASCII */
|
||||
/*
|
||||
* Even if the whole file is valid UTF-8 sequences,
|
||||
* still reject it if it uses weird control characters.
|
||||
*/
|
||||
|
||||
if (text_chars[buf[i]] != T)
|
||||
ctrl = 1;
|
||||
} else if ((buf[i] & 0x40) == 0) { /* 10xxxxxx never 1st byte */
|
||||
return -1;
|
||||
} else { /* 11xxxxxx begins UTF-8 */
|
||||
int following;
|
||||
|
||||
if ((buf[i] & 0x20) == 0) /* 110xxxxx */
|
||||
if (buf[i] > 0xC1) /* C0, C1 */
|
||||
following = 1;
|
||||
else return -1;
|
||||
else if ((buf[i] & 0x10) == 0) /* 1110xxxx */
|
||||
following = 2;
|
||||
else if ((buf[i] & 0x08) == 0) /* 11110xxx */
|
||||
if (buf[i] < 0xF5)
|
||||
following = 3;
|
||||
else return -1; /* F5, F6, F7 */
|
||||
else
|
||||
return -1; /* F8~FF */
|
||||
|
||||
for (n = 0; n < following; n++) {
|
||||
i++;
|
||||
if (i >= nbytes)
|
||||
goto done;
|
||||
|
||||
if (buf[i] & 0x40) /* 10xxxxxx */
|
||||
return -1;
|
||||
}
|
||||
|
||||
gotone = 1;
|
||||
}
|
||||
}
|
||||
done:
|
||||
return ctrl ? 0 : (gotone ? 2 : 1);
|
||||
}
|
||||
|
||||
/*
|
||||
* looks_utf16 --
|
||||
* Decide whether some text looks like UTF-16. Returns:
|
||||
*
|
||||
* 0: invalid UTF-16
|
||||
* 1: Little-endian UTF-16
|
||||
* 2: Big-endian UTF-16
|
||||
*
|
||||
* PUBLIC: int looks_utf16 __P((const char *, size_t));
|
||||
*/
|
||||
int
|
||||
looks_utf16(const char *ibuf, size_t nbytes)
|
||||
{
|
||||
const u_char *buf = (u_char *)ibuf;
|
||||
int bigend;
|
||||
size_t i;
|
||||
unsigned int c;
|
||||
int bom;
|
||||
int following = 0;
|
||||
|
||||
if (nbytes < 2)
|
||||
return 0;
|
||||
|
||||
bom = buf[0] << 8 ^ buf[1];
|
||||
if (bom == 0xFFFE)
|
||||
bigend = 0;
|
||||
else if (bom == 0xFEFF)
|
||||
bigend = 1;
|
||||
else
|
||||
return 0;
|
||||
|
||||
for (i = 2; i + 1 < nbytes; i += 2) {
|
||||
if (bigend)
|
||||
c = buf[i] << 8 ^ buf[i + 1];
|
||||
else
|
||||
c = buf[i] ^ buf[i + 1] << 8;
|
||||
|
||||
if (!following)
|
||||
if (c < 0xD800 || c > 0xDFFF)
|
||||
if (c < 128 && text_chars[c] != T)
|
||||
return 0;
|
||||
else
|
||||
following = 0;
|
||||
else if (c > 0xDBFF)
|
||||
return 0;
|
||||
else {
|
||||
following = 1;
|
||||
continue;
|
||||
}
|
||||
else if (c < 0xDC00 || c > 0xDFFF)
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1 + bigend;
|
||||
}
|
||||
|
||||
#undef F
|
||||
#undef T
|
||||
#undef I
|
||||
#undef X
|
||||
|
||||
/*
|
||||
* decode_utf8 --
|
||||
* Decode a UTF-8 character from byte string to Unicode.
|
||||
* Returns -1 if the first byte is a not UTF-8 leader.
|
||||
*
|
||||
* Based on RFC 3629, but without error detection.
|
||||
*
|
||||
* PUBLIC: int decode_utf8 __P((const char *));
|
||||
*/
|
||||
int decode_utf8(const char *ibuf) {
|
||||
const u_char *buf = (u_char *)ibuf;
|
||||
int u = -1;
|
||||
|
||||
if ((buf[0] & 0x80) == 0)
|
||||
u = buf[0];
|
||||
else if ((buf[0] & 0x40) == 0);
|
||||
else {
|
||||
if ((buf[0] & 0x20) == 0)
|
||||
u = (buf[0] ^ 0xC0) << 6 ^ (buf[1] ^ 0x80);
|
||||
else if ((buf[0] & 0x10) == 0)
|
||||
u = (buf[0] ^ 0xE0) << 12 ^ (buf[1] ^ 0x80) << 6
|
||||
^ (buf[2] ^ 0x80);
|
||||
else if (((buf[0] & 0x08) == 0))
|
||||
u = (buf[0] ^ 0xF0) << 18 ^ (buf[1] ^ 0x80) << 12
|
||||
^ (buf[2] ^ 0x80) << 6 ^ (buf[3] ^ 0x80);
|
||||
}
|
||||
return u;
|
||||
}
|
||||
|
||||
/*
|
||||
* decode_utf16 --
|
||||
* Decode a UTF-16 character from byte string to Unicode.
|
||||
* Returns -1 if the first unsigned integer is invalid.
|
||||
*
|
||||
* No error detection on supplementary bytes.
|
||||
*
|
||||
* PUBLIC: int decode_utf16 __P((const char *, int));
|
||||
*/
|
||||
int decode_utf16(const char* ibuf, int bigend) {
|
||||
const u_char *buf = (u_char *)ibuf;
|
||||
int u = -1;
|
||||
unsigned int w1, w2;
|
||||
|
||||
if (bigend)
|
||||
w1 = buf[0] << 8 ^ buf[1];
|
||||
else
|
||||
w1 = buf[0] ^ buf[1] << 8;
|
||||
|
||||
if (w1 < 0xD800 || w1 > 0xDFFF)
|
||||
u = w1;
|
||||
else if (w1 > 0xDBFF);
|
||||
else {
|
||||
if (bigend)
|
||||
w2 = buf[2] << 8 ^ buf[3];
|
||||
else
|
||||
w2 = buf[2] ^ buf[3] << 8;
|
||||
u = ((w1 ^ 0xD800) << 10 ^ (w2 ^ 0xDC00)) + 0x10000;
|
||||
}
|
||||
return u;
|
||||
}
|
@ -5,23 +5,18 @@
|
||||
* Keith Bostic. All rights reserved.
|
||||
*
|
||||
* See the LICENSE file for redistribution information.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static const char sccsid[] = "@(#)exf.c 10.49 (Berkeley) 10/10/96";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$FreeBSD$";
|
||||
static const char sccsid[] = "$Id: exf.c,v 10.62 2013/07/01 23:28:13 zy Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/types.h> /* XXX: param.h may not have included types.h */
|
||||
#include <sys/types.h>
|
||||
#include <sys/queue.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
/*
|
||||
* We include <sys/file.h>, because the flock(2) and open(2) #defines
|
||||
@ -44,6 +39,7 @@ static const char rcsid[] =
|
||||
|
||||
static int file_backup __P((SCR *, char *, char *));
|
||||
static void file_cinit __P((SCR *));
|
||||
static void file_encinit __P((SCR *));
|
||||
static void file_comment __P((SCR *));
|
||||
static int file_spath __P((SCR *, FREF *, struct stat *, int *));
|
||||
|
||||
@ -60,12 +56,12 @@ static int file_spath __P((SCR *, FREF *, struct stat *, int *));
|
||||
* vi now remembers the last location in any file that it has ever edited,
|
||||
* not just the previously edited file.
|
||||
*
|
||||
* PUBLIC: FREF *file_add __P((SCR *, CHAR_T *));
|
||||
* PUBLIC: FREF *file_add __P((SCR *, char *));
|
||||
*/
|
||||
FREF *
|
||||
file_add(sp, name)
|
||||
SCR *sp;
|
||||
CHAR_T *name;
|
||||
file_add(
|
||||
SCR *sp,
|
||||
char *name)
|
||||
{
|
||||
GS *gp;
|
||||
FREF *frp, *tfrp;
|
||||
@ -81,15 +77,12 @@ file_add(sp, name)
|
||||
*/
|
||||
gp = sp->gp;
|
||||
if (name != NULL)
|
||||
for (frp = gp->frefq.cqh_first;
|
||||
frp != (FREF *)&gp->frefq; frp = frp->q.cqe_next) {
|
||||
TAILQ_FOREACH_SAFE(frp, gp->frefq, q, tfrp) {
|
||||
if (frp->name == NULL) {
|
||||
tfrp = frp->q.cqe_next;
|
||||
CIRCLEQ_REMOVE(&gp->frefq, frp, q);
|
||||
TAILQ_REMOVE(gp->frefq, frp, q);
|
||||
if (frp->name != NULL)
|
||||
free(frp->name);
|
||||
free(frp);
|
||||
frp = tfrp;
|
||||
continue;
|
||||
}
|
||||
if (!strcmp(frp->name, name))
|
||||
@ -114,7 +107,7 @@ file_add(sp, name)
|
||||
}
|
||||
|
||||
/* Append into the chain of file names. */
|
||||
CIRCLEQ_INSERT_TAIL(&gp->frefq, frp, q);
|
||||
TAILQ_INSERT_TAIL(gp->frefq, frp, q);
|
||||
|
||||
return (frp);
|
||||
}
|
||||
@ -128,18 +121,18 @@ file_add(sp, name)
|
||||
* PUBLIC: int file_init __P((SCR *, FREF *, char *, int));
|
||||
*/
|
||||
int
|
||||
file_init(sp, frp, rcv_name, flags)
|
||||
SCR *sp;
|
||||
FREF *frp;
|
||||
char *rcv_name;
|
||||
int flags;
|
||||
file_init(
|
||||
SCR *sp,
|
||||
FREF *frp,
|
||||
char *rcv_name,
|
||||
int flags)
|
||||
{
|
||||
EXF *ep;
|
||||
RECNOINFO oinfo;
|
||||
RECNOINFO oinfo = { 0 };
|
||||
struct stat sb;
|
||||
size_t psize;
|
||||
int fd, exists, open_err, readonly;
|
||||
char *oname, tname[MAXPATHLEN];
|
||||
char *oname, *tname;
|
||||
|
||||
open_err = readonly = 0;
|
||||
|
||||
@ -169,7 +162,7 @@ file_init(sp, frp, rcv_name, flags)
|
||||
*/
|
||||
CALLOC_RET(sp, ep, EXF *, 1, sizeof(EXF));
|
||||
ep->c_lno = ep->c_nlines = OOBLNO;
|
||||
ep->rcv_fd = ep->fcntl_fd = -1;
|
||||
ep->rcv_fd = -1;
|
||||
F_SET(ep, F_FIRSTMODIFY);
|
||||
|
||||
/*
|
||||
@ -187,52 +180,56 @@ file_init(sp, frp, rcv_name, flags)
|
||||
*/
|
||||
oname = frp->name;
|
||||
if (LF_ISSET(FS_OPENERR) || oname == NULL || !exists) {
|
||||
if (opts_empty(sp, O_TMP_DIRECTORY, 0))
|
||||
struct stat sb;
|
||||
|
||||
if (opts_empty(sp, O_TMPDIR, 0))
|
||||
goto err;
|
||||
(void)snprintf(tname, sizeof(tname),
|
||||
"%s/vi.XXXXXXXXXX", O_STR(sp, O_TMP_DIRECTORY));
|
||||
if ((fd = mkstemp(tname)) == -1) {
|
||||
if ((tname =
|
||||
join(O_STR(sp, O_TMPDIR), "vi.XXXXXXXXXX")) == NULL) {
|
||||
msgq(sp, M_SYSERR, NULL);
|
||||
goto err;
|
||||
}
|
||||
if ((fd = mkstemp(tname)) == -1 || fstat(fd, &sb)) {
|
||||
free(tname);
|
||||
msgq(sp, M_SYSERR,
|
||||
"237|Unable to create temporary file");
|
||||
goto err;
|
||||
}
|
||||
(void)close(fd);
|
||||
|
||||
if (frp->name == NULL)
|
||||
frp->tname = tname;
|
||||
if (frp->name == NULL) {
|
||||
F_SET(frp, FR_TMPFILE);
|
||||
if ((frp->tname = strdup(tname)) == NULL ||
|
||||
frp->name == NULL && (frp->name = strdup(tname)) == NULL) {
|
||||
if (frp->tname != NULL)
|
||||
free(frp->tname);
|
||||
msgq(sp, M_SYSERR, NULL);
|
||||
(void)unlink(tname);
|
||||
goto err;
|
||||
if ((frp->name = strdup(tname)) == NULL) {
|
||||
msgq(sp, M_SYSERR, NULL);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
oname = frp->tname;
|
||||
psize = 1024;
|
||||
if (!LF_ISSET(FS_OPENERR))
|
||||
F_SET(frp, FR_NEWFILE);
|
||||
|
||||
time(&ep->mtime);
|
||||
ep->mtim = sb.st_mtimespec;
|
||||
} else {
|
||||
/*
|
||||
* XXX
|
||||
* A seat of the pants calculation: try to keep the file in
|
||||
* 15 pages or less. Don't use a page size larger than 10K
|
||||
* 15 pages or less. Don't use a page size larger than 16K
|
||||
* (vi should have good locality) or smaller than 1K.
|
||||
*/
|
||||
psize = ((sb.st_size / 15) + 1023) / 1024;
|
||||
if (psize > 10)
|
||||
psize = 10;
|
||||
if (psize > 16)
|
||||
psize = 16;
|
||||
if (psize == 0)
|
||||
psize = 1;
|
||||
psize *= 1024;
|
||||
psize = p2roundup(psize) << 10;
|
||||
|
||||
F_SET(ep, F_DEVSET);
|
||||
ep->mdev = sb.st_dev;
|
||||
ep->minode = sb.st_ino;
|
||||
|
||||
ep->mtime = sb.st_mtime;
|
||||
ep->mtim = sb.st_mtimespec;
|
||||
|
||||
if (!S_ISREG(sb.st_mode))
|
||||
msgq_str(sp, M_ERR, oname,
|
||||
@ -240,7 +237,6 @@ file_init(sp, frp, rcv_name, flags)
|
||||
}
|
||||
|
||||
/* Set up recovery. */
|
||||
memset(&oinfo, 0, sizeof(RECNOINFO));
|
||||
oinfo.bval = '\n'; /* Always set. */
|
||||
oinfo.psize = psize;
|
||||
oinfo.flags = F_ISSET(sp->gp, G_SNAPSHOT) ? R_SNAPSHOT : 0;
|
||||
@ -338,8 +334,7 @@ file_init(sp, frp, rcv_name, flags)
|
||||
* an error.
|
||||
*/
|
||||
if (rcv_name == NULL)
|
||||
switch (file_lock(sp, oname,
|
||||
&ep->fcntl_fd, ep->db->fd(ep->db), 0)) {
|
||||
switch (file_lock(sp, oname, ep->db->fd(ep->db), 0)) {
|
||||
case LOCK_FAILED:
|
||||
F_SET(frp, FR_UNLOCKED);
|
||||
break;
|
||||
@ -396,9 +391,9 @@ file_init(sp, frp, rcv_name, flags)
|
||||
* probably isn't a problem for vi when it's running standalone.
|
||||
*/
|
||||
if (readonly || F_ISSET(sp, SC_READONLY) ||
|
||||
!F_ISSET(frp, FR_NEWFILE) &&
|
||||
(!F_ISSET(frp, FR_NEWFILE) &&
|
||||
(!(sb.st_mode & (S_IWUSR | S_IWGRP | S_IWOTH)) ||
|
||||
access(frp->name, W_OK)))
|
||||
access(frp->name, W_OK))))
|
||||
O_SET(sp, O_READONLY);
|
||||
else
|
||||
O_CLR(sp, O_READONLY);
|
||||
@ -408,6 +403,9 @@ file_init(sp, frp, rcv_name, flags)
|
||||
sp->ep = ep;
|
||||
sp->frp = frp;
|
||||
|
||||
/* Detect and set the file encoding */
|
||||
file_encinit(sp);
|
||||
|
||||
/* Set the initial cursor position, queue initial command. */
|
||||
file_cinit(sp);
|
||||
|
||||
@ -446,16 +444,16 @@ oerr: if (F_ISSET(ep, F_RCV_ON))
|
||||
* try and open.
|
||||
*/
|
||||
static int
|
||||
file_spath(sp, frp, sbp, existsp)
|
||||
SCR *sp;
|
||||
FREF *frp;
|
||||
struct stat *sbp;
|
||||
int *existsp;
|
||||
file_spath(
|
||||
SCR *sp,
|
||||
FREF *frp,
|
||||
struct stat *sbp,
|
||||
int *existsp)
|
||||
{
|
||||
CHAR_T savech;
|
||||
int savech;
|
||||
size_t len;
|
||||
int found;
|
||||
char *name, *p, *t, path[MAXPATHLEN];
|
||||
char *name, *p, *t, *path;
|
||||
|
||||
/*
|
||||
* If the name is NULL or an explicit reference (i.e., the first
|
||||
@ -466,8 +464,8 @@ file_spath(sp, frp, sbp, existsp)
|
||||
*existsp = 0;
|
||||
return (0);
|
||||
}
|
||||
if (name[0] == '/' || name[0] == '.' &&
|
||||
(name[1] == '/' || name[1] == '.' && name[2] == '/')) {
|
||||
if (name[0] == '/' || (name[0] == '.' &&
|
||||
(name[1] == '/' || (name[1] == '.' && name[2] == '/')))) {
|
||||
*existsp = !stat(name, sbp);
|
||||
return (0);
|
||||
}
|
||||
@ -481,16 +479,24 @@ file_spath(sp, frp, sbp, existsp)
|
||||
/* Try the O_PATH option values. */
|
||||
for (found = 0, p = t = O_STR(sp, O_PATH);; ++p)
|
||||
if (*p == ':' || *p == '\0') {
|
||||
if (t < p - 1) {
|
||||
/*
|
||||
* Ignore the empty strings and ".", since we've already
|
||||
* tried the current directory.
|
||||
*/
|
||||
if (t < p && (p - t != 1 || *t != '.')) {
|
||||
savech = *p;
|
||||
*p = '\0';
|
||||
len = snprintf(path,
|
||||
sizeof(path), "%s/%s", t, name);
|
||||
if ((path = join(t, name)) == NULL) {
|
||||
msgq(sp, M_SYSERR, NULL);
|
||||
break;
|
||||
}
|
||||
len = strlen(path);
|
||||
*p = savech;
|
||||
if (!stat(path, sbp)) {
|
||||
found = 1;
|
||||
break;
|
||||
}
|
||||
free(path);
|
||||
}
|
||||
t = p + 1;
|
||||
if (*p == '\0')
|
||||
@ -499,10 +505,8 @@ file_spath(sp, frp, sbp, existsp)
|
||||
|
||||
/* If we found it, build a new pathname and discard the old one. */
|
||||
if (found) {
|
||||
MALLOC_RET(sp, p, char *, len + 1);
|
||||
memcpy(p, path, len + 1);
|
||||
free(frp->name);
|
||||
frp->name = p;
|
||||
frp->name = path;
|
||||
}
|
||||
*existsp = found;
|
||||
return (0);
|
||||
@ -513,13 +517,14 @@ file_spath(sp, frp, sbp, existsp)
|
||||
* Set up the initial cursor position.
|
||||
*/
|
||||
static void
|
||||
file_cinit(sp)
|
||||
SCR *sp;
|
||||
file_cinit(SCR *sp)
|
||||
{
|
||||
GS *gp;
|
||||
MARK m;
|
||||
size_t len;
|
||||
int nb;
|
||||
CHAR_T *wp;
|
||||
size_t wlen;
|
||||
|
||||
/* Set some basic defaults. */
|
||||
sp->lno = 1;
|
||||
@ -553,8 +558,9 @@ file_cinit(sp)
|
||||
sp->lno = 1;
|
||||
sp->cno = 0;
|
||||
}
|
||||
if (ex_run_str(sp,
|
||||
"-c option", gp->c_option, strlen(gp->c_option), 1, 1))
|
||||
CHAR2INT(sp, gp->c_option, strlen(gp->c_option) + 1,
|
||||
wp, wlen);
|
||||
if (ex_run_str(sp, "-c option", wp, wlen - 1, 1, 1))
|
||||
return;
|
||||
gp->c_option = NULL;
|
||||
} else if (F_ISSET(sp, SC_EX)) {
|
||||
@ -622,10 +628,10 @@ file_cinit(sp)
|
||||
* PUBLIC: int file_end __P((SCR *, EXF *, int));
|
||||
*/
|
||||
int
|
||||
file_end(sp, ep, force)
|
||||
SCR *sp;
|
||||
EXF *ep;
|
||||
int force;
|
||||
file_end(
|
||||
SCR *sp,
|
||||
EXF *ep,
|
||||
int force)
|
||||
{
|
||||
FREF *frp;
|
||||
|
||||
@ -670,7 +676,7 @@ file_end(sp, ep, force)
|
||||
free(frp->tname);
|
||||
frp->tname = NULL;
|
||||
if (F_ISSET(frp, FR_TMPFILE)) {
|
||||
CIRCLEQ_REMOVE(&sp->gp->frefq, frp, q);
|
||||
TAILQ_REMOVE(sp->gp->frefq, frp, q);
|
||||
if (frp->name != NULL)
|
||||
free(frp->name);
|
||||
free(frp);
|
||||
@ -712,14 +718,14 @@ file_end(sp, ep, force)
|
||||
if (ep->rcv_mpath != NULL && unlink(ep->rcv_mpath))
|
||||
msgq_str(sp, M_SYSERR, ep->rcv_mpath, "243|%s: remove");
|
||||
}
|
||||
if (ep->fcntl_fd != -1)
|
||||
(void)close(ep->fcntl_fd);
|
||||
if (ep->rcv_fd != -1)
|
||||
(void)close(ep->rcv_fd);
|
||||
if (ep->rcv_path != NULL)
|
||||
free(ep->rcv_path);
|
||||
if (ep->rcv_mpath != NULL)
|
||||
free(ep->rcv_mpath);
|
||||
if (ep->c_blen > 0)
|
||||
free(ep->c_lp);
|
||||
|
||||
free(ep);
|
||||
return (0);
|
||||
@ -734,11 +740,12 @@ file_end(sp, ep, force)
|
||||
* PUBLIC: int file_write __P((SCR *, MARK *, MARK *, char *, int));
|
||||
*/
|
||||
int
|
||||
file_write(sp, fm, tm, name, flags)
|
||||
SCR *sp;
|
||||
MARK *fm, *tm;
|
||||
char *name;
|
||||
int flags;
|
||||
file_write(
|
||||
SCR *sp,
|
||||
MARK *fm,
|
||||
MARK *tm,
|
||||
char *name,
|
||||
int flags)
|
||||
{
|
||||
enum { NEWFILE, OLDFILE } mtype;
|
||||
struct stat sb;
|
||||
@ -749,7 +756,7 @@ file_write(sp, fm, tm, name, flags)
|
||||
size_t len;
|
||||
u_long nlno, nch;
|
||||
int fd, nf, noname, oflags, rval;
|
||||
char *p, *s, *t, buf[MAXPATHLEN + 64];
|
||||
char *p, *s, *t, buf[1024];
|
||||
const char *msgstr;
|
||||
|
||||
ep = sp->ep;
|
||||
@ -812,9 +819,9 @@ file_write(sp, fm, tm, name, flags)
|
||||
mtype = NEWFILE;
|
||||
else {
|
||||
if (noname && !LF_ISSET(FS_FORCE | FS_APPEND) &&
|
||||
(F_ISSET(ep, F_DEVSET) &&
|
||||
(sb.st_dev != ep->mdev || sb.st_ino != ep->minode) ||
|
||||
sb.st_mtime != ep->mtime)) {
|
||||
((F_ISSET(ep, F_DEVSET) &&
|
||||
(sb.st_dev != ep->mdev || sb.st_ino != ep->minode)) ||
|
||||
timespeccmp(&sb.st_mtimespec, &ep->mtim, !=))) {
|
||||
msgq_str(sp, M_ERR, name, LF_ISSET(FS_POSSIBLE) ?
|
||||
"250|%s: file modified more recently than this copy; use ! to override" :
|
||||
"251|%s: file modified more recently than this copy");
|
||||
@ -873,25 +880,10 @@ file_write(sp, fm, tm, name, flags)
|
||||
SIGUNBLOCK;
|
||||
|
||||
/* Try and get a lock. */
|
||||
if (!noname && file_lock(sp, NULL, NULL, fd, 0) == LOCK_UNAVAIL)
|
||||
if (!noname && file_lock(sp, NULL, fd, 0) == LOCK_UNAVAIL)
|
||||
msgq_str(sp, M_ERR, name,
|
||||
"252|%s: write lock was unavailable");
|
||||
|
||||
#if __linux__
|
||||
/*
|
||||
* XXX
|
||||
* In libc 4.5.x, fdopen(fd, "w") clears the O_APPEND flag (if set).
|
||||
* This bug is fixed in libc 4.6.x.
|
||||
*
|
||||
* This code works around this problem for libc 4.5.x users.
|
||||
* Note that this code is harmless if you're using libc 4.6.x.
|
||||
*/
|
||||
if (LF_ISSET(FS_APPEND) && lseek(fd, (off_t)0, SEEK_END) < 0) {
|
||||
msgq(sp, M_SYSERR, name);
|
||||
return (1);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Use stdio for buffering.
|
||||
*
|
||||
@ -925,13 +917,13 @@ file_write(sp, fm, tm, name, flags)
|
||||
*/
|
||||
if (noname)
|
||||
if (stat(name, &sb))
|
||||
time(&ep->mtime);
|
||||
timepoint_system(&ep->mtim);
|
||||
else {
|
||||
F_SET(ep, F_DEVSET);
|
||||
ep->mdev = sb.st_dev;
|
||||
ep->minode = sb.st_ino;
|
||||
|
||||
ep->mtime = sb.st_mtime;
|
||||
ep->mtim = sb.st_mtimespec;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1023,9 +1015,10 @@ file_write(sp, fm, tm, name, flags)
|
||||
* recreate the file. So, let's not risk it.
|
||||
*/
|
||||
static int
|
||||
file_backup(sp, name, bname)
|
||||
SCR *sp;
|
||||
char *name, *bname;
|
||||
file_backup(
|
||||
SCR *sp,
|
||||
char *name,
|
||||
char *bname)
|
||||
{
|
||||
struct dirent *dp;
|
||||
struct stat sb;
|
||||
@ -1035,6 +1028,10 @@ file_backup(sp, name, bname)
|
||||
size_t blen;
|
||||
int flags, maxnum, nr, num, nw, rfd, wfd, version;
|
||||
char *bp, *estr, *p, *pct, *slash, *t, *wfname, buf[8192];
|
||||
CHAR_T *wp;
|
||||
size_t wlen;
|
||||
size_t nlen;
|
||||
char *d = NULL;
|
||||
|
||||
rfd = wfd = -1;
|
||||
bp = estr = wfname = NULL;
|
||||
@ -1064,15 +1061,20 @@ file_backup(sp, name, bname)
|
||||
*
|
||||
* Shell and file name expand the option's value.
|
||||
*/
|
||||
argv_init(sp, &cmd);
|
||||
ex_cinit(&cmd, 0, 0, 0, 0, 0, NULL);
|
||||
ex_cinit(sp, &cmd, 0, 0, 0, 0, 0);
|
||||
if (bname[0] == 'N') {
|
||||
version = 1;
|
||||
++bname;
|
||||
} else
|
||||
version = 0;
|
||||
if (argv_exp2(sp, &cmd, bname, strlen(bname)))
|
||||
CHAR2INT(sp, bname, strlen(bname), wp, wlen);
|
||||
if ((wp = v_wstrdup(sp, wp, wlen)) == NULL)
|
||||
return (1);
|
||||
if (argv_exp2(sp, &cmd, wp, wlen)) {
|
||||
free(wp);
|
||||
return (1);
|
||||
}
|
||||
free(wp);
|
||||
|
||||
/*
|
||||
* 0 args: impossible.
|
||||
@ -1095,9 +1097,13 @@ file_backup(sp, name, bname)
|
||||
* by one.
|
||||
*/
|
||||
if (version) {
|
||||
GET_SPACE_GOTO(sp, bp, blen, cmd.argv[0]->len * 2 + 50);
|
||||
for (t = bp, slash = NULL,
|
||||
p = cmd.argv[0]->bp; p[0] != '\0'; *t++ = *p++)
|
||||
GET_SPACE_GOTOC(sp, bp, blen, cmd.argv[0]->len * 2 + 50);
|
||||
INT2CHAR(sp, cmd.argv[0]->bp, cmd.argv[0]->len + 1,
|
||||
p, nlen);
|
||||
d = strdup(p);
|
||||
p = d;
|
||||
for (t = bp, slash = NULL;
|
||||
p[0] != '\0'; *t++ = *p++)
|
||||
if (p[0] == '%') {
|
||||
if (p[1] != '%')
|
||||
*t++ = '%';
|
||||
@ -1118,7 +1124,8 @@ file_backup(sp, name, bname)
|
||||
p = slash + 1;
|
||||
}
|
||||
if (dirp == NULL) {
|
||||
estr = cmd.argv[0]->bp;
|
||||
INT2CHAR(sp, cmd.argv[0]->bp, cmd.argv[0]->len + 1,
|
||||
estr, nlen);
|
||||
goto err;
|
||||
}
|
||||
|
||||
@ -1132,7 +1139,8 @@ file_backup(sp, name, bname)
|
||||
wfname = bp;
|
||||
} else {
|
||||
bp = NULL;
|
||||
wfname = cmd.argv[0]->bp;
|
||||
INT2CHAR(sp, cmd.argv[0]->bp, cmd.argv[0]->len + 1,
|
||||
wfname, nlen);
|
||||
}
|
||||
|
||||
/* Open the backup file, avoiding lurkers. */
|
||||
@ -1192,22 +1200,69 @@ err: if (rfd != -1)
|
||||
}
|
||||
if (estr)
|
||||
msgq_str(sp, M_SYSERR, estr, "%s");
|
||||
if (d != NULL)
|
||||
free(d);
|
||||
if (bp != NULL)
|
||||
FREE_SPACE(sp, bp, blen);
|
||||
return (1);
|
||||
}
|
||||
|
||||
/*
|
||||
* file_encinit --
|
||||
* Read the first line and set the O_FILEENCODING.
|
||||
*/
|
||||
static void
|
||||
file_encinit(SCR *sp)
|
||||
{
|
||||
#if defined(USE_WIDECHAR) && defined(USE_ICONV)
|
||||
size_t len;
|
||||
char *p;
|
||||
size_t blen = 0;
|
||||
char buf[4096]; /* not need to be '\0'-terminated */
|
||||
recno_t ln = 1;
|
||||
EXF *ep;
|
||||
|
||||
ep = sp->ep;
|
||||
|
||||
while (!db_rget(sp, ln++, &p, &len)) {
|
||||
if (blen + len > sizeof(buf))
|
||||
len = sizeof(buf) - blen;
|
||||
memcpy(buf + blen, p, len);
|
||||
blen += len;
|
||||
if (blen == sizeof(buf))
|
||||
break;
|
||||
else
|
||||
buf[blen++] = '\n';
|
||||
}
|
||||
|
||||
/*
|
||||
* Detect UTF-8 and fallback to the locale/preset encoding.
|
||||
*
|
||||
* XXX
|
||||
* A manually set O_FILEENCODING indicates the "fallback
|
||||
* encoding", but UTF-8, which can be safely detected, is not
|
||||
* inherited from the old screen.
|
||||
*/
|
||||
if (looks_utf8(buf, blen) > 1)
|
||||
o_set(sp, O_FILEENCODING, OS_STRDUP, "utf-8", 0);
|
||||
else if (!O_ISSET(sp, O_FILEENCODING) ||
|
||||
!strncasecmp(O_STR(sp, O_FILEENCODING), "utf-8", 5))
|
||||
o_set(sp, O_FILEENCODING, OS_STRDUP, codeset(), 0);
|
||||
|
||||
conv_enc(sp, O_FILEENCODING, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
* file_comment --
|
||||
* Skip the first comment.
|
||||
*/
|
||||
static void
|
||||
file_comment(sp)
|
||||
SCR *sp;
|
||||
file_comment(SCR *sp)
|
||||
{
|
||||
recno_t lno;
|
||||
size_t len;
|
||||
char *p;
|
||||
CHAR_T *p;
|
||||
|
||||
for (lno = 1; !db_get(sp, lno, 0, &p, &len) && len == 0; ++lno);
|
||||
if (p == NULL)
|
||||
@ -1250,9 +1305,10 @@ file_comment(sp)
|
||||
* PUBLIC: int file_m1 __P((SCR *, int, int));
|
||||
*/
|
||||
int
|
||||
file_m1(sp, force, flags)
|
||||
SCR *sp;
|
||||
int force, flags;
|
||||
file_m1(
|
||||
SCR *sp,
|
||||
int force,
|
||||
int flags)
|
||||
{
|
||||
EXF *ep;
|
||||
|
||||
@ -1290,9 +1346,9 @@ file_m1(sp, force, flags)
|
||||
* PUBLIC: int file_m2 __P((SCR *, int));
|
||||
*/
|
||||
int
|
||||
file_m2(sp, force)
|
||||
SCR *sp;
|
||||
int force;
|
||||
file_m2(
|
||||
SCR *sp,
|
||||
int force)
|
||||
{
|
||||
EXF *ep;
|
||||
|
||||
@ -1322,9 +1378,9 @@ file_m2(sp, force)
|
||||
* PUBLIC: int file_m3 __P((SCR *, int));
|
||||
*/
|
||||
int
|
||||
file_m3(sp, force)
|
||||
SCR *sp;
|
||||
int force;
|
||||
file_m3(
|
||||
SCR *sp,
|
||||
int force)
|
||||
{
|
||||
EXF *ep;
|
||||
|
||||
@ -1358,9 +1414,9 @@ file_m3(sp, force)
|
||||
* PUBLIC: int file_aw __P((SCR *, int));
|
||||
*/
|
||||
int
|
||||
file_aw(sp, flags)
|
||||
SCR *sp;
|
||||
int flags;
|
||||
file_aw(
|
||||
SCR *sp,
|
||||
int flags)
|
||||
{
|
||||
if (!F_ISSET(sp->ep, F_MODIFIED))
|
||||
return (0);
|
||||
@ -1419,9 +1475,9 @@ file_aw(sp, flags)
|
||||
* PUBLIC: void set_alt_name __P((SCR *, char *));
|
||||
*/
|
||||
void
|
||||
set_alt_name(sp, name)
|
||||
SCR *sp;
|
||||
char *name;
|
||||
set_alt_name(
|
||||
SCR *sp,
|
||||
char *name)
|
||||
{
|
||||
if (sp->alt_name != NULL)
|
||||
free(sp->alt_name);
|
||||
@ -1435,35 +1491,18 @@ set_alt_name(sp, name)
|
||||
* file_lock --
|
||||
* Get an exclusive lock on a file.
|
||||
*
|
||||
* XXX
|
||||
* The default locking is flock(2) style, not fcntl(2). The latter is
|
||||
* known to fail badly on some systems, and its only advantage is that
|
||||
* it occasionally works over NFS.
|
||||
*
|
||||
* Furthermore, the semantics of fcntl(2) are wrong. The problems are
|
||||
* two-fold: you can't close any file descriptor associated with the file
|
||||
* without losing all of the locks, and you can't get an exclusive lock
|
||||
* unless you have the file open for writing. Someone ought to be shot,
|
||||
* but it's probably too late, they may already have reproduced. To get
|
||||
* around these problems, nvi opens the files for writing when it can and
|
||||
* acquires a second file descriptor when it can't. The recovery files
|
||||
* are examples of the former, they're always opened for writing. The DB
|
||||
* files can't be opened for writing because the semantics of DB are that
|
||||
* files opened for writing are flushed back to disk when the DB session
|
||||
* is ended. So, in that case we have to acquire an extra file descriptor.
|
||||
*
|
||||
* PUBLIC: lockr_t file_lock __P((SCR *, char *, int *, int, int));
|
||||
* PUBLIC: lockr_t file_lock __P((SCR *, char *, int, int));
|
||||
*/
|
||||
lockr_t
|
||||
file_lock(sp, name, fdp, fd, iswrite)
|
||||
SCR *sp;
|
||||
char *name;
|
||||
int *fdp, fd, iswrite;
|
||||
file_lock(
|
||||
SCR *sp,
|
||||
char *name,
|
||||
int fd,
|
||||
int iswrite)
|
||||
{
|
||||
if (!O_ISSET(sp, O_LOCKFILES))
|
||||
return (LOCK_SUCCESS);
|
||||
|
||||
#ifdef HAVE_LOCK_FLOCK /* Hurrah! We've got flock(2). */
|
||||
/*
|
||||
* !!!
|
||||
* We need to distinguish a lock not being available for the file
|
||||
@ -1481,59 +1520,4 @@ file_lock(sp, name, fdp, fd, iswrite)
|
||||
|| errno == EWOULDBLOCK
|
||||
#endif
|
||||
? LOCK_UNAVAIL : LOCK_FAILED);
|
||||
#endif
|
||||
#ifdef HAVE_LOCK_FCNTL /* Gag me. We've got fcntl(2). */
|
||||
{
|
||||
struct flock arg;
|
||||
int didopen, sverrno;
|
||||
|
||||
arg.l_type = F_WRLCK;
|
||||
arg.l_whence = 0; /* SEEK_SET */
|
||||
arg.l_start = arg.l_len = 0;
|
||||
arg.l_pid = 0;
|
||||
|
||||
/*
|
||||
* If the file descriptor isn't opened for writing, it must fail.
|
||||
* If we fail because we can't get a read/write file descriptor,
|
||||
* we return LOCK_SUCCESS, believing that the file is readonly
|
||||
* and that will be sufficient to warn the user.
|
||||
*/
|
||||
if (!iswrite) {
|
||||
if (name == NULL || fdp == NULL)
|
||||
return (LOCK_FAILED);
|
||||
if ((fd = open(name, O_RDWR, 0)) == -1)
|
||||
return (LOCK_SUCCESS);
|
||||
*fdp = fd;
|
||||
didopen = 1;
|
||||
}
|
||||
|
||||
errno = 0;
|
||||
if (!fcntl(fd, F_SETLK, &arg)) {
|
||||
fcntl(fd, F_SETFD, 1);
|
||||
return (LOCK_SUCCESS);
|
||||
}
|
||||
|
||||
if (didopen) {
|
||||
sverrno = errno;
|
||||
(void)close(fd);
|
||||
errno = sverrno;
|
||||
}
|
||||
|
||||
/*
|
||||
* !!!
|
||||
* We need to distinguish a lock not being available for the file
|
||||
* from the file system not supporting locking. Fcntl is documented
|
||||
* as returning EACCESS and EAGAIN; add EWOULDBLOCK for good measure,
|
||||
* and assume they are the former. There's no portable way to do this.
|
||||
*/
|
||||
return (errno == EACCES || errno == EAGAIN
|
||||
#ifdef EWOULDBLOCK
|
||||
|| errno == EWOULDBLOCK
|
||||
#endif
|
||||
? LOCK_UNAVAIL : LOCK_FAILED);
|
||||
}
|
||||
#endif
|
||||
#if !defined(HAVE_LOCK_FLOCK) && !defined(HAVE_LOCK_FCNTL)
|
||||
return (LOCK_SUCCESS);
|
||||
#endif
|
||||
}
|
||||
|
@ -6,7 +6,7 @@
|
||||
*
|
||||
* See the LICENSE file for redistribution information.
|
||||
*
|
||||
* @(#)exf.h 10.7 (Berkeley) 7/9/96
|
||||
* $Id: exf.h,v 10.10 2012/07/06 16:03:37 zy Exp $
|
||||
*/
|
||||
/* Undo direction. */
|
||||
/*
|
||||
@ -18,8 +18,9 @@ struct _exf {
|
||||
|
||||
/* Underlying database state. */
|
||||
DB *db; /* File db structure. */
|
||||
char *c_lp; /* Cached line. */
|
||||
CHAR_T *c_lp; /* Cached line. */
|
||||
size_t c_len; /* Cached line length. */
|
||||
size_t c_blen; /* Cached line buffer length. */
|
||||
recno_t c_lno; /* Cached line number. */
|
||||
recno_t c_nlines; /* Cached lines in the file. */
|
||||
|
||||
@ -31,17 +32,12 @@ struct _exf {
|
||||
MARK l_cursor; /* Log cursor position. */
|
||||
dir_t lundo; /* Last undo direction. */
|
||||
|
||||
LIST_HEAD(_markh, _lmark) marks;/* Linked list of file MARK's. */
|
||||
/* Linked list of file MARK's. */
|
||||
SLIST_HEAD(_markh, _lmark) marks[1];
|
||||
|
||||
/*
|
||||
* XXX
|
||||
* Mtime should be a struct timespec, but time_t is more portable.
|
||||
*/
|
||||
dev_t mdev; /* Device. */
|
||||
ino_t minode; /* Inode. */
|
||||
time_t mtime; /* Last modification time. */
|
||||
|
||||
int fcntl_fd; /* Fcntl locking fd; see exf.c. */
|
||||
dev_t mdev; /* Device. */
|
||||
ino_t minode; /* Inode. */
|
||||
struct timespec mtim; /* Last modification time. */
|
||||
|
||||
/*
|
||||
* Recovery in general, and these fields specifically, are described
|
||||
|
@ -1,94 +1,19 @@
|
||||
#ifndef HAVE_BSEARCH
|
||||
void *bsearch __P((const void *, const void *, size_t,
|
||||
size_t, int (*)(const void *, const void *)));
|
||||
#endif
|
||||
#ifndef HAVE_SETENV
|
||||
int setenv __P((const char *, const char *, int));
|
||||
#endif
|
||||
#ifndef HAVE_UNSETENV
|
||||
void unsetenv __P((const char *));
|
||||
#endif
|
||||
#ifndef HAVE_GETHOSTNAME
|
||||
int gethostname __P((char *, int));
|
||||
#endif
|
||||
#ifndef HAVE_GETOPT
|
||||
int getopt __P((int, char * const *, const char *));
|
||||
#endif
|
||||
#ifndef HAVE_MEMCHR
|
||||
void *memchr __P((const void *, int, size_t));
|
||||
#endif
|
||||
#ifndef HAVE_MEMCPY
|
||||
void *memcpy __P((void *, const void *, size_t));
|
||||
#endif
|
||||
#ifndef HAVE_MEMMOVE
|
||||
void *memmove __P((void *, const void *, size_t));
|
||||
#endif
|
||||
#ifndef HAVE_MEMSET
|
||||
void *memset __P((void *, int, size_t));
|
||||
#endif
|
||||
#ifndef HAVE_MKSTEMP
|
||||
int mkstemp __P((char *));
|
||||
#endif
|
||||
#ifndef HAVE_MMAP
|
||||
char *mmap __P((char *, size_t, int, int, int, off_t));
|
||||
#endif
|
||||
#ifndef HAVE_MMAP
|
||||
int munmap __P((char *, size_t));
|
||||
#endif
|
||||
#ifndef HAVE_SNPRINTF
|
||||
int snprintf __P((char *, size_t, const char *, ...));
|
||||
#endif
|
||||
#ifndef HAVE_STRDUP
|
||||
char *strdup __P((const char *));
|
||||
#endif
|
||||
#ifndef HAVE_STRERROR
|
||||
char *strerror __P((int));
|
||||
#endif
|
||||
#ifndef HAVE_STRPBRK
|
||||
char *strpbrk __P((const char *, const char *));
|
||||
#endif
|
||||
#ifndef HAVE_STRSEP
|
||||
char *strsep __P((char **, const char *));
|
||||
#endif
|
||||
#ifndef HAVE_STRTOL
|
||||
long strtol __P((const char *, char **, int));
|
||||
#endif
|
||||
#ifndef HAVE_STRTOUL
|
||||
unsigned long strtoul __P((const char *, char **, int));
|
||||
#endif
|
||||
#ifndef HAVE_VSNPRINTF
|
||||
int vsnprintf __P((char *, size_t, const char *, ...));
|
||||
#endif
|
||||
SCR *api_fscreen __P((int, char *));
|
||||
int api_aline __P((SCR *, recno_t, char *, size_t));
|
||||
int api_dline __P((SCR *, recno_t));
|
||||
int api_gline __P((SCR *, recno_t, char **, size_t *));
|
||||
int api_iline __P((SCR *, recno_t, char *, size_t));
|
||||
int api_lline __P((SCR *, recno_t *));
|
||||
int api_sline __P((SCR *, recno_t, char *, size_t));
|
||||
int api_getmark __P((SCR *, int, MARK *));
|
||||
int api_setmark __P((SCR *, int, MARK *));
|
||||
int api_nextmark __P((SCR *, int, char *));
|
||||
int api_getcursor __P((SCR *, MARK *));
|
||||
int api_setcursor __P((SCR *, MARK *));
|
||||
void api_emessage __P((SCR *, char *));
|
||||
void api_imessage __P((SCR *, char *));
|
||||
int api_edit __P((SCR *, char *, SCR **, int));
|
||||
int api_escreen __P((SCR *));
|
||||
int api_swscreen __P((SCR *, SCR *));
|
||||
int api_map __P((SCR *, char *, char *, size_t));
|
||||
int api_unmap __P((SCR *, char *));
|
||||
int api_opts_get __P((SCR *, char *, char **, int *));
|
||||
int api_opts_set __P((SCR *, char *, char *, u_long, int));
|
||||
int api_run_str __P((SCR *, char *));
|
||||
char * codeset __P((void));
|
||||
void conv_init __P((SCR *, SCR *));
|
||||
int conv_enc __P((SCR *, int, char *));
|
||||
void conv_end __P((SCR *));
|
||||
int cut __P((SCR *, CHAR_T *, MARK *, MARK *, int));
|
||||
int cut_line __P((SCR *, recno_t, size_t, size_t, CB *));
|
||||
void cut_close __P((GS *));
|
||||
TEXT *text_init __P((SCR *, const char *, size_t, size_t));
|
||||
TEXT *text_init __P((SCR *, const CHAR_T *, size_t, size_t));
|
||||
void text_lfree __P((TEXTH *));
|
||||
void text_free __P((TEXT *));
|
||||
int del __P((SCR *, MARK *, MARK *, int));
|
||||
FREF *file_add __P((SCR *, CHAR_T *));
|
||||
int looks_utf8 __P((const char *, size_t));
|
||||
int looks_utf16 __P((const char *, size_t));
|
||||
int decode_utf8 __P((const char *));
|
||||
int decode_utf16 __P((const char *, int));
|
||||
FREF *file_add __P((SCR *, char *));
|
||||
int file_init __P((SCR *, FREF *, char *, int));
|
||||
int file_end __P((SCR *, EXF *, int));
|
||||
int file_write __P((SCR *, MARK *, MARK *, char *, int));
|
||||
@ -97,24 +22,26 @@ int file_m2 __P((SCR *, int));
|
||||
int file_m3 __P((SCR *, int));
|
||||
int file_aw __P((SCR *, int));
|
||||
void set_alt_name __P((SCR *, char *));
|
||||
lockr_t file_lock __P((SCR *, char *, int *, int, int));
|
||||
lockr_t file_lock __P((SCR *, char *, int, int));
|
||||
int v_key_init __P((SCR *));
|
||||
void v_key_ilookup __P((SCR *));
|
||||
size_t v_key_len __P((SCR *, ARG_CHAR_T));
|
||||
CHAR_T *v_key_name __P((SCR *, ARG_CHAR_T));
|
||||
int v_key_val __P((SCR *, ARG_CHAR_T));
|
||||
char *v_key_name __P((SCR *, ARG_CHAR_T));
|
||||
e_key_t v_key_val __P((SCR *, ARG_CHAR_T));
|
||||
int v_event_push __P((SCR *, EVENT *, CHAR_T *, size_t, u_int));
|
||||
int v_event_get __P((SCR *, EVENT *, int, u_int32_t));
|
||||
void v_event_err __P((SCR *, EVENT *));
|
||||
int v_event_flush __P((SCR *, u_int));
|
||||
int db_eget __P((SCR *, recno_t, char **, size_t *, int *));
|
||||
int db_get __P((SCR *, recno_t, u_int32_t, char **, size_t *));
|
||||
int db_eget __P((SCR *, recno_t, CHAR_T **, size_t *, int *));
|
||||
int db_get __P((SCR *, recno_t, u_int32_t, CHAR_T **, size_t *));
|
||||
int db_delete __P((SCR *, recno_t));
|
||||
int db_append __P((SCR *, int, recno_t, char *, size_t));
|
||||
int db_insert __P((SCR *, recno_t, char *, size_t));
|
||||
int db_set __P((SCR *, recno_t, char *, size_t));
|
||||
int db_append __P((SCR *, int, recno_t, CHAR_T *, size_t));
|
||||
int db_insert __P((SCR *, recno_t, CHAR_T *, size_t));
|
||||
int db_set __P((SCR *, recno_t, CHAR_T *, size_t));
|
||||
int db_exist __P((SCR *, recno_t));
|
||||
int db_last __P((SCR *, recno_t *));
|
||||
int db_rget __P((SCR *, recno_t, char **, size_t *));
|
||||
int db_rset __P((SCR *, recno_t, char *, size_t));
|
||||
void db_err __P((SCR *, recno_t));
|
||||
int log_init __P((SCR *, EXF *));
|
||||
int log_end __P((SCR *, EXF *));
|
||||
@ -132,7 +59,8 @@ int mark_get __P((SCR *, ARG_CHAR_T, MARK *, mtype_t));
|
||||
int mark_set __P((SCR *, ARG_CHAR_T, MARK *, int));
|
||||
int mark_insdel __P((SCR *, lnop_t, recno_t));
|
||||
void msgq __P((SCR *, mtype_t, const char *, ...));
|
||||
void msgq_str __P((SCR *, mtype_t, char *, char *));
|
||||
void msgq_wstr __P((SCR *, mtype_t, const CHAR_T *, const char *));
|
||||
void msgq_str __P((SCR *, mtype_t, const char *, const char *));
|
||||
void mod_rpt __P((SCR *));
|
||||
void msgq_status __P((SCR *, recno_t, u_int));
|
||||
int msg_open __P((SCR *, char *));
|
||||
@ -146,8 +74,8 @@ int o_set __P((SCR *, int, u_int, char *, u_long));
|
||||
int opts_empty __P((SCR *, int, int));
|
||||
void opts_dump __P((SCR *, enum optdisp));
|
||||
int opts_save __P((SCR *, FILE *));
|
||||
OPTLIST const *opts_search __P((char *));
|
||||
void opts_nomatch __P((SCR *, char *));
|
||||
OPTLIST const *opts_search __P((CHAR_T *));
|
||||
void opts_nomatch __P((SCR *, CHAR_T *));
|
||||
int opts_copy __P((SCR *, SCR *));
|
||||
void opts_free __P((SCR *));
|
||||
int f_altwerase __P((SCR *, OPTION *, char *, u_long *));
|
||||
@ -155,17 +83,16 @@ int f_columns __P((SCR *, OPTION *, char *, u_long *));
|
||||
int f_lines __P((SCR *, OPTION *, char *, u_long *));
|
||||
int f_lisp __P((SCR *, OPTION *, char *, u_long *));
|
||||
int f_msgcat __P((SCR *, OPTION *, char *, u_long *));
|
||||
int f_paragraph __P((SCR *, OPTION *, char *, u_long *));
|
||||
int f_print __P((SCR *, OPTION *, char *, u_long *));
|
||||
int f_readonly __P((SCR *, OPTION *, char *, u_long *));
|
||||
int f_recompile __P((SCR *, OPTION *, char *, u_long *));
|
||||
int f_reformat __P((SCR *, OPTION *, char *, u_long *));
|
||||
int f_section __P((SCR *, OPTION *, char *, u_long *));
|
||||
int f_ttywerase __P((SCR *, OPTION *, char *, u_long *));
|
||||
int f_w300 __P((SCR *, OPTION *, char *, u_long *));
|
||||
int f_w1200 __P((SCR *, OPTION *, char *, u_long *));
|
||||
int f_w9600 __P((SCR *, OPTION *, char *, u_long *));
|
||||
int f_window __P((SCR *, OPTION *, char *, u_long *));
|
||||
int f_encoding __P((SCR *, OPTION *, char *, u_long *));
|
||||
int put __P((SCR *, CB *, CHAR_T *, MARK *, MARK *, int));
|
||||
int rcv_tmp __P((SCR *, EXF *, char *));
|
||||
int rcv_init __P((SCR *));
|
||||
@ -176,14 +103,14 @@ int screen_init __P((GS *, SCR *, SCR **));
|
||||
int screen_end __P((SCR *));
|
||||
SCR *screen_next __P((SCR *));
|
||||
int f_search __P((SCR *,
|
||||
MARK *, MARK *, char *, size_t, char **, u_int));
|
||||
MARK *, MARK *, CHAR_T *, size_t, CHAR_T **, u_int));
|
||||
int b_search __P((SCR *,
|
||||
MARK *, MARK *, char *, size_t, char **, u_int));
|
||||
MARK *, MARK *, CHAR_T *, size_t, CHAR_T **, u_int));
|
||||
void search_busy __P((SCR *, busy_t));
|
||||
int seq_set __P((SCR *, CHAR_T *,
|
||||
size_t, CHAR_T *, size_t, CHAR_T *, size_t, seq_t, int));
|
||||
int seq_delete __P((SCR *, CHAR_T *, size_t, seq_t));
|
||||
int seq_mdel __P((SEQ *));
|
||||
int seq_free __P((SEQ *));
|
||||
SEQ *seq_find
|
||||
__P((SCR *, SEQ **, EVENT *, CHAR_T *, size_t, seq_t, int *));
|
||||
void seq_close __P((GS *));
|
||||
@ -193,7 +120,13 @@ int e_memcmp __P((CHAR_T *, EVENT *, size_t));
|
||||
void *binc __P((SCR *, void *, size_t *, size_t));
|
||||
int nonblank __P((SCR *, recno_t, size_t *));
|
||||
char *tail __P((char *));
|
||||
CHAR_T *v_strdup __P((SCR *, const CHAR_T *, size_t));
|
||||
enum nresult nget_uslong __P((u_long *, const char *, char **, int));
|
||||
enum nresult nget_slong __P((long *, const char *, char **, int));
|
||||
char *join __P((char *, char *));
|
||||
char *expanduser __P((char *));
|
||||
char *quote __P((char *));
|
||||
char *v_strdup __P((SCR *, const char *, size_t));
|
||||
CHAR_T *v_wstrdup __P((SCR *, const CHAR_T *, size_t));
|
||||
enum nresult nget_uslong __P((u_long *, const CHAR_T *, CHAR_T **, int));
|
||||
enum nresult nget_slong __P((long *, const CHAR_T *, CHAR_T **, int));
|
||||
void timepoint_steady __P((struct timespec *));
|
||||
void timepoint_system __P((struct timespec *));
|
||||
void TRACE __P((SCR *, const char *, ...));
|
@ -6,11 +6,13 @@
|
||||
*
|
||||
* See the LICENSE file for redistribution information.
|
||||
*
|
||||
* @(#)gs.h 10.34 (Berkeley) 9/24/96
|
||||
* $Id: gs.h,v 11.0 2012/10/17 06:34:37 zy Exp $
|
||||
*/
|
||||
|
||||
#define TEMPORARY_FILE_STRING "/tmp" /* Default temporary file name. */
|
||||
|
||||
#include <nl_types.h>
|
||||
|
||||
/*
|
||||
* File reference structure (FREF). The structure contains the name of the
|
||||
* file, along with the information that follows the name.
|
||||
@ -19,7 +21,7 @@
|
||||
* The read-only bit follows the file name, not the file itself.
|
||||
*/
|
||||
struct _fref {
|
||||
CIRCLEQ_ENTRY(_fref) q; /* Linked list of file references. */
|
||||
TAILQ_ENTRY(_fref) q; /* Linked list of file references. */
|
||||
char *name; /* File name. */
|
||||
char *tname; /* Backing temporary file name. */
|
||||
|
||||
@ -56,20 +58,15 @@ struct _gs {
|
||||
char *progname; /* Programe name. */
|
||||
|
||||
int id; /* Last allocated screen id. */
|
||||
CIRCLEQ_HEAD(_dqh, _scr) dq; /* Displayed screens. */
|
||||
CIRCLEQ_HEAD(_hqh, _scr) hq; /* Hidden screens. */
|
||||
TAILQ_HEAD(_dqh, _scr) dq[1]; /* Displayed screens. */
|
||||
TAILQ_HEAD(_hqh, _scr) hq[1]; /* Hidden screens. */
|
||||
|
||||
SCR *ccl_sp; /* Colon command-line screen. */
|
||||
|
||||
void *perl_interp; /* Perl interpreter. */
|
||||
void *tcl_interp; /* Tcl_Interp *: Tcl interpreter. */
|
||||
|
||||
void *cl_private; /* Curses support private area. */
|
||||
void *ip_private; /* IP support private area. */
|
||||
void *tk_private; /* Tk/Tcl support private area. */
|
||||
|
||||
/* File references. */
|
||||
CIRCLEQ_HEAD(_frefh, _fref) frefq;
|
||||
TAILQ_HEAD(_frefh, _fref) frefq[1];
|
||||
|
||||
#define GO_COLUMNS 0 /* Global options: columns. */
|
||||
#define GO_LINES 1 /* Global options: lines. */
|
||||
@ -77,10 +74,10 @@ struct _gs {
|
||||
#define GO_TERM 3 /* Global options: terminal type. */
|
||||
OPTION opts[GO_TERM + 1];
|
||||
|
||||
DB *msg; /* Message catalog DB. */
|
||||
MSGH msgq; /* User message list. */
|
||||
nl_catd catd; /* Message catalog descriptor. */
|
||||
MSGH msgq[1]; /* User message list. */
|
||||
#define DEFAULT_NOPRINT '\1' /* Emergency non-printable character. */
|
||||
CHAR_T noprint; /* Cached, unprintable character. */
|
||||
int noprint; /* Cached, unprintable character. */
|
||||
|
||||
char *tmp_bp; /* Temporary buffer. */
|
||||
size_t tmp_blen; /* Temporary buffer size. */
|
||||
@ -89,8 +86,9 @@ struct _gs {
|
||||
* Ex command structures (EXCMD). Defined here because ex commands
|
||||
* exist outside of any particular screen or file.
|
||||
*/
|
||||
#define EXCMD_RUNNING(gp) ((gp)->ecq.lh_first->clen != 0)
|
||||
LIST_HEAD(_excmdh, _excmd) ecq; /* Ex command linked list. */
|
||||
#define EXCMD_RUNNING(gp) (SLIST_FIRST((gp)->ecq)->clen != 0)
|
||||
/* Ex command linked list. */
|
||||
SLIST_HEAD(_excmdh, _excmd) ecq[1];
|
||||
EXCMD excmd; /* Default ex command structure. */
|
||||
char *if_name; /* Current associated file. */
|
||||
recno_t if_lno; /* Current associated line number. */
|
||||
@ -108,30 +106,28 @@ struct _gs {
|
||||
|
||||
CB *dcbp; /* Default cut buffer pointer. */
|
||||
CB dcb_store; /* Default cut buffer storage. */
|
||||
LIST_HEAD(_cuth, _cb) cutq; /* Linked list of cut buffers. */
|
||||
SLIST_HEAD(_cuth, _cb) cutq[1]; /* Linked list of cut buffers. */
|
||||
|
||||
#define MAX_BIT_SEQ 128 /* Max + 1 fast check character. */
|
||||
LIST_HEAD(_seqh, _seq) seqq; /* Linked list of maps, abbrevs. */
|
||||
bitstr_t bit_decl(seqb, MAX_BIT_SEQ);
|
||||
#define MAX_BIT_SEQ 0x7f /* Max + 1 fast check character. */
|
||||
SLIST_HEAD(_seqh, _seq) seqq[1];/* Linked list of maps, abbrevs. */
|
||||
bitstr_t bit_decl(seqb, MAX_BIT_SEQ + 1);
|
||||
|
||||
#define MAX_FAST_KEY 254 /* Max fast check character.*/
|
||||
#define MAX_FAST_KEY 0xff /* Max fast check character.*/
|
||||
#define KEY_LEN(sp, ch) \
|
||||
((unsigned char)(ch) <= MAX_FAST_KEY ? \
|
||||
(((ch) & ~MAX_FAST_KEY) == 0 ? \
|
||||
sp->gp->cname[(unsigned char)ch].len : v_key_len(sp, ch))
|
||||
#define KEY_NAME(sp, ch) \
|
||||
((unsigned char)(ch) <= MAX_FAST_KEY ? \
|
||||
(((ch) & ~MAX_FAST_KEY) == 0 ? \
|
||||
sp->gp->cname[(unsigned char)ch].name : v_key_name(sp, ch))
|
||||
struct {
|
||||
CHAR_T name[MAX_CHARACTER_COLUMNS + 1];
|
||||
char name[MAX_CHARACTER_COLUMNS + 1];
|
||||
u_int8_t len;
|
||||
} cname[MAX_FAST_KEY + 1]; /* Fast lookup table. */
|
||||
|
||||
#define KEY_VAL(sp, ch) \
|
||||
((unsigned char)(ch) <= MAX_FAST_KEY ? \
|
||||
sp->gp->special_key[(unsigned char)ch] : \
|
||||
(unsigned char)(ch) > sp->gp->max_special ? 0 : v_key_val(sp,ch))
|
||||
CHAR_T max_special; /* Max special character. */
|
||||
u_char /* Fast lookup table. */
|
||||
(((ch) & ~MAX_FAST_KEY) == 0 ? \
|
||||
sp->gp->special_key[(unsigned char)ch] : v_key_val(sp,ch))
|
||||
e_key_t /* Fast lookup table. */
|
||||
special_key[MAX_FAST_KEY + 1];
|
||||
|
||||
/* Flags. */
|
||||
@ -149,6 +145,8 @@ struct _gs {
|
||||
/* Screen interface functions. */
|
||||
/* Add a string to the screen. */
|
||||
int (*scr_addstr) __P((SCR *, const char *, size_t));
|
||||
/* Add a string to the screen. */
|
||||
int (*scr_waddstr) __P((SCR *, const CHAR_T *, size_t));
|
||||
/* Toggle a screen attribute. */
|
||||
int (*scr_attr) __P((SCR *, scr_attr_t, int));
|
||||
/* Terminal baud rate. */
|
||||
@ -157,12 +155,16 @@ struct _gs {
|
||||
int (*scr_bell) __P((SCR *));
|
||||
/* Display a busy message. */
|
||||
void (*scr_busy) __P((SCR *, const char *, busy_t));
|
||||
/* Prepare child. */
|
||||
int (*scr_child) __P((SCR *));
|
||||
/* Clear to the end of the line. */
|
||||
int (*scr_clrtoeol) __P((SCR *));
|
||||
/* Return the cursor location. */
|
||||
int (*scr_cursor) __P((SCR *, size_t *, size_t *));
|
||||
/* Delete a line. */
|
||||
int (*scr_deleteln) __P((SCR *));
|
||||
/* Discard a screen. */
|
||||
int (*scr_discard) __P((SCR *, SCR **));
|
||||
/* Get a keyboard event. */
|
||||
int (*scr_event) __P((SCR *, EVENT *, u_int32_t, int));
|
||||
/* Ex: screen adjustment routine. */
|
||||
@ -183,8 +185,12 @@ struct _gs {
|
||||
int (*scr_refresh) __P((SCR *, int));
|
||||
/* Rename the file. */
|
||||
int (*scr_rename) __P((SCR *, char *, int));
|
||||
/* Reply to an event. */
|
||||
int (*scr_reply) __P((SCR *, int, char *));
|
||||
/* Set the screen type. */
|
||||
int (*scr_screen) __P((SCR *, u_int32_t));
|
||||
/* Split the screen. */
|
||||
int (*scr_split) __P((SCR *, SCR *));
|
||||
/* Suspend the editor. */
|
||||
int (*scr_suspend) __P((SCR *, int *));
|
||||
/* Print usage message. */
|
||||
|
@ -10,7 +10,7 @@
|
||||
#include "config.h"
|
||||
|
||||
#ifndef lint
|
||||
static const char sccsid[] = "@(#)key.c 10.33 (Berkeley) 9/24/96";
|
||||
static const char sccsid[] = "$Id: key.c,v 10.53 2013/03/11 01:20:53 yamt Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
@ -21,10 +21,10 @@ static const char sccsid[] = "@(#)key.c 10.33 (Berkeley) 9/24/96";
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <limits.h>
|
||||
#include <locale.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <strings.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "common.h"
|
||||
@ -100,32 +100,15 @@ static int nkeylist =
|
||||
* PUBLIC: int v_key_init __P((SCR *));
|
||||
*/
|
||||
int
|
||||
v_key_init(sp)
|
||||
SCR *sp;
|
||||
v_key_init(SCR *sp)
|
||||
{
|
||||
CHAR_T ch;
|
||||
int ch;
|
||||
GS *gp;
|
||||
KEYLIST *kp;
|
||||
int cnt;
|
||||
|
||||
gp = sp->gp;
|
||||
|
||||
/*
|
||||
* XXX
|
||||
* 8-bit only, for now. Recompilation should get you any 8-bit
|
||||
* character set, as long as nul isn't a character.
|
||||
*/
|
||||
(void)setlocale(LC_ALL, "");
|
||||
#if __linux__
|
||||
/*
|
||||
* In libc 4.5.26, setlocale(LC_ALL, ""), doesn't setup the table
|
||||
* for ctype(3c) correctly. This bug is fixed in libc 4.6.x.
|
||||
*
|
||||
* This code works around this problem for libc 4.5.x users.
|
||||
* Note that this code is harmless if you're using libc 4.6.x.
|
||||
*/
|
||||
(void)setlocale(LC_CTYPE, "");
|
||||
#endif
|
||||
v_key_ilookup(sp);
|
||||
|
||||
v_keyval(sp, K_CNTRLD, KEY_VEOF);
|
||||
@ -137,15 +120,11 @@ v_key_init(sp)
|
||||
qsort(keylist, nkeylist, sizeof(keylist[0]), v_key_cmp);
|
||||
|
||||
/* Initialize the fast lookup table. */
|
||||
for (gp->max_special = 0, kp = keylist, cnt = nkeylist; cnt--; ++kp) {
|
||||
if (gp->max_special < kp->value)
|
||||
gp->max_special = kp->value;
|
||||
if (kp->ch <= MAX_FAST_KEY)
|
||||
gp->special_key[kp->ch] = kp->value;
|
||||
}
|
||||
for (kp = keylist, cnt = nkeylist; cnt--; ++kp)
|
||||
gp->special_key[kp->ch] = kp->value;
|
||||
|
||||
/* Find a non-printable character to use as a message separator. */
|
||||
for (ch = 1; ch <= MAX_CHAR_T; ++ch)
|
||||
for (ch = 1; ch <= UCHAR_MAX; ++ch)
|
||||
if (!isprint(ch)) {
|
||||
gp->noprint = ch;
|
||||
break;
|
||||
@ -166,10 +145,10 @@ v_key_init(sp)
|
||||
* in the table, so we check for that first.
|
||||
*/
|
||||
static void
|
||||
v_keyval(sp, val, name)
|
||||
SCR *sp;
|
||||
int val;
|
||||
scr_keyval_t name;
|
||||
v_keyval(
|
||||
SCR *sp,
|
||||
int val,
|
||||
scr_keyval_t name)
|
||||
{
|
||||
KEYLIST *kp;
|
||||
CHAR_T ch;
|
||||
@ -203,17 +182,20 @@ v_keyval(sp, val, name)
|
||||
* PUBLIC: void v_key_ilookup __P((SCR *));
|
||||
*/
|
||||
void
|
||||
v_key_ilookup(sp)
|
||||
SCR *sp;
|
||||
v_key_ilookup(SCR *sp)
|
||||
{
|
||||
CHAR_T ch, *p, *t;
|
||||
UCHAR_T ch;
|
||||
char *p, *t;
|
||||
GS *gp;
|
||||
size_t len;
|
||||
|
||||
for (gp = sp->gp, ch = 0; ch <= MAX_FAST_KEY; ++ch)
|
||||
for (gp = sp->gp, ch = 0;; ++ch) {
|
||||
for (p = gp->cname[ch].name, t = v_key_name(sp, ch),
|
||||
len = gp->cname[ch].len = sp->clen; len--;)
|
||||
*p++ = *t++;
|
||||
if (ch == MAX_FAST_KEY)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@ -224,9 +206,9 @@ v_key_ilookup(sp)
|
||||
* PUBLIC: size_t v_key_len __P((SCR *, ARG_CHAR_T));
|
||||
*/
|
||||
size_t
|
||||
v_key_len(sp, ch)
|
||||
SCR *sp;
|
||||
ARG_CHAR_T ch;
|
||||
v_key_len(
|
||||
SCR *sp,
|
||||
ARG_CHAR_T ch)
|
||||
{
|
||||
(void)v_key_name(sp, ch);
|
||||
return (sp->clen);
|
||||
@ -237,30 +219,43 @@ v_key_len(sp, ch)
|
||||
* Return the string that will display the key. This routine
|
||||
* is the backup for the KEY_NAME() macro.
|
||||
*
|
||||
* PUBLIC: CHAR_T *v_key_name __P((SCR *, ARG_CHAR_T));
|
||||
* PUBLIC: char *v_key_name __P((SCR *, ARG_CHAR_T));
|
||||
*/
|
||||
CHAR_T *
|
||||
v_key_name(sp, ach)
|
||||
SCR *sp;
|
||||
ARG_CHAR_T ach;
|
||||
char *
|
||||
v_key_name(
|
||||
SCR *sp,
|
||||
ARG_CHAR_T ach)
|
||||
{
|
||||
static const CHAR_T hexdigit[] = "0123456789abcdef";
|
||||
static const CHAR_T octdigit[] = "01234567";
|
||||
CHAR_T ch, *chp, mask;
|
||||
static const char hexdigit[] = "0123456789abcdef";
|
||||
static const char octdigit[] = "01234567";
|
||||
int ch;
|
||||
size_t len;
|
||||
int cnt, shift;
|
||||
char *chp;
|
||||
|
||||
ch = ach;
|
||||
/*
|
||||
* Cache the last checked character. It won't be a problem
|
||||
* since nvi will rescan the mapping when settings changed.
|
||||
*/
|
||||
if (ach && sp->lastc == ach)
|
||||
return (sp->cname);
|
||||
sp->lastc = ach;
|
||||
|
||||
#ifdef USE_WIDECHAR
|
||||
len = wctomb(sp->cname, ach);
|
||||
if (len > MB_CUR_MAX)
|
||||
#endif
|
||||
sp->cname[(len = 1)-1] = (u_char)ach;
|
||||
|
||||
ch = (u_char)sp->cname[0];
|
||||
sp->cname[len] = '\0';
|
||||
|
||||
/* See if the character was explicitly declared printable or not. */
|
||||
if ((chp = O_STR(sp, O_PRINT)) != NULL)
|
||||
for (; *chp != '\0'; ++chp)
|
||||
if (*chp == ch)
|
||||
goto pr;
|
||||
if (strstr(chp, sp->cname) != NULL)
|
||||
goto done;
|
||||
if ((chp = O_STR(sp, O_NOPRINT)) != NULL)
|
||||
for (; *chp != '\0'; ++chp)
|
||||
if (*chp == ch)
|
||||
goto nopr;
|
||||
if (strstr(chp, sp->cname) != NULL)
|
||||
goto nopr;
|
||||
|
||||
/*
|
||||
* Historical (ARPA standard) mappings. Printable characters are left
|
||||
@ -274,41 +269,55 @@ v_key_name(sp, ach)
|
||||
* told that this is a reasonable assumption...
|
||||
*
|
||||
* XXX
|
||||
* This code will only work with CHAR_T's that are multiples of 8-bit
|
||||
* bytes.
|
||||
*
|
||||
* XXX
|
||||
* NB: There's an assumption here that all printable characters take
|
||||
* up a single column on the screen. This is not always correct.
|
||||
* The code prints non-printable wide characters in 4 or 5 digits
|
||||
* Unicode escape sequences, so only supports plane 0 to 15.
|
||||
*/
|
||||
if (isprint(ch)) {
|
||||
pr: sp->cname[0] = ch;
|
||||
len = 1;
|
||||
if (ISPRINT(ach))
|
||||
goto done;
|
||||
}
|
||||
nopr: if (iscntrl(ch) && (ch < 0x20 || ch == 0x7f)) {
|
||||
sp->cname[0] = '^';
|
||||
sp->cname[1] = ch == 0x7f ? '?' : '@' + ch;
|
||||
len = 2;
|
||||
} else if (O_ISSET(sp, O_OCTAL)) {
|
||||
#define BITS (sizeof(CHAR_T) * 8)
|
||||
#define SHIFT (BITS - BITS % 3)
|
||||
#define TOPMASK (BITS % 3 == 2 ? 3 : 1) << (BITS - BITS % 3)
|
||||
goto done;
|
||||
}
|
||||
#ifdef USE_WIDECHAR
|
||||
if (INTISWIDE(ach)) {
|
||||
int uc = -1;
|
||||
|
||||
if (!strcmp(codeset(), "UTF-8"))
|
||||
uc = decode_utf8(sp->cname);
|
||||
#ifdef USE_ICONV
|
||||
else {
|
||||
char buf[sizeof(sp->cname)] = "";
|
||||
size_t left = sizeof(sp->cname);
|
||||
char *in = sp->cname;
|
||||
char *out = buf;
|
||||
iconv(sp->conv.id[IC_IE_TO_UTF16],
|
||||
(iconv_src_t)&in, &len, &out, &left);
|
||||
iconv(sp->conv.id[IC_IE_TO_UTF16],
|
||||
NULL, NULL, NULL, NULL);
|
||||
uc = decode_utf16(buf, 1);
|
||||
}
|
||||
#endif
|
||||
if (uc >= 0) {
|
||||
len = snprintf(sp->cname, sizeof(sp->cname),
|
||||
uc < 0x10000 ? "\\u%04x" : "\\U%05X", uc);
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (O_ISSET(sp, O_OCTAL)) {
|
||||
sp->cname[0] = '\\';
|
||||
sp->cname[1] = octdigit[(ch & TOPMASK) >> SHIFT];
|
||||
shift = SHIFT - 3;
|
||||
for (len = 2, mask = 7 << (SHIFT - 3),
|
||||
cnt = BITS / 3; cnt-- > 0; mask >>= 3, shift -= 3)
|
||||
sp->cname[len++] = octdigit[(ch & mask) >> shift];
|
||||
sp->cname[1] = octdigit[(ch & 0300) >> 6];
|
||||
sp->cname[2] = octdigit[(ch & 070) >> 3];
|
||||
sp->cname[3] = octdigit[ ch & 07 ];
|
||||
} else {
|
||||
sp->cname[0] = '\\';
|
||||
sp->cname[1] = 'x';
|
||||
for (len = 2, chp = (u_int8_t *)&ch,
|
||||
cnt = sizeof(CHAR_T); cnt-- > 0; ++chp) {
|
||||
sp->cname[len++] = hexdigit[(*chp & 0xf0) >> 4];
|
||||
sp->cname[len++] = hexdigit[*chp & 0x0f];
|
||||
}
|
||||
sp->cname[2] = hexdigit[(ch & 0xf0) >> 4];
|
||||
sp->cname[3] = hexdigit[ ch & 0x0f ];
|
||||
}
|
||||
len = 4;
|
||||
done: sp->cname[sp->clen = len] = '\0';
|
||||
return (sp->cname);
|
||||
}
|
||||
@ -318,12 +327,12 @@ done: sp->cname[sp->clen = len] = '\0';
|
||||
* Fill in the value for a key. This routine is the backup
|
||||
* for the KEY_VAL() macro.
|
||||
*
|
||||
* PUBLIC: int v_key_val __P((SCR *, ARG_CHAR_T));
|
||||
* PUBLIC: e_key_t v_key_val __P((SCR *, ARG_CHAR_T));
|
||||
*/
|
||||
int
|
||||
v_key_val(sp, ch)
|
||||
SCR *sp;
|
||||
ARG_CHAR_T ch;
|
||||
e_key_t
|
||||
v_key_val(
|
||||
SCR *sp,
|
||||
ARG_CHAR_T ch)
|
||||
{
|
||||
KEYLIST k, *kp;
|
||||
|
||||
@ -345,12 +354,12 @@ v_key_val(sp, ch)
|
||||
* PUBLIC: int v_event_push __P((SCR *, EVENT *, CHAR_T *, size_t, u_int));
|
||||
*/
|
||||
int
|
||||
v_event_push(sp, p_evp, p_s, nitems, flags)
|
||||
SCR *sp;
|
||||
EVENT *p_evp; /* Push event. */
|
||||
CHAR_T *p_s; /* Push characters. */
|
||||
size_t nitems; /* Number of items to push. */
|
||||
u_int flags; /* CH_* flags. */
|
||||
v_event_push(
|
||||
SCR *sp,
|
||||
EVENT *p_evp, /* Push event. */
|
||||
CHAR_T *p_s, /* Push characters. */
|
||||
size_t nitems, /* Number of items to push. */
|
||||
u_int flags) /* CH_* flags. */
|
||||
{
|
||||
EVENT *evp;
|
||||
GS *gp;
|
||||
@ -375,8 +384,8 @@ v_event_push(sp, p_evp, p_s, nitems, flags)
|
||||
if (total >= gp->i_nelem && v_event_grow(sp, MAX(total, 64)))
|
||||
return (1);
|
||||
if (gp->i_cnt)
|
||||
MEMMOVE(gp->i_event + TERM_PUSH_SHIFT + nitems,
|
||||
gp->i_event + gp->i_next, gp->i_cnt);
|
||||
BCOPY(gp->i_event + gp->i_next,
|
||||
gp->i_event + TERM_PUSH_SHIFT + nitems, gp->i_cnt);
|
||||
gp->i_next = TERM_PUSH_SHIFT;
|
||||
|
||||
/* Put the new items into the queue. */
|
||||
@ -399,9 +408,9 @@ copy: gp->i_cnt += nitems;
|
||||
* Append events onto the tail of the buffer.
|
||||
*/
|
||||
static int
|
||||
v_event_append(sp, argp)
|
||||
SCR *sp;
|
||||
EVENT *argp;
|
||||
v_event_append(
|
||||
SCR *sp,
|
||||
EVENT *argp)
|
||||
{
|
||||
CHAR_T *s; /* Characters. */
|
||||
EVENT *evp;
|
||||
@ -526,11 +535,11 @@ v_event_append(sp, argp)
|
||||
* PUBLIC: int v_event_get __P((SCR *, EVENT *, int, u_int32_t));
|
||||
*/
|
||||
int
|
||||
v_event_get(sp, argp, timeout, flags)
|
||||
SCR *sp;
|
||||
EVENT *argp;
|
||||
int timeout;
|
||||
u_int32_t flags;
|
||||
v_event_get(
|
||||
SCR *sp,
|
||||
EVENT *argp,
|
||||
int timeout,
|
||||
u_int32_t flags)
|
||||
{
|
||||
EVENT *evp, ev;
|
||||
GS *gp;
|
||||
@ -630,7 +639,8 @@ newmap: evp = &gp->i_event[gp->i_next];
|
||||
*/
|
||||
if (istimeout || F_ISSET(&evp->e_ch, CH_NOMAP) ||
|
||||
!LF_ISSET(EC_MAPCOMMAND | EC_MAPINPUT) ||
|
||||
evp->e_c < MAX_BIT_SEQ && !bit_test(gp->seqb, evp->e_c))
|
||||
((evp->e_c & ~MAX_BIT_SEQ) == 0 &&
|
||||
!bit_test(gp->seqb, evp->e_c)))
|
||||
goto nomap;
|
||||
|
||||
/* Search the map. */
|
||||
@ -664,7 +674,7 @@ newmap: evp = &gp->i_event[gp->i_next];
|
||||
|
||||
/* If no map, return the character. */
|
||||
if (qp == NULL) {
|
||||
nomap: if (!isdigit(evp->e_c) && LF_ISSET(EC_MAPNODIGIT))
|
||||
nomap: if (!ISDIGIT(evp->e_c) && LF_ISSET(EC_MAPNODIGIT))
|
||||
goto not_digit;
|
||||
*argp = *evp;
|
||||
QREM(1);
|
||||
@ -676,7 +686,7 @@ nomap: if (!isdigit(evp->e_c) && LF_ISSET(EC_MAPNODIGIT))
|
||||
* of the map is it, pretend we haven't seen the character.
|
||||
*/
|
||||
if (LF_ISSET(EC_MAPNODIGIT) &&
|
||||
qp->output != NULL && !isdigit(qp->output[0])) {
|
||||
qp->output != NULL && !ISDIGIT(qp->output[0])) {
|
||||
not_digit: argp->e_c = CH_NOT_DIGIT;
|
||||
argp->e_value = K_NOTUSED;
|
||||
argp->e_event = E_CHARACTER;
|
||||
@ -744,16 +754,16 @@ not_digit: argp->e_c = CH_NOT_DIGIT;
|
||||
* Walk the screen lists, sync'ing files to their backup copies.
|
||||
*/
|
||||
static void
|
||||
v_sync(sp, flags)
|
||||
SCR *sp;
|
||||
int flags;
|
||||
v_sync(
|
||||
SCR *sp,
|
||||
int flags)
|
||||
{
|
||||
GS *gp;
|
||||
|
||||
gp = sp->gp;
|
||||
for (sp = gp->dq.cqh_first; sp != (void *)&gp->dq; sp = sp->q.cqe_next)
|
||||
TAILQ_FOREACH(sp, gp->dq, q)
|
||||
rcv_sync(sp, flags);
|
||||
for (sp = gp->hq.cqh_first; sp != (void *)&gp->hq; sp = sp->q.cqe_next)
|
||||
TAILQ_FOREACH(sp, gp->hq, q)
|
||||
rcv_sync(sp, flags);
|
||||
}
|
||||
|
||||
@ -764,9 +774,9 @@ v_sync(sp, flags)
|
||||
* PUBLIC: void v_event_err __P((SCR *, EVENT *));
|
||||
*/
|
||||
void
|
||||
v_event_err(sp, evp)
|
||||
SCR *sp;
|
||||
EVENT *evp;
|
||||
v_event_err(
|
||||
SCR *sp,
|
||||
EVENT *evp)
|
||||
{
|
||||
switch (evp->e_event) {
|
||||
case E_CHARACTER:
|
||||
@ -778,9 +788,6 @@ v_event_err(sp, evp)
|
||||
case E_INTERRUPT:
|
||||
msgq(sp, M_ERR, "279|Unexpected interrupt event");
|
||||
break;
|
||||
case E_QUIT:
|
||||
msgq(sp, M_ERR, "280|Unexpected quit event");
|
||||
break;
|
||||
case E_REPAINT:
|
||||
msgq(sp, M_ERR, "281|Unexpected repaint event");
|
||||
break;
|
||||
@ -793,9 +800,6 @@ v_event_err(sp, evp)
|
||||
case E_WRESIZE:
|
||||
msgq(sp, M_ERR, "316|Unexpected resize event");
|
||||
break;
|
||||
case E_WRITE:
|
||||
msgq(sp, M_ERR, "287|Unexpected write event");
|
||||
break;
|
||||
|
||||
/*
|
||||
* Theoretically, none of these can occur, as they're handled at the
|
||||
@ -820,9 +824,9 @@ v_event_err(sp, evp)
|
||||
* PUBLIC: int v_event_flush __P((SCR *, u_int));
|
||||
*/
|
||||
int
|
||||
v_event_flush(sp, flags)
|
||||
SCR *sp;
|
||||
u_int flags;
|
||||
v_event_flush(
|
||||
SCR *sp,
|
||||
u_int flags)
|
||||
{
|
||||
GS *gp;
|
||||
int rval;
|
||||
@ -838,9 +842,9 @@ v_event_flush(sp, flags)
|
||||
* Grow the terminal queue.
|
||||
*/
|
||||
static int
|
||||
v_event_grow(sp, add)
|
||||
SCR *sp;
|
||||
int add;
|
||||
v_event_grow(
|
||||
SCR *sp,
|
||||
int add)
|
||||
{
|
||||
GS *gp;
|
||||
size_t new_nelem, olen;
|
||||
@ -848,7 +852,7 @@ v_event_grow(sp, add)
|
||||
gp = sp->gp;
|
||||
new_nelem = gp->i_nelem + add;
|
||||
olen = gp->i_nelem * sizeof(gp->i_event[0]);
|
||||
BINC_RET(sp, gp->i_event, olen, new_nelem * sizeof(gp->i_event[0]));
|
||||
BINC_RET(sp, EVENT, gp->i_event, olen, new_nelem * sizeof(gp->i_event[0]));
|
||||
gp->i_nelem = olen / sizeof(gp->i_event[0]);
|
||||
return (0);
|
||||
}
|
||||
@ -858,8 +862,9 @@ v_event_grow(sp, add)
|
||||
* Compare two keys for sorting.
|
||||
*/
|
||||
static int
|
||||
v_key_cmp(ap, bp)
|
||||
const void *ap, *bp;
|
||||
v_key_cmp(
|
||||
const void *ap,
|
||||
const void *bp)
|
||||
{
|
||||
return (((KEYLIST *)ap)->ch - ((KEYLIST *)bp)->ch);
|
||||
}
|
||||
|
@ -6,27 +6,47 @@
|
||||
*
|
||||
* See the LICENSE file for redistribution information.
|
||||
*
|
||||
* @(#)key.h 10.18 (Berkeley) 6/30/96
|
||||
* $Id: key.h,v 10.55 2012/10/07 01:31:17 zy Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
* Fundamental character types.
|
||||
*
|
||||
* CHAR_T An integral type that can hold any character.
|
||||
* ARG_CHAR_T The type of a CHAR_T when passed as an argument using
|
||||
* traditional promotion rules. It should also be able
|
||||
* to be compared against any CHAR_T for equality without
|
||||
* problems.
|
||||
* MAX_CHAR_T The maximum value of any character.
|
||||
*
|
||||
* If no integral type can hold a character, don't even try the port.
|
||||
*/
|
||||
typedef u_char CHAR_T;
|
||||
typedef u_int ARG_CHAR_T;
|
||||
#define MAX_CHAR_T 0xff
|
||||
#include "multibyte.h"
|
||||
|
||||
#ifdef USE_WIDECHAR
|
||||
#define FILE2INT5(sp,buf,n,nlen,w,wlen) \
|
||||
sp->conv.file2int(sp, n, nlen, &buf, &wlen, &w)
|
||||
#define INT2FILE(sp,w,wlen,n,nlen) \
|
||||
sp->conv.int2file(sp, w, wlen, &sp->cw, &nlen, &n)
|
||||
#define CHAR2INT5(sp,buf,n,nlen,w,wlen) \
|
||||
sp->conv.sys2int(sp, n, nlen, &buf, &wlen, &w)
|
||||
#define INT2CHAR(sp,w,wlen,n,nlen) \
|
||||
sp->conv.int2sys(sp, w, wlen, &sp->cw, &nlen, &n)
|
||||
#define INPUT2INT5(sp,cw,n,nlen,w,wlen) \
|
||||
sp->conv.input2int(sp, n, nlen, &(cw), &wlen, &w)
|
||||
#define CONST
|
||||
#define CHAR_WIDTH(sp, ch) wcwidth(ch)
|
||||
#define INTISWIDE(c) (wctob(c) == EOF)
|
||||
#else
|
||||
#define FILE2INT5(sp,buf,n,nlen,w,wlen) \
|
||||
(w = n, wlen = nlen, 0)
|
||||
#define INT2FILE(sp,w,wlen,n,nlen) \
|
||||
(n = w, nlen = wlen, 0)
|
||||
#define CHAR2INT5(sp,buf,n,nlen,w,wlen) \
|
||||
(w = n, wlen = nlen, 0)
|
||||
#define INT2CHAR(sp,w,wlen,n,nlen) \
|
||||
(n = w, nlen = wlen, 0)
|
||||
#define INPUT2INT5(sp,buf,n,nlen,w,wlen) \
|
||||
(w = n, wlen = nlen, 0)
|
||||
#define CONST const
|
||||
#define INTISWIDE(c) 0
|
||||
#define CHAR_WIDTH(sp, ch) 1
|
||||
#endif
|
||||
#define FILE2INT(sp,n,nlen,w,wlen) \
|
||||
FILE2INT5(sp,sp->cw,n,nlen,w,wlen)
|
||||
#define CHAR2INT(sp,n,nlen,w,wlen) \
|
||||
CHAR2INT5(sp,sp->cw,n,nlen,w,wlen)
|
||||
|
||||
/* The maximum number of columns any character can take up on a screen. */
|
||||
#define MAX_CHARACTER_COLUMNS 4
|
||||
#define MAX_CHARACTER_COLUMNS 7
|
||||
|
||||
/*
|
||||
* Event types.
|
||||
@ -42,14 +62,12 @@ typedef enum {
|
||||
E_EOF, /* End of input (NOT ^D). */
|
||||
E_ERR, /* Input error. */
|
||||
E_INTERRUPT, /* Interrupt. */
|
||||
E_QUIT, /* Quit. */
|
||||
E_REPAINT, /* Repaint: e_flno, e_tlno set. */
|
||||
E_SIGHUP, /* SIGHUP. */
|
||||
E_SIGTERM, /* SIGTERM. */
|
||||
E_STRING, /* Input string: e_csp, e_len set. */
|
||||
E_TIMEOUT, /* Timeout. */
|
||||
E_WRESIZE, /* Window resize. */
|
||||
E_WRITE /* Write. */
|
||||
} e_event_t;
|
||||
|
||||
/*
|
||||
@ -124,7 +142,7 @@ struct _event {
|
||||
|
||||
typedef struct _keylist {
|
||||
e_key_t value; /* Special value. */
|
||||
CHAR_T ch; /* Key. */
|
||||
int ch; /* Key. */
|
||||
} KEYLIST;
|
||||
extern KEYLIST keylist[];
|
||||
|
||||
@ -137,15 +155,13 @@ extern KEYLIST keylist[];
|
||||
/*
|
||||
* Ex/vi commands are generally separated by whitespace characters. We
|
||||
* can't use the standard isspace(3) macro because it returns true for
|
||||
* characters like ^K in the ASCII character set. The 4.4BSD isblank(3)
|
||||
* macro does exactly what we want, but it's not portable yet.
|
||||
* characters like ^K in the ASCII character set. The POSIX isblank(3)
|
||||
* has the same problem for non-ASCII locale, so we need a standalone one.
|
||||
*
|
||||
* XXX
|
||||
* Note side effect, ch is evaluated multiple times.
|
||||
*/
|
||||
#ifndef isblank
|
||||
#define isblank(ch) ((ch) == ' ' || (ch) == '\t')
|
||||
#endif
|
||||
#define cmdskip(ch) ((ch) == ' ' || (ch) == '\t')
|
||||
|
||||
/* The "standard" tab width, for displaying things to users. */
|
||||
#define STANDARD_TAB 6
|
||||
|
@ -10,7 +10,7 @@
|
||||
#include "config.h"
|
||||
|
||||
#ifndef lint
|
||||
static const char sccsid[] = "@(#)line.c 10.21 (Berkeley) 9/15/96";
|
||||
static const char sccsid[] = "$Id: line.c,v 10.26 2011/08/12 12:36:41 zy Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
@ -32,15 +32,15 @@ static int scr_update __P((SCR *, recno_t, lnop_t, int));
|
||||
* db_eget --
|
||||
* Front-end to db_get, special case handling for empty files.
|
||||
*
|
||||
* PUBLIC: int db_eget __P((SCR *, recno_t, char **, size_t *, int *));
|
||||
* PUBLIC: int db_eget __P((SCR *, recno_t, CHAR_T **, size_t *, int *));
|
||||
*/
|
||||
int
|
||||
db_eget(sp, lno, pp, lenp, isemptyp)
|
||||
SCR *sp;
|
||||
recno_t lno; /* Line number. */
|
||||
char **pp; /* Pointer store. */
|
||||
size_t *lenp; /* Length store. */
|
||||
int *isemptyp;
|
||||
db_eget(
|
||||
SCR *sp,
|
||||
recno_t lno, /* Line number. */
|
||||
CHAR_T **pp, /* Pointer store. */
|
||||
size_t *lenp, /* Length store. */
|
||||
int *isemptyp)
|
||||
{
|
||||
recno_t l1;
|
||||
|
||||
@ -60,7 +60,7 @@ db_eget(sp, lno, pp, lenp, isemptyp)
|
||||
return (1);
|
||||
|
||||
/* If the file isn't empty, fail loudly. */
|
||||
if (lno != 0 && lno != 1 || l1 != 0) {
|
||||
if ((lno != 0 && lno != 1) || l1 != 0) {
|
||||
db_err(sp, lno);
|
||||
return (1);
|
||||
}
|
||||
@ -76,20 +76,23 @@ db_eget(sp, lno, pp, lenp, isemptyp)
|
||||
* Look in the text buffers for a line, followed by the cache, followed
|
||||
* by the database.
|
||||
*
|
||||
* PUBLIC: int db_get __P((SCR *, recno_t, u_int32_t, char **, size_t *));
|
||||
* PUBLIC: int db_get __P((SCR *, recno_t, u_int32_t, CHAR_T **, size_t *));
|
||||
*/
|
||||
int
|
||||
db_get(sp, lno, flags, pp, lenp)
|
||||
SCR *sp;
|
||||
recno_t lno; /* Line number. */
|
||||
u_int32_t flags;
|
||||
char **pp; /* Pointer store. */
|
||||
size_t *lenp; /* Length store. */
|
||||
db_get(
|
||||
SCR *sp,
|
||||
recno_t lno, /* Line number. */
|
||||
u_int32_t flags,
|
||||
CHAR_T **pp, /* Pointer store. */
|
||||
size_t *lenp) /* Length store. */
|
||||
{
|
||||
DBT data, key;
|
||||
EXF *ep;
|
||||
TEXT *tp;
|
||||
recno_t l1, l2;
|
||||
CHAR_T *wp;
|
||||
size_t wlen;
|
||||
size_t nlen;
|
||||
|
||||
/*
|
||||
* The underlying recno stuff handles zero by returning NULL, but
|
||||
@ -113,14 +116,14 @@ db_get(sp, lno, flags, pp, lenp)
|
||||
* is there.
|
||||
*/
|
||||
if (F_ISSET(sp, SC_TINPUT)) {
|
||||
l1 = ((TEXT *)sp->tiq.cqh_first)->lno;
|
||||
l2 = ((TEXT *)sp->tiq.cqh_last)->lno;
|
||||
l1 = ((TEXT *)TAILQ_FIRST(sp->tiq))->lno;
|
||||
l2 = ((TEXT *)TAILQ_LAST(sp->tiq, _texth))->lno;
|
||||
if (l1 <= lno && l2 >= lno) {
|
||||
#if defined(DEBUG) && 0
|
||||
TRACE(sp, "retrieve TEXT buffer line %lu\n", (u_long)lno);
|
||||
#endif
|
||||
for (tp = sp->tiq.cqh_first;
|
||||
tp->lno != lno; tp = tp->q.cqe_next);
|
||||
for (tp = TAILQ_FIRST(sp->tiq);
|
||||
tp->lno != lno; tp = TAILQ_NEXT(tp, q));
|
||||
if (lenp != NULL)
|
||||
*lenp = tp->len;
|
||||
if (pp != NULL)
|
||||
@ -149,32 +152,52 @@ db_get(sp, lno, flags, pp, lenp)
|
||||
ep->c_lno = OOBLNO;
|
||||
|
||||
nocache:
|
||||
nlen = 1024;
|
||||
retry:
|
||||
/* Get the line from the underlying database. */
|
||||
key.data = &lno;
|
||||
key.size = sizeof(lno);
|
||||
switch (ep->db->get(ep->db, &key, &data, 0)) {
|
||||
case -1:
|
||||
case -1:
|
||||
goto err2;
|
||||
case 1:
|
||||
err1: if (LF_ISSET(DBG_FATAL))
|
||||
err2: db_err(sp, lno);
|
||||
alloc_err:
|
||||
err3: if (lenp != NULL)
|
||||
*lenp = 0;
|
||||
if (pp != NULL)
|
||||
*pp = NULL;
|
||||
return (1);
|
||||
case 0:
|
||||
if (data.size > nlen) {
|
||||
nlen = data.size;
|
||||
goto retry;
|
||||
}
|
||||
}
|
||||
|
||||
if (FILE2INT(sp, data.data, data.size, wp, wlen)) {
|
||||
if (!F_ISSET(sp, SC_CONV_ERROR)) {
|
||||
F_SET(sp, SC_CONV_ERROR);
|
||||
msgq(sp, M_ERR, "324|Conversion error on line %d", lno);
|
||||
}
|
||||
goto err3;
|
||||
}
|
||||
|
||||
/* Reset the cache. */
|
||||
if (wp != data.data) {
|
||||
BINC_GOTOW(sp, ep->c_lp, ep->c_blen, wlen);
|
||||
MEMCPY(ep->c_lp, wp, wlen);
|
||||
} else
|
||||
ep->c_lp = data.data;
|
||||
ep->c_lno = lno;
|
||||
ep->c_len = data.size;
|
||||
ep->c_lp = data.data;
|
||||
ep->c_len = wlen;
|
||||
|
||||
#if defined(DEBUG) && 0
|
||||
TRACE(sp, "retrieve DB line %lu\n", (u_long)lno);
|
||||
#endif
|
||||
if (lenp != NULL)
|
||||
*lenp = data.size;
|
||||
*lenp = wlen;
|
||||
if (pp != NULL)
|
||||
*pp = ep->c_lp;
|
||||
return (0);
|
||||
@ -187,9 +210,9 @@ err3: if (lenp != NULL)
|
||||
* PUBLIC: int db_delete __P((SCR *, recno_t));
|
||||
*/
|
||||
int
|
||||
db_delete(sp, lno)
|
||||
SCR *sp;
|
||||
recno_t lno;
|
||||
db_delete(
|
||||
SCR *sp,
|
||||
recno_t lno)
|
||||
{
|
||||
DBT key;
|
||||
EXF *ep;
|
||||
@ -242,18 +265,20 @@ db_delete(sp, lno)
|
||||
* db_append --
|
||||
* Append a line into the file.
|
||||
*
|
||||
* PUBLIC: int db_append __P((SCR *, int, recno_t, char *, size_t));
|
||||
* PUBLIC: int db_append __P((SCR *, int, recno_t, CHAR_T *, size_t));
|
||||
*/
|
||||
int
|
||||
db_append(sp, update, lno, p, len)
|
||||
SCR *sp;
|
||||
int update;
|
||||
recno_t lno;
|
||||
char *p;
|
||||
size_t len;
|
||||
db_append(
|
||||
SCR *sp,
|
||||
int update,
|
||||
recno_t lno,
|
||||
CHAR_T *p,
|
||||
size_t len)
|
||||
{
|
||||
DBT data, key;
|
||||
EXF *ep;
|
||||
char *fp;
|
||||
size_t flen;
|
||||
int rval;
|
||||
|
||||
#if defined(DEBUG) && 0
|
||||
@ -265,11 +290,13 @@ db_append(sp, update, lno, p, len)
|
||||
return (1);
|
||||
}
|
||||
|
||||
INT2FILE(sp, p, len, fp, flen);
|
||||
|
||||
/* Update file. */
|
||||
key.data = &lno;
|
||||
key.size = sizeof(lno);
|
||||
data.data = p;
|
||||
data.size = len;
|
||||
data.data = fp;
|
||||
data.size = flen;
|
||||
SIGBLOCK;
|
||||
if (ep->db->put(ep->db, &key, &data, R_IAFTER) == -1) {
|
||||
msgq(sp, M_SYSERR,
|
||||
@ -316,17 +343,19 @@ db_append(sp, update, lno, p, len)
|
||||
* db_insert --
|
||||
* Insert a line into the file.
|
||||
*
|
||||
* PUBLIC: int db_insert __P((SCR *, recno_t, char *, size_t));
|
||||
* PUBLIC: int db_insert __P((SCR *, recno_t, CHAR_T *, size_t));
|
||||
*/
|
||||
int
|
||||
db_insert(sp, lno, p, len)
|
||||
SCR *sp;
|
||||
recno_t lno;
|
||||
char *p;
|
||||
size_t len;
|
||||
db_insert(
|
||||
SCR *sp,
|
||||
recno_t lno,
|
||||
CHAR_T *p,
|
||||
size_t len)
|
||||
{
|
||||
DBT data, key;
|
||||
EXF *ep;
|
||||
char *fp;
|
||||
size_t flen;
|
||||
int rval;
|
||||
|
||||
#if defined(DEBUG) && 0
|
||||
@ -339,11 +368,13 @@ db_insert(sp, lno, p, len)
|
||||
return (1);
|
||||
}
|
||||
|
||||
INT2FILE(sp, p, len, fp, flen);
|
||||
|
||||
/* Update file. */
|
||||
key.data = &lno;
|
||||
key.size = sizeof(lno);
|
||||
data.data = p;
|
||||
data.size = len;
|
||||
data.data = fp;
|
||||
data.size = flen;
|
||||
SIGBLOCK;
|
||||
if (ep->db->put(ep->db, &key, &data, R_IBEFORE) == -1) {
|
||||
msgq(sp, M_SYSERR,
|
||||
@ -381,23 +412,24 @@ db_insert(sp, lno, p, len)
|
||||
* db_set --
|
||||
* Store a line in the file.
|
||||
*
|
||||
* PUBLIC: int db_set __P((SCR *, recno_t, char *, size_t));
|
||||
* PUBLIC: int db_set __P((SCR *, recno_t, CHAR_T *, size_t));
|
||||
*/
|
||||
int
|
||||
db_set(sp, lno, p, len)
|
||||
SCR *sp;
|
||||
recno_t lno;
|
||||
char *p;
|
||||
size_t len;
|
||||
db_set(
|
||||
SCR *sp,
|
||||
recno_t lno,
|
||||
CHAR_T *p,
|
||||
size_t len)
|
||||
{
|
||||
DBT data, key;
|
||||
EXF *ep;
|
||||
char *fp;
|
||||
size_t flen;
|
||||
|
||||
#if defined(DEBUG) && 0
|
||||
TRACE(sp, "replace line %lu: len %lu {%.*s}\n",
|
||||
(u_long)lno, (u_long)len, MIN(len, 20), p);
|
||||
#endif
|
||||
|
||||
/* Check for no underlying file. */
|
||||
if ((ep = sp->ep) == NULL) {
|
||||
ex_emsg(sp, NULL, EXM_NOFILEYET);
|
||||
@ -407,11 +439,13 @@ db_set(sp, lno, p, len)
|
||||
/* Log before change. */
|
||||
log_line(sp, lno, LOG_LINE_RESET_B);
|
||||
|
||||
INT2FILE(sp, p, len, fp, flen);
|
||||
|
||||
/* Update file. */
|
||||
key.data = &lno;
|
||||
key.size = sizeof(lno);
|
||||
data.data = p;
|
||||
data.size = len;
|
||||
data.data = fp;
|
||||
data.size = flen;
|
||||
SIGBLOCK;
|
||||
if (ep->db->put(ep->db, &key, &data, 0) == -1) {
|
||||
msgq(sp, M_SYSERR,
|
||||
@ -443,9 +477,9 @@ db_set(sp, lno, p, len)
|
||||
* PUBLIC: int db_exist __P((SCR *, recno_t));
|
||||
*/
|
||||
int
|
||||
db_exist(sp, lno)
|
||||
SCR *sp;
|
||||
recno_t lno;
|
||||
db_exist(
|
||||
SCR *sp,
|
||||
recno_t lno)
|
||||
{
|
||||
EXF *ep;
|
||||
|
||||
@ -464,8 +498,8 @@ db_exist(sp, lno)
|
||||
*/
|
||||
if (ep->c_nlines != OOBLNO)
|
||||
return (lno <= (F_ISSET(sp, SC_TINPUT) ?
|
||||
ep->c_nlines + (((TEXT *)sp->tiq.cqh_last)->lno -
|
||||
((TEXT *)sp->tiq.cqh_first)->lno) : ep->c_nlines));
|
||||
ep->c_nlines + (((TEXT *)TAILQ_LAST(sp->tiq, _texth))->lno -
|
||||
((TEXT *)TAILQ_FIRST(sp->tiq))->lno) : ep->c_nlines));
|
||||
|
||||
/* Go get the line. */
|
||||
return (!db_get(sp, lno, 0, NULL, NULL));
|
||||
@ -478,13 +512,15 @@ db_exist(sp, lno)
|
||||
* PUBLIC: int db_last __P((SCR *, recno_t *));
|
||||
*/
|
||||
int
|
||||
db_last(sp, lnop)
|
||||
SCR *sp;
|
||||
recno_t *lnop;
|
||||
db_last(
|
||||
SCR *sp,
|
||||
recno_t *lnop)
|
||||
{
|
||||
DBT data, key;
|
||||
EXF *ep;
|
||||
recno_t lno;
|
||||
CHAR_T *wp;
|
||||
size_t wlen;
|
||||
|
||||
/* Check for no underlying file. */
|
||||
if ((ep = sp->ep) == NULL) {
|
||||
@ -499,8 +535,8 @@ db_last(sp, lnop)
|
||||
if (ep->c_nlines != OOBLNO) {
|
||||
*lnop = ep->c_nlines;
|
||||
if (F_ISSET(sp, SC_TINPUT))
|
||||
*lnop += ((TEXT *)sp->tiq.cqh_last)->lno -
|
||||
((TEXT *)sp->tiq.cqh_first)->lno;
|
||||
*lnop += ((TEXT *)TAILQ_LAST(sp->tiq, _texth))->lno -
|
||||
((TEXT *)TAILQ_FIRST(sp->tiq))->lno;
|
||||
return (0);
|
||||
}
|
||||
|
||||
@ -508,27 +544,104 @@ db_last(sp, lnop)
|
||||
key.size = sizeof(lno);
|
||||
|
||||
switch (ep->db->seq(ep->db, &key, &data, R_LAST)) {
|
||||
case -1:
|
||||
case -1:
|
||||
alloc_err:
|
||||
msgq(sp, M_SYSERR, "007|unable to get last line");
|
||||
*lnop = 0;
|
||||
return (1);
|
||||
case 1:
|
||||
case 1:
|
||||
*lnop = 0;
|
||||
return (0);
|
||||
default:
|
||||
break;
|
||||
case 0:
|
||||
;
|
||||
}
|
||||
|
||||
/* Fill the cache. */
|
||||
memcpy(&lno, key.data, sizeof(lno));
|
||||
ep->c_nlines = ep->c_lno = lno;
|
||||
ep->c_len = data.size;
|
||||
ep->c_lp = data.data;
|
||||
|
||||
if (lno != ep->c_lno) {
|
||||
FILE2INT(sp, data.data, data.size, wp, wlen);
|
||||
|
||||
/* Fill the cache. */
|
||||
if (wp != data.data) {
|
||||
BINC_GOTOW(sp, ep->c_lp, ep->c_blen, wlen);
|
||||
MEMCPY(ep->c_lp, wp, wlen);
|
||||
} else
|
||||
ep->c_lp = data.data;
|
||||
ep->c_lno = lno;
|
||||
ep->c_len = wlen;
|
||||
}
|
||||
ep->c_nlines = lno;
|
||||
|
||||
/* Return the value. */
|
||||
*lnop = (F_ISSET(sp, SC_TINPUT) &&
|
||||
((TEXT *)sp->tiq.cqh_last)->lno > lno ?
|
||||
((TEXT *)sp->tiq.cqh_last)->lno : lno);
|
||||
((TEXT *)TAILQ_LAST(sp->tiq, _texth))->lno > lno ?
|
||||
((TEXT *)TAILQ_LAST(sp->tiq, _texth))->lno : lno);
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* db_rget --
|
||||
* Retrieve a raw line from database. No cache, no conversion.
|
||||
*
|
||||
* PUBLIC: int db_rget __P((SCR *, recno_t, char **, size_t *));
|
||||
*/
|
||||
int
|
||||
db_rget(
|
||||
SCR *sp,
|
||||
recno_t lno, /* Line number. */
|
||||
char **pp, /* Pointer store. */
|
||||
size_t *lenp) /* Length store. */
|
||||
{
|
||||
DBT data, key;
|
||||
EXF *ep;
|
||||
|
||||
/* Check for no underlying file. */
|
||||
if ((ep = sp->ep) == NULL)
|
||||
return (1);
|
||||
|
||||
/* Get the line from the underlying database. */
|
||||
key.data = &lno;
|
||||
key.size = sizeof(lno);
|
||||
if (ep->db->get(ep->db, &key, &data, 0))
|
||||
/* We do not report error, and do not ensure the size! */
|
||||
return (1);
|
||||
|
||||
if (lenp != NULL)
|
||||
*lenp = data.size;
|
||||
if (pp != NULL)
|
||||
*pp = data.data;
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* db_rset --
|
||||
* Store a line in the file. No log, no conversion.
|
||||
*
|
||||
* PUBLIC: int db_rset __P((SCR *, recno_t, char *, size_t));
|
||||
*/
|
||||
int
|
||||
db_rset(
|
||||
SCR *sp,
|
||||
recno_t lno,
|
||||
char *p,
|
||||
size_t len)
|
||||
{
|
||||
DBT data, key;
|
||||
EXF *ep;
|
||||
|
||||
/* Check for no underlying file. */
|
||||
if ((ep = sp->ep) == NULL)
|
||||
return (1);
|
||||
|
||||
/* Update file. */
|
||||
key.data = &lno;
|
||||
key.size = sizeof(lno);
|
||||
data.data = p;
|
||||
data.size = len;
|
||||
if (ep->db->put(ep->db, &key, &data, 0) == -1)
|
||||
/* We do not report error, and do not ensure the size! */
|
||||
return (1);
|
||||
|
||||
return (0);
|
||||
}
|
||||
|
||||
@ -539,9 +652,9 @@ db_last(sp, lnop)
|
||||
* PUBLIC: void db_err __P((SCR *, recno_t));
|
||||
*/
|
||||
void
|
||||
db_err(sp, lno)
|
||||
SCR *sp;
|
||||
recno_t lno;
|
||||
db_err(
|
||||
SCR *sp,
|
||||
recno_t lno)
|
||||
{
|
||||
msgq(sp, M_ERR,
|
||||
"008|Error: unable to retrieve line %lu", (u_long)lno);
|
||||
@ -553,11 +666,11 @@ db_err(sp, lno)
|
||||
* just changed.
|
||||
*/
|
||||
static int
|
||||
scr_update(sp, lno, op, current)
|
||||
SCR *sp;
|
||||
recno_t lno;
|
||||
lnop_t op;
|
||||
int current;
|
||||
scr_update(
|
||||
SCR *sp,
|
||||
recno_t lno,
|
||||
lnop_t op,
|
||||
int current)
|
||||
{
|
||||
EXF *ep;
|
||||
SCR *tsp;
|
||||
@ -567,8 +680,7 @@ scr_update(sp, lno, op, current)
|
||||
|
||||
ep = sp->ep;
|
||||
if (ep->refcnt != 1)
|
||||
for (tsp = sp->gp->dq.cqh_first;
|
||||
tsp != (void *)&sp->gp->dq; tsp = tsp->q.cqe_next)
|
||||
TAILQ_FOREACH(tsp, sp->gp->dq, q)
|
||||
if (sp != tsp && tsp->ep == ep)
|
||||
if (vs_change(tsp, lno, op))
|
||||
return (1);
|
||||
|
@ -10,7 +10,7 @@
|
||||
#include "config.h"
|
||||
|
||||
#ifndef lint
|
||||
static const char sccsid[] = "@(#)log.c 10.8 (Berkeley) 3/6/96";
|
||||
static const char sccsid[] = "$Id: log.c,v 10.27 2011/07/13 06:25:50 zy Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
@ -21,6 +21,7 @@ static const char sccsid[] = "@(#)log.c 10.8 (Berkeley) 3/6/96";
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <limits.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@ -67,6 +68,8 @@ static void log_err __P((SCR *, char *, int));
|
||||
#if defined(DEBUG) && 0
|
||||
static void log_trace __P((SCR *, char *, recno_t, u_char *));
|
||||
#endif
|
||||
static int apply_with __P((int (*)(SCR *, recno_t, CHAR_T *, size_t),
|
||||
SCR *, recno_t, u_char *, size_t));
|
||||
|
||||
/* Try and restart the log on failure, i.e. if we run out of memory. */
|
||||
#define LOG_ERR { \
|
||||
@ -74,6 +77,15 @@ static void log_trace __P((SCR *, char *, recno_t, u_char *));
|
||||
return (1); \
|
||||
}
|
||||
|
||||
/* offset of CHAR_T string in log needs to be aligned on some systems
|
||||
* because it is passed to db_set as a string
|
||||
*/
|
||||
typedef struct {
|
||||
char data[sizeof(u_char) /* type */ + sizeof(recno_t)];
|
||||
CHAR_T str[1];
|
||||
} log_t;
|
||||
#define CHAR_T_OFFSET ((char *)(((log_t*)0)->str) - (char *)0)
|
||||
|
||||
/*
|
||||
* log_init --
|
||||
* Initialize the logging subsystem.
|
||||
@ -81,9 +93,9 @@ static void log_trace __P((SCR *, char *, recno_t, u_char *));
|
||||
* PUBLIC: int log_init __P((SCR *, EXF *));
|
||||
*/
|
||||
int
|
||||
log_init(sp, ep)
|
||||
SCR *sp;
|
||||
EXF *ep;
|
||||
log_init(
|
||||
SCR *sp,
|
||||
EXF *ep)
|
||||
{
|
||||
/*
|
||||
* !!!
|
||||
@ -117,9 +129,9 @@ log_init(sp, ep)
|
||||
* PUBLIC: int log_end __P((SCR *, EXF *));
|
||||
*/
|
||||
int
|
||||
log_end(sp, ep)
|
||||
SCR *sp;
|
||||
EXF *ep;
|
||||
log_end(
|
||||
SCR *sp,
|
||||
EXF *ep)
|
||||
{
|
||||
/*
|
||||
* !!!
|
||||
@ -147,8 +159,7 @@ log_end(sp, ep)
|
||||
* PUBLIC: int log_cursor __P((SCR *));
|
||||
*/
|
||||
int
|
||||
log_cursor(sp)
|
||||
SCR *sp;
|
||||
log_cursor(SCR *sp)
|
||||
{
|
||||
EXF *ep;
|
||||
|
||||
@ -175,15 +186,16 @@ log_cursor(sp)
|
||||
* Actually push a cursor record out.
|
||||
*/
|
||||
static int
|
||||
log_cursor1(sp, type)
|
||||
SCR *sp;
|
||||
int type;
|
||||
log_cursor1(
|
||||
SCR *sp,
|
||||
int type)
|
||||
{
|
||||
DBT data, key;
|
||||
EXF *ep;
|
||||
|
||||
ep = sp->ep;
|
||||
BINC_RET(sp, ep->l_lp, ep->l_len, sizeof(u_char) + sizeof(MARK));
|
||||
|
||||
BINC_RETC(sp, ep->l_lp, ep->l_len, sizeof(u_char) + sizeof(MARK));
|
||||
ep->l_lp[0] = type;
|
||||
memmove(ep->l_lp + sizeof(u_char), &ep->l_cursor, sizeof(MARK));
|
||||
|
||||
@ -212,15 +224,16 @@ log_cursor1(sp, type)
|
||||
* PUBLIC: int log_line __P((SCR *, recno_t, u_int));
|
||||
*/
|
||||
int
|
||||
log_line(sp, lno, action)
|
||||
SCR *sp;
|
||||
recno_t lno;
|
||||
u_int action;
|
||||
log_line(
|
||||
SCR *sp,
|
||||
recno_t lno,
|
||||
u_int action)
|
||||
{
|
||||
DBT data, key;
|
||||
EXF *ep;
|
||||
size_t len;
|
||||
char *lp;
|
||||
CHAR_T *lp;
|
||||
recno_t lcur;
|
||||
|
||||
ep = sp->ep;
|
||||
if (F_ISSET(ep, F_NOLOG))
|
||||
@ -254,28 +267,30 @@ log_line(sp, lno, action)
|
||||
return (1);
|
||||
}
|
||||
len = 0;
|
||||
lp = "";
|
||||
lp = L("");
|
||||
}
|
||||
} else
|
||||
if (db_get(sp, lno, DBG_FATAL, &lp, &len))
|
||||
return (1);
|
||||
BINC_RET(sp,
|
||||
ep->l_lp, ep->l_len, len + sizeof(u_char) + sizeof(recno_t));
|
||||
BINC_RETC(sp,
|
||||
ep->l_lp, ep->l_len,
|
||||
len * sizeof(CHAR_T) + CHAR_T_OFFSET);
|
||||
ep->l_lp[0] = action;
|
||||
memmove(ep->l_lp + sizeof(u_char), &lno, sizeof(recno_t));
|
||||
memmove(ep->l_lp + sizeof(u_char) + sizeof(recno_t), lp, len);
|
||||
memmove(ep->l_lp + CHAR_T_OFFSET, lp, len * sizeof(CHAR_T));
|
||||
|
||||
key.data = &ep->l_cur;
|
||||
lcur = ep->l_cur;
|
||||
key.data = &lcur;
|
||||
key.size = sizeof(recno_t);
|
||||
data.data = ep->l_lp;
|
||||
data.size = len + sizeof(u_char) + sizeof(recno_t);
|
||||
data.size = len * sizeof(CHAR_T) + CHAR_T_OFFSET;
|
||||
if (ep->log->put(ep->log, &key, &data, 0) == -1)
|
||||
LOG_ERR;
|
||||
|
||||
#if defined(DEBUG) && 0
|
||||
switch (action) {
|
||||
case LOG_LINE_APPEND:
|
||||
TRACE(sp, "%u: log_line: append: %lu {%u}\n",
|
||||
TRACE(sp, "%lu: log_line: append: %lu {%u}\n",
|
||||
ep->l_cur, lno, len);
|
||||
break;
|
||||
case LOG_LINE_DELETE:
|
||||
@ -312,9 +327,9 @@ log_line(sp, lno, action)
|
||||
* PUBLIC: int log_mark __P((SCR *, LMARK *));
|
||||
*/
|
||||
int
|
||||
log_mark(sp, lmp)
|
||||
SCR *sp;
|
||||
LMARK *lmp;
|
||||
log_mark(
|
||||
SCR *sp,
|
||||
LMARK *lmp)
|
||||
{
|
||||
DBT data, key;
|
||||
EXF *ep;
|
||||
@ -330,7 +345,7 @@ log_mark(sp, lmp)
|
||||
ep->l_cursor.lno = OOBLNO;
|
||||
}
|
||||
|
||||
BINC_RET(sp, ep->l_lp,
|
||||
BINC_RETC(sp, ep->l_lp,
|
||||
ep->l_len, sizeof(u_char) + sizeof(LMARK));
|
||||
ep->l_lp[0] = LOG_MARK;
|
||||
memmove(ep->l_lp + sizeof(u_char), lmp, sizeof(LMARK));
|
||||
@ -358,9 +373,9 @@ log_mark(sp, lmp)
|
||||
* PUBLIC: int log_backward __P((SCR *, MARK *));
|
||||
*/
|
||||
int
|
||||
log_backward(sp, rp)
|
||||
SCR *sp;
|
||||
MARK *rp;
|
||||
log_backward(
|
||||
SCR *sp,
|
||||
MARK *rp)
|
||||
{
|
||||
DBT key, data;
|
||||
EXF *ep;
|
||||
@ -414,9 +429,8 @@ log_backward(sp, rp)
|
||||
case LOG_LINE_DELETE:
|
||||
didop = 1;
|
||||
memmove(&lno, p + sizeof(u_char), sizeof(recno_t));
|
||||
if (db_insert(sp, lno, p + sizeof(u_char) +
|
||||
sizeof(recno_t), data.size - sizeof(u_char) -
|
||||
sizeof(recno_t)))
|
||||
if (apply_with(db_insert, sp, lno,
|
||||
p + CHAR_T_OFFSET, data.size - CHAR_T_OFFSET))
|
||||
goto err;
|
||||
++sp->rptlines[L_ADDED];
|
||||
break;
|
||||
@ -425,9 +439,8 @@ log_backward(sp, rp)
|
||||
case LOG_LINE_RESET_B:
|
||||
didop = 1;
|
||||
memmove(&lno, p + sizeof(u_char), sizeof(recno_t));
|
||||
if (db_set(sp, lno, p + sizeof(u_char) +
|
||||
sizeof(recno_t), data.size - sizeof(u_char) -
|
||||
sizeof(recno_t)))
|
||||
if (apply_with(db_set, sp, lno,
|
||||
p + CHAR_T_OFFSET, data.size - CHAR_T_OFFSET))
|
||||
goto err;
|
||||
if (sp->rptlchange != lno) {
|
||||
sp->rptlchange = lno;
|
||||
@ -464,8 +477,7 @@ err: F_CLR(ep, F_NOLOG);
|
||||
* PUBLIC: int log_setline __P((SCR *));
|
||||
*/
|
||||
int
|
||||
log_setline(sp)
|
||||
SCR *sp;
|
||||
log_setline(SCR *sp)
|
||||
{
|
||||
DBT key, data;
|
||||
EXF *ep;
|
||||
@ -488,7 +500,6 @@ log_setline(sp)
|
||||
|
||||
key.data = &ep->l_cur; /* Initialize db request. */
|
||||
key.size = sizeof(recno_t);
|
||||
|
||||
for (;;) {
|
||||
--ep->l_cur;
|
||||
if (ep->log->get(ep->log, &key, &data, 0))
|
||||
@ -520,9 +531,8 @@ log_setline(sp)
|
||||
case LOG_LINE_RESET_B:
|
||||
memmove(&lno, p + sizeof(u_char), sizeof(recno_t));
|
||||
if (lno == sp->lno &&
|
||||
db_set(sp, lno, p + sizeof(u_char) +
|
||||
sizeof(recno_t), data.size - sizeof(u_char) -
|
||||
sizeof(recno_t)))
|
||||
apply_with(db_set, sp, lno,
|
||||
p + CHAR_T_OFFSET, data.size - CHAR_T_OFFSET))
|
||||
goto err;
|
||||
if (sp->rptlchange != lno) {
|
||||
sp->rptlchange = lno;
|
||||
@ -551,9 +561,9 @@ err: F_CLR(ep, F_NOLOG);
|
||||
* PUBLIC: int log_forward __P((SCR *, MARK *));
|
||||
*/
|
||||
int
|
||||
log_forward(sp, rp)
|
||||
SCR *sp;
|
||||
MARK *rp;
|
||||
log_forward(
|
||||
SCR *sp,
|
||||
MARK *rp)
|
||||
{
|
||||
DBT key, data;
|
||||
EXF *ep;
|
||||
@ -601,9 +611,8 @@ log_forward(sp, rp)
|
||||
case LOG_LINE_INSERT:
|
||||
didop = 1;
|
||||
memmove(&lno, p + sizeof(u_char), sizeof(recno_t));
|
||||
if (db_insert(sp, lno, p + sizeof(u_char) +
|
||||
sizeof(recno_t), data.size - sizeof(u_char) -
|
||||
sizeof(recno_t)))
|
||||
if (apply_with(db_insert, sp, lno,
|
||||
p + CHAR_T_OFFSET, data.size - CHAR_T_OFFSET))
|
||||
goto err;
|
||||
++sp->rptlines[L_ADDED];
|
||||
break;
|
||||
@ -619,9 +628,8 @@ log_forward(sp, rp)
|
||||
case LOG_LINE_RESET_F:
|
||||
didop = 1;
|
||||
memmove(&lno, p + sizeof(u_char), sizeof(recno_t));
|
||||
if (db_set(sp, lno, p + sizeof(u_char) +
|
||||
sizeof(recno_t), data.size - sizeof(u_char) -
|
||||
sizeof(recno_t)))
|
||||
if (apply_with(db_set, sp, lno,
|
||||
p + CHAR_T_OFFSET, data.size - CHAR_T_OFFSET))
|
||||
goto err;
|
||||
if (sp->rptlchange != lno) {
|
||||
sp->rptlchange = lno;
|
||||
@ -650,10 +658,10 @@ err: F_CLR(ep, F_NOLOG);
|
||||
* Try and restart the log on failure, i.e. if we run out of memory.
|
||||
*/
|
||||
static void
|
||||
log_err(sp, file, line)
|
||||
SCR *sp;
|
||||
char *file;
|
||||
int line;
|
||||
log_err(
|
||||
SCR *sp,
|
||||
char *file,
|
||||
int line)
|
||||
{
|
||||
EXF *ep;
|
||||
|
||||
@ -666,11 +674,11 @@ log_err(sp, file, line)
|
||||
|
||||
#if defined(DEBUG) && 0
|
||||
static void
|
||||
log_trace(sp, msg, rno, p)
|
||||
SCR *sp;
|
||||
char *msg;
|
||||
recno_t rno;
|
||||
u_char *p;
|
||||
log_trace(
|
||||
SCR *sp,
|
||||
char *msg,
|
||||
recno_t rno,
|
||||
u_char *p)
|
||||
{
|
||||
LMARK lm;
|
||||
MARK m;
|
||||
@ -715,3 +723,45 @@ log_trace(sp, msg, rno, p)
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* apply_with --
|
||||
* Apply a realigned line from the log db to the file db.
|
||||
*/
|
||||
static int
|
||||
apply_with(
|
||||
int (*db_func)(SCR *, recno_t, CHAR_T *, size_t),
|
||||
SCR *sp,
|
||||
recno_t lno,
|
||||
u_char *p,
|
||||
size_t len)
|
||||
{
|
||||
#ifdef USE_WIDECHAR
|
||||
typedef unsigned long nword;
|
||||
|
||||
static size_t blen;
|
||||
static nword *bp;
|
||||
nword *lp = (nword *)((uintptr_t)p / sizeof(nword) * sizeof(nword));
|
||||
|
||||
if (lp != (nword *)p) {
|
||||
int offl = ((uintptr_t)p - (uintptr_t)lp) << 3;
|
||||
int offr = (sizeof(nword) << 3) - offl;
|
||||
size_t i, cnt = (len + sizeof(nword) / 2) / sizeof(nword);
|
||||
|
||||
if (len > blen) {
|
||||
blen = p2roundup(MAX(len, 512));
|
||||
REALLOC(sp, bp, nword *, blen);
|
||||
if (bp == NULL)
|
||||
return (1);
|
||||
}
|
||||
for (i = 0; i < cnt; ++i)
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
bp[i] = (lp[i] << offl) ^ (lp[i+1] >> offr);
|
||||
#else
|
||||
bp[i] = (lp[i] >> offl) ^ (lp[i+1] << offr);
|
||||
#endif
|
||||
p = (u_char *)bp;
|
||||
}
|
||||
#endif
|
||||
return db_func(sp, lno, (CHAR_T *)p, len / sizeof(CHAR_T));
|
||||
}
|
||||
|
@ -11,20 +11,19 @@
|
||||
|
||||
#ifndef lint
|
||||
static const char copyright[] =
|
||||
"@(#) Copyright (c) 1992, 1993, 1994\n\
|
||||
"%Z% Copyright (c) 1992, 1993, 1994\n\
|
||||
The Regents of the University of California. All rights reserved.\n\
|
||||
@(#) Copyright (c) 1992, 1993, 1994, 1995, 1996\n\
|
||||
%Z% Copyright (c) 1992, 1993, 1994, 1995, 1996\n\
|
||||
Keith Bostic. All rights reserved.\n";
|
||||
#endif /* not lint */
|
||||
|
||||
#ifndef lint
|
||||
static const char sccsid[] = "@(#)main.c 10.48 (Berkeley) 10/11/96";
|
||||
static const char sccsid[] = "$Id: main.c,v 11.0 2012/10/17 06:34:37 zy Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/queue.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#include <bitstring.h>
|
||||
#include <errno.h>
|
||||
@ -50,10 +49,10 @@ static int v_obsolete __P((char *, char *[]));
|
||||
* PUBLIC: int editor __P((GS *, int, char *[]));
|
||||
*/
|
||||
int
|
||||
editor(gp, argc, argv)
|
||||
GS *gp;
|
||||
int argc;
|
||||
char *argv[];
|
||||
editor(
|
||||
GS *gp,
|
||||
int argc,
|
||||
char *argv[])
|
||||
{
|
||||
extern int optind;
|
||||
extern char *optarg;
|
||||
@ -64,10 +63,9 @@ editor(gp, argc, argv)
|
||||
size_t len;
|
||||
u_int flags;
|
||||
int ch, flagchk, lflag, secure, startup, readonly, rval, silent;
|
||||
#ifdef GTAGS
|
||||
int gtags = 0;
|
||||
#endif
|
||||
char *tag_f, *wsizearg, path[256];
|
||||
CHAR_T *w;
|
||||
size_t wlen;
|
||||
|
||||
/* Initialize the busy routine, if not defined by the screen. */
|
||||
if (gp->scr_busy == NULL)
|
||||
@ -75,19 +73,20 @@ editor(gp, argc, argv)
|
||||
/* Initialize the message routine, if not defined by the screen. */
|
||||
if (gp->scr_msg == NULL)
|
||||
gp->scr_msg = vs_msg;
|
||||
gp->catd = (nl_catd)-1;
|
||||
|
||||
/* Common global structure initialization. */
|
||||
CIRCLEQ_INIT(&gp->dq);
|
||||
CIRCLEQ_INIT(&gp->hq);
|
||||
LIST_INIT(&gp->ecq);
|
||||
LIST_INSERT_HEAD(&gp->ecq, &gp->excmd, q);
|
||||
TAILQ_INIT(gp->dq);
|
||||
TAILQ_INIT(gp->hq);
|
||||
SLIST_INIT(gp->ecq);
|
||||
SLIST_INSERT_HEAD(gp->ecq, &gp->excmd, q);
|
||||
gp->noprint = DEFAULT_NOPRINT;
|
||||
|
||||
/* Structures shared by screens so stored in the GS structure. */
|
||||
CIRCLEQ_INIT(&gp->frefq);
|
||||
CIRCLEQ_INIT(&gp->dcb_store.textq);
|
||||
LIST_INIT(&gp->cutq);
|
||||
LIST_INIT(&gp->seqq);
|
||||
TAILQ_INIT(gp->frefq);
|
||||
TAILQ_INIT(gp->dcb_store.textq);
|
||||
SLIST_INIT(gp->cutq);
|
||||
SLIST_INIT(gp->seqq);
|
||||
|
||||
/* Set initial screen type and mode based on the program name. */
|
||||
readonly = 0;
|
||||
@ -116,18 +115,10 @@ editor(gp, argc, argv)
|
||||
/* Set the file snapshot flag. */
|
||||
F_SET(gp, G_SNAPSHOT);
|
||||
|
||||
#ifdef GTAGS
|
||||
#ifdef DEBUG
|
||||
while ((ch = getopt(argc, argv, "c:D:eFGlRrSsT:t:vw:")) != EOF)
|
||||
#else
|
||||
while ((ch = getopt(argc, argv, "c:eFGlRrSst:vw:")) != EOF)
|
||||
#endif
|
||||
#else
|
||||
#ifdef DEBUG
|
||||
while ((ch = getopt(argc, argv, "c:D:eFlRrSsT:t:vw:")) != EOF)
|
||||
#else
|
||||
while ((ch = getopt(argc, argv, "c:eFlRrSst:vw:")) != EOF)
|
||||
#endif
|
||||
#endif
|
||||
switch (ch) {
|
||||
case 'c': /* Run the command. */
|
||||
@ -165,11 +156,6 @@ editor(gp, argc, argv)
|
||||
case 'F': /* No snapshot. */
|
||||
F_CLR(gp, G_SNAPSHOT);
|
||||
break;
|
||||
#ifdef GTAGS
|
||||
case 'G': /* gtags mode. */
|
||||
gtags = 1;
|
||||
break;
|
||||
#endif
|
||||
case 'l': /* Set lisp, showmatch options. */
|
||||
lflag = 1;
|
||||
break;
|
||||
@ -252,11 +238,11 @@ editor(gp, argc, argv)
|
||||
*/
|
||||
if (screen_init(gp, NULL, &sp)) {
|
||||
if (sp != NULL)
|
||||
CIRCLEQ_INSERT_HEAD(&gp->dq, sp, q);
|
||||
TAILQ_INSERT_HEAD(gp->dq, sp, q);
|
||||
goto err;
|
||||
}
|
||||
F_SET(sp, SC_EX);
|
||||
CIRCLEQ_INSERT_HEAD(&gp->dq, sp, q);
|
||||
TAILQ_INSERT_HEAD(gp->dq, sp, q);
|
||||
|
||||
if (v_key_init(sp)) /* Special key initialization. */
|
||||
goto err;
|
||||
@ -268,10 +254,6 @@ editor(gp, argc, argv)
|
||||
}
|
||||
if (readonly)
|
||||
*oargp++ = O_READONLY;
|
||||
#ifdef GTAGS
|
||||
if (gtags)
|
||||
*oargp++ = O_GTAGSMODE;
|
||||
#endif
|
||||
if (secure)
|
||||
*oargp++ = O_SECURE;
|
||||
*oargp = -1; /* Options initialization. */
|
||||
@ -351,8 +333,11 @@ editor(gp, argc, argv)
|
||||
}
|
||||
|
||||
/* Open a tag file if specified. */
|
||||
if (tag_f != NULL && ex_tag_first(sp, tag_f))
|
||||
goto err;
|
||||
if (tag_f != NULL) {
|
||||
CHAR2INT(sp, tag_f, strlen(tag_f) + 1, w, wlen);
|
||||
if (ex_tag_first(sp, w))
|
||||
goto err;
|
||||
}
|
||||
|
||||
/*
|
||||
* Append any remaining arguments as file names. Files are recovery
|
||||
@ -362,13 +347,11 @@ editor(gp, argc, argv)
|
||||
if (*argv != NULL) {
|
||||
if (sp->frp != NULL) {
|
||||
/* Cheat -- we know we have an extra argv slot. */
|
||||
MALLOC_NOMSG(sp,
|
||||
*--argv, char *, strlen(sp->frp->name) + 1);
|
||||
*--argv = strdup(sp->frp->name);
|
||||
if (*argv == NULL) {
|
||||
v_estr(gp->progname, errno, NULL);
|
||||
goto err;
|
||||
}
|
||||
(void)strcpy(*argv, sp->frp->name);
|
||||
}
|
||||
sp->argv = sp->cargv = argv;
|
||||
F_SET(sp, SC_ARGNOFREE);
|
||||
@ -386,7 +369,7 @@ editor(gp, argc, argv)
|
||||
if ((frp = file_add(sp, NULL)) == NULL)
|
||||
goto err;
|
||||
} else {
|
||||
if ((frp = file_add(sp, (CHAR_T *)sp->argv[0])) == NULL)
|
||||
if ((frp = file_add(sp, sp->argv[0])) == NULL)
|
||||
goto err;
|
||||
if (F_ISSET(sp, SC_ARGRECOVER))
|
||||
F_SET(frp, FR_RECOVER);
|
||||
@ -420,8 +403,8 @@ editor(gp, argc, argv)
|
||||
if (v_event_get(sp, &ev, 0, 0))
|
||||
goto err;
|
||||
if (ev.e_event == E_INTERRUPT ||
|
||||
ev.e_event == E_CHARACTER &&
|
||||
(ev.e_value == K_CR || ev.e_value == K_NL))
|
||||
(ev.e_event == E_CHARACTER &&
|
||||
(ev.e_value == K_CR || ev.e_value == K_NL)))
|
||||
break;
|
||||
(void)gp->scr_bell(sp);
|
||||
}
|
||||
@ -467,20 +450,16 @@ v_end(gp)
|
||||
(void)file_end(gp->ccl_sp, NULL, 1);
|
||||
(void)screen_end(gp->ccl_sp);
|
||||
}
|
||||
while ((sp = gp->dq.cqh_first) != (void *)&gp->dq)
|
||||
while ((sp = TAILQ_FIRST(gp->dq)) != NULL)
|
||||
(void)screen_end(sp);
|
||||
while ((sp = gp->hq.cqh_first) != (void *)&gp->hq)
|
||||
while ((sp = TAILQ_FIRST(gp->hq)) != NULL)
|
||||
(void)screen_end(sp);
|
||||
|
||||
#ifdef HAVE_PERL_INTERP
|
||||
perl_end(gp);
|
||||
#endif
|
||||
|
||||
#if defined(DEBUG) || defined(PURIFY) || defined(LIBRARY)
|
||||
{ FREF *frp;
|
||||
/* Free FREF's. */
|
||||
while ((frp = gp->frefq.cqh_first) != (FREF *)&gp->frefq) {
|
||||
CIRCLEQ_REMOVE(&gp->frefq, frp, q);
|
||||
while ((frp = TAILQ_FIRST(gp->frefq)) != NULL) {
|
||||
TAILQ_REMOVE(gp->frefq, frp, q);
|
||||
if (frp->name != NULL)
|
||||
free(frp->name);
|
||||
if (frp->tname != NULL)
|
||||
@ -500,7 +479,7 @@ v_end(gp)
|
||||
seq_close(gp);
|
||||
|
||||
/* Free default buffer storage. */
|
||||
(void)text_lfree(&gp->dcb_store.textq);
|
||||
(void)text_lfree(gp->dcb_store.textq);
|
||||
|
||||
/* Close message catalogs. */
|
||||
msg_close(gp);
|
||||
@ -516,10 +495,10 @@ v_end(gp)
|
||||
* it's possible that the user is sourcing a file that exits from the
|
||||
* editor).
|
||||
*/
|
||||
while ((mp = gp->msgq.lh_first) != NULL) {
|
||||
while ((mp = SLIST_FIRST(gp->msgq)) != NULL) {
|
||||
(void)fprintf(stderr, "%s%.*s",
|
||||
mp->mtype == M_ERR ? "ex/vi: " : "", (int)mp->len, mp->buf);
|
||||
LIST_REMOVE(mp, q);
|
||||
SLIST_REMOVE_HEAD(gp->msgq, q);
|
||||
#if defined(DEBUG) || defined(PURIFY) || defined(LIBRARY)
|
||||
free(mp->buf);
|
||||
free(mp);
|
||||
@ -544,8 +523,9 @@ v_end(gp)
|
||||
* Convert historic arguments into something getopt(3) will like.
|
||||
*/
|
||||
static int
|
||||
v_obsolete(name, argv)
|
||||
char *name, *argv[];
|
||||
v_obsolete(
|
||||
char *name,
|
||||
char *argv[])
|
||||
{
|
||||
size_t len;
|
||||
char *p;
|
||||
@ -566,28 +546,26 @@ v_obsolete(name, argv)
|
||||
while (*++argv && strcmp(argv[0], "--"))
|
||||
if (argv[0][0] == '+') {
|
||||
if (argv[0][1] == '\0') {
|
||||
MALLOC_NOMSG(NULL, argv[0], char *, 4);
|
||||
argv[0] = strdup("-c$");
|
||||
if (argv[0] == NULL)
|
||||
goto nomem;
|
||||
(void)strcpy(argv[0], "-c$");
|
||||
} else {
|
||||
p = argv[0];
|
||||
len = strlen(argv[0]);
|
||||
MALLOC_NOMSG(NULL, argv[0], char *, len + 2);
|
||||
argv[0] = malloc(len + 2);
|
||||
if (argv[0] == NULL)
|
||||
goto nomem;
|
||||
argv[0][0] = '-';
|
||||
argv[0][1] = 'c';
|
||||
(void)strcpy(argv[0] + 2, p + 1);
|
||||
(void)strlcpy(argv[0] + 2, p + 1, len);
|
||||
}
|
||||
} else if (argv[0][0] == '-')
|
||||
if (argv[0][1] == '\0') {
|
||||
MALLOC_NOMSG(NULL, argv[0], char *, 3);
|
||||
argv[0] = strdup("-s");
|
||||
if (argv[0] == NULL) {
|
||||
nomem: v_estr(name, errno, NULL);
|
||||
return (1);
|
||||
}
|
||||
(void)strcpy(argv[0], "-s");
|
||||
} else
|
||||
if ((argv[0][1] == 'c' || argv[0][1] == 'T' ||
|
||||
argv[0][1] == 't' || argv[0][1] == 'w') &&
|
||||
@ -598,8 +576,7 @@ nomem: v_estr(name, errno, NULL);
|
||||
|
||||
#ifdef DEBUG
|
||||
static void
|
||||
attach(gp)
|
||||
GS *gp;
|
||||
attach(GS *gp)
|
||||
{
|
||||
int fd;
|
||||
char ch;
|
||||
@ -624,9 +601,10 @@ attach(gp)
|
||||
#endif
|
||||
|
||||
static void
|
||||
v_estr(name, eno, msg)
|
||||
char *name, *msg;
|
||||
int eno;
|
||||
v_estr(
|
||||
char *name,
|
||||
int eno,
|
||||
char *msg)
|
||||
{
|
||||
(void)fprintf(stderr, "%s", name);
|
||||
if (msg != NULL)
|
||||
|
@ -10,11 +10,12 @@
|
||||
#include "config.h"
|
||||
|
||||
#ifndef lint
|
||||
static const char sccsid[] = "@(#)mark.c 10.13 (Berkeley) 7/19/96";
|
||||
static const char sccsid[] = "$Id: mark.c,v 10.14 2011/07/04 14:42:58 zy Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/queue.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#include <bitstring.h>
|
||||
#include <errno.h>
|
||||
@ -28,7 +29,7 @@ static const char sccsid[] = "@(#)mark.c 10.13 (Berkeley) 7/19/96";
|
||||
static LMARK *mark_find __P((SCR *, ARG_CHAR_T));
|
||||
|
||||
/*
|
||||
* Marks are maintained in a key sorted doubly linked list. We can't
|
||||
* Marks are maintained in a key sorted singly linked list. We can't
|
||||
* use arrays because we have no idea how big an index key could be.
|
||||
* The underlying assumption is that users don't have more than, say,
|
||||
* 10 marks at any one time, so this will be is fast enough.
|
||||
@ -65,9 +66,9 @@ static LMARK *mark_find __P((SCR *, ARG_CHAR_T));
|
||||
* PUBLIC: int mark_init __P((SCR *, EXF *));
|
||||
*/
|
||||
int
|
||||
mark_init(sp, ep)
|
||||
SCR *sp;
|
||||
EXF *ep;
|
||||
mark_init(
|
||||
SCR *sp,
|
||||
EXF *ep)
|
||||
{
|
||||
/*
|
||||
* !!!
|
||||
@ -75,7 +76,7 @@ mark_init(sp, ep)
|
||||
*
|
||||
* Set up the marks.
|
||||
*/
|
||||
LIST_INIT(&ep->marks);
|
||||
SLIST_INIT(ep->marks);
|
||||
return (0);
|
||||
}
|
||||
|
||||
@ -86,9 +87,9 @@ mark_init(sp, ep)
|
||||
* PUBLIC: int mark_end __P((SCR *, EXF *));
|
||||
*/
|
||||
int
|
||||
mark_end(sp, ep)
|
||||
SCR *sp;
|
||||
EXF *ep;
|
||||
mark_end(
|
||||
SCR *sp,
|
||||
EXF *ep)
|
||||
{
|
||||
LMARK *lmp;
|
||||
|
||||
@ -96,8 +97,8 @@ mark_end(sp, ep)
|
||||
* !!!
|
||||
* ep MAY NOT BE THE SAME AS sp->ep, DON'T USE THE LATTER.
|
||||
*/
|
||||
while ((lmp = ep->marks.lh_first) != NULL) {
|
||||
LIST_REMOVE(lmp, q);
|
||||
while ((lmp = SLIST_FIRST(ep->marks)) != NULL) {
|
||||
SLIST_REMOVE_HEAD(ep->marks, q);
|
||||
free(lmp);
|
||||
}
|
||||
return (0);
|
||||
@ -110,11 +111,11 @@ mark_end(sp, ep)
|
||||
* PUBLIC: int mark_get __P((SCR *, ARG_CHAR_T, MARK *, mtype_t));
|
||||
*/
|
||||
int
|
||||
mark_get(sp, key, mp, mtype)
|
||||
SCR *sp;
|
||||
ARG_CHAR_T key;
|
||||
MARK *mp;
|
||||
mtype_t mtype;
|
||||
mark_get(
|
||||
SCR *sp,
|
||||
ARG_CHAR_T key,
|
||||
MARK *mp,
|
||||
mtype_t mtype)
|
||||
{
|
||||
LMARK *lmp;
|
||||
|
||||
@ -155,11 +156,11 @@ mark_get(sp, key, mp, mtype)
|
||||
* PUBLIC: int mark_set __P((SCR *, ARG_CHAR_T, MARK *, int));
|
||||
*/
|
||||
int
|
||||
mark_set(sp, key, value, userset)
|
||||
SCR *sp;
|
||||
ARG_CHAR_T key;
|
||||
MARK *value;
|
||||
int userset;
|
||||
mark_set(
|
||||
SCR *sp,
|
||||
ARG_CHAR_T key,
|
||||
MARK *value,
|
||||
int userset)
|
||||
{
|
||||
LMARK *lmp, *lmt;
|
||||
|
||||
@ -176,9 +177,9 @@ mark_set(sp, key, value, userset)
|
||||
if (lmp == NULL || lmp->name != key) {
|
||||
MALLOC_RET(sp, lmt, LMARK *, sizeof(LMARK));
|
||||
if (lmp == NULL) {
|
||||
LIST_INSERT_HEAD(&sp->ep->marks, lmt, q);
|
||||
SLIST_INSERT_HEAD(sp->ep->marks, lmt, q);
|
||||
} else
|
||||
LIST_INSERT_AFTER(lmp, lmt, q);
|
||||
SLIST_INSERT_AFTER(lmp, lmt, q);
|
||||
lmp = lmt;
|
||||
} else if (!userset &&
|
||||
!F_ISSET(lmp, MARK_DELETED) && F_ISSET(lmp, MARK_USERSET))
|
||||
@ -197,20 +198,21 @@ mark_set(sp, key, value, userset)
|
||||
* where it would go.
|
||||
*/
|
||||
static LMARK *
|
||||
mark_find(sp, key)
|
||||
SCR *sp;
|
||||
ARG_CHAR_T key;
|
||||
mark_find(
|
||||
SCR *sp,
|
||||
ARG_CHAR_T key)
|
||||
{
|
||||
LMARK *lmp, *lastlmp;
|
||||
LMARK *lmp, *lastlmp = NULL;
|
||||
|
||||
/*
|
||||
* Return the requested mark or the slot immediately before
|
||||
* where it should go.
|
||||
*/
|
||||
for (lastlmp = NULL, lmp = sp->ep->marks.lh_first;
|
||||
lmp != NULL; lastlmp = lmp, lmp = lmp->q.le_next)
|
||||
SLIST_FOREACH(lmp, sp->ep->marks, q) {
|
||||
if (lmp->name >= key)
|
||||
return (lmp->name == key ? lmp : lastlmp);
|
||||
lastlmp = lmp;
|
||||
}
|
||||
return (lastlmp);
|
||||
}
|
||||
|
||||
@ -221,10 +223,10 @@ mark_find(sp, key)
|
||||
* PUBLIC: int mark_insdel __P((SCR *, lnop_t, recno_t));
|
||||
*/
|
||||
int
|
||||
mark_insdel(sp, op, lno)
|
||||
SCR *sp;
|
||||
lnop_t op;
|
||||
recno_t lno;
|
||||
mark_insdel(
|
||||
SCR *sp,
|
||||
lnop_t op,
|
||||
recno_t lno)
|
||||
{
|
||||
LMARK *lmp;
|
||||
recno_t lline;
|
||||
@ -234,8 +236,7 @@ mark_insdel(sp, op, lno)
|
||||
/* All insert/append operations are done as inserts. */
|
||||
abort();
|
||||
case LINE_DELETE:
|
||||
for (lmp = sp->ep->marks.lh_first;
|
||||
lmp != NULL; lmp = lmp->q.le_next)
|
||||
SLIST_FOREACH(lmp, sp->ep->marks, q)
|
||||
if (lmp->lno >= lno)
|
||||
if (lmp->lno == lno) {
|
||||
F_SET(lmp, MARK_DELETED);
|
||||
@ -265,8 +266,7 @@ mark_insdel(sp, op, lno)
|
||||
return (0);
|
||||
}
|
||||
|
||||
for (lmp = sp->ep->marks.lh_first;
|
||||
lmp != NULL; lmp = lmp->q.le_next)
|
||||
SLIST_FOREACH(lmp, sp->ep->marks, q)
|
||||
if (lmp->lno >= lno)
|
||||
++lmp->lno;
|
||||
break;
|
||||
|
@ -6,7 +6,7 @@
|
||||
*
|
||||
* See the LICENSE file for redistribution information.
|
||||
*
|
||||
* @(#)mark.h 10.3 (Berkeley) 3/6/96
|
||||
* $Id: mark.h,v 10.6 2011/07/04 14:41:51 zy Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -28,9 +28,10 @@ struct _mark {
|
||||
};
|
||||
|
||||
struct _lmark {
|
||||
LIST_ENTRY(_lmark) q; /* Linked list of marks. */
|
||||
SLIST_ENTRY(_lmark) q; /* Linked list of marks. */
|
||||
recno_t lno; /* Line number. */
|
||||
size_t cno; /* Column number. */
|
||||
/* XXXX Needed ? Can non ascii-chars be mark names ? */
|
||||
CHAR_T name; /* Mark name. */
|
||||
|
||||
#define MARK_DELETED 0x01 /* Mark was deleted. */
|
||||
|
@ -6,13 +6,21 @@
|
||||
*
|
||||
* See the LICENSE file for redistribution information.
|
||||
*
|
||||
* @(#)mem.h 10.7 (Berkeley) 3/30/96
|
||||
* $Id: mem.h,v 10.17 2012/10/07 00:40:29 zy Exp $
|
||||
*/
|
||||
|
||||
#ifdef DEBUG
|
||||
#define CHECK_TYPE(type, var) \
|
||||
type L__lp __attribute__((unused)) = var;
|
||||
#else
|
||||
#define CHECK_TYPE(type, var)
|
||||
#endif
|
||||
|
||||
/* Increase the size of a malloc'd buffer. Two versions, one that
|
||||
* returns, one that jumps to an error label.
|
||||
*/
|
||||
#define BINC_GOTO(sp, lp, llen, nlen) { \
|
||||
#define BINC_GOTO(sp, type, lp, llen, nlen) { \
|
||||
CHECK_TYPE(type *, lp) \
|
||||
void *L__bincp; \
|
||||
if ((nlen) > llen) { \
|
||||
if ((L__bincp = binc(sp, lp, &(llen), nlen)) == NULL) \
|
||||
@ -24,7 +32,12 @@
|
||||
lp = L__bincp; \
|
||||
} \
|
||||
}
|
||||
#define BINC_RET(sp, lp, llen, nlen) { \
|
||||
#define BINC_GOTOC(sp, lp, llen, nlen) \
|
||||
BINC_GOTO(sp, char, lp, llen, nlen)
|
||||
#define BINC_GOTOW(sp, lp, llen, nlen) \
|
||||
BINC_GOTO(sp, CHAR_T, lp, llen, (nlen) * sizeof(CHAR_T))
|
||||
#define BINC_RET(sp, type, lp, llen, nlen) { \
|
||||
CHECK_TYPE(type *, lp) \
|
||||
void *L__bincp; \
|
||||
if ((nlen) > llen) { \
|
||||
if ((L__bincp = binc(sp, lp, &(llen), nlen)) == NULL) \
|
||||
@ -36,65 +49,89 @@
|
||||
lp = L__bincp; \
|
||||
} \
|
||||
}
|
||||
#define BINC_RETC(sp, lp, llen, nlen) \
|
||||
BINC_RET(sp, char, lp, llen, nlen)
|
||||
#define BINC_RETW(sp, lp, llen, nlen) \
|
||||
BINC_RET(sp, CHAR_T, lp, llen, (nlen) * sizeof(CHAR_T))
|
||||
|
||||
/*
|
||||
* Get some temporary space, preferably from the global temporary buffer,
|
||||
* from a malloc'd buffer otherwise. Two versions, one that returns, one
|
||||
* that jumps to an error label.
|
||||
*/
|
||||
#define GET_SPACE_GOTO(sp, bp, blen, nlen) { \
|
||||
#define GET_SPACE_GOTO(sp, type, bp, blen, nlen) { \
|
||||
CHECK_TYPE(type *, bp) \
|
||||
GS *L__gp = (sp) == NULL ? NULL : (sp)->gp; \
|
||||
if (L__gp == NULL || F_ISSET(L__gp, G_TMP_INUSE)) { \
|
||||
bp = NULL; \
|
||||
blen = 0; \
|
||||
BINC_GOTO(sp, bp, blen, nlen); \
|
||||
BINC_GOTO(sp, type, bp, blen, nlen); \
|
||||
} else { \
|
||||
BINC_GOTO(sp, L__gp->tmp_bp, L__gp->tmp_blen, nlen); \
|
||||
bp = L__gp->tmp_bp; \
|
||||
BINC_GOTOC(sp, L__gp->tmp_bp, L__gp->tmp_blen, nlen); \
|
||||
bp = (type *) L__gp->tmp_bp; \
|
||||
blen = L__gp->tmp_blen; \
|
||||
F_SET(L__gp, G_TMP_INUSE); \
|
||||
} \
|
||||
}
|
||||
#define GET_SPACE_RET(sp, bp, blen, nlen) { \
|
||||
#define GET_SPACE_GOTOC(sp, bp, blen, nlen) \
|
||||
GET_SPACE_GOTO(sp, char, bp, blen, nlen)
|
||||
#define GET_SPACE_GOTOW(sp, bp, blen, nlen) \
|
||||
GET_SPACE_GOTO(sp, CHAR_T, bp, blen, (nlen) * sizeof(CHAR_T))
|
||||
#define GET_SPACE_RET(sp, type, bp, blen, nlen) { \
|
||||
CHECK_TYPE(type *, bp) \
|
||||
GS *L__gp = (sp) == NULL ? NULL : (sp)->gp; \
|
||||
if (L__gp == NULL || F_ISSET(L__gp, G_TMP_INUSE)) { \
|
||||
bp = NULL; \
|
||||
blen = 0; \
|
||||
BINC_RET(sp, bp, blen, nlen); \
|
||||
BINC_RET(sp, type, bp, blen, nlen); \
|
||||
} else { \
|
||||
BINC_RET(sp, L__gp->tmp_bp, L__gp->tmp_blen, nlen); \
|
||||
bp = L__gp->tmp_bp; \
|
||||
BINC_RETC(sp, L__gp->tmp_bp, L__gp->tmp_blen, nlen); \
|
||||
bp = (type *) L__gp->tmp_bp; \
|
||||
blen = L__gp->tmp_blen; \
|
||||
F_SET(L__gp, G_TMP_INUSE); \
|
||||
} \
|
||||
}
|
||||
#define GET_SPACE_RETC(sp, bp, blen, nlen) \
|
||||
GET_SPACE_RET(sp, char, bp, blen, nlen)
|
||||
#define GET_SPACE_RETW(sp, bp, blen, nlen) \
|
||||
GET_SPACE_RET(sp, CHAR_T, bp, blen, (nlen) * sizeof(CHAR_T))
|
||||
|
||||
/*
|
||||
* Add space to a GET_SPACE returned buffer. Two versions, one that
|
||||
* returns, one that jumps to an error label.
|
||||
*/
|
||||
#define ADD_SPACE_GOTO(sp, bp, blen, nlen) { \
|
||||
#define ADD_SPACE_GOTO(sp, type, bp, blen, nlen) { \
|
||||
CHECK_TYPE(type *, bp) \
|
||||
GS *L__gp = (sp) == NULL ? NULL : (sp)->gp; \
|
||||
if (L__gp == NULL || bp == L__gp->tmp_bp) { \
|
||||
if (L__gp == NULL || bp == (type *)L__gp->tmp_bp) { \
|
||||
F_CLR(L__gp, G_TMP_INUSE); \
|
||||
BINC_GOTO(sp, L__gp->tmp_bp, L__gp->tmp_blen, nlen); \
|
||||
bp = L__gp->tmp_bp; \
|
||||
BINC_GOTOC(sp, L__gp->tmp_bp, L__gp->tmp_blen, nlen); \
|
||||
bp = (type *) L__gp->tmp_bp; \
|
||||
blen = L__gp->tmp_blen; \
|
||||
F_SET(L__gp, G_TMP_INUSE); \
|
||||
} else \
|
||||
BINC_GOTO(sp, bp, blen, nlen); \
|
||||
BINC_GOTO(sp, type, bp, blen, nlen); \
|
||||
}
|
||||
#define ADD_SPACE_RET(sp, bp, blen, nlen) { \
|
||||
#define ADD_SPACE_GOTOC(sp, bp, blen, nlen) \
|
||||
ADD_SPACE_GOTO(sp, char, bp, blen, nlen)
|
||||
#define ADD_SPACE_GOTOW(sp, bp, blen, nlen) \
|
||||
ADD_SPACE_GOTO(sp, CHAR_T, bp, blen, (nlen) * sizeof(CHAR_T))
|
||||
#define ADD_SPACE_RET(sp, type, bp, blen, nlen) { \
|
||||
CHECK_TYPE(type *, bp) \
|
||||
GS *L__gp = (sp) == NULL ? NULL : (sp)->gp; \
|
||||
if (L__gp == NULL || bp == L__gp->tmp_bp) { \
|
||||
if (L__gp == NULL || bp == (type *)L__gp->tmp_bp) { \
|
||||
F_CLR(L__gp, G_TMP_INUSE); \
|
||||
BINC_RET(sp, L__gp->tmp_bp, L__gp->tmp_blen, nlen); \
|
||||
bp = L__gp->tmp_bp; \
|
||||
BINC_RETC(sp, L__gp->tmp_bp, L__gp->tmp_blen, nlen); \
|
||||
bp = (type *) L__gp->tmp_bp; \
|
||||
blen = L__gp->tmp_blen; \
|
||||
F_SET(L__gp, G_TMP_INUSE); \
|
||||
} else \
|
||||
BINC_RET(sp, bp, blen, nlen); \
|
||||
BINC_RET(sp, type, bp, blen, nlen); \
|
||||
}
|
||||
#define ADD_SPACE_RETC(sp, bp, blen, nlen) \
|
||||
ADD_SPACE_RET(sp, char, bp, blen, nlen)
|
||||
#define ADD_SPACE_RETW(sp, bp, blen, nlen) \
|
||||
ADD_SPACE_RET(sp, CHAR_T, bp, blen, (nlen) * sizeof(CHAR_T))
|
||||
|
||||
/* Free a GET_SPACE returned buffer. */
|
||||
#define FREE_SPACE(sp, bp, blen) { \
|
||||
@ -104,6 +141,10 @@
|
||||
else \
|
||||
free(bp); \
|
||||
}
|
||||
#define FREE_SPACEW(sp, bp, blen) { \
|
||||
CHECK_TYPE(CHAR_T *, bp) \
|
||||
FREE_SPACE(sp, (char *)bp, blen); \
|
||||
}
|
||||
|
||||
/*
|
||||
* Malloc a buffer, casting the return pointer. Various versions.
|
||||
@ -150,19 +191,50 @@
|
||||
return (1); \
|
||||
} \
|
||||
}
|
||||
|
||||
/*
|
||||
* XXX
|
||||
* Don't depend on realloc(NULL, size) working.
|
||||
* Resize a buffer, free any already held memory if we can't get more.
|
||||
* FreeBSD's reallocf(3) does the same thing, but it's not portable yet.
|
||||
*/
|
||||
#define REALLOC(sp, p, cast, size) { \
|
||||
if ((p = (cast)(p == NULL ? \
|
||||
malloc(size) : realloc(p, size))) == NULL) \
|
||||
cast newp; \
|
||||
if ((newp = (cast)realloc(p, size)) == NULL) { \
|
||||
if (p != NULL) \
|
||||
free(p); \
|
||||
msgq(sp, M_SYSERR, NULL); \
|
||||
} \
|
||||
p = newp; \
|
||||
}
|
||||
|
||||
/*
|
||||
* Versions of memmove(3) and memset(3) that use the size of the
|
||||
* Versions of bcopy(3) and bzero(3) that use the size of the
|
||||
* initial pointer to figure out how much memory to manipulate.
|
||||
*/
|
||||
#define MEMMOVE(p, t, len) memmove(p, t, (len) * sizeof(*(p)))
|
||||
#define MEMSET(p, value, len) memset(p, value, (len) * sizeof(*(p)))
|
||||
#define BCOPY(p, t, len) bcopy(p, t, (len) * sizeof(*(p)))
|
||||
#define BZERO(p, len) bzero(p, (len) * sizeof(*(p)))
|
||||
|
||||
/*
|
||||
* p2roundup --
|
||||
* Get next power of 2; convenient for realloc.
|
||||
*
|
||||
* Reference: FreeBSD /usr/src/lib/libc/stdio/getdelim.c
|
||||
*/
|
||||
static __inline size_t
|
||||
p2roundup(size_t n)
|
||||
{
|
||||
n--;
|
||||
n |= n >> 1;
|
||||
n |= n >> 2;
|
||||
n |= n >> 4;
|
||||
n |= n >> 8;
|
||||
n |= n >> 16;
|
||||
#if SIZE_T_MAX > 0xffffffffU
|
||||
n |= n >> 32;
|
||||
#endif
|
||||
n++;
|
||||
return (n);
|
||||
}
|
||||
|
||||
/* Additional TAILQ helper. */
|
||||
#define TAILQ_ENTRY_ISVALID(elm, field) \
|
||||
((elm)->field.tqe_prev != NULL)
|
||||
|
@ -10,31 +10,25 @@
|
||||
#include "config.h"
|
||||
|
||||
#ifndef lint
|
||||
static const char sccsid[] = "@(#)msg.c 10.48 (Berkeley) 9/15/96";
|
||||
static const char sccsid[] = "$Id: msg.c,v 11.0 2012/10/17 06:34:37 zy Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/types.h> /* XXX: param.h may not have included types.h */
|
||||
#include <sys/types.h>
|
||||
#include <sys/queue.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#include <bitstring.h>
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <limits.h>
|
||||
#include <locale.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#ifdef __STDC__
|
||||
#include <stdarg.h>
|
||||
#else
|
||||
#include <varargs.h>
|
||||
#endif
|
||||
|
||||
#include "common.h"
|
||||
#include "../vi/vi.h"
|
||||
|
||||
@ -45,15 +39,11 @@ static const char sccsid[] = "@(#)msg.c 10.48 (Berkeley) 9/15/96";
|
||||
* PUBLIC: void msgq __P((SCR *, mtype_t, const char *, ...));
|
||||
*/
|
||||
void
|
||||
#ifdef __STDC__
|
||||
msgq(SCR *sp, mtype_t mt, const char *fmt, ...)
|
||||
#else
|
||||
msgq(sp, mt, fmt, va_alist)
|
||||
SCR *sp;
|
||||
mtype_t mt;
|
||||
const char *fmt;
|
||||
va_dcl
|
||||
#endif
|
||||
msgq(
|
||||
SCR *sp,
|
||||
mtype_t mt,
|
||||
const char *fmt,
|
||||
...)
|
||||
{
|
||||
#ifndef NL_ARGMAX
|
||||
#define __NL_ARGMAX 20 /* Set to 9 by System V. */
|
||||
@ -66,12 +56,17 @@ msgq(sp, mt, fmt, va_alist)
|
||||
} str[__NL_ARGMAX];
|
||||
#endif
|
||||
static int reenter; /* STATIC: Re-entrancy check. */
|
||||
CHAR_T ch;
|
||||
GS *gp;
|
||||
size_t blen, cnt1, cnt2, len, mlen, nlen, soff;
|
||||
const char *p, *t, *u;
|
||||
char *bp, *mp, *rbp, *s_rbp;
|
||||
size_t blen, len, mlen, nlen;
|
||||
const char *p;
|
||||
char *bp, *mp;
|
||||
va_list ap;
|
||||
#ifndef NL_ARGMAX
|
||||
int ch;
|
||||
char *rbp, *s_rbp;
|
||||
const char *t, *u;
|
||||
size_t cnt1, cnt2, soff;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* !!!
|
||||
@ -130,7 +125,7 @@ retry: FREE_SPACE(sp, bp, blen);
|
||||
}
|
||||
bp = NULL;
|
||||
blen = 0;
|
||||
GET_SPACE_GOTO(sp, bp, blen, nlen);
|
||||
GET_SPACE_GOTOC(sp, bp, blen, nlen);
|
||||
|
||||
/*
|
||||
* Error prefix.
|
||||
@ -157,8 +152,12 @@ retry: FREE_SPACE(sp, bp, blen);
|
||||
*/
|
||||
if ((mt == M_ERR || mt == M_SYSERR) &&
|
||||
sp != NULL && gp != NULL && gp->if_name != NULL) {
|
||||
for (p = gp->if_name; *p != '\0'; ++p) {
|
||||
len = snprintf(mp, REM, "%s", KEY_NAME(sp, *p));
|
||||
CHAR_T *wp;
|
||||
size_t wlen;
|
||||
|
||||
CHAR2INT(sp, gp->if_name, strlen(gp->if_name) + 1, wp, wlen);
|
||||
for (; *wp != '\0'; ++wp) {
|
||||
len = snprintf(mp, REM, "%s", KEY_NAME(sp, *wp));
|
||||
mp += len;
|
||||
if ((mlen += len) > blen)
|
||||
goto retry;
|
||||
@ -272,12 +271,10 @@ retry: FREE_SPACE(sp, bp, blen);
|
||||
fmt = rbp;
|
||||
#endif
|
||||
|
||||
#ifndef NL_ARGMAX
|
||||
format: /* Format the arguments into the string. */
|
||||
#ifdef __STDC__
|
||||
va_start(ap, fmt);
|
||||
#else
|
||||
va_start(ap);
|
||||
#endif
|
||||
va_start(ap, fmt);
|
||||
len = vsnprintf(mp, REM, fmt, ap);
|
||||
va_end(ap);
|
||||
if (len >= nlen)
|
||||
@ -347,28 +344,56 @@ nofmt: mp += len;
|
||||
(void)fprintf(stderr, "%.*s", (int)mlen, bp);
|
||||
|
||||
/* Cleanup. */
|
||||
ret: FREE_SPACE(sp, bp, blen);
|
||||
#ifndef NL_ARGMAX
|
||||
ret:
|
||||
#endif
|
||||
FREE_SPACE(sp, bp, blen);
|
||||
alloc_err:
|
||||
reenter = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* msgq_wstr --
|
||||
* Display a message with an embedded string.
|
||||
*
|
||||
* PUBLIC: void msgq_wstr __P((SCR *, mtype_t, const CHAR_T *, const char *));
|
||||
*/
|
||||
void
|
||||
msgq_wstr(
|
||||
SCR *sp,
|
||||
mtype_t mtype,
|
||||
const CHAR_T *str,
|
||||
const char *fmt)
|
||||
{
|
||||
size_t nlen;
|
||||
CONST char *nstr;
|
||||
|
||||
if (str == NULL) {
|
||||
msgq(sp, mtype, "%s", fmt);
|
||||
return;
|
||||
}
|
||||
INT2CHAR(sp, str, STRLEN(str) + 1, nstr, nlen);
|
||||
msgq_str(sp, mtype, nstr, fmt);
|
||||
}
|
||||
|
||||
/*
|
||||
* msgq_str --
|
||||
* Display a message with an embedded string.
|
||||
*
|
||||
* PUBLIC: void msgq_str __P((SCR *, mtype_t, char *, char *));
|
||||
* PUBLIC: void msgq_str __P((SCR *, mtype_t, const char *, const char *));
|
||||
*/
|
||||
void
|
||||
msgq_str(sp, mtype, str, fmt)
|
||||
SCR *sp;
|
||||
mtype_t mtype;
|
||||
char *str, *fmt;
|
||||
msgq_str(
|
||||
SCR *sp,
|
||||
mtype_t mtype,
|
||||
const char *str,
|
||||
const char *fmt)
|
||||
{
|
||||
int nf, sv_errno;
|
||||
char *p;
|
||||
|
||||
if (str == NULL) {
|
||||
msgq(sp, mtype, fmt);
|
||||
msgq(sp, mtype, "%s", fmt);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -401,8 +426,7 @@ msgq_str(sp, mtype, str, fmt)
|
||||
* PUBLIC: void mod_rpt __P((SCR *));
|
||||
*/
|
||||
void
|
||||
mod_rpt(sp)
|
||||
SCR *sp;
|
||||
mod_rpt(SCR *sp)
|
||||
{
|
||||
static char * const action[] = {
|
||||
"293|added",
|
||||
@ -461,7 +485,7 @@ mod_rpt(sp)
|
||||
}
|
||||
|
||||
/* Build and display the message. */
|
||||
GET_SPACE_GOTO(sp, bp, blen, sizeof(action) * MAXNUM + 1);
|
||||
GET_SPACE_GOTOC(sp, bp, blen, sizeof(action) * MAXNUM + 1);
|
||||
for (p = bp, first = 1, tlen = 0,
|
||||
ap = action, cnt = 0; cnt < ARSIZE(action); ++ap, ++cnt)
|
||||
if (sp->rptlines[cnt] != 0) {
|
||||
@ -512,27 +536,32 @@ mod_rpt(sp)
|
||||
* PUBLIC: void msgq_status __P((SCR *, recno_t, u_int));
|
||||
*/
|
||||
void
|
||||
msgq_status(sp, lno, flags)
|
||||
SCR *sp;
|
||||
recno_t lno;
|
||||
u_int flags;
|
||||
msgq_status(
|
||||
SCR *sp,
|
||||
recno_t lno,
|
||||
u_int flags)
|
||||
{
|
||||
static int poisoned;
|
||||
recno_t last;
|
||||
size_t blen, len;
|
||||
int cnt, needsep;
|
||||
const char *t;
|
||||
char **ap, *bp, *np, *p, *s;
|
||||
char **ap, *bp, *np, *p, *s, *ep;
|
||||
CHAR_T *wp;
|
||||
size_t wlen;
|
||||
|
||||
/* Get sufficient memory. */
|
||||
len = strlen(sp->frp->name);
|
||||
GET_SPACE_GOTO(sp, bp, blen, len * MAX_CHARACTER_COLUMNS + 128);
|
||||
GET_SPACE_GOTOC(sp, bp, blen, len * MAX_CHARACTER_COLUMNS + 128);
|
||||
p = bp;
|
||||
ep = bp + blen;
|
||||
|
||||
/* Convert the filename. */
|
||||
CHAR2INT(sp, sp->frp->name, len + 1, wp, wlen);
|
||||
|
||||
/* Copy in the filename. */
|
||||
for (p = bp, t = sp->frp->name; *t != '\0'; ++t) {
|
||||
len = KEY_LEN(sp, *t);
|
||||
memcpy(p, KEY_NAME(sp, *t), len);
|
||||
for (; *wp != '\0'; ++wp) {
|
||||
len = KEY_LEN(sp, *wp);
|
||||
memcpy(p, KEY_NAME(sp, *wp), len);
|
||||
p += len;
|
||||
}
|
||||
np = p;
|
||||
@ -543,7 +572,7 @@ msgq_status(sp, lno, flags)
|
||||
if (F_ISSET(sp, SC_STATUS_CNT) && sp->argv != NULL) {
|
||||
for (cnt = 0, ap = sp->argv; *ap != NULL; ++ap, ++cnt);
|
||||
if (cnt > 1) {
|
||||
(void)sprintf(p,
|
||||
(void)snprintf(p, ep - p,
|
||||
msg_cat(sp, "317|%d files to edit", NULL), cnt);
|
||||
p += strlen(p);
|
||||
*p++ = ':';
|
||||
@ -617,18 +646,18 @@ msgq_status(sp, lno, flags)
|
||||
memcpy(p, t, len);
|
||||
p += len;
|
||||
} else {
|
||||
t = msg_cat(sp, "027|line %lu of %lu [%lu%%]", &len);
|
||||
(void)sprintf(p, t, (u_long)lno, (u_long)last,
|
||||
(u_long)(lno * 100) / last);
|
||||
t = msg_cat(sp, "027|line %lu of %lu [%ld%%]", &len);
|
||||
(void)snprintf(p, ep - p, t, lno, last,
|
||||
((u_long)lno * 100) / last);
|
||||
p += strlen(p);
|
||||
}
|
||||
} else {
|
||||
t = msg_cat(sp, "029|line %lu", &len);
|
||||
(void)sprintf(p, t, (u_long)lno);
|
||||
(void)snprintf(p, ep - p, t, (u_long)lno);
|
||||
p += strlen(p);
|
||||
}
|
||||
#ifdef DEBUG
|
||||
(void)sprintf(p, " (pid %lu)", (u_long)getpid());
|
||||
(void)snprintf(p, ep - p, " (pid %lu)", (u_long)getpid());
|
||||
p += strlen(p);
|
||||
#endif
|
||||
*p++ = '\n';
|
||||
@ -679,9 +708,9 @@ msgq_status(sp, lno, flags)
|
||||
* PUBLIC: int msg_open __P((SCR *, char *));
|
||||
*/
|
||||
int
|
||||
msg_open(sp, file)
|
||||
SCR *sp;
|
||||
char *file;
|
||||
msg_open(
|
||||
SCR *sp,
|
||||
char *file)
|
||||
{
|
||||
/*
|
||||
* !!!
|
||||
@ -693,54 +722,50 @@ msg_open(sp, file)
|
||||
* message will be repeated every time nvi is started up.
|
||||
*/
|
||||
static int first = 1;
|
||||
DB *db;
|
||||
DBT data, key;
|
||||
recno_t msgno;
|
||||
char *p, *t, buf[MAXPATHLEN];
|
||||
nl_catd catd;
|
||||
char *p;
|
||||
int rval = 0;
|
||||
|
||||
if ((p = strrchr(file, '/')) != NULL && p[1] == '\0' &&
|
||||
((t = getenv("LC_MESSAGES")) != NULL && t[0] != '\0' ||
|
||||
(t = getenv("LANG")) != NULL && t[0] != '\0')) {
|
||||
(void)snprintf(buf, sizeof(buf), "%s%s", file, t);
|
||||
p = buf;
|
||||
} else
|
||||
p = file;
|
||||
if ((db = dbopen(p,
|
||||
O_NONBLOCK | O_RDONLY, 0, DB_RECNO, NULL)) == NULL) {
|
||||
if (first) {
|
||||
first = 0;
|
||||
if ((p = strrchr(file, '/')) != NULL && p[1] == '\0') {
|
||||
/* Confirms to XPG4. */
|
||||
if ((p = join(file, setlocale(LC_MESSAGES, NULL))) == NULL) {
|
||||
msgq(sp, M_SYSERR, NULL);
|
||||
return (1);
|
||||
}
|
||||
} else {
|
||||
/* Make sure it's recognized as a path by catopen(3). */
|
||||
if ((p = join(".", file)) == NULL) {
|
||||
msgq(sp, M_SYSERR, NULL);
|
||||
return (1);
|
||||
}
|
||||
msgq_str(sp, M_SYSERR, p, "%s");
|
||||
return (1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Test record 1 for the magic string. The msgq call is here so
|
||||
* the message catalog build finds it.
|
||||
*/
|
||||
#define VMC "VI_MESSAGE_CATALOG"
|
||||
key.data = &msgno;
|
||||
key.size = sizeof(recno_t);
|
||||
msgno = 1;
|
||||
if (db->get(db, &key, &data, 0) != 0 ||
|
||||
data.size != sizeof(VMC) - 1 ||
|
||||
memcmp(data.data, VMC, sizeof(VMC) - 1)) {
|
||||
(void)db->close(db);
|
||||
errno = 0;
|
||||
if ((catd = catopen(p, NL_CAT_LOCALE)) == (nl_catd)-1) {
|
||||
if (first) {
|
||||
first = 0;
|
||||
return (1);
|
||||
rval = 1;
|
||||
goto ret;
|
||||
}
|
||||
msgq_str(sp, M_ERR, p,
|
||||
"030|The file %s is not a message catalog");
|
||||
return (1);
|
||||
|
||||
/*
|
||||
* POSIX.1-2008 gives no instruction on how to report a
|
||||
* corrupt catalog file. Errno == 0 is not rare; add
|
||||
* EFTYPE, which is seen on FreeBSD, for a good measure.
|
||||
*/
|
||||
if (errno == 0 || errno == EFTYPE)
|
||||
msgq_str(sp, M_ERR, p,
|
||||
"030|The file %s is not a message catalog");
|
||||
else
|
||||
msgq_str(sp, M_SYSERR, p, "%s");
|
||||
rval = 1;
|
||||
goto ret;
|
||||
}
|
||||
first = 0;
|
||||
|
||||
if (sp->gp->msg != NULL)
|
||||
(void)sp->gp->msg->close(sp->gp->msg);
|
||||
sp->gp->msg = db;
|
||||
return (0);
|
||||
msg_close(sp->gp);
|
||||
sp->gp->catd = catd;
|
||||
ret: free(p);
|
||||
return (rval);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -750,11 +775,10 @@ msg_open(sp, file)
|
||||
* PUBLIC: void msg_close __P((GS *));
|
||||
*/
|
||||
void
|
||||
msg_close(gp)
|
||||
GS *gp;
|
||||
msg_close(GS *gp)
|
||||
{
|
||||
if (gp->msg != NULL)
|
||||
(void)gp->msg->close(gp->msg);
|
||||
if (gp->catd != (nl_catd)-1)
|
||||
(void)catclose(gp->catd);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -764,10 +788,10 @@ msg_close(gp)
|
||||
* PUBLIC: const char *msg_cmsg __P((SCR *, cmsg_t, size_t *));
|
||||
*/
|
||||
const char *
|
||||
msg_cmsg(sp, which, lenp)
|
||||
SCR *sp;
|
||||
cmsg_t which;
|
||||
size_t *lenp;
|
||||
msg_cmsg(
|
||||
SCR *sp,
|
||||
cmsg_t which,
|
||||
size_t *lenp)
|
||||
{
|
||||
switch (which) {
|
||||
case CMSG_CONF:
|
||||
@ -802,14 +826,14 @@ msg_cmsg(sp, which, lenp)
|
||||
* PUBLIC: const char *msg_cat __P((SCR *, const char *, size_t *));
|
||||
*/
|
||||
const char *
|
||||
msg_cat(sp, str, lenp)
|
||||
SCR *sp;
|
||||
const char *str;
|
||||
size_t *lenp;
|
||||
msg_cat(
|
||||
SCR *sp,
|
||||
const char *str,
|
||||
size_t *lenp)
|
||||
{
|
||||
GS *gp;
|
||||
DBT data, key;
|
||||
recno_t msgno;
|
||||
char *p;
|
||||
int msgno;
|
||||
|
||||
/*
|
||||
* If it's not a catalog message, i.e. has doesn't have a leading
|
||||
@ -817,28 +841,16 @@ msg_cat(sp, str, lenp)
|
||||
*/
|
||||
if (isdigit(str[0]) &&
|
||||
isdigit(str[1]) && isdigit(str[2]) && str[3] == '|') {
|
||||
key.data = &msgno;
|
||||
key.size = sizeof(recno_t);
|
||||
msgno = atoi(str);
|
||||
|
||||
/*
|
||||
* XXX
|
||||
* Really sleazy hack -- we put an extra character on the
|
||||
* end of the format string, and then we change it to be
|
||||
* the nul termination of the string. There ought to be
|
||||
* a better way. Once we can allocate multiple temporary
|
||||
* memory buffers, maybe we can use one of them instead.
|
||||
*/
|
||||
gp = sp == NULL ? NULL : sp->gp;
|
||||
if (gp != NULL && gp->msg != NULL &&
|
||||
gp->msg->get(gp->msg, &key, &data, 0) == 0 &&
|
||||
data.size != 0) {
|
||||
if (lenp != NULL)
|
||||
*lenp = data.size - 1;
|
||||
((char *)data.data)[data.size - 1] = '\0';
|
||||
return (data.data);
|
||||
}
|
||||
str = &str[4];
|
||||
|
||||
gp = sp == NULL ? NULL : sp->gp;
|
||||
if (gp != NULL && gp->catd != (nl_catd)-1 &&
|
||||
(p = catgets(gp->catd, 1, msgno, str)) != NULL) {
|
||||
if (lenp != NULL)
|
||||
*lenp = strlen(p);
|
||||
return (p);
|
||||
}
|
||||
}
|
||||
if (lenp != NULL)
|
||||
*lenp = strlen(str);
|
||||
@ -852,19 +864,22 @@ msg_cat(sp, str, lenp)
|
||||
* PUBLIC: char *msg_print __P((SCR *, const char *, int *));
|
||||
*/
|
||||
char *
|
||||
msg_print(sp, s, needfree)
|
||||
SCR *sp;
|
||||
const char *s;
|
||||
int *needfree;
|
||||
msg_print(
|
||||
SCR *sp,
|
||||
const char *s,
|
||||
int *needfree)
|
||||
{
|
||||
size_t blen, nlen;
|
||||
const char *cp;
|
||||
char *bp, *ep, *p, *t;
|
||||
CHAR_T *wp, *cp;
|
||||
size_t wlen;
|
||||
|
||||
*needfree = 0;
|
||||
|
||||
for (cp = s; *cp != '\0'; ++cp)
|
||||
if (!isprint(*cp))
|
||||
/* XXX Not good for debugging ex_read & ex_filter.*/
|
||||
CHAR2INT5(sp, EXP(sp)->ibcw, (char *)s, strlen(s) + 1, wp, wlen);
|
||||
for (cp = wp; *cp != '\0'; ++cp)
|
||||
if (!ISPRINT(*cp))
|
||||
break;
|
||||
if (*cp == '\0')
|
||||
return ((char *)s); /* SAFE: needfree set to 0. */
|
||||
@ -875,21 +890,21 @@ retry: if (sp == NULL)
|
||||
free(bp);
|
||||
else
|
||||
FREE_SPACE(sp, bp, blen);
|
||||
needfree = 0;
|
||||
*needfree = 0;
|
||||
}
|
||||
nlen += 256;
|
||||
if (sp == NULL) {
|
||||
if ((bp = malloc(nlen)) == NULL)
|
||||
goto alloc_err;
|
||||
} else
|
||||
GET_SPACE_GOTO(sp, bp, blen, nlen);
|
||||
GET_SPACE_GOTOC(sp, bp, blen, nlen);
|
||||
if (0) {
|
||||
alloc_err: return ("");
|
||||
}
|
||||
*needfree = 1;
|
||||
|
||||
for (p = bp, ep = (bp + blen) - 1, cp = s; *cp != '\0' && p < ep; ++cp)
|
||||
for (t = KEY_NAME(sp, *cp); *t != '\0' && p < ep; *p++ = *t++);
|
||||
for (p = bp, ep = (bp + blen) - 1; *wp != '\0' && p < ep; ++wp)
|
||||
for (t = KEY_NAME(sp, *wp); *t != '\0' && p < ep; *p++ = *t++);
|
||||
if (p == ep)
|
||||
goto retry;
|
||||
*p = '\0';
|
||||
|
@ -52,9 +52,9 @@ typedef enum {
|
||||
* messages.
|
||||
*/
|
||||
typedef struct _msgh MSGH; /* MSGS list head structure. */
|
||||
LIST_HEAD(_msgh, _msg);
|
||||
SLIST_HEAD(_msgh, _msg);
|
||||
struct _msg {
|
||||
LIST_ENTRY(_msg) q; /* Linked list of messages. */
|
||||
SLIST_ENTRY(_msg) q; /* Linked list of messages. */
|
||||
mtype_t mtype; /* Message type: M_NONE, M_ERR, M_INFO. */
|
||||
char *buf; /* Message buffer. */
|
||||
size_t len; /* Message length. */
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user